@aws505/sheetsite 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +185 -40
- package/dist/components/index.js +804 -57
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +789 -57
- package/dist/components/index.mjs.map +1 -1
- package/dist/index.js +175 -59
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +165 -59
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/index.ts +12 -0
- package/src/components/sections/BeforeAfter.tsx +345 -0
- package/src/components/sections/FAQ.tsx +3 -3
- package/src/components/sections/Gallery.tsx +104 -4
- package/src/components/sections/Menu.tsx +312 -0
- package/src/components/sections/Services.tsx +3 -3
- package/src/components/sections/Testimonials.tsx +1 -1
- package/src/components/sections/TrustBadges.tsx +283 -0
- package/src/components/ui/AnimatedSection.tsx +136 -0
package/dist/index.mjs
CHANGED
|
@@ -4169,7 +4169,7 @@ function Services({
|
|
|
4169
4169
|
4: "md:grid-cols-2 lg:grid-cols-4"
|
|
4170
4170
|
};
|
|
4171
4171
|
if (variant === "list") {
|
|
4172
|
-
return /* @__PURE__ */ jsx5("section", { id, className: `py-16 ${className}`, children: /* @__PURE__ */ jsxs5("div", { className: "container mx-auto px-4", children: [
|
|
4172
|
+
return /* @__PURE__ */ jsx5("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: /* @__PURE__ */ jsxs5("div", { className: "container mx-auto px-4", children: [
|
|
4173
4173
|
/* @__PURE__ */ jsx5(SectionHeader, { title, subtitle }),
|
|
4174
4174
|
/* @__PURE__ */ jsx5("div", { className: "max-w-3xl mx-auto divide-y divide-gray-200", children: displayedServices.map((service) => /* @__PURE__ */ jsx5(
|
|
4175
4175
|
ServiceListItem,
|
|
@@ -4183,7 +4183,7 @@ function Services({
|
|
|
4183
4183
|
] }) });
|
|
4184
4184
|
}
|
|
4185
4185
|
if (variant === "minimal") {
|
|
4186
|
-
return /* @__PURE__ */ jsx5("section", { id, className: `py-16 ${className}`, children: /* @__PURE__ */ jsxs5("div", { className: "container mx-auto px-4", children: [
|
|
4186
|
+
return /* @__PURE__ */ jsx5("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: /* @__PURE__ */ jsxs5("div", { className: "container mx-auto px-4", children: [
|
|
4187
4187
|
/* @__PURE__ */ jsx5(SectionHeader, { title, subtitle }),
|
|
4188
4188
|
/* @__PURE__ */ jsx5("div", { className: `grid gap-6 ${gridCols[columns]}`, children: displayedServices.map((service) => /* @__PURE__ */ jsx5(
|
|
4189
4189
|
ServiceMinimalCard,
|
|
@@ -4195,7 +4195,7 @@ function Services({
|
|
|
4195
4195
|
)) })
|
|
4196
4196
|
] }) });
|
|
4197
4197
|
}
|
|
4198
|
-
return /* @__PURE__ */ jsx5("section", { id, className: `py-16 bg-gray-50 ${className}`, children: /* @__PURE__ */ jsxs5("div", { className: "container mx-auto px-4", children: [
|
|
4198
|
+
return /* @__PURE__ */ jsx5("section", { id, className: `py-16 scroll-mt-20 bg-gray-50 ${className}`, children: /* @__PURE__ */ jsxs5("div", { className: "container mx-auto px-4", children: [
|
|
4199
4199
|
/* @__PURE__ */ jsx5(SectionHeader, { title, subtitle }),
|
|
4200
4200
|
/* @__PURE__ */ jsx5("div", { className: `grid gap-6 ${gridCols[columns]}`, children: displayedServices.map((service) => /* @__PURE__ */ jsx5(
|
|
4201
4201
|
ServiceCard,
|
|
@@ -4278,7 +4278,7 @@ function Testimonials({
|
|
|
4278
4278
|
2: "md:grid-cols-2 max-w-4xl mx-auto",
|
|
4279
4279
|
3: "md:grid-cols-2 lg:grid-cols-3"
|
|
4280
4280
|
};
|
|
4281
|
-
return /* @__PURE__ */ jsx6("section", { id, className: `py-16 ${className}`, children: /* @__PURE__ */ jsxs6("div", { className: "container mx-auto px-4", children: [
|
|
4281
|
+
return /* @__PURE__ */ jsx6("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: /* @__PURE__ */ jsxs6("div", { className: "container mx-auto px-4", children: [
|
|
4282
4282
|
/* @__PURE__ */ jsxs6("div", { className: "text-center mb-12", children: [
|
|
4283
4283
|
/* @__PURE__ */ jsx6("h2", { className: "text-3xl md:text-4xl font-bold text-gray-900 mb-4", children: title }),
|
|
4284
4284
|
subtitle && /* @__PURE__ */ jsx6("p", { className: "text-lg text-gray-600 max-w-2xl mx-auto", children: subtitle })
|
|
@@ -4398,18 +4398,18 @@ function FAQ({
|
|
|
4398
4398
|
}
|
|
4399
4399
|
};
|
|
4400
4400
|
if (variant === "cards") {
|
|
4401
|
-
return /* @__PURE__ */ jsx7("section", { id, className: `py-16 ${className}`, children: /* @__PURE__ */ jsxs7("div", { className: "container mx-auto px-4", children: [
|
|
4401
|
+
return /* @__PURE__ */ jsx7("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: /* @__PURE__ */ jsxs7("div", { className: "container mx-auto px-4", children: [
|
|
4402
4402
|
/* @__PURE__ */ jsx7(SectionHeader2, { title, subtitle }),
|
|
4403
4403
|
/* @__PURE__ */ jsx7("div", { className: "grid md:grid-cols-2 gap-6 max-w-4xl mx-auto", children: items.map((item) => /* @__PURE__ */ jsx7(FAQCard, { item }, item.id || item.question)) })
|
|
4404
4404
|
] }) });
|
|
4405
4405
|
}
|
|
4406
4406
|
if (variant === "simple") {
|
|
4407
|
-
return /* @__PURE__ */ jsx7("section", { id, className: `py-16 ${className}`, children: /* @__PURE__ */ jsxs7("div", { className: "container mx-auto px-4", children: [
|
|
4407
|
+
return /* @__PURE__ */ jsx7("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: /* @__PURE__ */ jsxs7("div", { className: "container mx-auto px-4", children: [
|
|
4408
4408
|
/* @__PURE__ */ jsx7(SectionHeader2, { title, subtitle }),
|
|
4409
4409
|
/* @__PURE__ */ jsx7("div", { className: "max-w-3xl mx-auto space-y-8", children: items.map((item) => /* @__PURE__ */ jsx7(FAQSimple, { item }, item.id || item.question)) })
|
|
4410
4410
|
] }) });
|
|
4411
4411
|
}
|
|
4412
|
-
return /* @__PURE__ */ jsx7("section", { id, className: `py-16 bg-gray-50 ${className}`, children: /* @__PURE__ */ jsxs7("div", { className: "container mx-auto px-4", children: [
|
|
4412
|
+
return /* @__PURE__ */ jsx7("section", { id, className: `py-16 scroll-mt-20 bg-gray-50 ${className}`, children: /* @__PURE__ */ jsxs7("div", { className: "container mx-auto px-4", children: [
|
|
4413
4413
|
/* @__PURE__ */ jsx7(SectionHeader2, { title, subtitle }),
|
|
4414
4414
|
/* @__PURE__ */ jsx7("div", { className: "max-w-3xl mx-auto", children: items.map((item, index) => /* @__PURE__ */ jsx7(
|
|
4415
4415
|
FAQAccordionItem,
|
|
@@ -4621,53 +4621,155 @@ function Gallery({
|
|
|
4621
4621
|
columns = 3,
|
|
4622
4622
|
variant = "grid",
|
|
4623
4623
|
showCaptions = true,
|
|
4624
|
+
enableLightbox = true,
|
|
4624
4625
|
limit,
|
|
4625
|
-
className = ""
|
|
4626
|
+
className = "",
|
|
4627
|
+
id = "gallery"
|
|
4626
4628
|
}) {
|
|
4627
4629
|
const displayedItems = limit ? items.slice(0, limit) : items;
|
|
4628
4630
|
const [failedImages, setFailedImages] = useState3(/* @__PURE__ */ new Set());
|
|
4629
|
-
const
|
|
4630
|
-
|
|
4631
|
+
const [lightboxIndex, setLightboxIndex] = useState3(null);
|
|
4632
|
+
const handleImageError = (id2) => {
|
|
4633
|
+
setFailedImages((prev) => new Set(prev).add(id2));
|
|
4631
4634
|
};
|
|
4632
4635
|
const gridCols = {
|
|
4633
4636
|
2: "grid-cols-1 sm:grid-cols-2",
|
|
4634
4637
|
3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
|
|
4635
4638
|
4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4"
|
|
4636
4639
|
};
|
|
4637
|
-
|
|
4638
|
-
(
|
|
4639
|
-
|
|
4640
|
-
|
|
4640
|
+
const openLightbox = (index) => {
|
|
4641
|
+
if (enableLightbox) {
|
|
4642
|
+
setLightboxIndex(index);
|
|
4643
|
+
}
|
|
4644
|
+
};
|
|
4645
|
+
const closeLightbox = () => setLightboxIndex(null);
|
|
4646
|
+
const goToPrevious = () => {
|
|
4647
|
+
if (lightboxIndex !== null) {
|
|
4648
|
+
setLightboxIndex(lightboxIndex === 0 ? displayedItems.length - 1 : lightboxIndex - 1);
|
|
4649
|
+
}
|
|
4650
|
+
};
|
|
4651
|
+
const goToNext = () => {
|
|
4652
|
+
if (lightboxIndex !== null) {
|
|
4653
|
+
setLightboxIndex(lightboxIndex === displayedItems.length - 1 ? 0 : lightboxIndex + 1);
|
|
4654
|
+
}
|
|
4655
|
+
};
|
|
4656
|
+
return /* @__PURE__ */ jsxs9("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: [
|
|
4657
|
+
/* @__PURE__ */ jsxs9("div", { className: "container mx-auto px-4", children: [
|
|
4658
|
+
(title || subtitle) && /* @__PURE__ */ jsxs9("div", { className: "text-center mb-12", children: [
|
|
4659
|
+
title && /* @__PURE__ */ jsx9("h2", { className: "text-3xl md:text-4xl font-bold text-gray-900 mb-4", children: title }),
|
|
4660
|
+
subtitle && /* @__PURE__ */ jsx9("p", { className: "text-lg text-gray-600 max-w-2xl mx-auto", children: subtitle })
|
|
4661
|
+
] }),
|
|
4662
|
+
/* @__PURE__ */ jsx9("div", { className: `grid gap-4 ${gridCols[columns]}`, children: displayedItems.map((item, index) => {
|
|
4663
|
+
const itemId = item.id || item.imageUrl;
|
|
4664
|
+
const hasFailed = failedImages.has(itemId);
|
|
4665
|
+
return /* @__PURE__ */ jsx9(
|
|
4666
|
+
"div",
|
|
4667
|
+
{
|
|
4668
|
+
className: `group relative aspect-square overflow-hidden rounded-lg bg-gray-100 ${enableLightbox ? "cursor-pointer" : ""}`,
|
|
4669
|
+
onClick: () => openLightbox(index),
|
|
4670
|
+
role: enableLightbox ? "button" : void 0,
|
|
4671
|
+
tabIndex: enableLightbox ? 0 : void 0,
|
|
4672
|
+
onKeyDown: enableLightbox ? (e) => e.key === "Enter" && openLightbox(index) : void 0,
|
|
4673
|
+
children: hasFailed ? /* @__PURE__ */ jsx9("div", { className: "absolute inset-0 flex items-center justify-center text-gray-400", children: /* @__PURE__ */ jsx9("span", { children: "Image unavailable" }) }) : /* @__PURE__ */ jsxs9(Fragment, { children: [
|
|
4674
|
+
/* @__PURE__ */ jsx9(
|
|
4675
|
+
"img",
|
|
4676
|
+
{
|
|
4677
|
+
src: item.imageUrl,
|
|
4678
|
+
alt: item.alt || "",
|
|
4679
|
+
loading: "lazy",
|
|
4680
|
+
className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105",
|
|
4681
|
+
onError: () => handleImageError(itemId)
|
|
4682
|
+
}
|
|
4683
|
+
),
|
|
4684
|
+
enableLightbox && /* @__PURE__ */ jsx9("div", { className: "absolute inset-0 bg-black/30 opacity-0 group-hover:opacity-100 transition-opacity duration-300 flex items-center justify-center", children: /* @__PURE__ */ jsx9("svg", { className: "w-10 h-10 text-white", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx9("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM10 7v3m0 0v3m0-3h3m-3 0H7" }) }) }),
|
|
4685
|
+
showCaptions && item.caption && !enableLightbox && /* @__PURE__ */ jsx9("div", { className: "absolute inset-0 bg-gradient-to-t from-black/60 to-transparent opacity-0 group-hover:opacity-100 transition-opacity duration-300", children: /* @__PURE__ */ jsx9("div", { className: "absolute bottom-0 left-0 right-0 p-4", children: /* @__PURE__ */ jsx9("p", { className: "text-white text-sm", children: item.caption }) }) })
|
|
4686
|
+
] })
|
|
4687
|
+
},
|
|
4688
|
+
itemId
|
|
4689
|
+
);
|
|
4690
|
+
}) })
|
|
4641
4691
|
] }),
|
|
4642
|
-
|
|
4643
|
-
|
|
4644
|
-
|
|
4645
|
-
|
|
4646
|
-
|
|
4647
|
-
|
|
4648
|
-
|
|
4649
|
-
|
|
4650
|
-
|
|
4651
|
-
|
|
4652
|
-
|
|
4653
|
-
|
|
4654
|
-
|
|
4655
|
-
|
|
4656
|
-
|
|
4657
|
-
|
|
4658
|
-
|
|
4659
|
-
|
|
4660
|
-
|
|
4692
|
+
enableLightbox && lightboxIndex !== null && /* @__PURE__ */ jsxs9(
|
|
4693
|
+
"div",
|
|
4694
|
+
{
|
|
4695
|
+
className: "fixed inset-0 z-50 bg-black/90 flex items-center justify-center",
|
|
4696
|
+
onClick: closeLightbox,
|
|
4697
|
+
children: [
|
|
4698
|
+
/* @__PURE__ */ jsx9(
|
|
4699
|
+
"button",
|
|
4700
|
+
{
|
|
4701
|
+
onClick: closeLightbox,
|
|
4702
|
+
className: "absolute top-4 right-4 text-white hover:text-gray-300 transition-colors z-10",
|
|
4703
|
+
"aria-label": "Close lightbox",
|
|
4704
|
+
children: /* @__PURE__ */ jsx9("svg", { className: "w-8 h-8", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx9("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
|
|
4705
|
+
}
|
|
4706
|
+
),
|
|
4707
|
+
/* @__PURE__ */ jsx9(
|
|
4708
|
+
"button",
|
|
4709
|
+
{
|
|
4710
|
+
onClick: (e) => {
|
|
4711
|
+
e.stopPropagation();
|
|
4712
|
+
goToPrevious();
|
|
4713
|
+
},
|
|
4714
|
+
className: "absolute left-4 top-1/2 -translate-y-1/2 text-white hover:text-gray-300 transition-colors z-10",
|
|
4715
|
+
"aria-label": "Previous image",
|
|
4716
|
+
children: /* @__PURE__ */ jsx9("svg", { className: "w-10 h-10", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx9("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
|
|
4717
|
+
}
|
|
4718
|
+
),
|
|
4719
|
+
/* @__PURE__ */ jsx9(
|
|
4720
|
+
"button",
|
|
4721
|
+
{
|
|
4722
|
+
onClick: (e) => {
|
|
4723
|
+
e.stopPropagation();
|
|
4724
|
+
goToNext();
|
|
4725
|
+
},
|
|
4726
|
+
className: "absolute right-4 top-1/2 -translate-y-1/2 text-white hover:text-gray-300 transition-colors z-10",
|
|
4727
|
+
"aria-label": "Next image",
|
|
4728
|
+
children: /* @__PURE__ */ jsx9("svg", { className: "w-10 h-10", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx9("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
|
|
4729
|
+
}
|
|
4730
|
+
),
|
|
4731
|
+
/* @__PURE__ */ jsxs9(
|
|
4732
|
+
"div",
|
|
4733
|
+
{
|
|
4734
|
+
className: "max-w-5xl max-h-[85vh] mx-4",
|
|
4735
|
+
onClick: (e) => e.stopPropagation(),
|
|
4736
|
+
children: [
|
|
4737
|
+
/* @__PURE__ */ jsx9(
|
|
4738
|
+
"img",
|
|
4739
|
+
{
|
|
4740
|
+
src: displayedItems[lightboxIndex].imageUrl,
|
|
4741
|
+
alt: displayedItems[lightboxIndex].alt || "",
|
|
4742
|
+
className: "max-w-full max-h-[85vh] object-contain"
|
|
4743
|
+
}
|
|
4744
|
+
),
|
|
4745
|
+
showCaptions && displayedItems[lightboxIndex].caption && /* @__PURE__ */ jsx9("p", { className: "text-white text-center mt-4 text-lg", children: displayedItems[lightboxIndex].caption })
|
|
4746
|
+
]
|
|
4747
|
+
}
|
|
4748
|
+
),
|
|
4749
|
+
/* @__PURE__ */ jsxs9("div", { className: "absolute bottom-4 left-1/2 -translate-x-1/2 text-white text-sm", children: [
|
|
4750
|
+
lightboxIndex + 1,
|
|
4751
|
+
" / ",
|
|
4752
|
+
displayedItems.length
|
|
4661
4753
|
] })
|
|
4662
|
-
|
|
4663
|
-
|
|
4664
|
-
|
|
4665
|
-
|
|
4666
|
-
] }) });
|
|
4754
|
+
]
|
|
4755
|
+
}
|
|
4756
|
+
)
|
|
4757
|
+
] });
|
|
4667
4758
|
}
|
|
4668
4759
|
|
|
4760
|
+
// src/components/sections/Menu.tsx
|
|
4761
|
+
import { useState as useState4 } from "react";
|
|
4762
|
+
import { jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
4763
|
+
|
|
4764
|
+
// src/components/sections/TrustBadges.tsx
|
|
4765
|
+
import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
4766
|
+
|
|
4767
|
+
// src/components/sections/BeforeAfter.tsx
|
|
4768
|
+
import { useState as useState5, useRef, useCallback } from "react";
|
|
4769
|
+
import { jsx as jsx12, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
4770
|
+
|
|
4669
4771
|
// src/components/ui/Button.tsx
|
|
4670
|
-
import { Fragment as Fragment2, jsx as
|
|
4772
|
+
import { Fragment as Fragment2, jsx as jsx13, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
4671
4773
|
function getButtonClasses(props) {
|
|
4672
4774
|
const { variant = "primary", size = "md", fullWidth, disabled } = props;
|
|
4673
4775
|
const baseClasses = [
|
|
@@ -4709,16 +4811,16 @@ function Button({
|
|
|
4709
4811
|
...props
|
|
4710
4812
|
}) {
|
|
4711
4813
|
const classes = getButtonClasses({ variant, size, fullWidth, disabled: disabled || loading });
|
|
4712
|
-
return /* @__PURE__ */
|
|
4814
|
+
return /* @__PURE__ */ jsx13(
|
|
4713
4815
|
"button",
|
|
4714
4816
|
{
|
|
4715
4817
|
className: `${classes} ${className}`,
|
|
4716
4818
|
disabled: disabled || loading,
|
|
4717
4819
|
...props,
|
|
4718
|
-
children: loading ? /* @__PURE__ */
|
|
4719
|
-
leftIcon && /* @__PURE__ */
|
|
4820
|
+
children: loading ? /* @__PURE__ */ jsx13(LoadingSpinner, { size }) : /* @__PURE__ */ jsxs13(Fragment2, { children: [
|
|
4821
|
+
leftIcon && /* @__PURE__ */ jsx13("span", { className: "mr-2", children: leftIcon }),
|
|
4720
4822
|
children,
|
|
4721
|
-
rightIcon && /* @__PURE__ */
|
|
4823
|
+
rightIcon && /* @__PURE__ */ jsx13("span", { className: "ml-2", children: rightIcon })
|
|
4722
4824
|
] })
|
|
4723
4825
|
}
|
|
4724
4826
|
);
|
|
@@ -4729,7 +4831,7 @@ function LoadingSpinner({ size }) {
|
|
|
4729
4831
|
md: "w-5 h-5",
|
|
4730
4832
|
lg: "w-6 h-6"
|
|
4731
4833
|
};
|
|
4732
|
-
return /* @__PURE__ */
|
|
4834
|
+
return /* @__PURE__ */ jsxs13(
|
|
4733
4835
|
"svg",
|
|
4734
4836
|
{
|
|
4735
4837
|
className: `animate-spin ${sizeClasses[size || "md"]}`,
|
|
@@ -4737,7 +4839,7 @@ function LoadingSpinner({ size }) {
|
|
|
4737
4839
|
fill: "none",
|
|
4738
4840
|
viewBox: "0 0 24 24",
|
|
4739
4841
|
children: [
|
|
4740
|
-
/* @__PURE__ */
|
|
4842
|
+
/* @__PURE__ */ jsx13(
|
|
4741
4843
|
"circle",
|
|
4742
4844
|
{
|
|
4743
4845
|
className: "opacity-25",
|
|
@@ -4748,7 +4850,7 @@ function LoadingSpinner({ size }) {
|
|
|
4748
4850
|
strokeWidth: "4"
|
|
4749
4851
|
}
|
|
4750
4852
|
),
|
|
4751
|
-
/* @__PURE__ */
|
|
4853
|
+
/* @__PURE__ */ jsx13(
|
|
4752
4854
|
"path",
|
|
4753
4855
|
{
|
|
4754
4856
|
className: "opacity-75",
|
|
@@ -4771,15 +4873,15 @@ function ButtonLink({
|
|
|
4771
4873
|
...props
|
|
4772
4874
|
}) {
|
|
4773
4875
|
const classes = getButtonClasses({ variant, size, fullWidth, disabled: false });
|
|
4774
|
-
return /* @__PURE__ */
|
|
4775
|
-
leftIcon && /* @__PURE__ */
|
|
4876
|
+
return /* @__PURE__ */ jsxs13("a", { className: `${classes} ${className}`, ...props, children: [
|
|
4877
|
+
leftIcon && /* @__PURE__ */ jsx13("span", { className: "mr-2", children: leftIcon }),
|
|
4776
4878
|
children,
|
|
4777
|
-
rightIcon && /* @__PURE__ */
|
|
4879
|
+
rightIcon && /* @__PURE__ */ jsx13("span", { className: "ml-2", children: rightIcon })
|
|
4778
4880
|
] });
|
|
4779
4881
|
}
|
|
4780
4882
|
|
|
4781
4883
|
// src/components/ui/Card.tsx
|
|
4782
|
-
import { jsx as
|
|
4884
|
+
import { jsx as jsx14, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
4783
4885
|
function getCardClasses(props) {
|
|
4784
4886
|
const { variant = "default", padding = "md", hover = false } = props;
|
|
4785
4887
|
const baseClasses = ["rounded-lg", "overflow-hidden"];
|
|
@@ -4812,7 +4914,7 @@ function Card({
|
|
|
4812
4914
|
...props
|
|
4813
4915
|
}) {
|
|
4814
4916
|
const classes = getCardClasses({ variant, padding, hover });
|
|
4815
|
-
return /* @__PURE__ */
|
|
4917
|
+
return /* @__PURE__ */ jsx14("div", { className: `${classes} ${className}`, ...props, children });
|
|
4816
4918
|
}
|
|
4817
4919
|
function CardHeader({
|
|
4818
4920
|
title,
|
|
@@ -4822,13 +4924,13 @@ function CardHeader({
|
|
|
4822
4924
|
className = "",
|
|
4823
4925
|
...props
|
|
4824
4926
|
}) {
|
|
4825
|
-
return /* @__PURE__ */
|
|
4826
|
-
/* @__PURE__ */
|
|
4827
|
-
title && /* @__PURE__ */
|
|
4828
|
-
subtitle && /* @__PURE__ */
|
|
4927
|
+
return /* @__PURE__ */ jsxs14("div", { className: `flex items-start justify-between ${className}`, ...props, children: [
|
|
4928
|
+
/* @__PURE__ */ jsxs14("div", { children: [
|
|
4929
|
+
title && /* @__PURE__ */ jsx14("h3", { className: "text-lg font-semibold text-gray-900", children: title }),
|
|
4930
|
+
subtitle && /* @__PURE__ */ jsx14("p", { className: "mt-1 text-sm text-gray-500", children: subtitle }),
|
|
4829
4931
|
children
|
|
4830
4932
|
] }),
|
|
4831
|
-
action && /* @__PURE__ */
|
|
4933
|
+
action && /* @__PURE__ */ jsx14("div", { className: "flex-shrink-0 ml-4", children: action })
|
|
4832
4934
|
] });
|
|
4833
4935
|
}
|
|
4834
4936
|
function CardBody({
|
|
@@ -4836,14 +4938,14 @@ function CardBody({
|
|
|
4836
4938
|
className = "",
|
|
4837
4939
|
...props
|
|
4838
4940
|
}) {
|
|
4839
|
-
return /* @__PURE__ */
|
|
4941
|
+
return /* @__PURE__ */ jsx14("div", { className: `mt-4 ${className}`, ...props, children });
|
|
4840
4942
|
}
|
|
4841
4943
|
function CardFooter({
|
|
4842
4944
|
children,
|
|
4843
4945
|
className = "",
|
|
4844
4946
|
...props
|
|
4845
4947
|
}) {
|
|
4846
|
-
return /* @__PURE__ */
|
|
4948
|
+
return /* @__PURE__ */ jsx14("div", { className: `mt-4 pt-4 border-t border-gray-100 ${className}`, ...props, children });
|
|
4847
4949
|
}
|
|
4848
4950
|
function CardImage({
|
|
4849
4951
|
aspectRatio = "video",
|
|
@@ -4857,7 +4959,7 @@ function CardImage({
|
|
|
4857
4959
|
wide: "aspect-[2/1]",
|
|
4858
4960
|
auto: ""
|
|
4859
4961
|
};
|
|
4860
|
-
return /* @__PURE__ */
|
|
4962
|
+
return /* @__PURE__ */ jsx14("div", { className: `-m-5 mb-4 ${aspectClasses[aspectRatio]} overflow-hidden`, children: /* @__PURE__ */ jsx14(
|
|
4861
4963
|
"img",
|
|
4862
4964
|
{
|
|
4863
4965
|
className: `w-full h-full object-cover ${className}`,
|
|
@@ -4867,6 +4969,10 @@ function CardImage({
|
|
|
4867
4969
|
) });
|
|
4868
4970
|
}
|
|
4869
4971
|
|
|
4972
|
+
// src/components/ui/AnimatedSection.tsx
|
|
4973
|
+
import React6, { useEffect, useRef as useRef2, useState as useState6 } from "react";
|
|
4974
|
+
import { jsx as jsx15 } from "react/jsx-runtime";
|
|
4975
|
+
|
|
4870
4976
|
// src/seo/index.ts
|
|
4871
4977
|
function generateMetadata(business, pageTitle, pageDescription, options = {}) {
|
|
4872
4978
|
const { titleTemplate = "%s", baseUrl } = options;
|