@reblu/site-blocks 0.10.0 → 0.11.0

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.cjs CHANGED
@@ -29,12 +29,14 @@ __export(src_exports, {
29
29
  DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE: () => DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,
30
30
  DEFAULT_SHOP_ERROR_MESSAGES: () => DEFAULT_SHOP_ERROR_MESSAGES,
31
31
  DEFAULT_SHOP_PRICE_BANDS: () => DEFAULT_SHOP_PRICE_BANDS,
32
+ DEFAULT_TRUST_ICONS: () => DEFAULT_TRUST_ICONS,
32
33
  FaqAccordion: () => FaqAccordion,
33
34
  MarkdownRenderer: () => MarkdownRenderer,
34
35
  OrderConfirmation: () => OrderConfirmation,
35
36
  PageBlocks: () => PageBlocks,
36
37
  ParentPage: () => ParentPage,
37
38
  ProductCard: () => ProductCard,
39
+ ProductTrustItems: () => ProductTrustItems,
38
40
  ProfileCard: () => ProfileCard,
39
41
  SafeHtml: () => SafeHtml,
40
42
  ShopFilters: () => ShopFilters,
@@ -13503,11 +13505,246 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
13503
13505
  );
13504
13506
  }
13505
13507
 
13508
+ // ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/createLucideIcon.js
13509
+ var import_react2 = require("react");
13510
+
13511
+ // ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/shared/src/utils.js
13512
+ var toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
13513
+ var toCamelCase = (string) => string.replace(
13514
+ /^([A-Z])|[\s-_]+(\w)/g,
13515
+ (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()
13516
+ );
13517
+ var toPascalCase = (string) => {
13518
+ const camelCase = toCamelCase(string);
13519
+ return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
13520
+ };
13521
+ var mergeClasses = (...classes) => classes.filter((className, index, array) => {
13522
+ return Boolean(className) && className.trim() !== "" && array.indexOf(className) === index;
13523
+ }).join(" ").trim();
13524
+ var hasA11yProp = (props) => {
13525
+ for (const prop in props) {
13526
+ if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
13527
+ return true;
13528
+ }
13529
+ }
13530
+ };
13531
+
13532
+ // ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/Icon.js
13533
+ var import_react = require("react");
13534
+
13535
+ // ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/defaultAttributes.js
13536
+ var defaultAttributes = {
13537
+ xmlns: "http://www.w3.org/2000/svg",
13538
+ width: 24,
13539
+ height: 24,
13540
+ viewBox: "0 0 24 24",
13541
+ fill: "none",
13542
+ stroke: "currentColor",
13543
+ strokeWidth: 2,
13544
+ strokeLinecap: "round",
13545
+ strokeLinejoin: "round"
13546
+ };
13547
+
13548
+ // ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/Icon.js
13549
+ var Icon = (0, import_react.forwardRef)(
13550
+ ({
13551
+ color: color2 = "currentColor",
13552
+ size = 24,
13553
+ strokeWidth = 2,
13554
+ absoluteStrokeWidth,
13555
+ className = "",
13556
+ children: children2,
13557
+ iconNode,
13558
+ ...rest
13559
+ }, ref) => (0, import_react.createElement)(
13560
+ "svg",
13561
+ {
13562
+ ref,
13563
+ ...defaultAttributes,
13564
+ width: size,
13565
+ height: size,
13566
+ stroke: color2,
13567
+ strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,
13568
+ className: mergeClasses("lucide", className),
13569
+ ...!children2 && !hasA11yProp(rest) && { "aria-hidden": "true" },
13570
+ ...rest
13571
+ },
13572
+ [
13573
+ ...iconNode.map(([tag, attrs]) => (0, import_react.createElement)(tag, attrs)),
13574
+ ...Array.isArray(children2) ? children2 : [children2]
13575
+ ]
13576
+ )
13577
+ );
13578
+
13579
+ // ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/createLucideIcon.js
13580
+ var createLucideIcon = (iconName, iconNode) => {
13581
+ const Component = (0, import_react2.forwardRef)(
13582
+ ({ className, ...props }, ref) => (0, import_react2.createElement)(Icon, {
13583
+ ref,
13584
+ iconNode,
13585
+ className: mergeClasses(
13586
+ `lucide-${toKebabCase(toPascalCase(iconName))}`,
13587
+ `lucide-${iconName}`,
13588
+ className
13589
+ ),
13590
+ ...props
13591
+ })
13592
+ );
13593
+ Component.displayName = toPascalCase(iconName);
13594
+ return Component;
13595
+ };
13596
+
13597
+ // ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/award.js
13598
+ var __iconNode = [
13599
+ [
13600
+ "path",
13601
+ {
13602
+ d: "m15.477 12.89 1.515 8.526a.5.5 0 0 1-.81.47l-3.58-2.687a1 1 0 0 0-1.197 0l-3.586 2.686a.5.5 0 0 1-.81-.469l1.514-8.526",
13603
+ key: "1yiouv"
13604
+ }
13605
+ ],
13606
+ ["circle", { cx: "12", cy: "8", r: "6", key: "1vp47v" }]
13607
+ ];
13608
+ var Award = createLucideIcon("award", __iconNode);
13609
+
13610
+ // ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/badge-check.js
13611
+ var __iconNode2 = [
13612
+ [
13613
+ "path",
13614
+ {
13615
+ d: "M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",
13616
+ key: "3c2336"
13617
+ }
13618
+ ],
13619
+ ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
13620
+ ];
13621
+ var BadgeCheck = createLucideIcon("badge-check", __iconNode2);
13622
+
13623
+ // ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/gift.js
13624
+ var __iconNode3 = [
13625
+ ["rect", { x: "3", y: "8", width: "18", height: "4", rx: "1", key: "bkv52" }],
13626
+ ["path", { d: "M12 8v13", key: "1c76mn" }],
13627
+ ["path", { d: "M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7", key: "6wjy6b" }],
13628
+ [
13629
+ "path",
13630
+ {
13631
+ d: "M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5",
13632
+ key: "1ihvrl"
13633
+ }
13634
+ ]
13635
+ ];
13636
+ var Gift = createLucideIcon("gift", __iconNode3);
13637
+
13638
+ // ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/headset.js
13639
+ var __iconNode4 = [
13640
+ [
13641
+ "path",
13642
+ {
13643
+ d: "M3 11h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-5Zm0 0a9 9 0 1 1 18 0m0 0v5a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3Z",
13644
+ key: "12oyoe"
13645
+ }
13646
+ ],
13647
+ ["path", { d: "M21 16v2a4 4 0 0 1-4 4h-5", key: "1x7m43" }]
13648
+ ];
13649
+ var Headset = createLucideIcon("headset", __iconNode4);
13650
+
13651
+ // ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/rotate-ccw.js
13652
+ var __iconNode5 = [
13653
+ ["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
13654
+ ["path", { d: "M3 3v5h5", key: "1xhq8a" }]
13655
+ ];
13656
+ var RotateCcw = createLucideIcon("rotate-ccw", __iconNode5);
13657
+
13658
+ // ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/shield-check.js
13659
+ var __iconNode6 = [
13660
+ [
13661
+ "path",
13662
+ {
13663
+ d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
13664
+ key: "oel41y"
13665
+ }
13666
+ ],
13667
+ ["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
13668
+ ];
13669
+ var ShieldCheck = createLucideIcon("shield-check", __iconNode6);
13670
+
13671
+ // ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/store.js
13672
+ var __iconNode7 = [
13673
+ ["path", { d: "M15 21v-5a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v5", key: "slp6dd" }],
13674
+ [
13675
+ "path",
13676
+ {
13677
+ d: "M17.774 10.31a1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.451 0 1.12 1.12 0 0 0-1.548 0 2.5 2.5 0 0 1-3.452 0 1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.77-3.248l2.889-4.184A2 2 0 0 1 7 2h10a2 2 0 0 1 1.653.873l2.895 4.192a2.5 2.5 0 0 1-3.774 3.244",
13678
+ key: "o0xfot"
13679
+ }
13680
+ ],
13681
+ ["path", { d: "M4 10.95V19a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8.05", key: "wn3emo" }]
13682
+ ];
13683
+ var Store = createLucideIcon("store", __iconNode7);
13684
+
13685
+ // ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/truck.js
13686
+ var __iconNode8 = [
13687
+ ["path", { d: "M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2", key: "wrbu53" }],
13688
+ ["path", { d: "M15 18H9", key: "1lyqi6" }],
13689
+ [
13690
+ "path",
13691
+ {
13692
+ d: "M19 18h2a1 1 0 0 0 1-1v-3.65a1 1 0 0 0-.22-.624l-3.48-4.35A1 1 0 0 0 17.52 8H14",
13693
+ key: "lysw3i"
13694
+ }
13695
+ ],
13696
+ ["circle", { cx: "17", cy: "18", r: "2", key: "332jqn" }],
13697
+ ["circle", { cx: "7", cy: "18", r: "2", key: "19iecd" }]
13698
+ ];
13699
+ var Truck = createLucideIcon("truck", __iconNode8);
13700
+
13701
+ // src/components/product-trust-items.tsx
13702
+ var import_utils9 = require("@reblu/site-ui/utils");
13703
+ var import_jsx_runtime7 = require("react/jsx-runtime");
13704
+ var DEFAULT_TRUST_ICONS = Object.freeze({
13705
+ shipping: Truck,
13706
+ returns: RotateCcw,
13707
+ "secure-payment": ShieldCheck,
13708
+ support: Headset,
13709
+ gift: Gift,
13710
+ pickup: Store,
13711
+ warranty: BadgeCheck,
13712
+ quality: Award
13713
+ });
13714
+ function isKnownIcon(icon) {
13715
+ return Object.prototype.hasOwnProperty.call(DEFAULT_TRUST_ICONS, icon);
13716
+ }
13717
+ function isEntryObject(value) {
13718
+ return typeof value === "object" && value !== null && !Array.isArray(value);
13719
+ }
13720
+ function ProductTrustItems({
13721
+ items,
13722
+ icons,
13723
+ as: List = "ul",
13724
+ className,
13725
+ itemClassName
13726
+ }) {
13727
+ if (!Array.isArray(items) || items.length === 0) return null;
13728
+ const rows = items.flatMap((item, index) => {
13729
+ if (!isEntryObject(item)) return [];
13730
+ const icon = item.icon;
13731
+ const text3 = typeof item.text === "string" ? item.text.trim() : "";
13732
+ if (typeof icon !== "string" || !isKnownIcon(icon) || text3 === "") return [];
13733
+ const Icon2 = icons?.[icon] ?? DEFAULT_TRUST_ICONS[icon];
13734
+ return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
13735
+ });
13736
+ if (rows.length === 0) return null;
13737
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(List, { "data-slot": "product-trust-items", className: (0, import_utils9.cn)("space-y-2.5", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("li", { className: (0, import_utils9.cn)("flex items-center gap-3 text-sm text-muted-foreground", itemClassName), children: [
13738
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
13739
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { children: text3 })
13740
+ ] }, key2)) });
13741
+ }
13742
+
13506
13743
  // src/components/faq-accordion.tsx
13507
- var import_utils7 = require("@reblu/site-ui/utils");
13744
+ var import_utils10 = require("@reblu/site-ui/utils");
13508
13745
 
13509
13746
  // src/components/_heading.tsx
13510
- var import_jsx_runtime7 = require("react/jsx-runtime");
13747
+ var import_jsx_runtime8 = require("react/jsx-runtime");
13511
13748
  function nextHeadingLevel(level) {
13512
13749
  return Math.min(level + 1, 6);
13513
13750
  }
@@ -13517,11 +13754,11 @@ function Heading({
13517
13754
  children: children2
13518
13755
  }) {
13519
13756
  const Tag = `h${level}`;
13520
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Tag, { className, children: children2 });
13757
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Tag, { className, children: children2 });
13521
13758
  }
