@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.js CHANGED
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __esm = (fn, res) => function __init() {
7
9
  return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
@@ -18,6 +20,14 @@ var __copyProps = (to, from, except, desc) => {
18
20
  }
19
21
  return to;
20
22
  };
23
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
+ // If the importer is in node compatibility mode or this is not an ESM
25
+ // file that has been converted to a CommonJS file using a Babel-
26
+ // compatible transform (i.e. "__esModule" has not been set), then set
27
+ // "default" to the CommonJS "module.exports" for node compatibility.
28
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
29
+ mod
30
+ ));
21
31
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
32
 
23
33
  // src/theme/colors.ts
@@ -3893,10 +3903,10 @@ function Icon({ name, ...props }) {
3893
3903
  var import_jsx_runtime2 = require("react/jsx-runtime");
3894
3904
  var defaultNavigation = [
3895
3905
  { label: "Home", href: "/" },
3896
- { label: "Services", href: "/services" },
3897
- { label: "Gallery", href: "/gallery" },
3898
- { label: "About", href: "/about" },
3899
- { label: "Contact", href: "/contact" }
3906
+ { label: "Services", href: "/#services" },
3907
+ { label: "Hours", href: "/#hours" },
3908
+ { label: "Reviews", href: "/#reviews" },
3909
+ { label: "FAQ", href: "/#faq" }
3900
3910
  ];
3901
3911
  function Header({
3902
3912
  business,
@@ -3989,10 +3999,10 @@ function Header({
3989
3999
  var import_jsx_runtime3 = require("react/jsx-runtime");
3990
4000
  var defaultQuickLinks = [
3991
4001
  { label: "Home", href: "/" },
3992
- { label: "Services", href: "/services" },
3993
- { label: "About", href: "/about" },
3994
- { label: "Contact", href: "/contact" },
3995
- { label: "Privacy Policy", href: "/privacy" }
4002
+ { label: "Services", href: "/#services" },
4003
+ { label: "Hours", href: "/#hours" },
4004
+ { label: "Reviews", href: "/#reviews" },
4005
+ { label: "FAQ", href: "/#faq" }
3996
4006
  ];
3997
4007
  var dayNames = {
3998
4008
  monday: "Mon",
@@ -4306,7 +4316,8 @@ function Services({
4306
4316
  showIcons = true,
4307
4317
  variant = "cards",
4308
4318
  limit,
4309
- className = ""
4319
+ className = "",
4320
+ id = "services"
4310
4321
  }) {
4311
4322
  const displayedServices = limit ? services.slice(0, limit) : services;
4312
4323
  const gridCols = {
@@ -4315,7 +4326,7 @@ function Services({
4315
4326
  4: "md:grid-cols-2 lg:grid-cols-4"
4316
4327
  };
4317
4328
  if (variant === "list") {
4318
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { className: `py-16 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "container mx-auto px-4", children: [
4329
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "container mx-auto px-4", children: [
4319
4330
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionHeader, { title, subtitle }),
4320
4331
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "max-w-3xl mx-auto divide-y divide-gray-200", children: displayedServices.map((service) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
4321
4332
  ServiceListItem,
@@ -4329,7 +4340,7 @@ function Services({
4329
4340
  ] }) });
4330
4341
  }
4331
4342
  if (variant === "minimal") {
4332
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { className: `py-16 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "container mx-auto px-4", children: [
4343
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "container mx-auto px-4", children: [
4333
4344
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionHeader, { title, subtitle }),
4334
4345
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: `grid gap-6 ${gridCols[columns]}`, children: displayedServices.map((service) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
4335
4346
  ServiceMinimalCard,
@@ -4341,7 +4352,7 @@ function Services({
4341
4352
  )) })
4342
4353
  ] }) });
4343
4354
  }
4344
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { className: `py-16 bg-gray-50 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "container mx-auto px-4", children: [
4355
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { id, className: `py-16 scroll-mt-20 bg-gray-50 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "container mx-auto px-4", children: [
4345
4356
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionHeader, { title, subtitle }),
4346
4357
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: `grid gap-6 ${gridCols[columns]}`, children: displayedServices.map((service) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
4347
4358
  ServiceCard,
@@ -4415,7 +4426,8 @@ function Testimonials({
4415
4426
  showRatings = true,
4416
4427
  variant = "cards",
4417
4428
  limit,
4418
- className = ""
4429
+ className = "",
4430
+ id = "reviews"
4419
4431
  }) {
4420
4432
  const displayedTestimonials = limit ? testimonials.slice(0, limit) : testimonials;
4421
4433
  const gridCols = {
@@ -4423,7 +4435,7 @@ function Testimonials({
4423
4435
  2: "md:grid-cols-2 max-w-4xl mx-auto",
4424
4436
  3: "md:grid-cols-2 lg:grid-cols-3"
4425
4437
  };
4426
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("section", { className: `py-16 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "container mx-auto px-4", children: [
4438
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "container mx-auto px-4", children: [
4427
4439
  /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "text-center mb-12", children: [
4428
4440
  /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h2", { className: "text-3xl md:text-4xl font-bold text-gray-900 mb-4", children: title }),
4429
4441
  subtitle && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-lg text-gray-600 max-w-2xl mx-auto", children: subtitle })
@@ -4526,7 +4538,8 @@ function FAQ({
4526
4538
  variant = "accordion",
4527
4539
  defaultOpen = 0,
4528
4540
  allowMultiple = false,
4529
- className = ""
4541
+ className = "",
4542
+ id = "faq"
4530
4543
  }) {
4531
4544
  const initialOpen = Array.isArray(defaultOpen) ? defaultOpen : [defaultOpen];
4532
4545
  const [openItems, setOpenItems] = (0, import_react2.useState)(initialOpen);
@@ -4542,18 +4555,18 @@ function FAQ({
4542
4555
  }
4543
4556
  };
4544
4557
  if (variant === "cards") {
4545
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("section", { className: `py-16 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "container mx-auto px-4", children: [
4558
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "container mx-auto px-4", children: [
4546
4559
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SectionHeader2, { title, subtitle }),
4547
4560
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "grid md:grid-cols-2 gap-6 max-w-4xl mx-auto", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(FAQCard, { item }, item.id || item.question)) })
4548
4561
  ] }) });
4549
4562
  }
4550
4563
  if (variant === "simple") {
4551
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("section", { className: `py-16 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "container mx-auto px-4", children: [
4564
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "container mx-auto px-4", children: [
4552
4565
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SectionHeader2, { title, subtitle }),
4553
4566
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "max-w-3xl mx-auto space-y-8", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(FAQSimple, { item }, item.id || item.question)) })
4554
4567
  ] }) });
4555
4568
  }
4556
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("section", { className: `py-16 bg-gray-50 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "container mx-auto px-4", children: [
4569
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("section", { id, className: `py-16 scroll-mt-20 bg-gray-50 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "container mx-auto px-4", children: [
4557
4570
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SectionHeader2, { title, subtitle }),
4558
4571
  /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "max-w-3xl mx-auto", children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
4559
4572
  FAQAccordionItem,
@@ -4650,14 +4663,15 @@ function Hours({
4650
4663
  highlightToday = true,
4651
4664
  variant = "card",
4652
4665
  timezone,
4653
- className = ""
4666
+ className = "",
4667
+ id = "hours"
4654
4668
  }) {
4655
4669
  const todayDay = getTodayDay(timezone);
4656
4670
  const sortedHours = [...hours].sort(
4657
4671
  (a, b) => dayOrder.indexOf(a.day) - dayOrder.indexOf(b.day)
4658
4672
  );
4659
4673
  if (variant === "inline") {
4660
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: `flex flex-wrap gap-4 ${className}`, children: sortedHours.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
4674
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { id, className: `flex flex-wrap gap-4 ${className}`, children: sortedHours.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
4661
4675
  HoursInlineItem,
4662
4676
  {
4663
4677
  entry,
@@ -4667,7 +4681,7 @@ function Hours({
4667
4681
  )) });
4668
4682
  }
4669
4683
  if (variant === "minimal") {
4670
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: `space-y-1 ${className}`, children: sortedHours.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
4684
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { id, className: `space-y-1 ${className}`, children: sortedHours.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
4671
4685
  HoursMinimalItem,
4672
4686
  {
4673
4687
  entry,
@@ -4676,7 +4690,7 @@ function Hours({
4676
4690
  entry.day
4677
4691
  )) });
4678
4692
  }
4679
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: `bg-white rounded-lg shadow p-6 ${className}`, children: [
4693
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { id, className: `bg-white rounded-lg shadow p-6 ${className}`, children: [
4680
4694
  /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex items-center mb-4", children: [
4681
4695
  /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ClockIcon, { size: 24, className: "text-primary-600 mr-2" }),
4682
4696
  /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h3", { className: "text-xl font-semibold text-gray-900", children: title })
@@ -4764,53 +4778,155 @@ function Gallery({
4764
4778
  columns = 3,
4765
4779
  variant = "grid",
4766
4780
  showCaptions = true,
4781
+ enableLightbox = true,
4767
4782
  limit,
4768
- className = ""
4783
+ className = "",
4784
+ id = "gallery"
4769
4785
  }) {
4770
4786
  const displayedItems = limit ? items.slice(0, limit) : items;
4771
4787
  const [failedImages, setFailedImages] = (0, import_react3.useState)(/* @__PURE__ */ new Set());
4772
- const handleImageError = (id) => {
4773
- setFailedImages((prev) => new Set(prev).add(id));
4788
+ const [lightboxIndex, setLightboxIndex] = (0, import_react3.useState)(null);
4789
+ const handleImageError = (id2) => {
4790
+ setFailedImages((prev) => new Set(prev).add(id2));
4774
4791
  };
4775
4792
  const gridCols = {
4776
4793
  2: "grid-cols-1 sm:grid-cols-2",
4777
4794
  3: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
4778
4795
  4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4"
4779
4796
  };
4780
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("section", { className: `py-16 ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "container mx-auto px-4", children: [
4781
- (title || subtitle) && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "text-center mb-12", children: [
4782
- title && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h2", { className: "text-3xl md:text-4xl font-bold text-gray-900 mb-4", children: title }),
4783
- subtitle && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-lg text-gray-600 max-w-2xl mx-auto", children: subtitle })
4797
+ const openLightbox = (index) => {
4798
+ if (enableLightbox) {
4799
+ setLightboxIndex(index);
4800
+ }
4801
+ };
4802
+ const closeLightbox = () => setLightboxIndex(null);
4803
+ const goToPrevious = () => {
4804
+ if (lightboxIndex !== null) {
4805
+ setLightboxIndex(lightboxIndex === 0 ? displayedItems.length - 1 : lightboxIndex - 1);
4806
+ }
4807
+ };
4808
+ const goToNext = () => {
4809
+ if (lightboxIndex !== null) {
4810
+ setLightboxIndex(lightboxIndex === displayedItems.length - 1 ? 0 : lightboxIndex + 1);
4811
+ }
4812
+ };
4813
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("section", { id, className: `py-16 scroll-mt-20 ${className}`, children: [
4814
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "container mx-auto px-4", children: [
4815
+ (title || subtitle) && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "text-center mb-12", children: [
4816
+ title && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h2", { className: "text-3xl md:text-4xl font-bold text-gray-900 mb-4", children: title }),
4817
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-lg text-gray-600 max-w-2xl mx-auto", children: subtitle })
4818
+ ] }),
4819
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: `grid gap-4 ${gridCols[columns]}`, children: displayedItems.map((item, index) => {
4820
+ const itemId = item.id || item.imageUrl;
4821
+ const hasFailed = failedImages.has(itemId);
4822
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4823
+ "div",
4824
+ {
4825
+ className: `group relative aspect-square overflow-hidden rounded-lg bg-gray-100 ${enableLightbox ? "cursor-pointer" : ""}`,
4826
+ onClick: () => openLightbox(index),
4827
+ role: enableLightbox ? "button" : void 0,
4828
+ tabIndex: enableLightbox ? 0 : void 0,
4829
+ onKeyDown: enableLightbox ? (e) => e.key === "Enter" && openLightbox(index) : void 0,
4830
+ children: hasFailed ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "absolute inset-0 flex items-center justify-center text-gray-400", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: "Image unavailable" }) }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
4831
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4832
+ "img",
4833
+ {
4834
+ src: item.imageUrl,
4835
+ alt: item.alt || "",
4836
+ loading: "lazy",
4837
+ className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105",
4838
+ onError: () => handleImageError(itemId)
4839
+ }
4840
+ ),
4841
+ enableLightbox && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("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__ */ (0, import_jsx_runtime9.jsx)("svg", { className: "w-10 h-10 text-white", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("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" }) }) }),
4842
+ showCaptions && item.caption && !enableLightbox && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("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__ */ (0, import_jsx_runtime9.jsx)("div", { className: "absolute bottom-0 left-0 right-0 p-4", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-white text-sm", children: item.caption }) }) })
4843
+ ] })
4844
+ },
4845
+ itemId
4846
+ );
4847
+ }) })
4784
4848
  ] }),
