@aws505/sheetsite 1.0.1 → 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/dist/index.mjs CHANGED
@@ -3746,10 +3746,10 @@ function Icon({ name, ...props }) {
3746
3746
  import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
3747
3747
  var defaultNavigation = [
3748
3748
  { label: "Home", href: "/" },
3749
- { label: "Services", href: "/services" },
3750
- { label: "Gallery", href: "/gallery" },
3751
- { label: "About", href: "/about" },
3752
- { label: "Contact", href: "/contact" }
3749
+ { label: "Services", href: "/#services" },
3750
+ { label: "Hours", href: "/#hours" },
3751
+ { label: "Reviews", href: "/#reviews" },
3752
+ { label: "FAQ", href: "/#faq" }
3753
3753
  ];
3754
3754
  function Header({
3755
3755
  business,
@@ -3842,10 +3842,10 @@ function Header({
3842
3842
  import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
3843
3843
  var defaultQuickLinks = [
3844
3844
  { label: "Home", href: "/" },
3845
- { label: "Services", href: "/services" },
3846
- { label: "About", href: "/about" },
3847
- { label: "Contact", href: "/contact" },
3848
- { label: "Privacy Policy", href: "/privacy" }
3845
+ { label: "Services", href: "/#services" },
3846
+ { label: "Hours", href: "/#hours" },
3847
+ { label: "Reviews", href: "/#reviews" },
3848
+ { label: "FAQ", href: "/#faq" }
3849
3849
  ];
3850
3850
  var dayNames = {
3851
3851
  monday: "Mon",
@@ -4159,7 +4159,8 @@ function Services({
4159
4159
  showIcons = true,
4160
4160
  variant = "cards",
4161
4161
  limit,
4162
- className = ""
4162
+ className = "",
4163
+ id = "services"
4163
4164
  }) {
4164
4165
  const displayedServices = limit ? services.slice(0, limit) : services;
4165
4166
  const gridCols = {
@@ -4168,7 +4169,7 @@ function Services({
4168
4169
  4: "md:grid-cols-2 lg:grid-cols-4"
4169
4170
  };
4170
4171
  if (variant === "list") {
4171
- return /* @__PURE__ */ jsx5("section", { 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: [
4172
4173
  /* @__PURE__ */ jsx5(SectionHeader, { title, subtitle }),
4173
4174
  /* @__PURE__ */ jsx5("div", { className: "max-w-3xl mx-auto divide-y divide-gray-200", children: displayedServices.map((service) => /* @__PURE__ */ jsx5(
4174
4175
  ServiceListItem,
@@ -4182,7 +4183,7 @@ function Services({
4182
4183
  ] }) });
4183
4184
  }
4184
4185
  if (variant === "minimal") {
4185
- return /* @__PURE__ */ jsx5("section", { 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: [
4186
4187
  /* @__PURE__ */ jsx5(SectionHeader, { title, subtitle }),
4187
4188
  /* @__PURE__ */ jsx5("div", { className: `grid gap-6 ${gridCols[columns]}`, children: displayedServices.map((service) => /* @__PURE__ */ jsx5(
4188
4189
  ServiceMinimalCard,
@@ -4194,7 +4195,7 @@ function Services({
4194
4195
  )) })
4195
4196
  ] }) });
4196
4197
  }
4197
- return /* @__PURE__ */ jsx5("section", { 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: [
4198
4199
  /* @__PURE__ */ jsx5(SectionHeader, { title, subtitle }),
4199
4200
  /* @__PURE__ */ jsx5("div", { className: `grid gap-6 ${gridCols[columns]}`, children: displayedServices.map((service) => /* @__PURE__ */ jsx5(
4200
4201
  ServiceCard,
@@ -4268,7 +4269,8 @@ function Testimonials({
4268
4269
  showRatings = true,
4269
4270
  variant = "cards",
4270
4271
  limit,
4271
- className = ""
4272
+ className = "",
4273
+ id = "reviews"
4272
4274
  }) {
4273
4275
  const displayedTestimonials = limit ? testimonials.slice(0, limit) : testimonials;
4274
4276
  const gridCols = {
@@ -4276,7 +4278,7 @@ function Testimonials({
4276
4278
  2: "md:grid-cols-2 max-w-4xl mx-auto",
4277
4279
  3: "md:grid-cols-2 lg:grid-cols-3"
4278
4280
  };
4279
- return /* @__PURE__ */ jsx6("section", { 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: [
4280
4282
  /* @__PURE__ */ jsxs6("div", { className: "text-center mb-12", children: [
4281
4283
  /* @__PURE__ */ jsx6("h2", { className: "text-3xl md:text-4xl font-bold text-gray-900 mb-4", children: title }),
4282
4284
  subtitle && /* @__PURE__ */ jsx6("p", { className: "text-lg text-gray-600 max-w-2xl mx-auto", children: subtitle })
@@ -4379,7 +4381,8 @@ function FAQ({
4379
4381
  variant = "accordion",
4380
4382
  defaultOpen = 0,
4381
4383
  allowMultiple = false,
4382
- className = ""
4384
+ className = "",
4385
+ id = "faq"
4383
4386
  }) {
4384
4387
  const initialOpen = Array.isArray(defaultOpen) ? defaultOpen : [defaultOpen];
4385
4388
  const [openItems, setOpenItems] = useState2(initialOpen);
@@ -4395,18 +4398,18 @@ function FAQ({
4395
4398
  }
4396
4399
  };
4397
4400
  if (variant === "cards") {
4398
- return /* @__PURE__ */ jsx7("section", { 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: [
4399
4402
  /* @__PURE__ */ jsx7(SectionHeader2, { title, subtitle }),
4400
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)) })
4401
4404
  ] }) });
4402
4405
  }
4403
4406
  if (variant === "simple") {
4404
- return /* @__PURE__ */ jsx7("section", { 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: [
4405
4408
  /* @__PURE__ */ jsx7(SectionHeader2, { title, subtitle }),
4406
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)) })
4407
4410
  ] }) });
4408
4411
  }
4409
- return /* @__PURE__ */ jsx7("section", { 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: [
4410
4413
  /* @__PURE__ */ jsx7(SectionHeader2, { title, subtitle }),
4411
4414
  /* @__PURE__ */ jsx7("div", { className: "max-w-3xl mx-auto", children: items.map((item, index) => /* @__PURE__ */ jsx7(
4412
4415
  FAQAccordionItem,
@@ -4503,14 +4506,15 @@ function Hours({
4503
4506
  highlightToday = true,
4504
4507
  variant = "card",
4505
4508
  timezone,
4506
- className = ""
4509
+ className = "",
4510
+ id = "hours"
4507
4511
  }) {
4508
4512
  const todayDay = getTodayDay(timezone);
4509
4513
  const sortedHours = [...hours].sort(
4510
4514
  (a, b) => dayOrder.indexOf(a.day) - dayOrder.indexOf(b.day)
4511
4515
  );
4512
4516
  if (variant === "inline") {
4513
- return /* @__PURE__ */ jsx8("div", { className: `flex flex-wrap gap-4 ${className}`, children: sortedHours.map((entry) => /* @__PURE__ */ jsx8(
4517
+ return /* @__PURE__ */ jsx8("div", { id, className: `flex flex-wrap gap-4 ${className}`, children: sortedHours.map((entry) => /* @__PURE__ */ jsx8(
4514
4518
  HoursInlineItem,
4515
4519
  {
4516
4520
  entry,
@@ -4520,7 +4524,7 @@ function Hours({
4520
4524
  )) });
4521
4525
  }
4522
4526
  if (variant === "minimal") {
4523
- return /* @__PURE__ */ jsx8("div", { className: `space-y-1 ${className}`, children: sortedHours.map((entry) => /* @__PURE__ */ jsx8(
4527
+ return /* @__PURE__ */ jsx8("div", { id, className: `space-y-1 ${className}`, children: sortedHours.map((entry) => /* @__PURE__ */ jsx8(
4524
4528
  HoursMinimalItem,
4525
4529
  {
4526
4530
  entry,
@@ -4529,7 +4533,7 @@ function Hours({
4529
4533
  entry.day
4530
4534
  )) });
4531
4535
  }
4532
- return /* @__PURE__ */ jsxs8("div", { className: `bg-white rounded-lg shadow p-6 ${className}`, children: [
4536
+ return /* @__PURE__ */ jsxs8("div", { id, className: `bg-white rounded-lg shadow p-6 ${className}`, children: [
4533
4537
  /* @__PURE__ */ jsxs8("div", { className: "flex items-center mb-4", children: [
4534
4538
  /* @__PURE__ */ jsx8(ClockIcon, { size: 24, className: "text-primary-600 mr-2" }),
4535
4539
  /* @__PURE__ */ jsx8("h3", { className: "text-xl font-semibold text-gray-900", children: title })
@@ -4617,53 +4621,155 @@ function Gallery({
4617
4621
  columns = 3,
4618
4622
  variant = "grid",
4619
4623
  showCaptions = true,
4624
+ enableLightbox = true,
4620
4625
  limit,
4621
- className = ""
4626
+ className = "",
4627
+ id = "gallery"
4622
4628
  }) {
4623
4629
  const displayedItems = limit ? items.slice(0, limit) : items;
4624
4630
  const [failedImages, setFailedImages] = useState3(/* @__PURE__ */ new Set());
4625
- const handleImageError = (id) => {
4626
- setFailedImages((prev) => new Set(prev).add(id));
4631
+ const [lightboxIndex, setLightboxIndex] = useState3(null);
4632
+ const handleImageError = (id2) => {
4633
+ setFailedImages((prev) => new Set(prev).add(id2));
4627
4634
  };
4628
4635
  const gridCols = {
4629
4636
  2: "grid-cols-1 sm:grid-cols-2",
4630
4637
  3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
4631
4638
  4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4"
4632
4639
  };
4633
- return /* @__PURE__ */ jsx9("section", { className: `py-16 ${className}`, children: /* @__PURE__ */ jsxs9("div", { className: "container mx-auto px-4", children: [
4634
- (title || subtitle) && /* @__PURE__ */ jsxs9("div", { className: "text-center mb-12", children: [
4635
- title && /* @__PURE__ */ jsx9("h2", { className: "text-3xl md:text-4xl font-bold text-gray-900 mb-4", children: title }),
4636
- subtitle && /* @__PURE__ */ jsx9("p", { className: "text-lg text-gray-600 max-w-2xl mx-auto", children: subtitle })
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
+ }) })
4637
4691
  ] }),
4638
- /* @__PURE__ */ jsx9("div", { className: `grid gap-4 ${gridCols[columns]}`, children: displayedItems.map((item) => {
4639
- const itemId = item.id || item.imageUrl;
4640
- const hasFailed = failedImages.has(itemId);
4641
- return /* @__PURE__ */ jsx9(
4642
- "div",
4643
- {
4644
- className: "group relative aspect-square overflow-hidden rounded-lg bg-gray-100",
4645
- 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: [
4646
- /* @__PURE__ */ jsx9(
4647
- "img",
4648
- {
4649
- src: item.imageUrl,
4650
- alt: item.alt || "",
4651
- loading: "lazy",
4652
- className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105",
4653
- onError: () => handleImageError(itemId)
4654
- }
4655
- ),
4656
- showCaptions && item.caption && /* @__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 }) }) })
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
4657
4753
  ] })
4658
- },
4659
- itemId
4660
- );
4661
- }) })
4662
- ] }) });
4754
+ ]
4755
+ }
4756
+ )
4757
+ ] });
4663
4758
  }
4664
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
+
4665
4771
  // src/components/ui/Button.tsx
4666
- import { Fragment as Fragment2, jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
4772
+ import { Fragment as Fragment2, jsx as jsx13, jsxs as jsxs13 } from "react/jsx-runtime";
4667
4773
  function getButtonClasses(props) {
4668
4774
  const { variant = "primary", size = "md", fullWidth, disabled } = props;
4669
4775
  const baseClasses = [
@@ -4705,16 +4811,16 @@ function Button({
4705
4811
  ...props
4706
4812
  }) {
4707
4813
  const classes = getButtonClasses({ variant, size, fullWidth, disabled: disabled || loading });
4708
- return /* @__PURE__ */ jsx10(
4814
+ return /* @__PURE__ */ jsx13(
4709
4815
  "button",
4710
4816
  {
4711
4817
  className: `${classes} ${className}`,
4712
4818
  disabled: disabled || loading,
4713
4819
  ...props,
4714
- children: loading ? /* @__PURE__ */ jsx10(LoadingSpinner, { size }) : /* @__PURE__ */ jsxs10(Fragment2, { children: [
4715
- leftIcon && /* @__PURE__ */ jsx10("span", { className: "mr-2", children: leftIcon }),
4820
+ children: loading ? /* @__PURE__ */ jsx13(LoadingSpinner, { size }) : /* @__PURE__ */ jsxs13(Fragment2, { children: [
4821
+ leftIcon && /* @__PURE__ */ jsx13("span", { className: "mr-2", children: leftIcon }),
4716
4822
  children,
4717
- rightIcon && /* @__PURE__ */ jsx10("span", { className: "ml-2", children: rightIcon })
4823
+ rightIcon && /* @__PURE__ */ jsx13("span", { className: "ml-2", children: rightIcon })
4718
4824
  ] })
4719
4825
  }
4720
4826
  );
@@ -4725,7 +4831,7 @@ function LoadingSpinner({ size }) {
4725
4831
  md: "w-5 h-5",
4726
4832
  lg: "w-6 h-6"
4727
4833
  };
4728
- return /* @__PURE__ */ jsxs10(
4834
+ return /* @__PURE__ */ jsxs13(
4729
4835
  "svg",
4730
4836
  {
4731
4837
  className: `animate-spin ${sizeClasses[size || "md"]}`,
@@ -4733,7 +4839,7 @@ function LoadingSpinner({ size }) {
4733
4839
  fill: "none",
4734
4840
  viewBox: "0 0 24 24",
4735
4841
  children: [
4736
- /* @__PURE__ */ jsx10(
4842
+ /* @__PURE__ */ jsx13(
4737
4843
  "circle",
4738
4844
  {
4739
4845
  className: "opacity-25",
@@ -4744,7 +4850,7 @@ function LoadingSpinner({ size }) {
4744
4850
  strokeWidth: "4"
4745
4851
  }
4746
4852
  ),
4747
- /* @__PURE__ */ jsx10(
4853
+ /* @__PURE__ */ jsx13(
4748
4854
  "path",
4749
4855
  {
4750
4856
  className: "opacity-75",
@@ -4767,15 +4873,15 @@ function ButtonLink({
4767
4873
  ...props
4768
4874
  }) {
4769
4875
  const classes = getButtonClasses({ variant, size, fullWidth, disabled: false });
4770
- return /* @__PURE__ */ jsxs10("a", { className: `${classes} ${className}`, ...props, children: [
4771
- leftIcon && /* @__PURE__ */ jsx10("span", { className: "mr-2", children: leftIcon }),
4876
+ return /* @__PURE__ */ jsxs13("a", { className: `${classes} ${className}`, ...props, children: [
4877
+ leftIcon && /* @__PURE__ */ jsx13("span", { className: "mr-2", children: leftIcon }),
4772
4878
  children,
4773
- rightIcon && /* @__PURE__ */ jsx10("span", { className: "ml-2", children: rightIcon })
4879
+ rightIcon && /* @__PURE__ */ jsx13("span", { className: "ml-2", children: rightIcon })
4774
4880
  ] });
4775
4881
  }
4776
4882
 
4777
4883
  // src/components/ui/Card.tsx
4778
- import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
4884
+ import { jsx as jsx14, jsxs as jsxs14 } from "react/jsx-runtime";
4779
4885
  function getCardClasses(props) {
4780
4886
  const { variant = "default", padding = "md", hover = false } = props;
4781
4887
  const baseClasses = ["rounded-lg", "overflow-hidden"];
@@ -4808,7 +4914,7 @@ function Card({
4808
4914
  ...props
4809
4915
  }) {
4810
4916
  const classes = getCardClasses({ variant, padding, hover });
4811
- return /* @__PURE__ */ jsx11("div", { className: `${classes} ${className}`, ...props, children });
4917
+ return /* @__PURE__ */ jsx14("div", { className: `${classes} ${className}`, ...props, children });
4812
4918
  }
4813
4919
  function CardHeader({
4814
4920
  title,
@@ -4818,13 +4924,13 @@ function CardHeader({
4818
4924
  className = "",
4819
4925
  ...props
4820
4926
  }) {
4821
- return /* @__PURE__ */ jsxs11("div", { className: `flex items-start justify-between ${className}`, ...props, children: [
4822
- /* @__PURE__ */ jsxs11("div", { children: [
4823
- title && /* @__PURE__ */ jsx11("h3", { className: "text-lg font-semibold text-gray-900", children: title }),
4824
- subtitle && /* @__PURE__ */ jsx11("p", { className: "mt-1 text-sm text-gray-500", children: subtitle }),
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 }),
4825
4931
  children
4826
4932
  ] }),
4827
- action && /* @__PURE__ */ jsx11("div", { className: "flex-shrink-0 ml-4", children: action })
4933
+ action && /* @__PURE__ */ jsx14("div", { className: "flex-shrink-0 ml-4", children: action })
4828
4934
  ] });
4829
4935
  }
4830
4936
  function CardBody({
@@ -4832,14 +4938,14 @@ function CardBody({
4832
4938
  className = "",
4833
4939
  ...props
4834
4940
  }) {
4835
- return /* @__PURE__ */ jsx11("div", { className: `mt-4 ${className}`, ...props, children });
4941
+ return /* @__PURE__ */ jsx14("div", { className: `mt-4 ${className}`, ...props, children });
4836
4942
  }
4837
4943
  function CardFooter({
4838
4944
  children,
4839
4945
  className = "",
4840
4946
  ...props
4841
4947
  }) {
4842
- return /* @__PURE__ */ jsx11("div", { className: `mt-4 pt-4 border-t border-gray-100 ${className}`, ...props, children });
4948
+ return /* @__PURE__ */ jsx14("div", { className: `mt-4 pt-4 border-t border-gray-100 ${className}`, ...props, children });
4843
4949
  }
4844
4950
  function CardImage({
4845
4951
  aspectRatio = "video",
@@ -4853,7 +4959,7 @@ function CardImage({
4853
4959
  wide: "aspect-[2/1]",
4854
4960
  auto: ""
4855
4961
  };
4856
- return /* @__PURE__ */ jsx11("div", { className: `-m-5 mb-4 ${aspectClasses[aspectRatio]} overflow-hidden`, children: /* @__PURE__ */ jsx11(
4962
+ return /* @__PURE__ */ jsx14("div", { className: `-m-5 mb-4 ${aspectClasses[aspectRatio]} overflow-hidden`, children: /* @__PURE__ */ jsx14(
4857
4963
  "img",
4858
4964
  {
4859
4965
  className: `w-full h-full object-cover ${className}`,
@@ -4863,6 +4969,10 @@ function CardImage({
4863
4969
  ) });
4864
4970
  }
4865
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
+
4866
4976
  // src/seo/index.ts
4867
4977
  function generateMetadata(business, pageTitle, pageDescription, options = {}) {
4868
4978
  const { titleTemplate = "%s", baseUrl } = options;