13522
13759
 
13523
13760
  // src/components/faq-accordion.tsx
13524
- var import_jsx_runtime8 = require("react/jsx-runtime");
13761
+ var import_jsx_runtime9 = require("react/jsx-runtime");
13525
13762
  function FaqAccordion({
13526
13763
  items,
13527
13764
  heading,
@@ -13532,18 +13769,18 @@ function FaqAccordion({
13532
13769
  }) {
13533
13770
  const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
13534
13771
  if (visible.length === 0) return null;
13535
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: (0, import_utils7.cn)("space-y-4", className), "data-slot": "faq-accordion", children: [
13536
- heading && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
13537
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
13772
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: (0, import_utils10.cn)("space-y-4", className), "data-slot": "faq-accordion", children: [
13773
+ heading && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
13774
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
13538
13775
  "details",
13539
13776
  {
13540
13777
  className: "group px-4",
13541
13778
  "data-slot": "faq-item",
13542
13779
  ...defaultOpen.includes(index) ? { open: true } : {},
13543
13780
  children: [
13544
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("summary", { className: "flex cursor-pointer list-none items-center justify-between gap-4 py-4 font-medium focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring [&::-webkit-details-marker]:hidden", children: [
13545
- questionHeadingLevel ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { children: item.q }),
13546
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
13781
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("summary", { className: "flex cursor-pointer list-none items-center justify-between gap-4 py-4 font-medium focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring [&::-webkit-details-marker]:hidden", children: [
13782
+ questionHeadingLevel ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: item.q }),
13783
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
13547
13784
  "span",
13548
13785
  {
13549
13786
  "aria-hidden": "true",
@@ -13552,7 +13789,7 @@ function FaqAccordion({
13552
13789
  }
13553
13790
  )
13554
13791
  ] }),
13555
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
13792
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
13556
13793
  ]
13557
13794
  },
13558
13795
  index
@@ -13561,40 +13798,40 @@ function FaqAccordion({
13561
13798
  }
13562
13799
 
13563
13800
  // src/components/page-blocks.tsx
13564
- var import_utils8 = require("@reblu/site-ui/utils");
13801
+ var import_utils11 = require("@reblu/site-ui/utils");
13565
13802
  var import_button_variants2 = require("@reblu/site-ui/button-variants");
13566
- var import_jsx_runtime9 = require("react/jsx-runtime");
13803
+ var import_jsx_runtime10 = require("react/jsx-runtime");
13567
13804
  var ALIASES = {
13568
13805
  doctor_embed: "profile_embed",
13569
13806
  specialty_embed: "page_embed"
13570
13807
  };
13571
13808
  function HeroBlock({ block, headingLevel }) {
13572
13809
  const { title, subtitle, imageUrl } = block.data;
13573
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "space-y-4", children: [
13574
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
13575
- subtitle && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-lg opacity-80", children: subtitle }),
13576
- imageUrl && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
13810
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "space-y-4", children: [
13811
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
13812
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "text-lg opacity-80", children: subtitle }),
13813
+ imageUrl && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
13577
13814
  ] });
13578
13815
  }
13579
13816
  function RichtextBlock({ block, headingLevel }) {
13580
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
13817
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
13581
13818
  }
13582
13819
  function FaqBlock({ block }) {
13583
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(FaqAccordion, { items: block.data.items });
13820
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FaqAccordion, { items: block.data.items });
13584
13821
  }
13585
13822
  function StatsBlock({ block }) {
13586
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-col-reverse gap-1", children: [
13587
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("dt", { className: "text-sm opacity-80", children: item.label }),
13588
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("dd", { className: "text-3xl font-bold", children: item.value })
13823
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-col-reverse gap-1", children: [
13824
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dt", { className: "text-sm opacity-80", children: item.label }),
13825
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dd", { className: "text-3xl font-bold", children: item.value })
13589
13826
  ] }, i)) });