4785
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: `grid gap-4 ${gridCols[columns]}`, children: displayedItems.map((item) => {
4786
- const itemId = item.id || item.imageUrl;
4787
- const hasFailed = failedImages.has(itemId);
4788
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4789
- "div",
4790
- {
4791
- className: "group relative aspect-square overflow-hidden rounded-lg bg-gray-100",
4792
- children: hasFailed ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "absolute inset-0 flex items-center justify-center text-gray-400", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: "Image unavailable" }) }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
4793
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4794
- "img",
4795
- {
4796
- src: item.imageUrl,
4797
- alt: item.alt || "",
4798
- loading: "lazy",
4799
- className: "w-full h-full object-cover transition-transform duration-300 group-hover:scale-105",
4800
- onError: () => handleImageError(itemId)
4801
- }
4802
- ),
4803
- showCaptions && item.caption && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("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__ */ (0, import_jsx_runtime9.jsx)("div", { className: "absolute bottom-0 left-0 right-0 p-4", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-white text-sm", children: item.caption }) }) })
4849
+ enableLightbox && lightboxIndex !== null && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
4850
+ "div",
4851
+ {
4852
+ className: "fixed inset-0 z-50 bg-black/90 flex items-center justify-center",
4853
+ onClick: closeLightbox,
4854
+ children: [
4855
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4856
+ "button",
4857
+ {
4858
+ onClick: closeLightbox,
4859
+ className: "absolute top-4 right-4 text-white hover:text-gray-300 transition-colors z-10",
4860
+ "aria-label": "Close lightbox",
4861
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("svg", { className: "w-8 h-8", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
4862
+ }
4863
+ ),
4864
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4865
+ "button",
4866
+ {
4867
+ onClick: (e) => {
4868
+ e.stopPropagation();
4869
+ goToPrevious();
4870
+ },
4871
+ className: "absolute left-4 top-1/2 -translate-y-1/2 text-white hover:text-gray-300 transition-colors z-10",
4872
+ "aria-label": "Previous image",
4873
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("svg", { className: "w-10 h-10", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M15 19l-7-7 7-7" }) })
4874
+ }
4875
+ ),
4876
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4877
+ "button",
4878
+ {
4879
+ onClick: (e) => {
4880
+ e.stopPropagation();
4881
+ goToNext();
4882
+ },
4883
+ className: "absolute right-4 top-1/2 -translate-y-1/2 text-white hover:text-gray-300 transition-colors z-10",
4884
+ "aria-label": "Next image",
4885
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("svg", { className: "w-10 h-10", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 5l7 7-7 7" }) })
4886
+ }
4887
+ ),
4888
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
4889
+ "div",
4890
+ {
4891
+ className: "max-w-5xl max-h-[85vh] mx-4",
4892
+ onClick: (e) => e.stopPropagation(),
4893
+ children: [
4894
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
4895
+ "img",
4896
+ {
4897
+ src: displayedItems[lightboxIndex].imageUrl,
4898
+ alt: displayedItems[lightboxIndex].alt || "",
4899
+ className: "max-w-full max-h-[85vh] object-contain"
4900
+ }
4901
+ ),
4902
+ showCaptions && displayedItems[lightboxIndex].caption && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-white text-center mt-4 text-lg", children: displayedItems[lightboxIndex].caption })
4903
+ ]
4904
+ }
4905
+ ),
4906
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "absolute bottom-4 left-1/2 -translate-x-1/2 text-white text-sm", children: [
4907
+ lightboxIndex + 1,
4908
+ " / ",
4909
+ displayedItems.length
4804
4910
  ] })
4805
- },
4806
- itemId
4807
- );
4808
- }) })
4809
- ] }) });
4911
+ ]
4912
+ }
4913
+ )
4914
+ ] });
4810
4915
  }
