@reblu/site-blocks 0.30.0 → 0.31.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.js CHANGED
@@ -14504,40 +14504,376 @@ function ArbitrationBadge({
14504
14504
  }
14505
14505
 
14506
14506
  // src/components/page-blocks.tsx
14507
- import { cn as cn12 } from "@reblu/site-ui/utils";
14507
+ import { cn as cn13 } from "@reblu/site-ui/utils";
14508
14508
  import { buttonVariants as buttonVariants2 } from "@reblu/site-ui/button-variants";
14509
+
14510
+ // src/components/content-blocks.tsx
14511
+ import { cn as cn12 } from "@reblu/site-ui/utils";
14512
+
14513
+ // src/components/_card-icons.ts
14514
+ var CARD_ICON_NODES = {
14515
+ check: [["path", { d: "M20 6 9 17l-5-5" }]],
14516
+ star: [
14517
+ [
14518
+ "path",
14519
+ {
14520
+ d: "M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z"
14521
+ }
14522
+ ]
14523
+ ],
14524
+ heart: [
14525
+ [
14526
+ "path",
14527
+ {
14528
+ d: "M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5"
14529
+ }
14530
+ ]
14531
+ ],
14532
+ "shield-check": [
14533
+ [
14534
+ "path",
14535
+ {
14536
+ 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"
14537
+ }
14538
+ ],
14539
+ ["path", { d: "m9 12 2 2 4-4" }]
14540
+ ],
14541
+ sparkles: [
14542
+ [
14543
+ "path",
14544
+ {
14545
+ d: "M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z"
14546
+ }
14547
+ ],
14548
+ ["path", { d: "M20 2v4" }],
14549
+ ["path", { d: "M22 4h-4" }],
14550
+ ["circle", { cx: "4", cy: "20", r: "2" }]
14551
+ ],
14552
+ clock: [
14553
+ ["path", { d: "M12 6v6l4 2" }],
14554
+ ["circle", { cx: "12", cy: "12", r: "10" }]
14555
+ ],
14556
+ calendar: [
14557
+ ["path", { d: "M8 2v4" }],
14558
+ ["path", { d: "M16 2v4" }],
14559
+ ["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2" }],
14560
+ ["path", { d: "M3 10h18" }]
14561
+ ],
14562
+ user: [
14563
+ ["path", { d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" }],
14564
+ ["circle", { cx: "12", cy: "7", r: "4" }]
14565
+ ],
14566
+ users: [
14567
+ ["path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }],
14568
+ ["path", { d: "M16 3.128a4 4 0 0 1 0 7.744" }],
14569
+ ["path", { d: "M22 21v-2a4 4 0 0 0-3-3.87" }],
14570
+ ["circle", { cx: "9", cy: "7", r: "4" }]
14571
+ ],
14572
+ phone: [
14573
+ [
14574
+ "path",
14575
+ {
14576
+ d: "M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384"
14577
+ }
14578
+ ]
14579
+ ],
14580
+ mail: [
14581
+ ["path", { d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" }],
14582
+ ["rect", { x: "2", y: "4", width: "20", height: "16", rx: "2" }]
14583
+ ],
14584
+ "map-pin": [
14585
+ [
14586
+ "path",
14587
+ {
14588
+ d: "M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"
14589
+ }
14590
+ ],
14591
+ ["circle", { cx: "12", cy: "10", r: "3" }]
14592
+ ],
14593
+ leaf: [
14594
+ [
14595
+ "path",
14596
+ { d: "M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z" }
14597
+ ],
14598
+ ["path", { d: "M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12" }]
14599
+ ],
14600
+ droplet: [
14601
+ [
14602
+ "path",
14603
+ {
14604
+ d: "M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z"
14605
+ }
14606
+ ]
14607
+ ],
14608
+ sun: [
14609
+ ["circle", { cx: "12", cy: "12", r: "4" }],
14610
+ ["path", { d: "M12 2v2" }],
14611
+ ["path", { d: "M12 20v2" }],
14612
+ ["path", { d: "m4.93 4.93 1.41 1.41" }],
14613
+ ["path", { d: "m17.66 17.66 1.41 1.41" }],
14614
+ ["path", { d: "M2 12h2" }],
14615
+ ["path", { d: "M20 12h2" }],
14616
+ ["path", { d: "m6.34 17.66-1.41 1.41" }],
14617
+ ["path", { d: "m19.07 4.93-1.41 1.41" }]
14618
+ ],
14619
+ zap: [
14620
+ [
14621
+ "path",
14622
+ {
14623
+ d: "M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"
14624
+ }
14625
+ ]
14626
+ ],
14627
+ award: [
14628
+ [
14629
+ "path",
14630
+ {
14631
+ 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"
14632
+ }
14633
+ ],
14634
+ ["circle", { cx: "12", cy: "8", r: "6" }]
14635
+ ],
14636
+ target: [
14637
+ ["circle", { cx: "12", cy: "12", r: "10" }],
14638
+ ["circle", { cx: "12", cy: "12", r: "6" }],
14639
+ ["circle", { cx: "12", cy: "12", r: "2" }]
14640
+ ],
14641
+ lightbulb: [
14642
+ [
14643
+ "path",
14644
+ {
14645
+ d: "M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"
14646
+ }
14647
+ ],
14648
+ ["path", { d: "M9 18h6" }],
14649
+ ["path", { d: "M10 22h4" }]
14650
+ ],
14651
+ smile: [
14652
+ ["circle", { cx: "12", cy: "12", r: "10" }],
14653
+ ["path", { d: "M8 14s1.5 2 4 2 4-2 4-2" }],
14654
+ ["line", { x1: "9", x2: "9.01", y1: "9", y2: "9" }],
14655
+ ["line", { x1: "15", x2: "15.01", y1: "9", y2: "9" }]
14656
+ ],
14657
+ "thumbs-up": [
14658
+ [
14659
+ "path",
14660
+ {
14661
+ d: "M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"
14662
+ }
14663
+ ],
14664
+ ["path", { d: "M7 10v12" }]
14665
+ ],
14666
+ info: [
14667
+ ["circle", { cx: "12", cy: "12", r: "10" }],
14668
+ ["path", { d: "M12 16v-4" }],
14669
+ ["path", { d: "M12 8h.01" }]
14670
+ ]
14671
+ };
14672
+
14673
+ // src/components/content-blocks.tsx
14509
14674
  import { jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
14675
+ var DEFAULT_BEFORE_AFTER_LABELS = Object.freeze({ before: "Antes", after: "Despu\xE9s" });
14676
+ function PairImage({ url, alt, label }) {
14677
+ return /* @__PURE__ */ jsxs17("figure", { className: "space-y-2", children: [
14678
+ /* @__PURE__ */ jsx18("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx18(
14679
+ "img",
14680
+ {
14681
+ src: url,
14682
+ alt,
14683
+ loading: "lazy",
14684
+ decoding: "async",
14685
+ className: "h-full w-full object-cover"
14686
+ }
14687
+ ) }),
14688
+ /* @__PURE__ */ jsx18("figcaption", { className: "text-sm font-semibold", children: label })
14689
+ ] });
14690
+ }
14691
+ function BeforeAfterPairs({
14692
+ pairs,
14693
+ showCaption = false,
14694
+ caption,
14695
+ labels = DEFAULT_BEFORE_AFTER_LABELS,
14696
+ className
14697
+ }) {
14698
+ const visibleCaption = showCaption && caption && caption.trim() !== "" ? caption : null;
14699
+ if (pairs.length === 0 && !visibleCaption) return null;
14700
+ return /* @__PURE__ */ jsxs17("div", { "data-slot": "before-after", className: cn12("space-y-4", className), children: [
14701
+ pairs.length > 0 && /* @__PURE__ */ jsx18("ul", { className: "grid gap-6 lg:grid-cols-2", children: pairs.map((pair, i) => /* @__PURE__ */ jsxs17(
14702
+ "li",
14703
+ {
14704
+ "data-slot": "before-after-pair",
14705
+ className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
14706
+ children: [
14707
+ /* @__PURE__ */ jsx18(PairImage, { url: pair.beforeUrl, alt: pair.alt ?? "", label: labels.before }),
14708
+ /* @__PURE__ */ jsx18(PairImage, { url: pair.afterUrl, alt: pair.alt ?? "", label: labels.after })
14709
+ ]
14710
+ },
14711
+ `${pair.beforeUrl}-${pair.afterUrl}-${i}`
14712
+ )) }),
14713
+ visibleCaption && /* @__PURE__ */ jsx18("p", { "data-slot": "before-after-caption", className: "whitespace-pre-line text-sm opacity-80", children: visibleCaption })
14714
+ ] });
14715
+ }
14716
+ function ChipList({ items, className }) {
14717
+ const visible = items.filter((item) => item.trim() !== "");
14718
+ if (visible.length === 0) return null;
14719
+ return /* @__PURE__ */ jsx18("ul", { "data-slot": "chip-list", className: cn12("flex flex-wrap gap-3", className), children: visible.map((item, i) => /* @__PURE__ */ jsx18(
14720
+ "li",
14721
+ {
14722
+ "data-slot": "chip",
14723
+ className: "rounded-full border border-primary/20 bg-primary/10 px-4 py-2 text-sm font-medium text-primary",
14724
+ children: item
14725
+ },
14726
+ `${item}-${i}`
14727
+ )) });
14728
+ }
14729
+ var CARD_ICON_NAMES = Object.freeze(Object.keys(CARD_ICON_NODES));
14730
+ function hasCardIcon(icon) {
14731
+ return Object.prototype.hasOwnProperty.call(CARD_ICON_NODES, icon);
14732
+ }
14733
+ function CardIconSvg({ icon, className }) {
14734
+ if (!hasCardIcon(icon)) return null;
14735
+ return /* @__PURE__ */ jsx18(
14736
+ "svg",
14737
+ {
14738
+ xmlns: "http://www.w3.org/2000/svg",
14739
+ viewBox: "0 0 24 24",
14740
+ fill: "none",
14741
+ stroke: "currentColor",
14742
+ strokeWidth: 2,
14743
+ strokeLinecap: "round",
14744
+ strokeLinejoin: "round",
14745
+ "aria-hidden": "true",
14746
+ focusable: "false",
14747
+ "data-icon": icon,
14748
+ className: cn12("h-5 w-5", className),
14749
+ children: CARD_ICON_NODES[icon].map(([Tag, attrs], i) => /* @__PURE__ */ jsx18(Tag, { ...attrs }, i))
14750
+ }
14751
+ );
14752
+ }
14753
+ function IconCardGrid({ items, intro, headingLevel = 3, className }) {
14754
+ const hasIntro = !!intro && intro.trim() !== "";
14755
+ if (items.length === 0 && !hasIntro) return null;
14756
+ return /* @__PURE__ */ jsxs17("div", { "data-slot": "icon-cards", className: cn12("space-y-6", className), children: [
14757
+ hasIntro && /* @__PURE__ */ jsx18("p", { className: "max-w-prose text-lg opacity-80", children: intro }),
14758
+ items.length > 0 && /* @__PURE__ */ jsx18(
14759
+ "ul",
14760
+ {
14761
+ "data-slot": "icon-card-grid",
14762
+ className: "grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3",
14763
+ children: items.map((item, i) => /* @__PURE__ */ jsxs17(
14764
+ "li",
14765
+ {
14766
+ "data-slot": "icon-card",
14767
+ className: "space-y-3 rounded-xl border border-border bg-card p-6 text-card-foreground",
14768
+ children: [
14769
+ hasCardIcon(item.icon) && /* @__PURE__ */ jsx18("span", { className: "inline-flex h-12 w-12 items-center justify-center rounded-xl bg-primary/10 text-primary", children: /* @__PURE__ */ jsx18(CardIconSvg, { icon: item.icon }) }),
14770
+ /* @__PURE__ */ jsx18(Heading, { level: headingLevel, className: "text-lg font-semibold", children: item.title }),
14771
+ item.text && /* @__PURE__ */ jsx18("p", { className: "text-muted-foreground", children: item.text })
14772
+ ]
14773
+ },
14774
+ `${item.title}-${i}`
14775
+ ))
14776
+ }
14777
+ )
14778
+ ] });
14779
+ }
14780
+ var KICKER_CLASS_NAME = "text-sm font-semibold uppercase tracking-wider opacity-80";
14781
+ function ImageTextSplit({
14782
+ imageUrl,
14783
+ alt,
14784
+ imageSide,
14785
+ mobileOrder = "image_first",
14786
+ html: html5,
14787
+ kicker,
14788
+ heading,
14789
+ headingLevel = 2,
14790
+ headingId,
14791
+ className
14792
+ }) {
14793
+ const textFirst = mobileOrder === "text_first";
14794
+ const imageRight = imageSide === "right";
14795
+ const hasKicker = !!kicker && kicker.trim() !== "";
14796
+ const bodyOffset = heading ? headingLevel : headingLevel - 1;
14797
+ return /* @__PURE__ */ jsxs17(
14798
+ "div",
14799
+ {
14800
+ "data-slot": "image-text",
14801
+ "data-image-side": imageRight ? "right" : "left",
14802
+ className: cn12("grid grid-cols-1 items-center gap-8 md:grid-cols-2", className),
14803
+ children: [
14804
+ /* @__PURE__ */ jsx18(
14805
+ "div",
14806
+ {
14807
+ "data-slot": "image-text-media",
14808
+ className: cn12(textFirst ? "order-2" : "order-1", imageRight ? "md:order-2" : "md:order-1"),
14809
+ children: /* @__PURE__ */ jsx18("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx18(
14810
+ "img",
14811
+ {
14812
+ src: imageUrl,
14813
+ alt: alt ?? "",
14814
+ loading: "lazy",
14815
+ decoding: "async",
14816
+ className: "h-full w-full object-cover"
14817
+ }
14818
+ ) })
14819
+ }
14820
+ ),
14821
+ /* @__PURE__ */ jsxs17(
14822
+ "div",
14823
+ {
14824
+ "data-slot": "image-text-body",
14825
+ className: cn12(
14826
+ "space-y-4",
14827
+ textFirst ? "order-1" : "order-2",
14828
+ imageRight ? "md:order-1" : "md:order-2"
14829
+ ),
14830
+ children: [
14831
+ (hasKicker || heading) && /* @__PURE__ */ jsxs17("div", { className: "space-y-2", children: [
14832
+ hasKicker && /* @__PURE__ */ jsx18("p", { "data-slot": "page-block-kicker", className: KICKER_CLASS_NAME, children: kicker }),
14833
+ heading && /* @__PURE__ */ jsx18(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx18("span", { id: headingId, children: heading }) })
14834
+ ] }),
14835
+ html5 && /* @__PURE__ */ jsx18(SafeHtml, { html: sanitizeHtml(html5), headingOffset: bodyOffset })
14836
+ ]
14837
+ }
14838
+ )
14839
+ ]
14840
+ }
14841
+ );
14842
+ }
14843
+
14844
+ // src/components/page-blocks.tsx
14845
+ import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
14510
14846
  var ALIASES = {
14511
14847
  doctor_embed: "profile_embed",
14512
14848
  specialty_embed: "page_embed"
14513
14849
  };
14514
14850
  function HeroBlock({ block, headingLevel }) {
14515
14851
  const { title, subtitle, imageUrl } = block.data;
14516
- return /* @__PURE__ */ jsxs17("div", { className: "space-y-4", children: [
14517
- /* @__PURE__ */ jsx18(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
14518
- subtitle && /* @__PURE__ */ jsx18("p", { className: "text-lg opacity-80", children: subtitle }),
14519
- imageUrl && /* @__PURE__ */ jsx18("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx18("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
14852
+ return /* @__PURE__ */ jsxs18("div", { className: "space-y-4", children: [
14853
+ /* @__PURE__ */ jsx19(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
14854
+ subtitle && /* @__PURE__ */ jsx19("p", { className: "text-lg opacity-80", children: subtitle }),
14855
+ imageUrl && /* @__PURE__ */ jsx19("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx19("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
14520
14856
  ] });
14521
14857
  }
14522
14858
  function RichtextBlock({ block, headingLevel }) {
14523
- return /* @__PURE__ */ jsx18(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
14859
+ return /* @__PURE__ */ jsx19(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
14524
14860
  }
14525
14861
  function FaqBlock({ block }) {
14526
- return /* @__PURE__ */ jsx18(FaqAccordion, { items: block.data.items });
14862
+ return /* @__PURE__ */ jsx19(FaqAccordion, { items: block.data.items });
14527
14863
  }
14528
14864
  function StatsBlock({ block }) {
14529
- return /* @__PURE__ */ jsx18("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ jsxs17("div", { className: "flex flex-col-reverse gap-1", children: [
14530
- /* @__PURE__ */ jsx18("dt", { className: "text-sm opacity-80", children: item.label }),
14531
- /* @__PURE__ */ jsx18("dd", { className: "text-3xl font-bold", children: item.value })
14865
+ return /* @__PURE__ */ jsx19("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ jsxs18("div", { className: "flex flex-col-reverse gap-1", children: [
14866
+ /* @__PURE__ */ jsx19("dt", { className: "text-sm opacity-80", children: item.label }),
14867
+ /* @__PURE__ */ jsx19("dd", { className: "text-3xl font-bold", children: item.value })
14532
14868
  ] }, i)) });
14533
14869
  }
14534
14870
  function TestimonialBlock({ block }) {
14535
14871
  const { quote, author, role, avatarUrl } = block.data;
14536
- return /* @__PURE__ */ jsxs17("figure", { className: "space-y-4", children: [
14537
- /* @__PURE__ */ jsx18("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ jsx18("p", { children: quote }) }),
14538
- /* @__PURE__ */ jsxs17("figcaption", { className: "flex items-center gap-3", children: [
14872
+ return /* @__PURE__ */ jsxs18("figure", { className: "space-y-4", children: [
14873
+ /* @__PURE__ */ jsx19("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ jsx19("p", { children: quote }) }),
14874
+ /* @__PURE__ */ jsxs18("figcaption", { className: "flex items-center gap-3", children: [
14539
14875
  avatarUrl && // eslint-disable-next-line @next/next/no-img-element
14540
- /* @__PURE__ */ jsx18(
14876
+ /* @__PURE__ */ jsx19(
14541
14877
  "img",
14542
14878
  {
14543
14879
  src: avatarUrl,
@@ -14546,9 +14882,9 @@ function TestimonialBlock({ block }) {
14546
14882
  className: "h-10 w-10 rounded-full object-cover"
14547
14883
  }
14548
14884
  ),
14549
- /* @__PURE__ */ jsxs17("span", { children: [
14550
- /* @__PURE__ */ jsx18("span", { className: "font-semibold", children: author }),
14551
- role && /* @__PURE__ */ jsx18("span", { className: "block text-sm opacity-80", children: role })
14885
+ /* @__PURE__ */ jsxs18("span", { children: [
14886
+ /* @__PURE__ */ jsx19("span", { className: "font-semibold", children: author }),
14887
+ role && /* @__PURE__ */ jsx19("span", { className: "block text-sm opacity-80", children: role })
14552
14888
  ] })
14553
14889
  ] })
14554
14890
  ] });
@@ -14557,19 +14893,19 @@ function CtaSlotBlock(_props) {
14557
14893
  return null;
14558
14894
  }
14559
14895
  function FeatureListBlock({ block }) {
14560
- return /* @__PURE__ */ jsx18("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ jsx18("li", { children: item.text }, i)) });
14896
+ return /* @__PURE__ */ jsx19("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ jsx19("li", { children: item.text }, i)) });
14561
14897
  }
14562
14898
  function GalleryBlock({ block }) {
14563
14899
  const { images } = block.data;
14564
- return /* @__PURE__ */ jsx18(
14900
+ return /* @__PURE__ */ jsx19(
14565
14901
  "div",
14566
14902
  {
14567
- className: cn12(
14903
+ className: cn13(
14568
14904
  "grid gap-4",
14569
14905
  images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
14570
14906
  ),
14571
- children: images.map((img, i) => /* @__PURE__ */ jsxs17("figure", { className: "space-y-1", children: [
14572
- /* @__PURE__ */ jsx18("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx18(
14907
+ children: images.map((img, i) => /* @__PURE__ */ jsxs18("figure", { className: "space-y-1", children: [
14908
+ /* @__PURE__ */ jsx19("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx19(
14573
14909
  "img",
14574
14910
  {
14575
14911
  src: img.url,
@@ -14578,7 +14914,7 @@ function GalleryBlock({ block }) {
14578
14914
  className: "h-full w-full object-cover"
14579
14915
  }
14580
14916
  ) }),
14581
- img.caption && /* @__PURE__ */ jsx18("figcaption", { className: "text-sm opacity-80", children: img.caption })
14917
+ img.caption && /* @__PURE__ */ jsx19("figcaption", { className: "text-sm opacity-80", children: img.caption })
14582
14918
  ] }, `${img.url}-${i}`))
14583
14919
  }
14584
14920
  );
@@ -14588,13 +14924,13 @@ function EmbedCard({
14588
14924
  headingLevel,
14589
14925
  embedHref
14590
14926
  }) {
14591
- return /* @__PURE__ */ jsxs17(
14927
+ return /* @__PURE__ */ jsxs18(
14592
14928
  "a",
14593
14929
  {
14594
14930
  href: embedHref(resolved),
14595
14931
  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",
14596
14932
  children: [
14597
- resolved.coverImageUrl && /* @__PURE__ */ jsx18("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ jsx18(
14933
+ resolved.coverImageUrl && /* @__PURE__ */ jsx19("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ jsx19(
14598
14934
  "img",
14599
14935
  {
14600
14936
  src: resolved.coverImageUrl,
@@ -14603,24 +14939,51 @@ function EmbedCard({
14603
14939
  className: "h-full w-full object-cover"
14604
14940
  }
14605
14941
  ) }),
14606
- /* @__PURE__ */ jsxs17("div", { className: "space-y-1 p-4", children: [
14607
- /* @__PURE__ */ jsx18(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
14608
- resolved.role && /* @__PURE__ */ jsx18("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
14609
- resolved.excerpt && /* @__PURE__ */ jsx18("p", { className: "text-muted-foreground", children: resolved.excerpt })
14942
+ /* @__PURE__ */ jsxs18("div", { className: "space-y-1 p-4", children: [
14943
+ /* @__PURE__ */ jsx19(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
14944
+ resolved.role && /* @__PURE__ */ jsx19("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
14945
+ resolved.excerpt && /* @__PURE__ */ jsx19("p", { className: "text-muted-foreground", children: resolved.excerpt })
14610
14946
  ] })
14611
14947
  ]
14612
14948
  }
14613
14949
  );
14614
14950
  }
14615
14951
  function PageEmbedBlock({ block, headingLevel, embedHref }) {
14616
- return /* @__PURE__ */ jsx18(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14952
+ return /* @__PURE__ */ jsx19(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14617
14953
  }
14618
14954
  function ProfileEmbedBlock({
14619
14955
  block,
14620
14956
  headingLevel,
14621
14957
  embedHref
14622
14958
  }) {
14623
- return /* @__PURE__ */ jsx18(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14959
+ return /* @__PURE__ */ jsx19(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14960
+ }
14961
+ function BeforeAfterBlock({ block }) {
14962
+ const { pairs, showCaption, caption } = block.data;
14963
+ return /* @__PURE__ */ jsx19(BeforeAfterPairs, { pairs, showCaption, caption });
14964
+ }
14965
+ function ChipsBlock({ block }) {
14966
+ return /* @__PURE__ */ jsx19(ChipList, { items: block.data.items });
14967
+ }
14968
+ function ImageTextBlock({ block, headingLevel, headingId }) {
14969
+ const { kicker, imageUrl, alt, imageSide, mobileOrder, html: html5 } = block.data;
14970
+ return /* @__PURE__ */ jsx19(
14971
+ ImageTextSplit,
14972
+ {
14973
+ imageUrl,
14974
+ alt,
14975
+ imageSide,
14976
+ mobileOrder,
14977
+ html: html5,
14978
+ kicker,
14979
+ heading: block.heading,
14980
+ headingLevel,
14981
+ headingId
14982
+ }
14983
+ );
14984
+ }
14985
+ function IconCardsBlock({ block, headingLevel }) {
14986
+ return /* @__PURE__ */ jsx19(IconCardGrid, { items: block.data.items, intro: block.data.intro, headingLevel });
14624
14987
  }
14625
14988
  var DEFAULT_RENDERERS = {
14626
14989
  hero: HeroBlock,
@@ -14632,8 +14995,25 @@ var DEFAULT_RENDERERS = {
14632
14995
  feature_list: FeatureListBlock,
14633
14996
  gallery: GalleryBlock,
14634
14997
  page_embed: PageEmbedBlock,
14635
- profile_embed: ProfileEmbedBlock
14998
+ profile_embed: ProfileEmbedBlock,
14999
+ before_after: BeforeAfterBlock,
15000
+ chips: ChipsBlock,
15001
+ icon_cards: IconCardsBlock,
15002
+ image_text: ImageTextBlock
14636
15003
  };
15004
+ var KICKER_TYPES = /* @__PURE__ */ new Set([
15005
+ "before_after",
15006
+ "chips",
15007
+ "icon_cards"
15008
+ ]);
15009
+ var OWN_HEADING_TYPES = /* @__PURE__ */ new Set([
15010
+ "image_text"
15011
+ ]);
15012
+ function kickerOf(type, block) {
15013
+ if (!KICKER_TYPES.has(type)) return null;
15014
+ const kicker = block.data.kicker;
15015
+ return typeof kicker === "string" && kicker.trim() !== "" ? kicker : null;
15016
+ }
14637
15017
  var EMBED_TYPES = /* @__PURE__ */ new Set([
14638
15018
  "page_embed",
14639
15019
  "profile_embed"
@@ -14677,14 +15057,14 @@ function toIdFragment(value) {
14677
15057
  function SectionCta2({ cta }) {
14678
15058
  if (!hasUsableCta(cta)) return null;
14679
15059
  const variant = toButtonVariant(cta.variant);
14680
- return /* @__PURE__ */ jsx18("div", { className: "pt-2", children: /* @__PURE__ */ jsx18(
15060
+ return /* @__PURE__ */ jsx19("div", { className: "pt-2", children: /* @__PURE__ */ jsx19(
14681
15061
  "a",
14682
15062
  {
14683
15063
  href: cta.url,
14684
15064
  "data-slot": "button",
14685
15065
  "data-variant": variant,
14686
15066
  "data-size": "default",
14687
- className: cn12(buttonVariants2({ variant, size: "default" })),
15067
+ className: cn13(buttonVariants2({ variant, size: "default" })),
14688
15068
  ...cta.isExternal ? { target: "_blank", rel: "noopener noreferrer" } : {},
14689
15069
  children: cta.label
14690
15070
  }
@@ -14709,18 +15089,29 @@ function PageBlocks({
14709
15089
  const Renderer = components?.[type] ?? DEFAULT_RENDERERS[type];
14710
15090
  const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
14711
15091
  const background = block.backgroundColor;
15092
+ const kicker = kickerOf(type, block);
15093
+ const ownsHeading = OWN_HEADING_TYPES.has(type);
14712
15094
  return [
14713
- /* @__PURE__ */ jsxs17(
15095
+ /* @__PURE__ */ jsxs18(
14714
15096
  "section",
14715
15097
  {
14716
15098
  "data-slot": "page-block",
14717
15099
  "data-block-type": type,
14718
15100
  "aria-labelledby": headingId,
14719
15101
  style: surfaceStyle(background),
14720
- className: cn12("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
15102
+ className: cn13("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
14721
15103
  children: [
14722
- block.heading && /* @__PURE__ */ jsx18(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx18("span", { id: headingId, children: block.heading }) }),
14723
- /* @__PURE__ */ jsx18(
15104
+ kicker && /* @__PURE__ */ jsx19("p", { "data-slot": "page-block-kicker", className: cn13("-mb-4", KICKER_CLASS_NAME), children: kicker }),
15105
+ block.heading && !ownsHeading && /* @__PURE__ */ jsx19(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx19("span", { id: headingId, children: block.heading }) }),
15106
+ ownsHeading ? /* @__PURE__ */ jsx19(
15107
+ Renderer,
15108
+ {
15109
+ block,
15110
+ headingLevel,
15111
+ embedHref,
15112
+ headingId
15113
+ }
15114
+ ) : /* @__PURE__ */ jsx19(
14724
15115
  Renderer,
14725
15116
  {
14726
15117
  block,
@@ -14728,7 +15119,7 @@ function PageBlocks({
14728
15119
  embedHref
14729
15120
  }
14730
15121
  ),
14731
- /* @__PURE__ */ jsx18(SectionCta2, { cta: block.cta })
15122
+ /* @__PURE__ */ jsx19(SectionCta2, { cta: block.cta })
14732
15123
  ]
14733
15124
  },
14734
15125
  block.id
@@ -14736,12 +15127,12 @@ function PageBlocks({
14736
15127
  ];
14737
15128
  });
14738
15129
  if (sections.length === 0) return null;
14739
- return /* @__PURE__ */ jsx18("div", { className: cn12("space-y-12", className), "data-slot": "page-blocks", children: sections });
15130
+ return /* @__PURE__ */ jsx19("div", { className: cn13("space-y-12", className), "data-slot": "page-blocks", children: sections });
14740
15131
  }
14741
15132
 
14742
15133
  // src/components/shop-filters.tsx
14743
- import { cn as cn13 } from "@reblu/site-ui/utils";
14744
- import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
15134
+ import { cn as cn14 } from "@reblu/site-ui/utils";
15135
+ import { jsx as jsx20, jsxs as jsxs19 } from "react/jsx-runtime";
14745
15136
  var DEFAULT_SHOP_PRICE_BANDS = [
14746
15137
  { max: 2500 },
14747
15138
  { min: 2500, max: 5e3 },
@@ -14785,7 +15176,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
14785
15176
  return "";
14786
15177
  }
14787
15178
  function OptionLink({ href, active, label, onActivate }) {
14788
- return /* @__PURE__ */ jsx19(
15179
+ return /* @__PURE__ */ jsx20(
14789
15180
  "a",
14790
15181
  {
14791
15182
  href,
@@ -14794,7 +15185,7 @@ function OptionLink({ href, active, label, onActivate }) {
14794
15185
  event.preventDefault();
14795
15186
  onActivate();
14796
15187
  } : void 0,
14797
- className: cn13(
15188
+ className: cn14(
14798
15189
  "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",
14799
15190
  active ? "border-transparent bg-primary text-primary-foreground" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground"
14800
15191
  ),
@@ -14803,9 +15194,9 @@ function OptionLink({ href, active, label, onActivate }) {
14803
15194
  );
14804
15195
  }
14805
15196
  function FilterFieldset({ legend, children: children2 }) {
14806
- return /* @__PURE__ */ jsxs18("fieldset", { className: "space-y-2", children: [
14807
- /* @__PURE__ */ jsx19("legend", { className: "text-sm font-medium text-foreground", children: legend }),
14808
- /* @__PURE__ */ jsx19("div", { className: "flex flex-wrap gap-2", children: children2 })
15197
+ return /* @__PURE__ */ jsxs19("fieldset", { className: "space-y-2", children: [
15198
+ /* @__PURE__ */ jsx20("legend", { className: "text-sm font-medium text-foreground", children: legend }),
15199
+ /* @__PURE__ */ jsx20("div", { className: "flex flex-wrap gap-2", children: children2 })
14809
15200
  ] });
14810
15201
  }
14811
15202
  function ShopFilters({
@@ -14828,11 +15219,11 @@ function ShopFilters({
14828
15219
  if (!shouldRenderShopFilters(facets, active)) {
14829
15220
  return null;
14830
15221
  }
14831
- return /* @__PURE__ */ jsxs18("div", { className: cn13("space-y-6", className), "data-slot": "shop-filters", children: [
15222
+ return /* @__PURE__ */ jsxs19("div", { className: cn14("space-y-6", className), "data-slot": "shop-filters", children: [
14832
15223
  visibleTaxonomies.map((axis) => {
14833
15224
  const activeSlug = active.taxonomy?.[axis.key];
14834
- return /* @__PURE__ */ jsxs18(FilterFieldset, { legend: axis.label, children: [
14835
- /* @__PURE__ */ jsx19(
15225
+ return /* @__PURE__ */ jsxs19(FilterFieldset, { legend: axis.label, children: [
15226
+ /* @__PURE__ */ jsx20(
14836
15227
  OptionLink,
14837
15228
  {
14838
15229
  href: hrefs.taxonomy(axis.key, void 0),
@@ -14847,7 +15238,7 @@ function ShopFilters({
14847
15238
  ),
14848
15239
  axis.terms.map((term) => {
14849
15240
  const isActive = activeSlug === term.slug;
14850
- return /* @__PURE__ */ jsx19(
15241
+ return /* @__PURE__ */ jsx20(
14851
15242
  OptionLink,
14852
15243
  {
14853
15244
  href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
@@ -14867,9 +15258,9 @@ function ShopFilters({
14867
15258
  }),
14868
15259
  visibleAttributes.map((attr) => {
14869
15260
  const activeValues = toValueArray(active.attr?.[attr.key]);
14870
- return /* @__PURE__ */ jsx19(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
15261
+ return /* @__PURE__ */ jsx20(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
14871
15262
  const isActive = activeValues.includes(opt.value);
14872
- return /* @__PURE__ */ jsx19(
15263
+ return /* @__PURE__ */ jsx20(
14873
15264
  OptionLink,
14874
15265
  {
14875
15266
  href: hrefs.attr(attr.key, opt.value),
@@ -14887,11 +15278,11 @@ function ShopFilters({
14887
15278
  );
14888
15279
  }) }, attr.key);
14889
15280
  }),
14890
- showPriceGroup && /* @__PURE__ */ jsx19(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
15281
+ showPriceGroup && /* @__PURE__ */ jsx20(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
14891
15282
  const isActive = active.priceMin === band.min && active.priceMax === band.max;
14892
15283
  const nextMin = isActive ? void 0 : band.min;
14893
15284
  const nextMax = isActive ? void 0 : band.max;
14894
- return /* @__PURE__ */ jsx19(
15285
+ return /* @__PURE__ */ jsx20(
14895
15286
  OptionLink,
14896
15287
  {
14897
15288
  href: hrefs.price(nextMin, nextMax),
@@ -14902,7 +15293,7 @@ function ShopFilters({
14902
15293
  i
14903
15294
  );
14904
15295
  }) }),
14905
- hasOnSale && /* @__PURE__ */ jsx19(
15296
+ hasOnSale && /* @__PURE__ */ jsx20(
14906
15297
  OptionLink,
14907
15298
  {
14908
15299
  href: hrefs.onSale(!active.onSale),
@@ -14911,7 +15302,7 @@ function ShopFilters({
14911
15302
  onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
14912
15303
  }
14913
15304
  ),
14914
- /* @__PURE__ */ jsx19(
15305
+ /* @__PURE__ */ jsx20(
14915
15306
  "a",
14916
15307
  {
14917
15308
  href: hrefs.clearAll(),
@@ -14927,8 +15318,8 @@ function ShopFilters({
14927
15318
  }
14928
15319
 
14929
15320
  // src/components/course-catalog-filters.tsx
14930
- import { cn as cn14 } from "@reblu/site-ui/utils";
14931
- import { jsx as jsx20, jsxs as jsxs19 } from "react/jsx-runtime";
15321
+ import { cn as cn15 } from "@reblu/site-ui/utils";
15322
+ import { jsx as jsx21, jsxs as jsxs20 } from "react/jsx-runtime";
14932
15323
  var DEFAULT_COURSE_PRICE_BANDS = [
14933
15324
  { max: 5e3 },
14934
15325
  { min: 5e3, max: 15e3 },
@@ -14981,9 +15372,9 @@ function CourseCatalogFilters({
14981
15372
  const showPrice = enabled.price !== false;
14982
15373
  const isFree = Boolean(active.free);
14983
15374
  if (!showCategories && !showInstructors && !showPrice) return null;
14984
- return /* @__PURE__ */ jsxs19("div", { className: cn14("space-y-6", className), "data-slot": "course-catalog-filters", children: [
14985
- showCategories && /* @__PURE__ */ jsxs19(FilterFieldset, { legend: t.category, children: [
14986
- /* @__PURE__ */ jsx20(
15375
+ return /* @__PURE__ */ jsxs20("div", { className: cn15("space-y-6", className), "data-slot": "course-catalog-filters", children: [
15376
+ showCategories && /* @__PURE__ */ jsxs20(FilterFieldset, { legend: t.category, children: [
15377
+ /* @__PURE__ */ jsx21(
14987
15378
  OptionLink,
14988
15379
  {
14989
15380
  href: categoryHref(void 0),
@@ -14995,7 +15386,7 @@ function CourseCatalogFilters({
14995
15386
  sortedCategories.map((category) => {
14996
15387
  const isActive = active.category === category.slug;
14997
15388
  const next2 = isActive ? void 0 : category.slug;
14998
- return /* @__PURE__ */ jsx20(
15389
+ return /* @__PURE__ */ jsx21(
14999
15390
  OptionLink,
15000
15391
  {
15001
15392
  href: categoryHref(next2),
@@ -15007,8 +15398,8 @@ function CourseCatalogFilters({
15007
15398
  );
15008
15399
  })
15009
15400
  ] }),
15010
- showInstructors && /* @__PURE__ */ jsxs19(FilterFieldset, { legend: t.instructor, children: [
15011
- /* @__PURE__ */ jsx20(
15401
+ showInstructors && /* @__PURE__ */ jsxs20(FilterFieldset, { legend: t.instructor, children: [
15402
+ /* @__PURE__ */ jsx21(
15012
15403
  OptionLink,
15013
15404
  {
15014
15405
  href: hrefs.instructor(void 0),
@@ -15020,7 +15411,7 @@ function CourseCatalogFilters({
15020
15411
  named.map((instructor) => {
15021
15412
  const isActive = active.instructor === instructor.id;
15022
15413
  const next2 = isActive ? void 0 : instructor.id;
15023
- return /* @__PURE__ */ jsx20(
15414
+ return /* @__PURE__ */ jsx21(
15024
15415
  OptionLink,
15025
15416
  {
15026
15417
  href: hrefs.instructor(next2),
@@ -15032,8 +15423,8 @@ function CourseCatalogFilters({
15032
15423
  );
15033
15424
  })
15034
15425
  ] }),
15035
- showPrice && /* @__PURE__ */ jsxs19(FilterFieldset, { legend: t.price, children: [
15036
- /* @__PURE__ */ jsx20(
15426
+ showPrice && /* @__PURE__ */ jsxs20(FilterFieldset, { legend: t.price, children: [
15427
+ /* @__PURE__ */ jsx21(
15037
15428
  OptionLink,
15038
15429
  {
15039
15430
  href: hrefs.free(!isFree),
@@ -15048,7 +15439,7 @@ function CourseCatalogFilters({
15048
15439
  const isActive = !isFree && active.priceMin === band.min && active.priceMax === band.max;
15049
15440
  const nextMin = isActive ? void 0 : band.min;
15050
15441
  const nextMax = isActive ? void 0 : band.max;
15051
- return /* @__PURE__ */ jsx20(
15442
+ return /* @__PURE__ */ jsx21(
15052
15443
  OptionLink,
15053
15444
  {
15054
15445
  href: hrefs.price(nextMin, nextMax),
@@ -15060,7 +15451,7 @@ function CourseCatalogFilters({
15060
15451
  );
15061
15452
  })
15062
15453
  ] }),
15063
- /* @__PURE__ */ jsx20(
15454
+ /* @__PURE__ */ jsx21(
15064
15455
  "a",
15065
15456
  {
15066
15457
  href: hrefs.clearAll(),
@@ -15082,8 +15473,8 @@ function CourseCatalogFilters({
15082
15473
  }
15083
15474
 
15084
15475
  // src/components/cart-line-list.tsx
15085
- import { cn as cn15 } from "@reblu/site-ui/utils";
15086
- import { jsx as jsx21, jsxs as jsxs20 } from "react/jsx-runtime";
15476
+ import { cn as cn16 } from "@reblu/site-ui/utils";
15477
+ import { jsx as jsx22, jsxs as jsxs21 } from "react/jsx-runtime";
15087
15478
  var DEFAULT_LABELS2 = {
15088
15479
  quantityLabel: "Cantidad",
15089
15480
  decrease: "Reducir cantidad",
@@ -15096,20 +15487,20 @@ var DEFAULT_LABELS2 = {
15096
15487
  function CartLineIncludes({ entries, note, className }) {
15097
15488
  const hasNote = note != null && note !== false && note !== "";
15098
15489
  if (entries.length === 0 && !hasNote) return null;
15099
- return /* @__PURE__ */ jsxs20(
15490
+ return /* @__PURE__ */ jsxs21(
15100
15491
  "div",
15101
15492
  {
15102
- className: cn15("mt-2 space-y-2 rounded-lg bg-muted px-4 py-3 text-sm", className),
15493
+ className: cn16("mt-2 space-y-2 rounded-lg bg-muted px-4 py-3 text-sm", className),
15103
15494
  "data-slot": "cart-line-includes",
15104
15495
  children: [
15105
- entries.length > 0 && /* @__PURE__ */ jsx21("dl", { className: "grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1.5", children: entries.map((entry, idx) => (
15496
+ entries.length > 0 && /* @__PURE__ */ jsx22("dl", { className: "grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1.5", children: entries.map((entry, idx) => (
15106
15497
  // eslint-disable-next-line react/no-array-index-key -- entries are positional, SITE-built rows
15107
- /* @__PURE__ */ jsxs20("div", { className: "contents", children: [
15108
- /* @__PURE__ */ jsx21("dt", { className: "font-semibold text-muted-foreground", children: entry.label }),
15109
- /* @__PURE__ */ jsx21("dd", { className: "m-0", children: entry.value })
15498
+ /* @__PURE__ */ jsxs21("div", { className: "contents", children: [
15499
+ /* @__PURE__ */ jsx22("dt", { className: "font-semibold text-muted-foreground", children: entry.label }),
15500
+ /* @__PURE__ */ jsx22("dd", { className: "m-0", children: entry.value })
15110
15501
  ] }, idx)
15111
15502
  )) }),
15112
- hasNote && /* @__PURE__ */ jsx21("p", { className: "text-muted-foreground", children: note })
15503
+ hasNote && /* @__PURE__ */ jsx22("p", { className: "text-muted-foreground", children: note })
15113
15504
  ]
15114
15505
  }
15115
15506
  );
@@ -15138,9 +15529,9 @@ function CartLineList({
15138
15529
  }) {
15139
15530
  const t = { ...DEFAULT_LABELS2, ...labels };
15140
15531
  const noticeContent = notice === true ? t.cancelledNotice : notice;
15141
- return /* @__PURE__ */ jsxs20("div", { className: cn15("space-y-4", className), "data-slot": "cart-line-list", children: [
15142
- /* @__PURE__ */ jsx21("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
15143
- noticeContent != null && noticeContent !== false && /* @__PURE__ */ jsx21(
15532
+ return /* @__PURE__ */ jsxs21("div", { className: cn16("space-y-4", className), "data-slot": "cart-line-list", children: [
15533
+ /* @__PURE__ */ jsx22("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
15534
+ noticeContent != null && noticeContent !== false && /* @__PURE__ */ jsx22(
15144
15535
  "div",
15145
15536
  {
15146
15537
  role: "status",
@@ -15149,34 +15540,34 @@ function CartLineList({
15149
15540
  children: noticeContent
15150
15541
  }
15151
15542
  ),
15152
- /* @__PURE__ */ jsx21("ul", { className: "space-y-4", children: items.map((item) => {
15543
+ /* @__PURE__ */ jsx22("ul", { className: "space-y-4", children: items.map((item) => {
15153
15544
  const maxQty = item.maxStock ?? Infinity;
15154
15545
  const atMax = item.quantity >= maxQty;
15155
15546
  const atMin = item.quantity <= 1;
15156
15547
  const message = lineMessage?.(item);
15157
15548
  const includes = lineIncludes?.(item);
15158
- return /* @__PURE__ */ jsxs20(
15549
+ return /* @__PURE__ */ jsxs21(
15159
15550
  "li",
15160
15551
  {
15161
15552
  className: "flex gap-4 rounded-xl border border-border bg-card p-4",
15162
15553
  children: [
15163
- /* @__PURE__ */ jsx21("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ jsx21("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
15164
- /* @__PURE__ */ jsxs20("div", { className: "min-w-0 flex-1", children: [
15165
- /* @__PURE__ */ jsx21("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
15166
- item.variantName && /* @__PURE__ */ jsx21("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
15167
- /* @__PURE__ */ jsxs20("p", { className: "mt-1 text-sm text-muted-foreground", children: [
15554
+ /* @__PURE__ */ jsx22("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ jsx22("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
15555
+ /* @__PURE__ */ jsxs21("div", { className: "min-w-0 flex-1", children: [
15556
+ /* @__PURE__ */ jsx22("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
15557
+ item.variantName && /* @__PURE__ */ jsx22("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
15558
+ /* @__PURE__ */ jsxs21("p", { className: "mt-1 text-sm text-muted-foreground", children: [
15168
15559
  formatPrice(item.unitPrice, currencyCode, locale),
15169
15560
  " ",
15170
15561
  t.unitPriceSuffix
15171
15562
  ] }),
15172
- /* @__PURE__ */ jsxs20(
15563
+ /* @__PURE__ */ jsxs21(
15173
15564
  "div",
15174
15565
  {
15175
15566
  role: "group",
15176
15567
  "aria-label": t.quantityLabel,
15177
15568
  className: "mt-3 flex items-center gap-3",
15178
15569
  children: [
15179
- /* @__PURE__ */ jsx21(
15570
+ /* @__PURE__ */ jsx22(
15180
15571
  "button",
15181
15572
  {
15182
15573
  type: "button",
@@ -15187,8 +15578,8 @@ function CartLineList({
15187
15578
  children: "\u2212"
15188
15579
  }
15189
15580
  ),
15190
- /* @__PURE__ */ jsx21("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
15191
- /* @__PURE__ */ jsx21(
15581
+ /* @__PURE__ */ jsx22("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
15582
+ /* @__PURE__ */ jsx22(
15192
15583
  "button",
15193
15584
  {
15194
15585
  type: "button",
@@ -15199,7 +15590,7 @@ function CartLineList({
15199
15590
  children: "+"
15200
15591
  }
15201
15592
  ),
15202
- onRemove && /* @__PURE__ */ jsx21(
15593
+ onRemove && /* @__PURE__ */ jsx22(
15203
15594
  "button",
15204
15595
  {
15205
15596
  type: "button",
@@ -15212,7 +15603,7 @@ function CartLineList({
15212
15603
  ]
15213
15604
  }
15214
15605
  ),
15215
- message != null && message !== false && /* @__PURE__ */ jsx21(
15606
+ message != null && message !== false && /* @__PURE__ */ jsx22(
15216
15607
  "p",
15217
15608
  {
15218
15609
  className: "mt-2 text-sm text-destructive",
@@ -15220,12 +15611,12 @@ function CartLineList({
15220
15611
  children: message
15221
15612
  }
15222
15613
  ),
15223
- includes != null && includes !== false && /* @__PURE__ */ jsxs20("details", { className: "mt-2", "data-slot": "cart-line-list-includes", children: [
15224
- /* @__PURE__ */ jsx21("summary", { className: "cursor-pointer text-sm font-semibold text-primary", children: t.includesSummary }),
15614
+ includes != null && includes !== false && /* @__PURE__ */ jsxs21("details", { className: "mt-2", "data-slot": "cart-line-list-includes", children: [
15615
+ /* @__PURE__ */ jsx22("summary", { className: "cursor-pointer text-sm font-semibold text-primary", children: t.includesSummary }),
15225
15616
  includes
15226
15617
  ] })
15227
15618
  ] }),
15228
- /* @__PURE__ */ jsx21("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ jsx21("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
15619
+ /* @__PURE__ */ jsx22("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ jsx22("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
15229
15620
  ]
15230
15621
  },
15231
15622
  lineKey(item.productId, item.variantId)
@@ -15235,8 +15626,8 @@ function CartLineList({
15235
15626
  }
15236
15627
 
15237
15628
  // src/components/cart-summary.tsx
15238
- import { cn as cn16 } from "@reblu/site-ui/utils";
15239
- import { jsx as jsx22, jsxs as jsxs21 } from "react/jsx-runtime";
15629
+ import { cn as cn17 } from "@reblu/site-ui/utils";
15630
+ import { jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
15240
15631
  var DEFAULT_LABELS3 = {
15241
15632
  subtotal: "Subtotal",
15242
15633
  discountPrefix: "Descuento",
@@ -15266,37 +15657,37 @@ function CartSummary({
15266
15657
  const hasDiscount = Boolean(discountAmount && discountAmount > 0);
15267
15658
  const noticeContent = notice === true ? t.cancelledNotice : notice;
15268
15659
  const hasNotice = noticeContent != null && noticeContent !== false;
15269
- const breakdown = /* @__PURE__ */ jsxs21(
15660
+ const breakdown = /* @__PURE__ */ jsxs22(
15270
15661
  "dl",
15271
15662
  {
15272
- className: cn16("space-y-2 text-sm", !hasNotice && className),
15663
+ className: cn17("space-y-2 text-sm", !hasNotice && className),
15273
15664
  "data-slot": "cart-summary",
15274
15665
  children: [
15275
- /* @__PURE__ */ jsxs21("div", { className: "flex justify-between text-muted-foreground", children: [
15276
- /* @__PURE__ */ jsx22("dt", { children: t.subtotal }),
15277
- /* @__PURE__ */ jsx22("dd", { children: formatPrice(subtotal, currencyCode, locale) })
15666
+ /* @__PURE__ */ jsxs22("div", { className: "flex justify-between text-muted-foreground", children: [
15667
+ /* @__PURE__ */ jsx23("dt", { children: t.subtotal }),
15668
+ /* @__PURE__ */ jsx23("dd", { children: formatPrice(subtotal, currencyCode, locale) })
15278
15669
  ] }),
15279
- hasDiscount && /* @__PURE__ */ jsxs21("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
15280
- /* @__PURE__ */ jsx22("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
15281
- /* @__PURE__ */ jsxs21("dd", { children: [
15670
+ hasDiscount && /* @__PURE__ */ jsxs22("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
15671
+ /* @__PURE__ */ jsx23("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
15672
+ /* @__PURE__ */ jsxs22("dd", { children: [
15282
15673
  "-",
15283
15674
  formatPrice(discountAmount, currencyCode, locale)
15284
15675
  ] })
15285
15676
  ] }),
15286
- shippingEnabled && /* @__PURE__ */ jsxs21("div", { className: "flex justify-between text-muted-foreground", children: [
15287
- /* @__PURE__ */ jsx22("dt", { children: t.shipping }),
15288
- /* @__PURE__ */ jsx22("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
15677
+ shippingEnabled && /* @__PURE__ */ jsxs22("div", { className: "flex justify-between text-muted-foreground", children: [
15678
+ /* @__PURE__ */ jsx23("dt", { children: t.shipping }),
15679
+ /* @__PURE__ */ jsx23("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
15289
15680
  ] }),
15290
- /* @__PURE__ */ jsxs21("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
15291
- /* @__PURE__ */ jsx22("dt", { children: t.total }),
15292
- /* @__PURE__ */ jsx22("dd", { children: formatPrice(total, currencyCode, locale) })
15681
+ /* @__PURE__ */ jsxs22("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
15682
+ /* @__PURE__ */ jsx23("dt", { children: t.total }),
15683
+ /* @__PURE__ */ jsx23("dd", { children: formatPrice(total, currencyCode, locale) })
15293
15684
  ] })
15294
15685
  ]
15295
15686
  }
15296
15687
  );
15297
15688
  if (!hasNotice) return breakdown;
15298
- return /* @__PURE__ */ jsxs21("div", { className: cn16("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
15299
- /* @__PURE__ */ jsx22(
15689
+ return /* @__PURE__ */ jsxs22("div", { className: cn17("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
15690
+ /* @__PURE__ */ jsx23(
15300
15691
  "div",
15301
15692
  {
15302
15693
  role: "status",
@@ -15310,8 +15701,8 @@ function CartSummary({
15310
15701
  }
15311
15702
 
15312
15703
  // src/components/cart-adjustments-notice.tsx
15313
- import { cn as cn17 } from "@reblu/site-ui/utils";
15314
- import { jsx as jsx23 } from "react/jsx-runtime";
15704
+ import { cn as cn18 } from "@reblu/site-ui/utils";
15705
+ import { jsx as jsx24 } from "react/jsx-runtime";
15315
15706
  var DEFAULT_LABELS4 = {
15316
15707
  removed: (names) => names.length === 1 ? `Hemos quitado del carrito: ${names[0]}, ya no est\xE1 disponible.` : `Hemos quitado del carrito: ${names.join(", ")}, ya no est\xE1n disponibles.`,
15317
15708
  quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
@@ -15345,20 +15736,20 @@ function CartAdjustmentsNotice({
15345
15736
  );
15346
15737
  }
15347
15738
  if (messages.length === 0) return null;
15348
- return /* @__PURE__ */ jsx23(
15739
+ return /* @__PURE__ */ jsx24(
15349
15740
  "div",
15350
15741
  {
15351
15742
  role: "status",
15352
- className: cn17("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
15743
+ className: cn18("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
15353
15744
  "data-slot": "cart-adjustments-notice",
15354
- children: messages.length === 1 ? /* @__PURE__ */ jsx23("p", { children: messages[0] }) : /* @__PURE__ */ jsx23("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ jsx23("li", { children: message }, index)) })
15745
+ children: messages.length === 1 ? /* @__PURE__ */ jsx24("p", { children: messages[0] }) : /* @__PURE__ */ jsx24("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ jsx24("li", { children: message }, index)) })
15355
15746
  }
15356
15747
  );
15357
15748
  }
15358
15749
 
15359
15750
  // src/components/added-to-cart-toast.tsx
15360
- import { cn as cn18 } from "@reblu/site-ui/utils";
15361
- import { jsx as jsx24, jsxs as jsxs22 } from "react/jsx-runtime";
15751
+ import { cn as cn19 } from "@reblu/site-ui/utils";
15752
+ import { jsx as jsx25, jsxs as jsxs23 } from "react/jsx-runtime";
15362
15753
  var DEFAULT_LABELS5 = {
15363
15754
  success: "A\xF1adido al carrito",
15364
15755
  error: "No se pudo a\xF1adir al carrito",
@@ -15378,12 +15769,12 @@ function AddedToCartToast({
15378
15769
  const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
15379
15770
  const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
15380
15771
  const variant = status === "success" ? "success" : "error";
15381
- return /* @__PURE__ */ jsxs22(
15772
+ return /* @__PURE__ */ jsxs23(
15382
15773
  "div",
15383
15774
  {
15384
15775
  "data-slot": "added-to-cart-toast",
15385
15776
  "data-variant": variant,
15386
- className: cn18(
15777
+ className: cn19(
15387
15778
  "flex items-center gap-3 rounded-xl border border-border bg-card p-3 text-sm shadow-lg",
15388
15779
  variant === "success" && "border-green-600/30 dark:border-green-400/30",
15389
15780
  variant === "error" && "border-destructive/30",
@@ -15391,20 +15782,20 @@ function AddedToCartToast({
15391
15782
  ),
15392
15783
  children: [
15393
15784
  hasThumbnail && // eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
15394
- /* @__PURE__ */ jsx24("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
15395
- /* @__PURE__ */ jsxs22("div", { className: "min-w-0 flex-1", children: [
15396
- /* @__PURE__ */ jsx24("p", { className: "truncate font-semibold text-foreground", children: productName }),
15397
- /* @__PURE__ */ jsx24("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
15785
+ /* @__PURE__ */ jsx25("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
15786
+ /* @__PURE__ */ jsxs23("div", { className: "min-w-0 flex-1", children: [
15787
+ /* @__PURE__ */ jsx25("p", { className: "truncate font-semibold text-foreground", children: productName }),
15788
+ /* @__PURE__ */ jsx25("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
15398
15789
  ] }),
15399
- /* @__PURE__ */ jsx24("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsx24("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
15790
+ /* @__PURE__ */ jsx25("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsx25("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
15400
15791
  ]
15401
15792
  }
15402
15793
  );
15403
15794
  }
15404
15795
 
15405
15796
  // src/components/checkout-login-prompt.tsx
15406
- import { cn as cn19 } from "@reblu/site-ui/utils";
15407
- import { Fragment as Fragment4, jsx as jsx25, jsxs as jsxs23 } from "react/jsx-runtime";
15797
+ import { cn as cn20 } from "@reblu/site-ui/utils";
15798
+ import { Fragment as Fragment4, jsx as jsx26, jsxs as jsxs24 } from "react/jsx-runtime";
15408
15799
  var DEFAULT_LABELS6 = {
15409
15800
  title: "Identificaci\xF3n",
15410
15801
  description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
@@ -15431,26 +15822,26 @@ function CheckoutLoginPrompt({
15431
15822
  if (!open) return null;
15432
15823
  const t = { ...DEFAULT_LABELS6, ...labels };
15433
15824
  const isValidEmail = EMAIL_PATTERN.test(email.trim());
15434
- return /* @__PURE__ */ jsxs23(Fragment4, { children: [
15435
- /* @__PURE__ */ jsx25("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
15436
- /* @__PURE__ */ jsxs23(
15825
+ return /* @__PURE__ */ jsxs24(Fragment4, { children: [
15826
+ /* @__PURE__ */ jsx26("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
15827
+ /* @__PURE__ */ jsxs24(
15437
15828
  "div",
15438
15829
  {
15439
15830
  role: "dialog",
15440
15831
  "aria-modal": "true",
15441
15832
  "aria-labelledby": "checkout-login-prompt-title",
15442
15833
  "data-slot": "checkout-login-prompt",
15443
- className: cn19(
15834
+ className: cn20(
15444
15835
  "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",
15445
15836
  className
15446
15837
  ),
15447
15838
  children: [
15448
- /* @__PURE__ */ jsxs23("div", { className: "flex items-start justify-between gap-3", children: [
15449
- /* @__PURE__ */ jsxs23("div", { children: [
15450
- /* @__PURE__ */ jsx25("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
15451
- /* @__PURE__ */ jsx25("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
15839
+ /* @__PURE__ */ jsxs24("div", { className: "flex items-start justify-between gap-3", children: [
15840
+ /* @__PURE__ */ jsxs24("div", { children: [
15841
+ /* @__PURE__ */ jsx26("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
15842
+ /* @__PURE__ */ jsx26("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
15452
15843
  ] }),
15453
- /* @__PURE__ */ jsx25(
15844
+ /* @__PURE__ */ jsx26(
15454
15845
  "button",
15455
15846
  {
15456
15847
  type: "button",
@@ -15461,9 +15852,9 @@ function CheckoutLoginPrompt({
15461
15852
  }
15462
15853
  )
15463
15854
  ] }),
15464
- /* @__PURE__ */ jsxs23("div", { className: "space-y-2", children: [
15465
- /* @__PURE__ */ jsx25("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
15466
- /* @__PURE__ */ jsx25(
15855
+ /* @__PURE__ */ jsxs24("div", { className: "space-y-2", children: [
15856
+ /* @__PURE__ */ jsx26("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
15857
+ /* @__PURE__ */ jsx26(
15467
15858
  "input",
15468
15859
  {
15469
15860
  id: "checkout-login-prompt-email",
@@ -15472,29 +15863,29 @@ function CheckoutLoginPrompt({
15472
15863
  value: email,
15473
15864
  onChange: (e) => onEmailChange(e.target.value),
15474
15865
  placeholder: t.emailPlaceholder,
15475
- className: cn19(
15866
+ className: cn20(
15476
15867
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
15477
15868
  error ? "border-destructive" : "border-border focus:border-primary"
15478
15869
  )
15479
15870
  }
15480
15871
  ),
15481
- error && /* @__PURE__ */ jsx25("p", { className: "text-xs text-destructive", children: error })
15872
+ error && /* @__PURE__ */ jsx26("p", { className: "text-xs text-destructive", children: error })
15482
15873
  ] }),
15483
- /* @__PURE__ */ jsxs23("div", { className: "space-y-2", children: [
15484
- /* @__PURE__ */ jsx25(
15874
+ /* @__PURE__ */ jsxs24("div", { className: "space-y-2", children: [
15875
+ /* @__PURE__ */ jsx26(
15485
15876
  "button",
15486
15877
  {
15487
15878
  type: "button",
15488
15879
  onClick: onSubmitEmail,
15489
15880
  disabled: checking || !isValidEmail,
15490
- className: cn19(
15881
+ className: cn20(
15491
15882
  "flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-2.5 text-sm font-semibold transition-all",
15492
15883
  checking || !isValidEmail ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
15493
15884
  ),
15494
15885
  children: checking ? t.checking : t.continueWithEmail
15495
15886
  }
15496
15887
  ),
15497
- /* @__PURE__ */ jsx25(
15888
+ /* @__PURE__ */ jsx26(
15498
15889
  "button",
15499
15890
  {
15500
15891
  type: "button",
@@ -15511,9 +15902,9 @@ function CheckoutLoginPrompt({
15511
15902
  }
15512
15903
 
15513
15904
  // src/components/checkout-form.tsx
15514
- import { cn as cn20 } from "@reblu/site-ui/utils";
15905
+ import { cn as cn21 } from "@reblu/site-ui/utils";
15515
15906
  import { PhoneInput } from "@reblu/site-ui/phone-input";
15516
- import { Fragment as Fragment5, jsx as jsx26, jsxs as jsxs24 } from "react/jsx-runtime";
15907
+ import { Fragment as Fragment5, jsx as jsx27, jsxs as jsxs25 } from "react/jsx-runtime";
15517
15908
  var DEFAULT_LABELS7 = {
15518
15909
  contactTitle: "Datos de contacto",
15519
15910
  nameLabel: "Nombre completo",
@@ -15569,22 +15960,22 @@ function CheckoutForm({
15569
15960
  event.preventDefault();
15570
15961
  if (discountCode.trim() && !discountApplying) onApplyDiscount();
15571
15962
  }
15572
- return /* @__PURE__ */ jsxs24(Fragment5, { children: [
15963
+ return /* @__PURE__ */ jsxs25(Fragment5, { children: [
15573
15964
  loginPrompt,
15574
- /* @__PURE__ */ jsxs24(
15965
+ /* @__PURE__ */ jsxs25(
15575
15966
  "form",
15576
15967
  {
15577
15968
  "data-testid": "checkout-form",
15578
15969
  onSubmit,
15579
- className: cn20("space-y-8", className),
15970
+ className: cn21("space-y-8", className),
15580
15971
  "data-slot": "checkout-form",
15581
15972
  children: [
15582
- /* @__PURE__ */ jsxs24("section", { className: "space-y-4", children: [
15583
- /* @__PURE__ */ jsx26("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
15584
- /* @__PURE__ */ jsxs24("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15585
- /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15586
- /* @__PURE__ */ jsx26("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
15587
- /* @__PURE__ */ jsx26(
15973
+ /* @__PURE__ */ jsxs25("section", { className: "space-y-4", children: [
15974
+ /* @__PURE__ */ jsx27("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
15975
+ /* @__PURE__ */ jsxs25("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15976
+ /* @__PURE__ */ jsxs25("div", { className: "space-y-1", children: [
15977
+ /* @__PURE__ */ jsx27("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
15978
+ /* @__PURE__ */ jsx27(
15588
15979
  "input",
15589
15980
  {
15590
15981
  id: "checkout-form-name",
@@ -15593,17 +15984,17 @@ function CheckoutForm({
15593
15984
  value: contact.name,
15594
15985
  onChange: (e) => patchContact({ name: e.target.value }),
15595
15986
  placeholder: t.namePlaceholder,
15596
- className: cn20(
15987
+ className: cn21(
15597
15988
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
15598
15989
  contactErrors?.name ? "border-destructive" : "border-border focus:border-primary"
15599
15990
  )
15600
15991
  }
15601
15992
  ),
15602
- contactErrors?.name && /* @__PURE__ */ jsx26("p", { className: "text-xs text-destructive", children: contactErrors.name })
15993
+ contactErrors?.name && /* @__PURE__ */ jsx27("p", { className: "text-xs text-destructive", children: contactErrors.name })
15603
15994
  ] }),
15604
- /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15605
- /* @__PURE__ */ jsx26("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
15606
- /* @__PURE__ */ jsx26(
15995
+ /* @__PURE__ */ jsxs25("div", { className: "space-y-1", children: [
15996
+ /* @__PURE__ */ jsx27("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
15997
+ /* @__PURE__ */ jsx27(
15607
15998
  "input",
15608
15999
  {
15609
16000
  id: "checkout-form-email",
@@ -15612,15 +16003,15 @@ function CheckoutForm({
15612
16003
  value: contact.email,
15613
16004
  onChange: (e) => patchContact({ email: e.target.value }),
15614
16005
  placeholder: t.emailPlaceholder,
15615
- className: cn20(
16006
+ className: cn21(
15616
16007
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
15617
16008
  contactErrors?.email ? "border-destructive" : "border-border focus:border-primary"
15618
16009
  )
15619
16010
  }
15620
16011
  ),
15621
- contactErrors?.email && /* @__PURE__ */ jsx26("p", { className: "text-xs text-destructive", children: contactErrors.email })
16012
+ contactErrors?.email && /* @__PURE__ */ jsx27("p", { className: "text-xs text-destructive", children: contactErrors.email })
15622
16013
  ] }),
15623
- /* @__PURE__ */ jsx26("div", { className: "space-y-1", children: /* @__PURE__ */ jsx26(
16014
+ /* @__PURE__ */ jsx27("div", { className: "space-y-1", children: /* @__PURE__ */ jsx27(
15624
16015
  PhoneInput,
15625
16016
  {
15626
16017
  id: "checkout-form-phone",
@@ -15634,26 +16025,26 @@ function CheckoutForm({
15634
16025
  ] })
15635
16026
  ] }),
15636
16027
  children2,
15637
- generalError ? /* @__PURE__ */ jsx26("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
15638
- /* @__PURE__ */ jsxs24("section", { className: "space-y-3", children: [
15639
- /* @__PURE__ */ jsx26("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
15640
- autoDiscount ? /* @__PURE__ */ jsxs24(
16028
+ generalError ? /* @__PURE__ */ jsx27("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
16029
+ /* @__PURE__ */ jsxs25("section", { className: "space-y-3", children: [
16030
+ /* @__PURE__ */ jsx27("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
16031
+ autoDiscount ? /* @__PURE__ */ jsxs25(
15641
16032
  "div",
15642
16033
  {
15643
16034
  className: "flex items-center gap-2 rounded-lg border border-green-200 bg-green-50 px-4 py-3 text-sm text-green-700 dark:border-green-800 dark:bg-green-900/20 dark:text-green-400",
15644
16035
  "data-slot": "checkout-staff-discount",
15645
16036
  children: [
15646
- /* @__PURE__ */ jsx26("span", { className: "font-semibold", children: t.staffDiscountApplied }),
15647
- /* @__PURE__ */ jsx26("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
16037
+ /* @__PURE__ */ jsx27("span", { className: "font-semibold", children: t.staffDiscountApplied }),
16038
+ /* @__PURE__ */ jsx27("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
15648
16039
  ]
15649
16040
  }
15650
16041
  ) : null,
15651
- appliedDiscount && !autoDiscount ? /* @__PURE__ */ jsxs24("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: [
15652
- /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
15653
- /* @__PURE__ */ jsx26("span", { className: "font-semibold", children: appliedDiscount.code }),
15654
- /* @__PURE__ */ jsx26("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
16042
+ appliedDiscount && !autoDiscount ? /* @__PURE__ */ jsxs25("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: [
16043
+ /* @__PURE__ */ jsxs25("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
16044
+ /* @__PURE__ */ jsx27("span", { className: "font-semibold", children: appliedDiscount.code }),
16045
+ /* @__PURE__ */ jsx27("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
15655
16046
  ] }),
15656
- /* @__PURE__ */ jsx26(
16047
+ /* @__PURE__ */ jsx27(
15657
16048
  "button",
15658
16049
  {
15659
16050
  type: "button",
@@ -15663,9 +16054,9 @@ function CheckoutForm({
15663
16054
  children: t.removeDiscount
15664
16055
  }
15665
16056
  )
15666
- ] }) : /* @__PURE__ */ jsxs24("div", { className: "flex gap-2", children: [
15667
- /* @__PURE__ */ jsx26("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
15668
- /* @__PURE__ */ jsx26(
16057
+ ] }) : /* @__PURE__ */ jsxs25("div", { className: "flex gap-2", children: [
16058
+ /* @__PURE__ */ jsx27("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
16059
+ /* @__PURE__ */ jsx27(
15669
16060
  "input",
15670
16061
  {
15671
16062
  id: "checkout-form-discount-code",
@@ -15677,7 +16068,7 @@ function CheckoutForm({
15677
16068
  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"
15678
16069
  }
15679
16070
  ),
15680
- /* @__PURE__ */ jsx26(
16071
+ /* @__PURE__ */ jsx27(
15681
16072
  "button",
15682
16073
  {
15683
16074
  type: "button",
@@ -15688,14 +16079,14 @@ function CheckoutForm({
15688
16079
  }
15689
16080
  )
15690
16081
  ] }),
15691
- discountError && /* @__PURE__ */ jsx26("p", { className: "text-xs text-destructive", children: discountError })
16082
+ discountError && /* @__PURE__ */ jsx27("p", { className: "text-xs text-destructive", children: discountError })
15692
16083
  ] }),
15693
- /* @__PURE__ */ jsx26(
16084
+ /* @__PURE__ */ jsx27(
15694
16085
  "button",
15695
16086
  {
15696
16087
  type: "submit",
15697
16088
  disabled: submitting || submitDisabled,
15698
- className: cn20(
16089
+ className: cn21(
15699
16090
  "flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-3 font-semibold transition-all",
15700
16091
  submitting || submitDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
15701
16092
  ),
@@ -15709,11 +16100,11 @@ function CheckoutForm({
15709
16100
  }
15710
16101
 
15711
16102
  // src/components/order-confirmation.tsx
15712
- import { cn as cn22 } from "@reblu/site-ui/utils";
16103
+ import { cn as cn23 } from "@reblu/site-ui/utils";
15713
16104
 
15714
16105
  // src/components/order-invoice-link.tsx
15715
- import { cn as cn21 } from "@reblu/site-ui/utils";
15716
- import { jsx as jsx27, jsxs as jsxs25 } from "react/jsx-runtime";
16106
+ import { cn as cn22 } from "@reblu/site-ui/utils";
16107
+ import { jsx as jsx28, jsxs as jsxs26 } from "react/jsx-runtime";
15717
16108
  var DEFAULT_LABELS8 = {
15718
16109
  linkLabel: "Descargar la factura {number}",
15719
16110
  signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
@@ -15721,8 +16112,8 @@ var DEFAULT_LABELS8 = {
15721
16112
  function OrderInvoiceLink({ invoice, labels, className }) {
15722
16113
  if (!invoice) return null;
15723
16114
  const t = { ...DEFAULT_LABELS8, ...labels };
15724
- return /* @__PURE__ */ jsxs25("div", { className: cn21("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
15725
- /* @__PURE__ */ jsx27(
16115
+ return /* @__PURE__ */ jsxs26("div", { className: cn22("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
16116
+ /* @__PURE__ */ jsx28(
15726
16117
  "a",
15727
16118
  {
15728
16119
  href: invoice.url,
@@ -15730,19 +16121,21 @@ function OrderInvoiceLink({ invoice, labels, className }) {
15730
16121
  children: t.linkLabel.replace("{number}", invoice.number)
15731
16122
  }
15732
16123
  ),
15733
- /* @__PURE__ */ jsx27("p", { className: "text-muted-foreground", children: t.signInHint })
16124
+ /* @__PURE__ */ jsx28("p", { className: "text-muted-foreground", children: t.signInHint })
15734
16125
  ] });
15735
16126
  }
15736
16127
 
15737
16128
  // src/components/order-confirmation.tsx
15738
- import { jsx as jsx28, jsxs as jsxs26 } from "react/jsx-runtime";
16129
+ import { jsx as jsx29, jsxs as jsxs27 } from "react/jsx-runtime";
15739
16130
  var DEFAULT_LABELS9 = {
15740
16131
  pollingTitle: "Confirmando tu pedido\u2026",
15741
16132
  pollingDescription: "Estamos procesando el pago, un momento\u2026",
15742
16133
  foundTitle: "\xA1Pedido confirmado!",
15743
- // REB-1085: every buyer gets a customer account; the order email carries
15744
- // the access link. Files are never served from this page.
15745
- foundDescription: "Te hemos enviado un email con tu acceso.",
16134
+ // REB-1200 (owner OK 6-Nov): no «con tu acceso» sentence — buyers who
16135
+ // already have an account (staff, returning clients) get no new access.
16136
+ // `{number}` and `{email}` come from the order. Files are never served here.
16137
+ foundDescription: "Tu pedido {number} est\xE1 confirmado. Te hemos enviado el resumen a {email}.",
16138
+ foundWithoutOrderDescription: "Tu pedido est\xE1 confirmado.",
15746
16139
  timeoutTitle: "Pago recibido",
15747
16140
  timeoutDescription: "Tu pago se ha procesado. Recibir\xE1s un email de confirmaci\xF3n en breve.",
15748
16141
  orderNumberLabel: "Pedido confirmado",
@@ -15768,6 +16161,12 @@ var DEFAULT_LABELS9 = {
15768
16161
  invoiceLinkLabel: "Descargar la factura {number}",
15769
16162
  invoiceSignInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
15770
16163
  };
16164
+ function foundDescription(t, order) {
16165
+ const template = t.foundDescription;
16166
+ if (!/\{(number|email)\}/.test(template)) return template;
16167
+ if (!order) return t.foundWithoutOrderDescription;
16168
+ return template.replaceAll("{number}", order.orderNumber).replaceAll("{email}", order.customerEmail);
16169
+ }
15771
16170
  function OrderConfirmation({
15772
16171
  status,
15773
16172
  order,
@@ -15794,50 +16193,50 @@ function OrderConfirmation({
15794
16193
  }
15795
16194
  if (status === "not_found") return { title: t.notFoundTitle, description: t.notFoundDescription };
15796
16195
  if (status === "error") return { title: t.errorTitle, description: t.errorDescription };
15797
- if (isFound || order) return { title: t.foundTitle, description: t.foundDescription };
16196
+ if (isFound || order) return { title: t.foundTitle, description: foundDescription(t, order) };
15798
16197
  return { title: t.timeoutTitle, description: t.timeoutDescription };
15799
16198
  })();
15800
16199
  const showFullOrderSummary = Boolean(order) && (isFound || status === "timeout");
15801
16200
  const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
15802
16201
  const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
15803
16202
  const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
15804
- return /* @__PURE__ */ jsxs26("div", { className: cn22("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
15805
- /* @__PURE__ */ jsx28("h1", { className: "text-3xl font-bold", children: title }),
15806
- /* @__PURE__ */ jsx28("p", { className: "text-lg text-muted-foreground", children: description }),
15807
- showFullOrderSummary && order && /* @__PURE__ */ jsxs26("div", { className: "space-y-6", children: [
15808
- /* @__PURE__ */ jsxs26("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15809
- /* @__PURE__ */ jsx28("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
15810
- /* @__PURE__ */ jsx28("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
16203
+ return /* @__PURE__ */ jsxs27("div", { className: cn23("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
16204
+ /* @__PURE__ */ jsx29("h1", { className: "text-3xl font-bold", children: title }),
16205
+ /* @__PURE__ */ jsx29("p", { className: "text-lg text-muted-foreground", children: description }),
16206
+ showFullOrderSummary && order && /* @__PURE__ */ jsxs27("div", { className: "space-y-6", children: [
16207
+ /* @__PURE__ */ jsxs27("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16208
+ /* @__PURE__ */ jsx29("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
16209
+ /* @__PURE__ */ jsx29("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15811
16210
  ] }),
15812
- /* @__PURE__ */ jsxs26("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
15813
- order.items.map((item, idx) => /* @__PURE__ */ jsxs26(
16211
+ /* @__PURE__ */ jsxs27("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
16212
+ order.items.map((item, idx) => /* @__PURE__ */ jsxs27(
15814
16213
  "div",
15815
16214
  {
15816
16215
  className: "flex justify-between gap-4 text-sm",
15817
16216
  children: [
15818
- /* @__PURE__ */ jsxs26("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
16217
+ /* @__PURE__ */ jsxs27("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
15819
16218
  item.product.name,
15820
16219
  item.variant ? ` (${item.variant.name})` : "",
15821
16220
  " x",
15822
16221
  item.quantity
15823
16222
  ] }),
15824
- /* @__PURE__ */ jsx28("span", { children: formatPrice(item.total, currencyCode, locale) })
16223
+ /* @__PURE__ */ jsx29("span", { children: formatPrice(item.total, currencyCode, locale) })
15825
16224
  ]
15826
16225
  },
15827
16226
  idx
15828
16227
  )),
15829
- /* @__PURE__ */ jsx28("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ jsxs26("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
15830
- /* @__PURE__ */ jsx28("span", { children: t.totalLabel }),
15831
- /* @__PURE__ */ jsx28("span", { children: formatPrice(order.total, currencyCode, locale) })
16228
+ /* @__PURE__ */ jsx29("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ jsxs27("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
16229
+ /* @__PURE__ */ jsx29("span", { children: t.totalLabel }),
16230
+ /* @__PURE__ */ jsx29("span", { children: formatPrice(order.total, currencyCode, locale) })
15832
16231
  ] }) })
15833
16232
  ] }),
15834
- /* @__PURE__ */ jsxs26("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
16233
+ t.foundDescription.includes("{email}") ? null : /* @__PURE__ */ jsxs27("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
15835
16234
  t.confirmationEmailPrefix,
15836
16235
  " ",
15837
- /* @__PURE__ */ jsx28("span", { className: "font-medium text-foreground", children: order.customerEmail }),
16236
+ /* @__PURE__ */ jsx29("span", { className: "font-medium text-foreground", children: order.customerEmail }),
15838
16237
  "."
15839
16238
  ] }),
15840
- /* @__PURE__ */ jsx28(
16239
+ /* @__PURE__ */ jsx29(
15841
16240
  OrderInvoiceLink,
15842
16241
  {
15843
16242
  invoice: order.invoice,
@@ -15845,11 +16244,11 @@ function OrderConfirmation({
15845
16244
  }
15846
16245
  )
15847
16246
  ] }),
15848
- showOrderReference && order && /* @__PURE__ */ jsxs26("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15849
- /* @__PURE__ */ jsx28("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
15850
- /* @__PURE__ */ jsx28("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
16247
+ showOrderReference && order && /* @__PURE__ */ jsxs27("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16248
+ /* @__PURE__ */ jsx29("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
16249
+ /* @__PURE__ */ jsx29("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15851
16250
  ] }),
15852
- status === "failed" && cartHref && /* @__PURE__ */ jsx28(
16251
+ status === "failed" && cartHref && /* @__PURE__ */ jsx29(
15853
16252
  "a",
15854
16253
  {
15855
16254
  href: cartHref,
@@ -15857,7 +16256,7 @@ function OrderConfirmation({
15857
16256
  children: t.backToCartLabel
15858
16257
  }
15859
16258
  ),
15860
- showRecheck && /* @__PURE__ */ jsx28(
16259
+ showRecheck && /* @__PURE__ */ jsx29(
15861
16260
  "button",
15862
16261
  {
15863
16262
  type: "button",
@@ -15866,16 +16265,16 @@ function OrderConfirmation({
15866
16265
  children: t.recheckLabel
15867
16266
  }
15868
16267
  ),
15869
- showSessionReference && /* @__PURE__ */ jsxs26("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15870
- /* @__PURE__ */ jsx28("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
15871
- /* @__PURE__ */ jsx28("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
16268
+ showSessionReference && /* @__PURE__ */ jsxs27("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16269
+ /* @__PURE__ */ jsx29("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
16270
+ /* @__PURE__ */ jsx29("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
15872
16271
  ] })
15873
16272
  ] });
15874
16273
  }
15875
16274
 
15876
16275
  // src/components/full-invoice-fields.tsx
15877
- import { cn as cn23 } from "@reblu/site-ui/utils";
15878
- import { jsx as jsx29, jsxs as jsxs27 } from "react/jsx-runtime";
16276
+ import { cn as cn24 } from "@reblu/site-ui/utils";
16277
+ import { jsx as jsx30, jsxs as jsxs28 } from "react/jsx-runtime";
15879
16278
  var EMPTY_FULL_INVOICE_VALUE = {
15880
16279
  wantsFullInvoice: false,
15881
16280
  billingIdType: "NIF",
@@ -15992,12 +16391,12 @@ function FullInvoiceFields({
15992
16391
  const showFields = value.wantsFullInvoice || overCap;
15993
16392
  const isSpanishNif = value.billingIdType === "NIF";
15994
16393
  const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
15995
- const error = (key2) => errors[key2] ? /* @__PURE__ */ jsx29("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
16394
+ const error = (key2) => errors[key2] ? /* @__PURE__ */ jsx30("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
15996
16395
  const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
15997
- return /* @__PURE__ */ jsxs27("section", { className: cn23("space-y-4", className), "data-slot": "full-invoice-fields", children: [
15998
- overCap ? /* @__PURE__ */ jsx29("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ jsxs27("div", { className: "space-y-1", children: [
15999
- /* @__PURE__ */ jsxs27("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
16000
- /* @__PURE__ */ jsx29(
16396
+ return /* @__PURE__ */ jsxs28("section", { className: cn24("space-y-4", className), "data-slot": "full-invoice-fields", children: [
16397
+ overCap ? /* @__PURE__ */ jsx30("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ jsxs28("div", { className: "space-y-1", children: [
16398
+ /* @__PURE__ */ jsxs28("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
16399
+ /* @__PURE__ */ jsx30(
16001
16400
  "input",
16002
16401
  {
16003
16402
  type: "checkbox",
@@ -16007,12 +16406,12 @@ function FullInvoiceFields({
16007
16406
  ),
16008
16407
  t.toggle
16009
16408
  ] }),
16010
- /* @__PURE__ */ jsx29("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
16409
+ /* @__PURE__ */ jsx30("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
16011
16410
  ] }),
16012
- showFields && /* @__PURE__ */ jsxs27("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
16013
- /* @__PURE__ */ jsxs27("div", { className: "space-y-1", children: [
16014
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
16015
- /* @__PURE__ */ jsx29(
16411
+ showFields && /* @__PURE__ */ jsxs28("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
16412
+ /* @__PURE__ */ jsxs28("div", { className: "space-y-1", children: [
16413
+ /* @__PURE__ */ jsx30("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
16414
+ /* @__PURE__ */ jsx30(
16016
16415
  "select",
16017
16416
  {
16018
16417
  id: "full-invoice-id-type",
@@ -16021,14 +16420,14 @@ function FullInvoiceFields({
16021
16420
  value: value.billingIdType,
16022
16421
  onChange: (e) => set("billingIdType", e.target.value),
16023
16422
  ...invalid2("billingIdType"),
16024
- children: ID_TYPES.map((type) => /* @__PURE__ */ jsx29("option", { value: type, children: t.idTypeOptions[type] }, type))
16423
+ children: ID_TYPES.map((type) => /* @__PURE__ */ jsx30("option", { value: type, children: t.idTypeOptions[type] }, type))
16025
16424
  }
16026
16425
  ),
16027
16426
  error("billingIdType")
16028
16427
  ] }),
16029
- !isSpanishNif && /* @__PURE__ */ jsxs27("div", { className: "space-y-1", children: [
16030
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
16031
- /* @__PURE__ */ jsxs27(
16428
+ !isSpanishNif && /* @__PURE__ */ jsxs28("div", { className: "space-y-1", children: [
16429
+ /* @__PURE__ */ jsx30("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
16430
+ /* @__PURE__ */ jsxs28(
16032
16431
  "select",
16033
16432
  {
16034
16433
  id: "full-invoice-id-country",
@@ -16038,16 +16437,16 @@ function FullInvoiceFields({
16038
16437
  onChange: (e) => set("billingIdCountry", e.target.value),
16039
16438
  ...invalid2("billingIdCountry"),
16040
16439
  children: [
16041
- /* @__PURE__ */ jsx29("option", { value: "", disabled: true, children: t.chooseCountry }),
16042
- countries.map((c) => /* @__PURE__ */ jsx29("option", { value: c.code, children: c.name }, c.code))
16440
+ /* @__PURE__ */ jsx30("option", { value: "", disabled: true, children: t.chooseCountry }),
16441
+ countries.map((c) => /* @__PURE__ */ jsx30("option", { value: c.code, children: c.name }, c.code))
16043
16442
  ]
16044
16443
  }
16045
16444
  ),
16046
16445
  error("billingIdCountry")
16047
16446
  ] }),
16048
- /* @__PURE__ */ jsxs27("div", { className: "space-y-1", children: [
16049
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
16050
- /* @__PURE__ */ jsx29(
16447
+ /* @__PURE__ */ jsxs28("div", { className: "space-y-1", children: [
16448
+ /* @__PURE__ */ jsx30("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
16449
+ /* @__PURE__ */ jsx30(
16051
16450
  "input",
16052
16451
  {
16053
16452
  id: "full-invoice-nif",
@@ -16060,9 +16459,9 @@ function FullInvoiceFields({
16060
16459
  ),
16061
16460
  error("billingNif")
16062
16461
  ] }),
16063
- /* @__PURE__ */ jsxs27("div", { className: "space-y-1", children: [
16064
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
16065
- /* @__PURE__ */ jsx29(
16462
+ /* @__PURE__ */ jsxs28("div", { className: "space-y-1", children: [
16463
+ /* @__PURE__ */ jsx30("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
16464
+ /* @__PURE__ */ jsx30(
16066
16465
  "input",
16067
16466
  {
16068
16467
  id: "full-invoice-name",
@@ -16075,9 +16474,9 @@ function FullInvoiceFields({
16075
16474
  ),
16076
16475
  error("billingName")
16077
16476
  ] }),
16078
- /* @__PURE__ */ jsxs27("div", { className: "space-y-1 sm:col-span-2", children: [
16079
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
16080
- /* @__PURE__ */ jsx29(
16477
+ /* @__PURE__ */ jsxs28("div", { className: "space-y-1 sm:col-span-2", children: [
16478
+ /* @__PURE__ */ jsx30("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
16479
+ /* @__PURE__ */ jsx30(
16081
16480
  "input",
16082
16481
  {
16083
16482
  id: "full-invoice-street",
@@ -16089,9 +16488,9 @@ function FullInvoiceFields({
16089
16488
  }
16090
16489
  )
16091
16490
  ] }),
16092
- /* @__PURE__ */ jsxs27("div", { className: "space-y-1", children: [
16093
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
16094
- /* @__PURE__ */ jsx29(
16491
+ /* @__PURE__ */ jsxs28("div", { className: "space-y-1", children: [
16492
+ /* @__PURE__ */ jsx30("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
16493
+ /* @__PURE__ */ jsx30(
16095
16494
  "input",
16096
16495
  {
16097
16496
  id: "full-invoice-postal-code",
@@ -16102,9 +16501,9 @@ function FullInvoiceFields({
16102
16501
  }
16103
16502
  )
16104
16503
  ] }),
16105
- /* @__PURE__ */ jsxs27("div", { className: "space-y-1", children: [
16106
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
16107
- /* @__PURE__ */ jsx29(
16504
+ /* @__PURE__ */ jsxs28("div", { className: "space-y-1", children: [
16505
+ /* @__PURE__ */ jsx30("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
16506
+ /* @__PURE__ */ jsx30(
16108
16507
  "input",
16109
16508
  {
16110
16509
  id: "full-invoice-city",
@@ -16115,9 +16514,9 @@ function FullInvoiceFields({
16115
16514
  }
16116
16515
  )
16117
16516
  ] }),
16118
- /* @__PURE__ */ jsxs27("div", { className: "space-y-1", children: [
16119
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
16120
- /* @__PURE__ */ jsx29(
16517
+ /* @__PURE__ */ jsxs28("div", { className: "space-y-1", children: [
16518
+ /* @__PURE__ */ jsx30("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
16519
+ /* @__PURE__ */ jsx30(
16121
16520
  "select",
16122
16521
  {
16123
16522
  id: "full-invoice-country",
@@ -16125,18 +16524,18 @@ function FullInvoiceFields({
16125
16524
  required: true,
16126
16525
  value: value.country,
16127
16526
  onChange: (e) => set("country", e.target.value),
16128
- children: countries.map((c) => /* @__PURE__ */ jsx29("option", { value: c.code, children: c.name }, c.code))
16527
+ children: countries.map((c) => /* @__PURE__ */ jsx30("option", { value: c.code, children: c.name }, c.code))
16129
16528
  }
16130
16529
  )
16131
16530
  ] }),
16132
- /* @__PURE__ */ jsx29("div", { className: "sm:col-span-2", children: error("address") })
16531
+ /* @__PURE__ */ jsx30("div", { className: "sm:col-span-2", children: error("address") })
16133
16532
  ] })
16134
16533
  ] });
16135
16534
  }
16136
16535
 
16137
16536
  // src/components/checkout-delivery-choice.tsx
16138
- import { cn as cn24 } from "@reblu/site-ui/utils";
16139
- import { jsx as jsx30, jsxs as jsxs28 } from "react/jsx-runtime";
16537
+ import { cn as cn25 } from "@reblu/site-ui/utils";
16538
+ import { jsx as jsx31, jsxs as jsxs29 } from "react/jsx-runtime";
16140
16539
  var EMPTY_CHECKOUT_ADDRESS = {
16141
16540
  firstName: "",
16142
16541
  lastName: "",
@@ -16199,17 +16598,17 @@ function CheckoutDeliveryChoice({
16199
16598
  const isPickup = value?.type === "PICKUP";
16200
16599
  const isShipping = value?.type === "SHIPPING";
16201
16600
  const errorId = `${uid}-delivery-error`;
16202
- return /* @__PURE__ */ jsxs28(
16601
+ return /* @__PURE__ */ jsxs29(
16203
16602
  "fieldset",
16204
16603
  {
16205
16604
  "data-slot": "checkout-delivery",
16206
16605
  "aria-describedby": error ? errorId : void 0,
16207
- className: cn24("space-y-4", className),
16606
+ className: cn25("space-y-4", className),
16208
16607
  children: [
16209
- /* @__PURE__ */ jsx30("legend", { className: "mb-2 text-lg font-semibold", children: t.legend }),
16210
- /* @__PURE__ */ jsxs28("div", { className: "grid gap-3 sm:grid-cols-2", children: [
16211
- homeDelivery ? /* @__PURE__ */ jsxs28("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16212
- /* @__PURE__ */ jsx30(
16608
+ /* @__PURE__ */ jsx31("legend", { className: "mb-2 text-lg font-semibold", children: t.legend }),
16609
+ /* @__PURE__ */ jsxs29("div", { className: "grid gap-3 sm:grid-cols-2", children: [
16610
+ homeDelivery ? /* @__PURE__ */ jsxs29("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16611
+ /* @__PURE__ */ jsx31(
16213
16612
  "input",
16214
16613
  {
16215
16614
  type: "radio",
@@ -16219,42 +16618,42 @@ function CheckoutDeliveryChoice({
16219
16618
  className: "mt-0.5 size-4 accent-primary"
16220
16619
  }
16221
16620
  ),
16222
- /* @__PURE__ */ jsxs28("span", { className: "flex-1 space-y-1", children: [
16223
- /* @__PURE__ */ jsxs28("span", { className: "flex justify-between gap-2 font-medium", children: [
16224
- /* @__PURE__ */ jsx30("span", { children: copy.shippingOptionLabel }),
16225
- /* @__PURE__ */ jsx30("span", { className: "tabular-nums", children: homeCost })
16621
+ /* @__PURE__ */ jsxs29("span", { className: "flex-1 space-y-1", children: [
16622
+ /* @__PURE__ */ jsxs29("span", { className: "flex justify-between gap-2 font-medium", children: [
16623
+ /* @__PURE__ */ jsx31("span", { children: copy.shippingOptionLabel }),
16624
+ /* @__PURE__ */ jsx31("span", { className: "tabular-nums", children: homeCost })
16226
16625
  ] }),
16227
- delivery.estimatedDeliveryText ? /* @__PURE__ */ jsx30("span", { className: "block text-sm text-muted-foreground", children: delivery.estimatedDeliveryText }) : null
16626
+ delivery.estimatedDeliveryText ? /* @__PURE__ */ jsx31("span", { className: "block text-sm text-muted-foreground", children: delivery.estimatedDeliveryText }) : null
16228
16627
  ] })
16229
16628
  ] }) : null,
16230
- pickup ? /* @__PURE__ */ jsxs28("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16231
- /* @__PURE__ */ jsx30(
16629
+ pickup ? /* @__PURE__ */ jsxs29("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16630
+ /* @__PURE__ */ jsx31(
16232
16631
  "input",
16233
16632
  {
16234
16633
  type: "radio",
16235
16634
  name: `${uid}-method`,
16236
16635
  checked: isPickup,
16237
- onChange: () => onChange({ type: "PICKUP" }),
16636
+ onChange: () => onChange(pickupFulfillment(delivery)),
16238
16637
  className: "mt-0.5 size-4 accent-primary"
16239
16638
  }
16240
16639
  ),
16241
- /* @__PURE__ */ jsxs28("span", { className: "flex flex-1 justify-between gap-2 font-medium", children: [
16242
- /* @__PURE__ */ jsx30("span", { children: copy.pickupOptionLabel }),
16243
- /* @__PURE__ */ jsx30("span", { children: t.free })
16640
+ /* @__PURE__ */ jsxs29("span", { className: "flex flex-1 justify-between gap-2 font-medium", children: [
16641
+ /* @__PURE__ */ jsx31("span", { children: copy.pickupOptionLabel }),
16642
+ /* @__PURE__ */ jsx31("span", { children: t.free })
16244
16643
  ] })
16245
16644
  ] }) : null
16246
16645
  ] }),
16247
- error ? /* @__PURE__ */ jsx30("p", { id: errorId, role: "alert", className: "text-sm text-destructive", children: error }) : null,
16248
- isPickup ? /* @__PURE__ */ jsxs28("div", { role: "radiogroup", "aria-labelledby": `${uid}-points`, className: "space-y-2", children: [
16249
- /* @__PURE__ */ jsx30("p", { id: `${uid}-points`, className: "text-sm font-medium", children: t.pickupPointsLegend }),
16646
+ error ? /* @__PURE__ */ jsx31("p", { id: errorId, role: "alert", className: "text-sm text-destructive", children: error }) : null,
16647
+ isPickup ? /* @__PURE__ */ jsxs29("div", { role: "radiogroup", "aria-labelledby": `${uid}-points`, className: "space-y-2", children: [
16648
+ /* @__PURE__ */ jsx31("p", { id: `${uid}-points`, className: "text-sm font-medium", children: t.pickupPointsLegend }),
16250
16649
  delivery.pickupLocations.map((location2) => {
16251
16650
  const descId = `${uid}-point-${location2.id}`;
16252
- return /* @__PURE__ */ jsxs28(
16651
+ return /* @__PURE__ */ jsxs29(
16253
16652
  "label",
16254
16653
  {
16255
16654
  className: "flex cursor-pointer items-start gap-3 rounded-lg border border-border p-3 has-[:checked]:border-primary",
16256
16655
  children: [
16257
- /* @__PURE__ */ jsx30(
16656
+ /* @__PURE__ */ jsx31(
16258
16657
  "input",
16259
16658
  {
16260
16659
  type: "radio",
@@ -16265,9 +16664,9 @@ function CheckoutDeliveryChoice({
16265
16664
  className: "mt-0.5 size-4 accent-primary"
16266
16665
  }
16267
16666
  ),
16268
- /* @__PURE__ */ jsxs28("span", { className: "space-y-0.5 text-sm", children: [
16269
- /* @__PURE__ */ jsx30("span", { className: "block font-medium", children: location2.name }),
16270
- /* @__PURE__ */ jsx30("span", { id: descId, className: "block text-muted-foreground", children: pickupDescription(location2) })
16667
+ /* @__PURE__ */ jsxs29("span", { className: "space-y-0.5 text-sm", children: [
16668
+ /* @__PURE__ */ jsx31("span", { className: "block font-medium", children: location2.name }),
16669
+ /* @__PURE__ */ jsx31("span", { id: descId, className: "block text-muted-foreground", children: pickupDescription(location2) })
16271
16670
  ] })
16272
16671
  ]
16273
16672
  },
@@ -16275,14 +16674,14 @@ function CheckoutDeliveryChoice({
16275
16674
  );
16276
16675
  })
16277
16676
  ] }) : null,
16278
- isShipping ? /* @__PURE__ */ jsxs28("fieldset", { className: "space-y-3", children: [
16279
- /* @__PURE__ */ jsx30("legend", { className: "mb-2 text-sm font-medium", children: t.addressLegend }),
16280
- /* @__PURE__ */ jsx30("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: ADDRESS_FIELDS.map(({ key: key2, autoComplete, required, wide }) => {
16677
+ isShipping ? /* @__PURE__ */ jsxs29("fieldset", { className: "space-y-3", children: [
16678
+ /* @__PURE__ */ jsx31("legend", { className: "mb-2 text-sm font-medium", children: t.addressLegend }),
16679
+ /* @__PURE__ */ jsx31("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: ADDRESS_FIELDS.map(({ key: key2, autoComplete, required, wide }) => {
16281
16680
  const fieldId = `${uid}-${key2}`;
16282
16681
  const fieldError = addressErrors?.[key2];
16283
- return /* @__PURE__ */ jsxs28("div", { className: cn24("space-y-1", wide && "sm:col-span-2"), children: [
16284
- /* @__PURE__ */ jsx30("label", { htmlFor: fieldId, className: "text-sm font-medium", children: t[key2] }),
16285
- /* @__PURE__ */ jsx30(
16682
+ return /* @__PURE__ */ jsxs29("div", { className: cn25("space-y-1", wide && "sm:col-span-2"), children: [
16683
+ /* @__PURE__ */ jsx31("label", { htmlFor: fieldId, className: "text-sm font-medium", children: t[key2] }),
16684
+ /* @__PURE__ */ jsx31(
16286
16685
  "input",
16287
16686
  {
16288
16687
  id: fieldId,
@@ -16293,13 +16692,13 @@ function CheckoutDeliveryChoice({
16293
16692
  onChange: (e) => onAddressChange({ ...address, [key2]: e.target.value }),
16294
16693
  "aria-invalid": fieldError ? true : void 0,
16295
16694
  "aria-describedby": fieldError ? `${fieldId}-error` : void 0,
16296
- className: cn24(
16695
+ className: cn25(
16297
16696
  INPUT_CLASS,
16298
16697
  fieldError ? "border-destructive" : "border-border focus:border-primary"
16299
16698
  )
16300
16699
  }
16301
16700
  ),
16302
- fieldError ? /* @__PURE__ */ jsx30("p", { id: `${fieldId}-error`, className: "text-sm text-destructive", children: fieldError }) : null
16701
+ fieldError ? /* @__PURE__ */ jsx31("p", { id: `${fieldId}-error`, className: "text-sm text-destructive", children: fieldError }) : null
16303
16702
  ] }, key2);
16304
16703
  }) })
16305
16704
  ] }) : null
@@ -16307,12 +16706,19 @@ function CheckoutDeliveryChoice({
16307
16706
  }
16308
16707
  );
16309
16708
  }
16709
+ function pickupFulfillment(delivery) {
16710
+ const [only, ...rest] = delivery.pickupLocations;
16711
+ return only && rest.length === 0 ? { type: "PICKUP", pickupLocationId: only.id } : { type: "PICKUP" };
16712
+ }
16310
16713
  function defaultCheckoutFulfillment(delivery) {
16311
16714
  if (!delivery) return null;
16312
16715
  if (delivery.methods.homeDelivery) return { type: "SHIPPING" };
16313
16716
  if (!delivery.methods.pickup) return null;
16314
- const [only, ...rest] = delivery.pickupLocations;
16315
- return only && rest.length === 0 ? { type: "PICKUP", pickupLocationId: only.id } : { type: "PICKUP" };
16717
+ return pickupFulfillment(delivery);
16718
+ }
16719
+ function isCheckoutDeliveryComplete(value, requiresDelivery = true) {
16720
+ if (!value || !requiresDelivery) return true;
16721
+ return value.type !== "PICKUP" || Boolean(value.pickupLocationId);
16316
16722
  }
16317
16723
  function quoteRequiresDelivery(quote) {
16318
16724
  return quote ? quote.lines.some((line) => line.isShippable) : true;
@@ -16334,8 +16740,8 @@ function toCheckoutFulfillmentFields(value, address, requiresDelivery = true) {
16334
16740
  }
16335
16741
 
16336
16742
  // src/components/checkout-quote-summary.tsx
16337
- import { cn as cn25 } from "@reblu/site-ui/utils";
16338
- import { Fragment as Fragment6, jsx as jsx31, jsxs as jsxs29 } from "react/jsx-runtime";
16743
+ import { cn as cn26 } from "@reblu/site-ui/utils";
16744
+ import { Fragment as Fragment6, jsx as jsx32, jsxs as jsxs30 } from "react/jsx-runtime";
16339
16745
  var DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS = {
16340
16746
  subtotal: "Subtotal",
16341
16747
  discount: (codeOrLabel, isAutomatic) => isAutomatic ? codeOrLabel : `Descuento (${codeOrLabel})`,
@@ -16352,9 +16758,9 @@ function Row({
16352
16758
  value,
16353
16759
  className
16354
16760
  }) {
16355
- return /* @__PURE__ */ jsxs29("div", { "data-slot": "checkout-quote-row", className: cn25("flex justify-between gap-4", className), children: [
16356
- /* @__PURE__ */ jsx31("dt", { children: name }),
16357
- /* @__PURE__ */ jsx31("dd", { className: "shrink-0 tabular-nums", children: value })
16761
+ return /* @__PURE__ */ jsxs30("div", { "data-slot": "checkout-quote-row", className: cn26("flex justify-between gap-4", className), children: [
16762
+ /* @__PURE__ */ jsx32("dt", { children: name }),
16763
+ /* @__PURE__ */ jsx32("dd", { className: "shrink-0 tabular-nums", children: value })
16358
16764
  ] });
16359
16765
  }
16360
16766
  function CheckoutQuoteSummary({
@@ -16370,22 +16776,22 @@ function CheckoutQuoteSummary({
16370
16776
  const price = (cents) => formatPrice(cents, currencyCode, locale);
16371
16777
  const { fulfillment, shipping, tax, discount } = quote;
16372
16778
  const Tag = `h${headingLevel}`;
16373
- return /* @__PURE__ */ jsxs29("section", { "data-slot": "checkout-quote-summary", className: slotClassName("space-y-4", "", className), children: [
16374
- heading ? /* @__PURE__ */ jsx31(Tag, { className: "text-lg font-semibold", children: heading }) : null,
16375
- /* @__PURE__ */ jsx31("ul", { className: "space-y-3 text-sm", children: quote.lines.map((line) => /* @__PURE__ */ jsxs29("li", { className: "flex justify-between gap-4", children: [
16376
- /* @__PURE__ */ jsxs29("div", { className: "min-w-0 space-y-0.5", children: [
16377
- /* @__PURE__ */ jsx31("p", { className: "font-medium", children: line.name }),
16378
- line.variantName ? /* @__PURE__ */ jsx31("p", { className: "text-muted-foreground", children: line.variantName }) : null,
16379
- /* @__PURE__ */ jsxs29("p", { className: "flex flex-wrap items-center gap-2 text-muted-foreground", children: [
16380
- line.kindLabel ? /* @__PURE__ */ jsx31("span", { "data-slot": "checkout-quote-kind", className: "rounded-full border border-border px-2 py-0.5 text-xs font-medium text-foreground", children: line.kindLabel }) : null,
16381
- /* @__PURE__ */ jsx31("span", { children: t.quantityTimesUnit(line.quantity, price(line.unitPrice)) })
16779
+ return /* @__PURE__ */ jsxs30("section", { "data-slot": "checkout-quote-summary", className: slotClassName("space-y-4", "", className), children: [
16780
+ heading ? /* @__PURE__ */ jsx32(Tag, { className: "text-lg font-semibold", children: heading }) : null,
16781
+ /* @__PURE__ */ jsx32("ul", { className: "space-y-3 text-sm", children: quote.lines.map((line) => /* @__PURE__ */ jsxs30("li", { className: "flex justify-between gap-4", children: [
16782
+ /* @__PURE__ */ jsxs30("div", { className: "min-w-0 space-y-0.5", children: [
16783
+ /* @__PURE__ */ jsx32("p", { className: "font-medium", children: line.name }),
16784
+ line.variantName ? /* @__PURE__ */ jsx32("p", { className: "text-muted-foreground", children: line.variantName }) : null,
16785
+ /* @__PURE__ */ jsxs30("p", { className: "flex flex-wrap items-center gap-2 text-muted-foreground", children: [
16786
+ line.kindLabel ? /* @__PURE__ */ jsx32("span", { "data-slot": "checkout-quote-kind", className: "rounded-full border border-border px-2 py-0.5 text-xs font-medium text-foreground", children: line.kindLabel }) : null,
16787
+ /* @__PURE__ */ jsx32("span", { children: t.quantityTimesUnit(line.quantity, price(line.unitPrice)) })
16382
16788
  ] })
16383
16789
  ] }),
16384
- /* @__PURE__ */ jsx31("span", { className: "shrink-0 tabular-nums", children: price(line.total) })
16790
+ /* @__PURE__ */ jsx32("span", { className: "shrink-0 tabular-nums", children: price(line.total) })
16385
16791
  ] }, `${line.productId}-${line.variantId ?? ""}`)) }),
16386
- /* @__PURE__ */ jsxs29("dl", { className: "space-y-2 border-t border-border pt-3 text-sm", children: [
16387
- /* @__PURE__ */ jsx31(Row, { name: t.subtotal, value: price(quote.subtotal) }),
16388
- discount && discount.amount > 0 ? /* @__PURE__ */ jsx31(
16792
+ /* @__PURE__ */ jsxs30("dl", { className: "space-y-2 border-t border-border pt-3 text-sm", children: [
16793
+ /* @__PURE__ */ jsx32(Row, { name: t.subtotal, value: price(quote.subtotal) }),
16794
+ discount && discount.amount > 0 ? /* @__PURE__ */ jsx32(
16389
16795
  Row,
16390
16796
  {
16391
16797
  className: "text-green-700 dark:text-green-400",
@@ -16393,17 +16799,17 @@ function CheckoutQuoteSummary({
16393
16799
  value: `\u2212${price(discount.amount)}`
16394
16800
  }
16395
16801
  ) : null,
16396
- fulfillment.type ? /* @__PURE__ */ jsx31(
16802
+ fulfillment.type ? /* @__PURE__ */ jsx32(
16397
16803
  Row,
16398
16804
  {
16399
- name: /* @__PURE__ */ jsxs29(Fragment6, { children: [
16805
+ name: /* @__PURE__ */ jsxs30(Fragment6, { children: [
16400
16806
  fulfillment.label ?? t.delivery,
16401
- fulfillment.type === "PICKUP" && fulfillment.pickupLocation ? /* @__PURE__ */ jsx31("span", { className: "block text-muted-foreground", children: fulfillment.pickupLocation.name }) : null
16807
+ fulfillment.type === "PICKUP" && fulfillment.pickupLocation ? /* @__PURE__ */ jsx32("span", { className: "block text-muted-foreground", children: fulfillment.pickupLocation.name }) : null
16402
16808
  ] }),
16403
16809
  value: fulfillment.type === "PICKUP" || shipping.isFree ? t.free : price(shipping.cost)
16404
16810
  }
16405
16811
  ) : null,
16406
- tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ jsx31(
16812
+ tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ jsx32(
16407
16813
  Row,
16408
16814
  {
16409
16815
  className: tax.isIncluded ? "text-muted-foreground" : void 0,
@@ -16412,19 +16818,44 @@ function CheckoutQuoteSummary({
16412
16818
  },
16413
16819
  entry.label
16414
16820
  )) : null,
16415
- /* @__PURE__ */ jsx31(Row, { className: "border-t border-border pt-2 text-base font-bold", name: t.total, value: price(quote.total) })
16821
+ /* @__PURE__ */ jsx32(Row, { className: "border-t border-border pt-2 text-base font-bold", name: t.total, value: price(quote.total) })
16416
16822
  ] }),
16417
- tax.isIncluded ? /* @__PURE__ */ jsx31("p", { className: "text-sm text-muted-foreground", children: t.taxesIncludedNote }) : null,
16418
- fulfillment.type === "SHIPPING" && !shipping.isFree && shipping.remainingForFree ? /* @__PURE__ */ jsx31("p", { className: "text-sm text-muted-foreground", children: t.remainingForFree(price(shipping.remainingForFree)) }) : null,
16419
- fulfillment.type && quote.deliveryEstimateText ? /* @__PURE__ */ jsx31("p", { "data-slot": "checkout-quote-estimate", className: "text-sm text-muted-foreground", children: quote.deliveryEstimateText }) : null,
16420
- quote.discountError ? /* @__PURE__ */ jsx31("p", { role: "status", className: "text-sm text-destructive", children: quote.discountError.message }) : null,
16421
- quote.blockingReason ? /* @__PURE__ */ jsx31("p", { role: "alert", className: "rounded-lg border border-destructive/50 bg-destructive/10 p-3 text-sm text-destructive", children: quote.blockingReason.message }) : null
16823
+ tax.isIncluded ? /* @__PURE__ */ jsx32("p", { className: "text-sm text-muted-foreground", children: t.taxesIncludedNote }) : null,
16824
+ fulfillment.type === "SHIPPING" && !shipping.isFree && shipping.remainingForFree ? /* @__PURE__ */ jsx32("p", { className: "text-sm text-muted-foreground", children: t.remainingForFree(price(shipping.remainingForFree)) }) : null,
16825
+ fulfillment.type && quote.deliveryEstimateText ? /* @__PURE__ */ jsx32("p", { "data-slot": "checkout-quote-estimate", className: "text-sm text-muted-foreground", children: quote.deliveryEstimateText }) : null,
16826
+ quote.discountError ? /* @__PURE__ */ jsx32("p", { role: "status", className: "text-sm text-destructive", children: quote.discountError.message }) : null,
16827
+ quote.blockingReason ? /* @__PURE__ */ jsx32("p", { role: "alert", className: "rounded-lg border border-destructive/50 bg-destructive/10 p-3 text-sm text-destructive", children: quote.blockingReason.message }) : null
16422
16828
  ] });
16423
16829
  }
16830
+ var DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS = {
16831
+ pickupLocationRequired: "Elige un punto de recogida"
16832
+ };
16833
+ function checkoutQuoteNotice({
16834
+ fulfillment,
16835
+ requiresDelivery = true,
16836
+ error
16837
+ }) {
16838
+ if (!isCheckoutDeliveryComplete(fulfillment, requiresDelivery)) return "PICKUP_LOCATION_REQUIRED";
16839
+ if (error?.code === "PICKUP_LOCATION_INVALID") return "PICKUP_LOCATION_REQUIRED";
16840
+ return null;
16841
+ }
16842
+ function CheckoutQuoteNotice({ reason, labels, className }) {
16843
+ if (!reason) return null;
16844
+ const t = { ...DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS, ...labels };
16845
+ return /* @__PURE__ */ jsx32(
16846
+ "p",
16847
+ {
16848
+ role: "status",
16849
+ "data-slot": "checkout-quote-notice",
16850
+ className: slotClassName("rounded-lg border border-border bg-muted p-3 text-sm", "", className),
16851
+ children: t.pickupLocationRequired
16852
+ }
16853
+ );
16854
+ }
16424
16855
 
16425
16856
  // src/components/checkout-terms-acceptance.tsx
16426
- import { cn as cn26 } from "@reblu/site-ui/utils";
16427
- import { Fragment as Fragment7, jsx as jsx32, jsxs as jsxs30 } from "react/jsx-runtime";
16857
+ import { cn as cn27 } from "@reblu/site-ui/utils";
16858
+ import { Fragment as Fragment7, jsx as jsx33, jsxs as jsxs31 } from "react/jsx-runtime";
16428
16859
  function splitTermsLabel(label) {
16429
16860
  const at = label.indexOf("{terms}");
16430
16861
  return at === -1 ? [`${label} `, ""] : [label.slice(0, at), label.slice(at + "{terms}".length)];
@@ -16446,9 +16877,9 @@ function CheckoutTermsAcceptance({
16446
16877
  (part) => part.replaceAll("{tenant}", copy.tenantName)
16447
16878
  );
16448
16879
  const newTab = copy.isTermsLinkNewTab;
16449
- return /* @__PURE__ */ jsxs30("div", { "data-slot": "checkout-terms", className: cn26("space-y-1", className), children: [
16450
- /* @__PURE__ */ jsxs30("div", { className: "flex items-start gap-3", children: [
16451
- /* @__PURE__ */ jsx32(
16880
+ return /* @__PURE__ */ jsxs31("div", { "data-slot": "checkout-terms", className: cn27("space-y-1", className), children: [
16881
+ /* @__PURE__ */ jsxs31("div", { className: "flex items-start gap-3", children: [
16882
+ /* @__PURE__ */ jsx33(
16452
16883
  "input",
16453
16884
  {
16454
16885
  id: boxId,
@@ -16461,9 +16892,9 @@ function CheckoutTermsAcceptance({
16461
16892
  className: "mt-0.5 size-5 shrink-0 cursor-pointer accent-primary"
16462
16893
  }
16463
16894
  ),
16464
- /* @__PURE__ */ jsxs30("label", { htmlFor: boxId, className: "text-sm leading-relaxed", children: [
16895
+ /* @__PURE__ */ jsxs31("label", { htmlFor: boxId, className: "text-sm leading-relaxed", children: [
16465
16896
  before,
16466
- /* @__PURE__ */ jsxs30(
16897
+ /* @__PURE__ */ jsxs31(
16467
16898
  "a",
16468
16899
  {
16469
16900
  href: copy.termsLinkUrl ?? termsHref,
@@ -16471,9 +16902,9 @@ function CheckoutTermsAcceptance({
16471
16902
  className: "font-medium underline underline-offset-2 hover:text-primary",
16472
16903
  children: [
16473
16904
  copy.termsLinkText,
16474
- newTab ? /* @__PURE__ */ jsxs30(Fragment7, { children: [
16905
+ newTab ? /* @__PURE__ */ jsxs31(Fragment7, { children: [
16475
16906
  " ",
16476
- /* @__PURE__ */ jsx32("span", { className: "sr-only", children: newTabHint })
16907
+ /* @__PURE__ */ jsx33("span", { className: "sr-only", children: newTabHint })
16477
16908
  ] }) : null
16478
16909
  ]
16479
16910
  }
@@ -16481,7 +16912,7 @@ function CheckoutTermsAcceptance({
16481
16912
  after
16482
16913
  ] })
16483
16914
  ] }),
16484
- error ? /* @__PURE__ */ jsx32("p", { id: errorId, className: "pl-8 text-sm text-destructive", children: error }) : null
16915
+ error ? /* @__PURE__ */ jsx33("p", { id: errorId, className: "pl-8 text-sm text-destructive", children: error }) : null
16485
16916
  ] });
16486
16917
  }
16487
16918
  function toCheckoutTermsFields(copy, accepted) {
@@ -16490,8 +16921,8 @@ function toCheckoutTermsFields(copy, accepted) {
16490
16921
  }
16491
16922
 
16492
16923
  // src/components/checkout-pay-action.tsx
16493
- import { cn as cn27 } from "@reblu/site-ui/utils";
16494
- import { jsx as jsx33, jsxs as jsxs31 } from "react/jsx-runtime";
16924
+ import { cn as cn28 } from "@reblu/site-ui/utils";
16925
+ import { jsx as jsx34, jsxs as jsxs32 } from "react/jsx-runtime";
16495
16926
  function CheckoutPayAction({
16496
16927
  label,
16497
16928
  notice,
@@ -16505,28 +16936,50 @@ function CheckoutPayAction({
16505
16936
  }) {
16506
16937
  const noticeId = `${id}-notice`;
16507
16938
  const isDisabled = submitting || disabled;
16508
- return /* @__PURE__ */ jsxs31("div", { "data-slot": "checkout-pay-action", className: cn27("space-y-3", className), children: [
16509
- /* @__PURE__ */ jsx33(
16939
+ return /* @__PURE__ */ jsxs32("div", { "data-slot": "checkout-pay-action", className: cn28("space-y-3", className), children: [
16940
+ /* @__PURE__ */ jsx34(
16510
16941
  "button",
16511
16942
  {
16512
16943
  type: "submit",
16513
16944
  disabled: isDisabled,
16514
16945
  "aria-busy": submitting || void 0,
16515
16946
  "aria-describedby": notice ? noticeId : void 0,
16516
- className: buttonClassName ?? cn27(
16947
+ className: buttonClassName ?? cn28(
16517
16948
  "flex w-full items-center justify-center gap-2 rounded-xl px-4 py-3 text-base font-semibold transition-all",
16518
16949
  isDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "cursor-pointer bg-primary text-primary-foreground hover:bg-primary/90"
16519
16950
  ),
16520
16951
  children: submitting ? submittingLabel : label
16521
16952
  }
16522
16953
  ),
16523
- notice ? /* @__PURE__ */ jsx33("p", { id: noticeId, "data-slot": "checkout-pay-notice", className: noticeClassName ?? "text-sm text-muted-foreground", children: notice }) : null
16954
+ notice ? /* @__PURE__ */ jsx34("p", { id: noticeId, "data-slot": "checkout-pay-notice", className: noticeClassName ?? "text-sm text-muted-foreground", children: notice }) : null
16524
16955
  ] });
16525
16956
  }
16526
16957
 
16958
+ // src/lib/course-guest-checkout.ts
16959
+ function courseSellsAsGuest(course) {
16960
+ return course.salesEnabled && !course.requiresValidation && course.priceCents > 0;
16961
+ }
16962
+ function toAcademyCheckoutInvoiceFields(value, overCap, issuesInvoices = true) {
16963
+ if (!issuesInvoices) return {};
16964
+ if (!value.wantsFullInvoice && !overCap) return {};
16965
+ const billing = {
16966
+ billingName: value.billingName.trim(),
16967
+ billingNif: value.billingNif.trim(),
16968
+ billingIdType: value.billingIdType,
16969
+ ...value.billingIdType === "NIF" ? {} : { billingIdCountry: value.billingIdCountry },
16970
+ billingAddress: {
16971
+ street: value.street.trim(),
16972
+ postalCode: value.postalCode.trim(),
16973
+ city: value.city.trim(),
16974
+ country: value.country
16975
+ }
16976
+ };
16977
+ return { ...value.wantsFullInvoice ? { wantsFullInvoice: true } : {}, billing };
16978
+ }
16979
+
16527
16980
  // src/components/contact-interest-field.tsx
16528
- import { cn as cn28 } from "@reblu/site-ui/utils";
16529
- import { jsx as jsx34, jsxs as jsxs32 } from "react/jsx-runtime";
16981
+ import { cn as cn29 } from "@reblu/site-ui/utils";
16982
+ import { jsx as jsx35, jsxs as jsxs33 } from "react/jsx-runtime";
16530
16983
  function ContactInterestField({
16531
16984
  interest,
16532
16985
  value,
@@ -16543,18 +16996,18 @@ function ContactInterestField({
16543
16996
  else next2.delete(option2);
16544
16997
  onChange(interest.options.filter((candidate) => next2.has(candidate)));
16545
16998
  };
16546
- return /* @__PURE__ */ jsxs32("fieldset", { "data-slot": "contact-interest", className: cn28("space-y-2", className), children: [
16547
- /* @__PURE__ */ jsx34("legend", { className: "text-sm font-medium", children: interest.label }),
16548
- /* @__PURE__ */ jsx34("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
16999
+ return /* @__PURE__ */ jsxs33("fieldset", { "data-slot": "contact-interest", className: cn29("space-y-2", className), children: [
17000
+ /* @__PURE__ */ jsx35("legend", { className: "text-sm font-medium", children: interest.label }),
17001
+ /* @__PURE__ */ jsx35("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
16549
17002
  const id = `${idPrefix}-${index}`;
16550
- return /* @__PURE__ */ jsxs32(
17003
+ return /* @__PURE__ */ jsxs33(
16551
17004
  "label",
16552
17005
  {
16553
17006
  htmlFor: id,
16554
17007
  "data-slot": "contact-interest-option",
16555
17008
  className: "flex items-center gap-2 text-sm",
16556
17009
  children: [
16557
- /* @__PURE__ */ jsx34(
17010
+ /* @__PURE__ */ jsx35(
16558
17011
  "input",
16559
17012
  {
16560
17013
  id,
@@ -16579,6 +17032,9 @@ export {
16579
17032
  ALLOWED_YOUTUBE_HOSTS,
16580
17033
  AddedToCartToast,
16581
17034
  ArbitrationBadge,
17035
+ BeforeAfterPairs,
17036
+ CARD_ICON_NAMES,
17037
+ CardIconSvg,
16582
17038
  CartAdjustmentsNotice,
16583
17039
  CartLineIncludes,
16584
17040
  CartLineList,
@@ -16587,14 +17043,18 @@ export {
16587
17043
  CheckoutForm,
16588
17044
  CheckoutLoginPrompt,
16589
17045
  CheckoutPayAction,
17046
+ CheckoutQuoteNotice,
16590
17047
  CheckoutQuoteSummary,
16591
17048
  CheckoutTermsAcceptance,
17049
+ ChipList,
16592
17050
  ContactInterestField,
16593
17051
  CourseCatalogFilters,
16594
17052
  CourseDescription,
16595
17053
  CoursePurchaseTerms,
16596
17054
  DATA_REQUEST_TYPES,
17055
+ DEFAULT_BEFORE_AFTER_LABELS,
16597
17056
  DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS,
17057
+ DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS,
16598
17058
  DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS,
16599
17059
  DEFAULT_COURSE_CATALOG_FILTERS_LABELS,
16600
17060
  DEFAULT_COURSE_PRICE_BANDS,
@@ -16611,6 +17071,8 @@ export {
16611
17071
  EMPTY_FULL_INVOICE_VALUE,
16612
17072
  FaqAccordion,
16613
17073
  FullInvoiceFields,
17074
+ IconCardGrid,
17075
+ ImageTextSplit,
16614
17076
  LegalDocument,
16615
17077
  LessonPreview,
16616
17078
  MarkdownRenderer,
@@ -16631,11 +17093,14 @@ export {
16631
17093
  buildFaqPageJsonLd,
16632
17094
  buildShareUrls,
16633
17095
  bundleComponentsToIncludes,
17096
+ checkoutQuoteNotice,
16634
17097
  collectFaqItems,
17098
+ courseSellsAsGuest,
16635
17099
  defaultCheckoutFulfillment,
16636
17100
  formatPrice,
16637
17101
  getShopErrorMessage,
16638
17102
  isAllowedYouTubeHost,
17103
+ isCheckoutDeliveryComplete,
16639
17104
  isOverSimplifiedInvoiceCap,
16640
17105
  markdownToPlainText,
16641
17106
  markdownToSafeHtml,
@@ -16644,6 +17109,7 @@ export {
16644
17109
  sanitizeHtml,
16645
17110
  shopIssuesInvoices,
16646
17111
  shouldRenderShopFilters,
17112
+ toAcademyCheckoutInvoiceFields,
16647
17113
  toCheckoutFulfillmentFields,
16648
17114
  toCheckoutInvoiceFields,
16649
17115
  toCheckoutTermsFields