13590
13827
  }
13591
13828
  function TestimonialBlock({ block }) {
13592
13829
  const { quote, author, role, avatarUrl } = block.data;
13593
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("figure", { className: "space-y-4", children: [
13594
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { children: quote }) }),
13595
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("figcaption", { className: "flex items-center gap-3", children: [
13830
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("figure", { className: "space-y-4", children: [
13831
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { children: quote }) }),
13832
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("figcaption", { className: "flex items-center gap-3", children: [
13596
13833
  avatarUrl && // eslint-disable-next-line @next/next/no-img-element
13597
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
13834
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
13598
13835
  "img",
13599
13836
  {
13600
13837
  src: avatarUrl,
@@ -13603,9 +13840,9 @@ function TestimonialBlock({ block }) {
13603
13840
  className: "h-10 w-10 rounded-full object-cover"
13604
13841
  }
13605
13842
  ),
13606
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { children: [
13607
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "font-semibold", children: author }),
13608
- role && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "block text-sm opacity-80", children: role })
13843
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { children: [
13844
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "font-semibold", children: author }),
13845
+ role && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "block text-sm opacity-80", children: role })
13609
13846
  ] })
13610
13847
  ] })
13611
13848
  ] });
@@ -13614,19 +13851,19 @@ function CtaSlotBlock(_props) {
13614
13851
  return null;
13615
13852
  }
13616
13853
  function FeatureListBlock({ block }) {
13617
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("li", { children: item.text }, i)) });
13854
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: item.text }, i)) });
13618
13855
  }
13619
13856
  function GalleryBlock({ block }) {
13620
13857
  const { images } = block.data;
13621
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
13858
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
13622
13859
  "div",
13623
13860
  {
13624
- className: (0, import_utils8.cn)(
13861
+ className: (0, import_utils11.cn)(
13625
13862
  "grid gap-4",
13626
13863
  images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
13627
13864
  ),
13628
- children: images.map((img, i) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("figure", { className: "space-y-1", children: [
13629
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
13865
+ children: images.map((img, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("figure", { className: "space-y-1", children: [
13866
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
13630
13867
  "img",
13631
13868
  {
13632
13869
  src: img.url,
@@ -13635,7 +13872,7 @@ function GalleryBlock({ block }) {
13635
13872
  className: "h-full w-full object-cover"
13636
13873
  }
13637
13874
  ) }),
13638
- img.caption && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
13875
+ img.caption && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
13639
13876
  ] }, `${img.url}-${i}`))
13640
13877
  }
13641
13878
  );
@@ -13645,13 +13882,13 @@ function EmbedCard({
13645
13882
  headingLevel,
13646
13883
  embedHref
13647
13884
  }) {
13648
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
13885
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
13649
13886
  "a",
13650
13887
  {
13651
13888
  href: embedHref(resolved),
13652
13889
  className: "group block overflow-hidden rounded-xl border border-border bg-card text-card-foreground transition-shadow hover:shadow-md focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring",
13653
13890
  children: [
13654
- resolved.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
13891
+ resolved.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
13655
13892
  "img",
13656
13893
  {
13657
13894
  src: resolved.coverImageUrl,
@@ -13660,24 +13897,24 @@ function EmbedCard({
13660
13897
  className: "h-full w-full object-cover"
13661
13898
  }
13662
13899
  ) }),
13663
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "space-y-1 p-4", children: [
13664
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
13665
- resolved.role && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
13666
- resolved.excerpt && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-muted-foreground", children: resolved.excerpt })
13900
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "space-y-1 p-4", children: [
13901
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
13902
+ resolved.role && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
13903
+ resolved.excerpt && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "text-muted-foreground", children: resolved.excerpt })
13667
13904
  ] })
13668
13905
  ]
13669
13906
  }
13670
13907
  );