4811
4916
 
4812
- // src/components/ui/Button.tsx
4917
+ // src/components/sections/Menu.tsx
4918
+ var import_react4 = require("react");
4813
4919
  var import_jsx_runtime10 = require("react/jsx-runtime");
4920
+
4921
+ // src/components/sections/TrustBadges.tsx
4922
+ var import_jsx_runtime11 = require("react/jsx-runtime");
4923
+
4924
+ // src/components/sections/BeforeAfter.tsx
4925
+ var import_react5 = require("react");
4926
+ var import_jsx_runtime12 = require("react/jsx-runtime");
4927
+
4928
+ // src/components/ui/Button.tsx
4929
+ var import_jsx_runtime13 = require("react/jsx-runtime");
4814
4930
  function getButtonClasses(props) {
4815
4931
  const { variant = "primary", size = "md", fullWidth, disabled } = props;
4816
4932
  const baseClasses = [
@@ -4852,16 +4968,16 @@ function Button({
4852
4968
  ...props
4853
4969
  }) {
4854
4970
  const classes = getButtonClasses({ variant, size, fullWidth, disabled: disabled || loading });
4855
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4971
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
4856
4972
  "button",
4857
4973
  {
4858
4974
  className: `${classes} ${className}`,
4859
4975
  disabled: disabled || loading,
4860
4976
  ...props,
4861
- children: loading ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(LoadingSpinner, { size }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
4862
- leftIcon && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "mr-2", children: leftIcon }),
4977
+ children: loading ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(LoadingSpinner, { size }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
4978
+ leftIcon && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "mr-2", children: leftIcon }),
4863
4979
  children,
4864
- rightIcon && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "ml-2", children: rightIcon })
4980
+ rightIcon && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "ml-2", children: rightIcon })
4865
4981
  ] })
4866
4982
  }
4867
4983
  );
@@ -4872,7 +4988,7 @@ function LoadingSpinner({ size }) {
4872
4988
  md: "w-5 h-5",
4873
4989
  lg: "w-6 h-6"
4874
4990
  };
4875
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
4991
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
4876
4992
  "svg",
4877
4993
  {
4878
4994
  className: `animate-spin ${sizeClasses[size || "md"]}`,
@@ -4880,7 +4996,7 @@ function LoadingSpinner({ size }) {
4880
4996
  fill: "none",
4881
4997
  viewBox: "0 0 24 24",
4882
4998
  children: [
4883
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
4999
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
4884
5000
  "circle",
4885
5001
  {
4886
5002
  className: "opacity-25",
@@ -4891,7 +5007,7 @@ function LoadingSpinner({ size }) {
4891
5007
  strokeWidth: "4"
4892
5008
  }
4893
5009
  ),
4894
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
5010
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
4895
5011
  "path",
4896
5012
  {
4897
5013
  className: "opacity-75",
@@ -4914,15 +5030,15 @@ function ButtonLink({
4914
5030
  ...props
4915
5031
  }) {
4916
5032
  const classes = getButtonClasses({ variant, size, fullWidth, disabled: false });
4917
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("a", { className: `${classes} ${className}`, ...props, children: [
4918
- leftIcon && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "mr-2", children: leftIcon }),
5033
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("a", { className: `${classes} ${className}`, ...props, children: [
5034
+ leftIcon && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "mr-2", children: leftIcon }),
4919
5035
  children,
4920
- rightIcon && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "ml-2", children: rightIcon })
5036
+ rightIcon && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "ml-2", children: rightIcon })
4921
5037
  ] });