13671
13908
  }
13672
13909
  function PageEmbedBlock({ block, headingLevel, embedHref }) {
13673
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
13910
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
13674
13911
  }
13675
13912
  function ProfileEmbedBlock({
13676
13913
  block,
13677
13914
  headingLevel,
13678
13915
  embedHref
13679
13916
  }) {
13680
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
13917
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
13681
13918
  }
13682
13919
  var DEFAULT_RENDERERS = {
13683
13920
  hero: HeroBlock,
@@ -13734,14 +13971,14 @@ function toIdFragment(value) {
13734
13971
  function SectionCta2({ cta }) {
13735
13972
  if (!hasUsableCta(cta)) return null;
13736
13973
  const variant = toButtonVariant(cta.variant);
13737
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
13974
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
13738
13975
  "a",
13739
13976
  {
13740
13977
  href: cta.url,
13741
13978
  "data-slot": "button",
13742
13979
  "data-variant": variant,
13743
13980
  "data-size": "default",
13744
- className: (0, import_utils8.cn)((0, import_button_variants2.buttonVariants)({ variant, size: "default" })),
13981
+ className: (0, import_utils11.cn)((0, import_button_variants2.buttonVariants)({ variant, size: "default" })),
13745
13982
  ...cta.isExternal ? { target: "_blank", rel: "noopener noreferrer" } : {},
13746
13983
  children: cta.label
13747
13984
  }
@@ -13767,17 +14004,17 @@ function PageBlocks({
13767
14004
  const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
13768
14005
  const background = block.backgroundColor;
13769
14006
  return [
13770
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
14007
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
13771
14008
  "section",
13772
14009
  {
13773
14010
  "data-slot": "page-block",
13774
14011
  "data-block-type": type,
13775
14012
  "aria-labelledby": headingId,
13776
14013
  style: surfaceStyle(background),
13777
- className: (0, import_utils8.cn)("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
14014
+ className: (0, import_utils11.cn)("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
13778
14015
  children: [
13779
- block.heading && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { id: headingId, children: block.heading }) }),
13780
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
14016
+ block.heading && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { id: headingId, children: block.heading }) }),
14017
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
13781
14018
  Renderer,
13782
14019
  {
13783
14020
  block,
@@ -13785,7 +14022,7 @@ function PageBlocks({
13785
14022
  embedHref
13786
14023
  }
13787
14024
  ),
13788
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SectionCta2, { cta: block.cta })
14025
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionCta2, { cta: block.cta })
13789
14026
  ]
13790
14027
  },
13791
14028
  block.id
@@ -13793,12 +14030,12 @@ function PageBlocks({
13793
14030
  ];
13794
14031
  });
13795
14032
  if (sections.length === 0) return null;
13796
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: (0, import_utils8.cn)("space-y-12", className), "data-slot": "page-blocks", children: sections });
14033
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: (0, import_utils11.cn)("space-y-12", className), "data-slot": "page-blocks", children: sections });
13797
14034
  }
13798
14035
 
13799
14036
  // src/components/shop-filters.tsx
13800
- var import_utils9 = require("@reblu/site-ui/utils");
13801
- var import_jsx_runtime10 = require("react/jsx-runtime");
14037
+ var import_utils12 = require("@reblu/site-ui/utils");
14038
+ var import_jsx_runtime11 = require("react/jsx-runtime");
13802
14039
  var DEFAULT_SHOP_PRICE_BANDS = [
13803
14040
  { max: 2500 },
13804
14041
  { min: 2500, max: 5e3 },
@@ -13842,7 +14079,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
13842
14079
  return "";
13843
14080
  }