4922
5038
  }
4923
5039
 
4924
5040
  // src/components/ui/Card.tsx
4925
- var import_jsx_runtime11 = require("react/jsx-runtime");
5041
+ var import_jsx_runtime14 = require("react/jsx-runtime");
4926
5042
  function getCardClasses(props) {
4927
5043
  const { variant = "default", padding = "md", hover = false } = props;
4928
5044
  const baseClasses = ["rounded-lg", "overflow-hidden"];
@@ -4955,7 +5071,7 @@ function Card({
4955
5071
  ...props
4956
5072
  }) {
4957
5073
  const classes = getCardClasses({ variant, padding, hover });
4958
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: `${classes} ${className}`, ...props, children });
5074
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: `${classes} ${className}`, ...props, children });
4959
5075
  }
4960
5076
  function CardHeader({
4961
5077
  title,
@@ -4965,13 +5081,13 @@ function CardHeader({
4965
5081
  className = "",
4966
5082
  ...props
4967
5083
  }) {
4968
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: `flex items-start justify-between ${className}`, ...props, children: [
4969
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { children: [
4970
- title && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("h3", { className: "text-lg font-semibold text-gray-900", children: title }),
4971
- subtitle && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "mt-1 text-sm text-gray-500", children: subtitle }),
5084
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: `flex items-start justify-between ${className}`, ...props, children: [
5085
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { children: [
5086
+ title && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("h3", { className: "text-lg font-semibold text-gray-900", children: title }),
5087
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "mt-1 text-sm text-gray-500", children: subtitle }),
4972
5088
  children
4973
5089
  ] }),
4974
- action && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex-shrink-0 ml-4", children: action })
5090
+ action && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex-shrink-0 ml-4", children: action })
4975
5091
  ] });