13844
14081
  function OptionLink({ href, active, label, onActivate }) {
13845
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
14082
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
13846
14083
  "a",
13847
14084
  {
13848
14085
  href,
@@ -13851,7 +14088,7 @@ function OptionLink({ href, active, label, onActivate }) {
13851
14088
  event.preventDefault();
13852
14089
  onActivate();
13853
14090
  } : void 0,
13854
- className: (0, import_utils9.cn)(
14091
+ className: (0, import_utils12.cn)(
13855
14092
  "inline-flex items-center rounded-full border px-3 py-1 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
13856
14093
  active ? "border-transparent bg-primary text-primary-foreground" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground"
13857
14094
  ),
@@ -13860,9 +14097,9 @@ function OptionLink({ href, active, label, onActivate }) {
13860
14097
  );
13861
14098
  }
13862
14099
  function FilterFieldset({ legend, children: children2 }) {
13863
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("fieldset", { className: "space-y-2", children: [
13864
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("legend", { className: "text-sm font-medium text-foreground", children: legend }),
13865
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex flex-wrap gap-2", children: children2 })
14100
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("fieldset", { className: "space-y-2", children: [
14101
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("legend", { className: "text-sm font-medium text-foreground", children: legend }),
14102
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex flex-wrap gap-2", children: children2 })
13866
14103
  ] });
13867
14104
  }
13868
14105
  function ShopFilters({
@@ -13885,11 +14122,11 @@ function ShopFilters({
13885
14122
  if (!shouldRenderShopFilters(facets, active)) {
13886
14123
  return null;
13887
14124
  }
13888
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: (0, import_utils9.cn)("space-y-6", className), "data-slot": "shop-filters", children: [
14125
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: (0, import_utils12.cn)("space-y-6", className), "data-slot": "shop-filters", children: [
13889
14126
  visibleTaxonomies.map((axis) => {
13890
14127
  const activeSlug = active.taxonomy?.[axis.key];
13891
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(FilterFieldset, { legend: axis.label, children: [
13892
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
14128
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(FilterFieldset, { legend: axis.label, children: [
14129
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
13893
14130
  OptionLink,
13894
14131
  {
13895
14132
  href: hrefs.taxonomy(axis.key, void 0),
@@ -13904,7 +14141,7 @@ function ShopFilters({
13904
14141
  ),
13905
14142
  axis.terms.map((term) => {
13906
14143
  const isActive = activeSlug === term.slug;
13907
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
14144
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
13908
14145
  OptionLink,
13909
14146
  {
13910
14147
  href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
@@ -13924,9 +14161,9 @@ function ShopFilters({
13924
14161
  }),
13925
14162
  visibleAttributes.map((attr) => {
13926
14163
  const activeValues = toValueArray(active.attr?.[attr.key]);
13927
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
14164
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
13928
14165
  const isActive = activeValues.includes(opt.value);
13929
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
14166
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
13930
14167
  OptionLink,
13931
14168
  {
13932
14169
  href: hrefs.attr(attr.key, opt.value),
@@ -13944,11 +14181,11 @@ function ShopFilters({
13944
14181
  );
13945
14182
  }) }, attr.key);
13946
14183
  }),
13947
- showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
14184
+ showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
13948
14185
  const isActive = active.priceMin === band.min && active.priceMax === band.max;
13949
14186
  const nextMin = isActive ? void 0 : band.min;
13950
14187
  const nextMax = isActive ? void 0 : band.max;
13951
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
14188
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
13952
14189
  OptionLink,
13953
14190
  {
13954
14191
  href: hrefs.price(nextMin, nextMax),
@@ -13959,7 +14196,7 @@ function ShopFilters({
13959
14196
  i
13960
14197
  );
13961
14198
  }) }),
13962
- hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
14199
+ hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
13963
14200
  OptionLink,
13964
14201
  {
13965
14202
  href: hrefs.onSale(!active.onSale),
@@ -13968,7 +14205,7 @@ function ShopFilters({
13968
14205
  onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
13969
14206
  }
13970
14207
  ),
13971
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
14208
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
13972
14209
  "a",
13973
14210
  {
13974
14211
  href: hrefs.clearAll(),
@@ -13984,8 +14221,8 @@ function ShopFilters({
13984
14221
  }
13985
14222
 
13986
14223
  // src/components/cart-line-list.tsx
13987
- var import_utils10 = require("@reblu/site-ui/utils");
13988
- var import_jsx_runtime11 = require("react/jsx-runtime");
14224
+ var import_utils13 = require("@reblu/site-ui/utils");
14225
+ var import_jsx_runtime12 = require("react/jsx-runtime");
13989
14226
  var DEFAULT_LABELS2 = {
13990
14227
  quantityLabel: "Cantidad",
13991
14228
  decrease: "Reducir cantidad",
@@ -14010,9 +14247,9 @@ function CartLineList({
14010
14247
  }) {
14011
14248
  const t = { ...DEFAULT_LABELS2, ...labels };
14012
14249
  const noticeContent = notice === true ? t.cancelledNotice : notice;
14013
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: (0, import_utils10.cn)("space-y-4", className), "data-slot": "cart-line-list", children: [
14014
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
14015
- noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
14250
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: (0, import_utils13.cn)("space-y-4", className), "data-slot": "cart-line-list", children: [
14251
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
14252
+ noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
14016
14253
  "div",
14017
14254
  {
14018
14255
  role: "status",
@@ -14021,32 +14258,32 @@ function CartLineList({
14021
14258
  children: noticeContent
14022
14259
  }
14023
14260
  ),
14024
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
14261
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
14025
14262
  const maxQty = item.maxStock ?? Infinity;
14026
14263
  const atMax = item.quantity >= maxQty;
14027
14264
  const atMin = item.quantity <= 1;
14028
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
14265
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
14029
14266
  "li",
14030
14267
  {
14031
14268
  className: "flex gap-4 rounded-xl border border-border bg-card p-4",
14032
14269
  children: [
14033
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
14034
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "min-w-0 flex-1", children: [
14035
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
14036
- item.variantName && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
14037
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("p", { className: "mt-1 text-sm text-muted-foreground", children: [
14270
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
14271
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "min-w-0 flex-1", children: [
14272
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
14273
+ item.variantName && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
14274
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("p", { className: "mt-1 text-sm text-muted-foreground", children: [
14038
14275
  formatPrice(item.unitPrice, currencyCode, locale),
14039
14276
  " ",
14040
14277
  t.unitPriceSuffix
14041
14278
  ] }),
14042
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
14279
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
14043
14280
  "div",
14044
14281
  {
14045
14282
  role: "group",
14046
14283
  "aria-label": t.quantityLabel,
14047
14284
  className: "mt-3 flex items-center gap-3",
14048
14285
  children: [
14049
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
14286
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
14050
14287
  "button",
14051
14288
  {
14052
14289
  type: "button",
@@ -14057,8 +14294,8 @@ function CartLineList({
14057
14294
  children: "\u2212"
14058
14295
  }
14059
14296
  ),
14060
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
14061
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
14297
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
14298
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
14062
14299
  "button",
14063
14300
  {
14064
14301
  type: "button",
@@ -14069,7 +14306,7 @@ function CartLineList({
14069
14306
  children: "+"
14070
14307
  }
14071
14308
  ),
14072
- onRemove && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
14309
+ onRemove && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
14073
14310
  "button",
14074
14311
  {
14075
14312
  type: "button",
@@ -14083,7 +14320,7 @@ function CartLineList({
14083
14320
  }
14084
14321
  )
14085
14322
  ] }),
14086
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
14323
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
14087
14324
  ]
14088
14325
  },
14089
14326
  lineKey(item.productId, item.variantId)
@@ -14093,8 +14330,8 @@ function CartLineList({
14093
14330
  }
14094
14331
 
14095
14332
  // src/components/cart-summary.tsx
14096
- var import_utils11 = require("@reblu/site-ui/utils");
14097
- var import_jsx_runtime12 = require("react/jsx-runtime");
14333
+ var import_utils14 = require("@reblu/site-ui/utils");
14334
+ var import_jsx_runtime13 = require("react/jsx-runtime");
14098
14335
  var DEFAULT_LABELS3 = {
14099
14336
  subtotal: "Subtotal",
14100
14337
  discountPrefix: "Descuento",
@@ -14121,40 +14358,40 @@ function CartSummary({
14121
14358
  const hasDiscount = Boolean(discount && discount > 0);
14122
14359
  const noticeContent = notice === true ? t.cancelledNotice : notice;
14123
14360
  const hasNotice = noticeContent != null && noticeContent !== false;
14124
- const breakdown = /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
14361
+ const breakdown = /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
14125
14362
  "dl",
14126
14363
  {
14127
- className: (0, import_utils11.cn)("space-y-2 text-sm", !hasNotice && className),
14364
+ className: (0, import_utils14.cn)("space-y-2 text-sm", !hasNotice && className),
14128
14365
  "data-slot": "cart-summary",
14129
14366
  children: [
14130
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
14131
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("dt", { children: t.subtotal }),
14132
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("dd", { children: formatPrice(subtotal, currencyCode, locale) })
14367
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
14368
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("dt", { children: t.subtotal }),
14369
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("dd", { children: formatPrice(subtotal, currencyCode, locale) })
14133
14370
  ] }),
14134
- hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
14135
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("dt", { children: [
14371
+ hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
14372
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("dt", { children: [
14136
14373
  t.discountPrefix,
14137
14374
  discountCode ? ` (${discountCode})` : ""
14138
14375
  ] }),
14139
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("dd", { children: [
14376
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("dd", { children: [
14140
14377
  "-",
14141
14378
  formatPrice(discount, currencyCode, locale)
14142
14379
  ] })
14143
14380
  ] }),
14144
- shippingEnabled && /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
14145
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("dt", { children: t.shipping }),
14146
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
14381
+ shippingEnabled && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
14382
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("dt", { children: t.shipping }),
14383
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
14147
14384
  ] }),
14148
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
14149
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("dt", { children: t.total }),
14150
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("dd", { children: formatPrice(total, currencyCode, locale) })
14385
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
14386
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("dt", { children: t.total }),
14387
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("dd", { children: formatPrice(total, currencyCode, locale) })
14151
14388
  ] })
14152
14389
  ]
14153
14390
  }
14154
14391
  );
14155
14392
  if (!hasNotice) return breakdown;
14156
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: (0, import_utils11.cn)("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
14157
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
14393
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: (0, import_utils14.cn)("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
14394
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
14158
14395
  "div",
14159
14396
  {
14160
14397
  role: "status",
@@ -14168,8 +14405,8 @@ function CartSummary({
14168
14405
  }
14169
14406
 
14170
14407
  // src/components/added-to-cart-toast.tsx
14171
- var import_utils12 = require("@reblu/site-ui/utils");
14172
- var import_jsx_runtime13 = (
14408
+ var import_utils15 = require("@reblu/site-ui/utils");
14409
+ var import_jsx_runtime14 = (
14173
14410
  // eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
14174
14411
  require("react/jsx-runtime")
14175
14412
  );
@@ -14192,32 +14429,32 @@ function AddedToCartToast({
14192
14429
  const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
14193
14430
  const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
14194
14431
  const variant = status === "success" ? "success" : "error";
14195
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
14432
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
14196
14433
  "div",
14197
14434
  {
14198
14435
  "data-slot": "added-to-cart-toast",
14199
14436
  "data-variant": variant,
14200
- className: (0, import_utils12.cn)(
14437
+ className: (0, import_utils15.cn)(
14201
14438
  "flex items-center gap-3 rounded-xl border border-border bg-card p-3 text-sm shadow-lg",
14202
14439
  variant === "success" && "border-green-600/30 dark:border-green-400/30",
14203
14440
  variant === "error" && "border-destructive/30",
14204
14441
  className
14205
14442
  ),
14206
14443
  children: [
14207
- hasThumbnail && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
14208
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "min-w-0 flex-1", children: [
14209
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "truncate font-semibold text-foreground", children: productName }),
14210
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
14444
+ hasThumbnail && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
14445
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "min-w-0 flex-1", children: [
14446
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "truncate font-semibold text-foreground", children: productName }),
14447
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
14211
14448
  ] }),
14212
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
14449
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
14213
14450
  ]
14214
14451
  }
14215
14452
  );
14216
14453
  }
14217
14454
 
14218
14455
  // src/components/checkout-login-prompt.tsx
14219
- var import_utils13 = require("@reblu/site-ui/utils");
14220
- var import_jsx_runtime14 = require("react/jsx-runtime");
14456
+ var import_utils16 = require("@reblu/site-ui/utils");
14457
+ var import_jsx_runtime15 = require("react/jsx-runtime");
14221
14458
  var DEFAULT_LABELS5 = {
14222
14459
  title: "Identificaci\xF3n",
14223
14460
  description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
@@ -14244,26 +14481,26 @@ function CheckoutLoginPrompt({
14244
14481
  if (!open) return null;
14245
14482
  const t = { ...DEFAULT_LABELS5, ...labels };
14246
14483
  const isValidEmail = EMAIL_PATTERN.test(email.trim());
14247
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
14248
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
14249
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
14484
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_jsx_runtime15.Fragment, { children: [
14485
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
14486
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
14250
14487
  "div",
14251
14488
  {
14252
14489
  role: "dialog",
14253
14490
  "aria-modal": "true",
14254
14491
  "aria-labelledby": "checkout-login-prompt-title",
14255
14492
  "data-slot": "checkout-login-prompt",
14256
- className: (0, import_utils13.cn)(
14493
+ className: (0, import_utils16.cn)(
14257
14494
  "fixed left-1/2 top-1/2 z-50 w-full max-w-md -translate-x-1/2 -translate-y-1/2 space-y-5 rounded-2xl border border-border bg-background p-6 shadow-2xl",
14258
14495
  className
14259
14496
  ),
14260
14497
  children: [
14261
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
14262
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { children: [
14263
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
14264
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
14498
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
14499
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { children: [
14500
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
14501
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
14265
14502
  ] }),
14266
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14503
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14267
14504
  "button",
14268
14505
  {
14269
14506
  type: "button",
@@ -14274,9 +14511,9 @@ function CheckoutLoginPrompt({
14274
14511
  }
14275
14512
  )
14276
14513
  ] }),
14277
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "space-y-2", children: [
14278
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
14279
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14514
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "space-y-2", children: [
14515
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
14516
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14280
14517
  "input",
14281
14518
  {
14282
14519
  id: "checkout-login-prompt-email",
@@ -14285,29 +14522,29 @@ function CheckoutLoginPrompt({
14285
14522
  value: email,
14286
14523
  onChange: (e) => onEmailChange(e.target.value),
14287
14524
  placeholder: t.emailPlaceholder,
14288
- className: (0, import_utils13.cn)(
14525
+ className: (0, import_utils16.cn)(
14289
14526
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
14290
14527
  error ? "border-destructive" : "border-border focus:border-primary"
14291
14528
  )
14292
14529
  }
14293
14530
  ),
14294
- error && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "text-xs text-destructive", children: error })
14531
+ error && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-xs text-destructive", children: error })
14295
14532
  ] }),
14296
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "space-y-2", children: [
14297
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14533
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "space-y-2", children: [
14534
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14298
14535
  "button",
14299
14536
  {
14300
14537
  type: "button",
14301
14538
  onClick: onSubmitEmail,
14302
14539
  disabled: checking || !isValidEmail,
14303
- className: (0, import_utils13.cn)(
14540
+ className: (0, import_utils16.cn)(
14304
14541
  "flex w-full items-center justify-center gap-2 rounded-xl px-4 py-2.5 text-sm font-semibold transition-all",
14305
14542
  checking || !isValidEmail ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
14306
14543
  ),
14307
14544
  children: checking ? t.checking : t.continueWithEmail
14308
14545
  }
14309
14546
  ),
14310
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14547
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14311
14548
  "button",
14312
14549
  {
14313
14550
  type: "button",
@@ -14324,9 +14561,9 @@ function CheckoutLoginPrompt({
14324
14561
  }
14325
14562
 
14326
14563
  // src/components/checkout-form.tsx
14327
- var import_utils14 = require("@reblu/site-ui/utils");
14564
+ var import_utils17 = require("@reblu/site-ui/utils");
14328
14565
  var import_phone_input = require("@reblu/site-ui/phone-input");
14329
- var import_jsx_runtime15 = require("react/jsx-runtime");
14566
+ var import_jsx_runtime16 = require("react/jsx-runtime");
14330
14567
  var DEFAULT_LABELS6 = {
14331
14568
  contactTitle: "Datos de contacto",
14332
14569
  nameLabel: "Nombre completo",
@@ -14380,22 +14617,22 @@ function CheckoutForm({
14380
14617
  event.preventDefault();
14381
14618
  if (discountCode.trim() && !discountApplying) onApplyDiscount();
14382
14619
  }
14383
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_jsx_runtime15.Fragment, { children: [
14620
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
14384
14621
  loginPrompt,
14385
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
14622
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
14386
14623
  "form",
14387
14624
  {
14388
14625
  "data-testid": "checkout-form",
14389
14626
  onSubmit,
14390
- className: (0, import_utils14.cn)("space-y-8", className),
14627
+ className: (0, import_utils17.cn)("space-y-8", className),
14391
14628
  "data-slot": "checkout-form",
14392
14629
  children: [
14393
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("section", { className: "space-y-4", children: [
14394
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
14395
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
14396
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "space-y-1", children: [
14397
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
14398
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14630
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("section", { className: "space-y-4", children: [
14631
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
14632
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
14633
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "space-y-1", children: [
14634
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
14635
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14399
14636
  "input",
14400
14637
  {
14401
14638
  id: "checkout-form-name",
@@ -14404,17 +14641,17 @@ function CheckoutForm({
14404
14641
  value: contact.name,
14405
14642
  onChange: (e) => patchContact({ name: e.target.value }),
14406
14643
  placeholder: t.namePlaceholder,
14407
- className: (0, import_utils14.cn)(
14644
+ className: (0, import_utils17.cn)(
14408
14645
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
14409
14646
  contactErrors?.name ? "border-destructive" : "border-border focus:border-primary"
14410
14647
  )
14411
14648
  }
14412
14649
  ),
14413
- contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
14650
+ contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
14414
14651
  ] }),
14415
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "space-y-1", children: [
14416
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
14417
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14652
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "space-y-1", children: [
14653
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
14654
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14418
14655
  "input",
14419
14656
  {
14420
14657
  id: "checkout-form-email",
@@ -14423,15 +14660,15 @@ function CheckoutForm({
14423
14660
  value: contact.email,
14424
14661
  onChange: (e) => patchContact({ email: e.target.value }),
14425
14662
  placeholder: t.emailPlaceholder,
14426
- className: (0, import_utils14.cn)(
14663
+ className: (0, import_utils17.cn)(
14427
14664
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
14428
14665
  contactErrors?.email ? "border-destructive" : "border-border focus:border-primary"
14429
14666
  )
14430
14667
  }
14431
14668
  ),
14432
- contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
14669
+ contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
14433
14670
  ] }),
14434
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14671
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14435
14672
  import_phone_input.PhoneInput,
14436
14673
  {
14437
14674
  id: "checkout-form-phone",
@@ -14445,15 +14682,15 @@ function CheckoutForm({
14445
14682
  ] })
14446
14683
  ] }),
14447
14684
  children2,
14448
- generalError ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
14449
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("section", { className: "space-y-3", children: [
14450
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
14451
- appliedDiscount ? /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-center justify-between rounded-lg border border-green-200 bg-green-50 px-4 py-3 dark:border-green-800 dark:bg-green-900/20", children: [
14452
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
14453
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "font-semibold", children: appliedDiscount.code }),
14454
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
14685
+ generalError ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
14686
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("section", { className: "space-y-3", children: [
14687
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
14688
+ appliedDiscount ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex items-center justify-between rounded-lg border border-green-200 bg-green-50 px-4 py-3 dark:border-green-800 dark:bg-green-900/20", children: [
14689
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
14690
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "font-semibold", children: appliedDiscount.code }),
14691
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
14455
14692
  ] }),
14456
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14693
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14457
14694
  "button",
14458
14695
  {
14459
14696
  type: "button",
@@ -14463,9 +14700,9 @@ function CheckoutForm({
14463
14700
  children: t.removeDiscount
14464
14701
  }
14465
14702
  )
14466
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex gap-2", children: [
14467
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
14468
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14703
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex gap-2", children: [
14704
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
14705
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14469
14706
  "input",
14470
14707
  {
14471
14708
  id: "checkout-form-discount-code",
@@ -14477,7 +14714,7 @@ function CheckoutForm({
14477
14714
  className: "flex-1 rounded-lg border border-border bg-background px-3 py-2 text-sm uppercase transition focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20"
14478
14715
  }
14479
14716
  ),
14480
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14717
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14481
14718
  "button",
14482
14719
  {
14483
14720
  type: "button",
@@ -14488,14 +14725,14 @@ function CheckoutForm({
14488
14725
  }
14489
14726
  )
14490
14727
  ] }),
14491
- discountError && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-xs text-destructive", children: discountError })
14728
+ discountError && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "text-xs text-destructive", children: discountError })
14492
14729
  ] }),
14493
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14730
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14494
14731
  "button",
14495
14732
  {
14496
14733
  type: "submit",
14497
14734
  disabled: submitting || submitDisabled,
14498
- className: (0, import_utils14.cn)(
14735
+ className: (0, import_utils17.cn)(
14499
14736
  "flex w-full items-center justify-center gap-2 rounded-xl px-4 py-3 font-semibold transition-all",
14500
14737
  submitting || submitDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
14501
14738
  ),
@@ -14509,8 +14746,8 @@ function CheckoutForm({
14509
14746
  }
14510
14747
 
14511
14748
  // src/components/order-confirmation.tsx
14512
- var import_utils15 = require("@reblu/site-ui/utils");
14513
- var import_jsx_runtime16 = require("react/jsx-runtime");
14749
+ var import_utils18 = require("@reblu/site-ui/utils");
14750
+ var import_jsx_runtime17 = require("react/jsx-runtime");
14514
14751
  var DEFAULT_LABELS7 = {
14515
14752
  pollingTitle: "Confirmando tu pedido\u2026",
14516
14753
  pollingDescription: "Estamos procesando el pago, un momento\u2026",
@@ -14572,48 +14809,48 @@ function OrderConfirmation({
14572
14809
  const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
14573
14810
  const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
14574
14811
  const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
14575
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: (0, import_utils15.cn)("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
14576
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("h1", { className: "text-3xl font-bold", children: title }),
14577
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "text-lg text-muted-foreground", children: description }),
14578
- showFullOrderSummary && order && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "space-y-6", children: [
14579
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
14580
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
14581
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
14812
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: (0, import_utils18.cn)("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
14813
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h1", { className: "text-3xl font-bold", children: title }),
14814
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-lg text-muted-foreground", children: description }),
14815
+ showFullOrderSummary && order && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "space-y-6", children: [
14816
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
14817
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
14818
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
14582
14819
  ] }),
14583
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
14584
- order.items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
14820
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
14821
+ order.items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
14585
14822
  "div",
14586
14823
  {
14587
14824
  className: "flex justify-between gap-4 text-sm",
14588
14825
  children: [
14589
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
14826
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
14590
14827
  item.product.name,
14591
14828
  item.variant ? ` (${item.variant.name})` : "",
14592
14829
  " x",
14593
14830
  item.quantity
14594
14831
  ] }),
14595
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
14832
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
14596
14833
  ]
14597
14834
  },
14598
14835
  idx
14599
14836
  )),
14600
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
14601
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { children: t.totalLabel }),
14602
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { children: formatPrice(order.total, currencyCode, locale) })
14837
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
14838
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: t.totalLabel }),
14839
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: formatPrice(order.total, currencyCode, locale) })
14603
14840
  ] }) })
14604
14841
  ] }),
14605
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
14842
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
14606
14843
  t.confirmationEmailPrefix,
14607
14844
  " ",
14608
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
14845
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
14609
14846
  "."
14610
14847
  ] })
14611
14848
  ] }),
14612
- showOrderReference && order && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
14613
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
14614
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
14849
+ showOrderReference && order && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
14850
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
14851
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
14615
14852
  ] }),
14616
- status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14853
+ status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14617
14854
  "a",
14618
14855
  {
14619
14856
  href: cartHref,
@@ -14621,7 +14858,7 @@ function OrderConfirmation({
14621
14858
  children: t.backToCartLabel
14622
14859
  }
14623
14860
  ),
14624
- showRecheck && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14861
+ showRecheck && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14625
14862
  "button",
14626
14863
  {
14627
14864
  type: "button",
@@ -14630,9 +14867,9 @@ function OrderConfirmation({
14630
14867
  children: t.recheckLabel
14631
14868
  }
14632
14869
  ),
14633
- showSessionReference && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
14634
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
14635
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
14870
+ showSessionReference && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
14871
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
14872
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
14636
14873
  ] })
14637
14874
  ] });
14638
14875
  }
@@ -14647,12 +14884,14 @@ function OrderConfirmation({
14647
14884
  DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,
14648
14885
  DEFAULT_SHOP_ERROR_MESSAGES,
14649
14886
  DEFAULT_SHOP_PRICE_BANDS,
14887
+ DEFAULT_TRUST_ICONS,
14650
14888
  FaqAccordion,
14651
14889
  MarkdownRenderer,
14652
14890
  OrderConfirmation,
14653
14891
  PageBlocks,
14654
14892
  ParentPage,
14655
14893
  ProductCard,
14894
+ ProductTrustItems,
14656
14895
  ProfileCard,
14657
14896
  SafeHtml,
14658
14897
  ShopFilters,
@@ -14669,4 +14908,26 @@ function OrderConfirmation({
14669
14908
  sanitizeHtml,
14670
14909
  shouldRenderShopFilters
14671
14910
  });
14911
+ /*! Bundled license information:
14912
+
14913
+ lucide-react/dist/esm/shared/src/utils.js:
14914
+ lucide-react/dist/esm/defaultAttributes.js:
14915
+ lucide-react/dist/esm/Icon.js:
14916
+ lucide-react/dist/esm/createLucideIcon.js:
14917
+ lucide-react/dist/esm/icons/award.js:
14918
+ lucide-react/dist/esm/icons/badge-check.js:
14919
+ lucide-react/dist/esm/icons/gift.js:
14920
+ lucide-react/dist/esm/icons/headset.js:
14921
+ lucide-react/dist/esm/icons/rotate-ccw.js:
14922
+ lucide-react/dist/esm/icons/shield-check.js:
14923
+ lucide-react/dist/esm/icons/store.js:
14924
+ lucide-react/dist/esm/icons/truck.js:
14925
+ lucide-react/dist/esm/lucide-react.js:
14926
+ (**
14927
+ * @license lucide-react v0.562.0 - ISC
14928
+ *
14929
+ * This source code is licensed under the ISC license.
14930
+ * See the LICENSE file in the root directory of this source tree.
14931
+ *)
14932
+ */
14672
14933
  //# sourceMappingURL=index.cjs.map