4976
5092
  }
4977
5093
  function CardBody({
@@ -4979,14 +5095,14 @@ function CardBody({
4979
5095
  className = "",
4980
5096
  ...props
4981
5097
  }) {
4982
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: `mt-4 ${className}`, ...props, children });
5098
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: `mt-4 ${className}`, ...props, children });
4983
5099
  }
4984
5100
  function CardFooter({
4985
5101
  children,
4986
5102
  className = "",
4987
5103
  ...props
4988
5104
  }) {
4989
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: `mt-4 pt-4 border-t border-gray-100 ${className}`, ...props, children });
5105
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: `mt-4 pt-4 border-t border-gray-100 ${className}`, ...props, children });
4990
5106
  }
4991
5107
  function CardImage({
4992
5108
  aspectRatio = "video",
@@ -5000,7 +5116,7 @@ function CardImage({
5000
5116
  wide: "aspect-[2/1]",
5001
5117
  auto: ""
5002
5118
  };
5003
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: `-m-5 mb-4 ${aspectClasses[aspectRatio]} overflow-hidden`, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
5119
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: `-m-5 mb-4 ${aspectClasses[aspectRatio]} overflow-hidden`, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
5004
5120
  "img",
5005
5121
  {
5006
5122
  className: `w-full h-full object-cover ${className}`,
@@ -5010,6 +5126,10 @@ function CardImage({
5010
5126
  ) });
5011
5127
  }
5012
5128
 
5129
+ // src/components/ui/AnimatedSection.tsx
5130
+ var import_react6 = __toESM(require("react"));
5131
+ var import_jsx_runtime15 = require("react/jsx-runtime");
5132
+
5013
5133
  // src/seo/index.ts
5014
5134
  function generateMetadata(business, pageTitle, pageDescription, options = {}) {
5015
5135
  const { titleTemplate = "%s", baseUrl } = options;