@reblu/site-blocks 0.29.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,16 +15473,44 @@ 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",
15090
15481
  increase: "Aumentar cantidad",
15091
15482
  remove: "Eliminar",
15092
15483
  unitPriceSuffix: "/ ud.",
15093
- cancelledNotice: "Pago cancelado: tu carrito sigue aqu\xED"
15484
+ cancelledNotice: "Pago cancelado: tu carrito sigue aqu\xED",
15485
+ includesSummary: "Qu\xE9 incluye"
15094
15486
  };
15487
+ function CartLineIncludes({ entries, note, className }) {
15488
+ const hasNote = note != null && note !== false && note !== "";
15489
+ if (entries.length === 0 && !hasNote) return null;
15490
+ return /* @__PURE__ */ jsxs21(
15491
+ "div",
15492
+ {
15493
+ className: cn16("mt-2 space-y-2 rounded-lg bg-muted px-4 py-3 text-sm", className),
15494
+ "data-slot": "cart-line-includes",
15495
+ children: [
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) => (
15497
+ // eslint-disable-next-line react/no-array-index-key -- entries are positional, SITE-built rows
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 })
15501
+ ] }, idx)
15502
+ )) }),
15503
+ hasNote && /* @__PURE__ */ jsx22("p", { className: "text-muted-foreground", children: note })
15504
+ ]
15505
+ }
15506
+ );
15507
+ }
15508
+ function bundleComponentsToIncludes(components) {
15509
+ return components.map(({ quantity, component }) => ({
15510
+ label: component.name,
15511
+ value: `x${quantity}`
15512
+ }));
15513
+ }
15095
15514
  function lineKey(productId, variantId) {
15096
15515
  return `${productId}-${variantId ?? "no-variant"}`;
15097
15516
  }
@@ -15102,6 +15521,7 @@ function CartLineList({
15102
15521
  liveMessage,
15103
15522
  notice,
15104
15523
  lineMessage,
15524
+ lineIncludes,
15105
15525
  labels,
15106
15526
  currencyCode,
15107
15527
  locale,
@@ -15109,9 +15529,9 @@ function CartLineList({
15109
15529
  }) {
15110
15530
  const t = { ...DEFAULT_LABELS2, ...labels };
15111
15531
  const noticeContent = notice === true ? t.cancelledNotice : notice;
15112
- return /* @__PURE__ */ jsxs20("div", { className: cn15("space-y-4", className), "data-slot": "cart-line-list", children: [
15113
- /* @__PURE__ */ jsx21("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
15114
- 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(
15115
15535
  "div",
15116
15536
  {
15117
15537
  role: "status",
@@ -15120,33 +15540,34 @@ function CartLineList({
15120
15540
  children: noticeContent
15121
15541
  }
15122
15542
  ),
15123
- /* @__PURE__ */ jsx21("ul", { className: "space-y-4", children: items.map((item) => {
15543
+ /* @__PURE__ */ jsx22("ul", { className: "space-y-4", children: items.map((item) => {
15124
15544
  const maxQty = item.maxStock ?? Infinity;
15125
15545
  const atMax = item.quantity >= maxQty;
15126
15546
  const atMin = item.quantity <= 1;
15127
15547
  const message = lineMessage?.(item);
15128
- return /* @__PURE__ */ jsxs20(
15548
+ const includes = lineIncludes?.(item);
15549
+ return /* @__PURE__ */ jsxs21(
15129
15550
  "li",
15130
15551
  {
15131
15552
  className: "flex gap-4 rounded-xl border border-border bg-card p-4",
15132
15553
  children: [
15133
- /* @__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 }),
15134
- /* @__PURE__ */ jsxs20("div", { className: "min-w-0 flex-1", children: [
15135
- /* @__PURE__ */ jsx21("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
15136
- item.variantName && /* @__PURE__ */ jsx21("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
15137
- /* @__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: [
15138
15559
  formatPrice(item.unitPrice, currencyCode, locale),
15139
15560
  " ",
15140
15561
  t.unitPriceSuffix
15141
15562
  ] }),
15142
- /* @__PURE__ */ jsxs20(
15563
+ /* @__PURE__ */ jsxs21(
15143
15564
  "div",
15144
15565
  {
15145
15566
  role: "group",
15146
15567
  "aria-label": t.quantityLabel,
15147
15568
  className: "mt-3 flex items-center gap-3",
15148
15569
  children: [
15149
- /* @__PURE__ */ jsx21(
15570
+ /* @__PURE__ */ jsx22(
15150
15571
  "button",
15151
15572
  {
15152
15573
  type: "button",
@@ -15157,8 +15578,8 @@ function CartLineList({
15157
15578
  children: "\u2212"
15158
15579
  }
15159
15580
  ),
15160
- /* @__PURE__ */ jsx21("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
15161
- /* @__PURE__ */ jsx21(
15581
+ /* @__PURE__ */ jsx22("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
15582
+ /* @__PURE__ */ jsx22(
15162
15583
  "button",
15163
15584
  {
15164
15585
  type: "button",
@@ -15169,7 +15590,7 @@ function CartLineList({
15169
15590
  children: "+"
15170
15591
  }
15171
15592
  ),
15172
- onRemove && /* @__PURE__ */ jsx21(
15593
+ onRemove && /* @__PURE__ */ jsx22(
15173
15594
  "button",
15174
15595
  {
15175
15596
  type: "button",
@@ -15182,16 +15603,20 @@ function CartLineList({
15182
15603
  ]
15183
15604
  }
15184
15605
  ),
15185
- message != null && message !== false && /* @__PURE__ */ jsx21(
15606
+ message != null && message !== false && /* @__PURE__ */ jsx22(
15186
15607
  "p",
15187
15608
  {
15188
15609
  className: "mt-2 text-sm text-destructive",
15189
15610
  "data-slot": "cart-line-list-line-message",
15190
15611
  children: message
15191
15612
  }
15192
- )
15613
+ ),
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 }),
15616
+ includes
15617
+ ] })
15193
15618
  ] }),
15194
- /* @__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) }) })
15195
15620
  ]
15196
15621
  },
15197
15622
  lineKey(item.productId, item.variantId)
@@ -15201,8 +15626,8 @@ function CartLineList({
15201
15626
  }
15202
15627
 
15203
15628
  // src/components/cart-summary.tsx
15204
- import { cn as cn16 } from "@reblu/site-ui/utils";
15205
- 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";
15206
15631
  var DEFAULT_LABELS3 = {
15207
15632
  subtotal: "Subtotal",
15208
15633
  discountPrefix: "Descuento",
@@ -15232,37 +15657,37 @@ function CartSummary({
15232
15657
  const hasDiscount = Boolean(discountAmount && discountAmount > 0);
15233
15658
  const noticeContent = notice === true ? t.cancelledNotice : notice;
15234
15659
  const hasNotice = noticeContent != null && noticeContent !== false;
15235
- const breakdown = /* @__PURE__ */ jsxs21(
15660
+ const breakdown = /* @__PURE__ */ jsxs22(
15236
15661
  "dl",
15237
15662
  {
15238
- className: cn16("space-y-2 text-sm", !hasNotice && className),
15663
+ className: cn17("space-y-2 text-sm", !hasNotice && className),
15239
15664
  "data-slot": "cart-summary",
15240
15665
  children: [
15241
- /* @__PURE__ */ jsxs21("div", { className: "flex justify-between text-muted-foreground", children: [
15242
- /* @__PURE__ */ jsx22("dt", { children: t.subtotal }),
15243
- /* @__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) })
15244
15669
  ] }),
15245
- hasDiscount && /* @__PURE__ */ jsxs21("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
15246
- /* @__PURE__ */ jsx22("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
15247
- /* @__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: [
15248
15673
  "-",
15249
15674
  formatPrice(discountAmount, currencyCode, locale)
15250
15675
  ] })
15251
15676
  ] }),
15252
- shippingEnabled && /* @__PURE__ */ jsxs21("div", { className: "flex justify-between text-muted-foreground", children: [
15253
- /* @__PURE__ */ jsx22("dt", { children: t.shipping }),
15254
- /* @__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) })
15255
15680
  ] }),
15256
- /* @__PURE__ */ jsxs21("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
15257
- /* @__PURE__ */ jsx22("dt", { children: t.total }),
15258
- /* @__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) })
15259
15684
  ] })
15260
15685
  ]
15261
15686
  }
15262
15687
  );
15263
15688
  if (!hasNotice) return breakdown;
15264
- return /* @__PURE__ */ jsxs21("div", { className: cn16("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
15265
- /* @__PURE__ */ jsx22(
15689
+ return /* @__PURE__ */ jsxs22("div", { className: cn17("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
15690
+ /* @__PURE__ */ jsx23(
15266
15691
  "div",
15267
15692
  {
15268
15693
  role: "status",
@@ -15276,8 +15701,8 @@ function CartSummary({
15276
15701
  }
15277
15702
 
15278
15703
  // src/components/cart-adjustments-notice.tsx
15279
- import { cn as cn17 } from "@reblu/site-ui/utils";
15280
- 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";
15281
15706
  var DEFAULT_LABELS4 = {
15282
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.`,
15283
15708
  quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
@@ -15311,20 +15736,20 @@ function CartAdjustmentsNotice({
15311
15736
  );
15312
15737
  }
15313
15738
  if (messages.length === 0) return null;
15314
- return /* @__PURE__ */ jsx23(
15739
+ return /* @__PURE__ */ jsx24(
15315
15740
  "div",
15316
15741
  {
15317
15742
  role: "status",
15318
- 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),
15319
15744
  "data-slot": "cart-adjustments-notice",
15320
- 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)) })
15321
15746
  }
15322
15747
  );
15323
15748
  }
15324
15749
 
15325
15750
  // src/components/added-to-cart-toast.tsx
15326
- import { cn as cn18 } from "@reblu/site-ui/utils";
15327
- 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";
15328
15753
  var DEFAULT_LABELS5 = {
15329
15754
  success: "A\xF1adido al carrito",
15330
15755
  error: "No se pudo a\xF1adir al carrito",
@@ -15344,12 +15769,12 @@ function AddedToCartToast({
15344
15769
  const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
15345
15770
  const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
15346
15771
  const variant = status === "success" ? "success" : "error";
15347
- return /* @__PURE__ */ jsxs22(
15772
+ return /* @__PURE__ */ jsxs23(
15348
15773
  "div",
15349
15774
  {
15350
15775
  "data-slot": "added-to-cart-toast",
15351
15776
  "data-variant": variant,
15352
- className: cn18(
15777
+ className: cn19(
15353
15778
  "flex items-center gap-3 rounded-xl border border-border bg-card p-3 text-sm shadow-lg",
15354
15779
  variant === "success" && "border-green-600/30 dark:border-green-400/30",
15355
15780
  variant === "error" && "border-destructive/30",
@@ -15357,20 +15782,20 @@ function AddedToCartToast({
15357
15782
  ),
15358
15783
  children: [
15359
15784
  hasThumbnail && // eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
15360
- /* @__PURE__ */ jsx24("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
15361
- /* @__PURE__ */ jsxs22("div", { className: "min-w-0 flex-1", children: [
15362
- /* @__PURE__ */ jsx24("p", { className: "truncate font-semibold text-foreground", children: productName }),
15363
- /* @__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 })
15364
15789
  ] }),
15365
- /* @__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 }) })
15366
15791
  ]
15367
15792
  }
15368
15793
  );
15369
15794
  }
15370
15795
 
15371
15796
  // src/components/checkout-login-prompt.tsx
15372
- import { cn as cn19 } from "@reblu/site-ui/utils";
15373
- 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";
15374
15799
  var DEFAULT_LABELS6 = {
15375
15800
  title: "Identificaci\xF3n",
15376
15801
  description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
@@ -15397,26 +15822,26 @@ function CheckoutLoginPrompt({
15397
15822
  if (!open) return null;
15398
15823
  const t = { ...DEFAULT_LABELS6, ...labels };
15399
15824
  const isValidEmail = EMAIL_PATTERN.test(email.trim());
15400
- return /* @__PURE__ */ jsxs23(Fragment4, { children: [
15401
- /* @__PURE__ */ jsx25("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
15402
- /* @__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(
15403
15828
  "div",
15404
15829
  {
15405
15830
  role: "dialog",
15406
15831
  "aria-modal": "true",
15407
15832
  "aria-labelledby": "checkout-login-prompt-title",
15408
15833
  "data-slot": "checkout-login-prompt",
15409
- className: cn19(
15834
+ className: cn20(
15410
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",
15411
15836
  className
15412
15837
  ),
15413
15838
  children: [
15414
- /* @__PURE__ */ jsxs23("div", { className: "flex items-start justify-between gap-3", children: [
15415
- /* @__PURE__ */ jsxs23("div", { children: [
15416
- /* @__PURE__ */ jsx25("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
15417
- /* @__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 })
15418
15843
  ] }),
15419
- /* @__PURE__ */ jsx25(
15844
+ /* @__PURE__ */ jsx26(
15420
15845
  "button",
15421
15846
  {
15422
15847
  type: "button",
@@ -15427,9 +15852,9 @@ function CheckoutLoginPrompt({
15427
15852
  }
15428
15853
  )
15429
15854
  ] }),
15430
- /* @__PURE__ */ jsxs23("div", { className: "space-y-2", children: [
15431
- /* @__PURE__ */ jsx25("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
15432
- /* @__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(
15433
15858
  "input",
15434
15859
  {
15435
15860
  id: "checkout-login-prompt-email",
@@ -15438,29 +15863,29 @@ function CheckoutLoginPrompt({
15438
15863
  value: email,
15439
15864
  onChange: (e) => onEmailChange(e.target.value),
15440
15865
  placeholder: t.emailPlaceholder,
15441
- className: cn19(
15866
+ className: cn20(
15442
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",
15443
15868
  error ? "border-destructive" : "border-border focus:border-primary"
15444
15869
  )
15445
15870
  }
15446
15871
  ),
15447
- error && /* @__PURE__ */ jsx25("p", { className: "text-xs text-destructive", children: error })
15872
+ error && /* @__PURE__ */ jsx26("p", { className: "text-xs text-destructive", children: error })
15448
15873
  ] }),
15449
- /* @__PURE__ */ jsxs23("div", { className: "space-y-2", children: [
15450
- /* @__PURE__ */ jsx25(
15874
+ /* @__PURE__ */ jsxs24("div", { className: "space-y-2", children: [
15875
+ /* @__PURE__ */ jsx26(
15451
15876
  "button",
15452
15877
  {
15453
15878
  type: "button",
15454
15879
  onClick: onSubmitEmail,
15455
15880
  disabled: checking || !isValidEmail,
15456
- className: cn19(
15881
+ className: cn20(
15457
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",
15458
15883
  checking || !isValidEmail ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
15459
15884
  ),
15460
15885
  children: checking ? t.checking : t.continueWithEmail
15461
15886
  }
15462
15887
  ),
15463
- /* @__PURE__ */ jsx25(
15888
+ /* @__PURE__ */ jsx26(
15464
15889
  "button",
15465
15890
  {
15466
15891
  type: "button",
@@ -15477,9 +15902,9 @@ function CheckoutLoginPrompt({
15477
15902
  }
15478
15903
 
15479
15904
  // src/components/checkout-form.tsx
15480
- import { cn as cn20 } from "@reblu/site-ui/utils";
15905
+ import { cn as cn21 } from "@reblu/site-ui/utils";
15481
15906
  import { PhoneInput } from "@reblu/site-ui/phone-input";
15482
- 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";
15483
15908
  var DEFAULT_LABELS7 = {
15484
15909
  contactTitle: "Datos de contacto",
15485
15910
  nameLabel: "Nombre completo",
@@ -15535,22 +15960,22 @@ function CheckoutForm({
15535
15960
  event.preventDefault();
15536
15961
  if (discountCode.trim() && !discountApplying) onApplyDiscount();
15537
15962
  }
15538
- return /* @__PURE__ */ jsxs24(Fragment5, { children: [
15963
+ return /* @__PURE__ */ jsxs25(Fragment5, { children: [
15539
15964
  loginPrompt,
15540
- /* @__PURE__ */ jsxs24(
15965
+ /* @__PURE__ */ jsxs25(
15541
15966
  "form",
15542
15967
  {
15543
15968
  "data-testid": "checkout-form",
15544
15969
  onSubmit,
15545
- className: cn20("space-y-8", className),
15970
+ className: cn21("space-y-8", className),
15546
15971
  "data-slot": "checkout-form",
15547
15972
  children: [
15548
- /* @__PURE__ */ jsxs24("section", { className: "space-y-4", children: [
15549
- /* @__PURE__ */ jsx26("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
15550
- /* @__PURE__ */ jsxs24("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15551
- /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15552
- /* @__PURE__ */ jsx26("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
15553
- /* @__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(
15554
15979
  "input",
15555
15980
  {
15556
15981
  id: "checkout-form-name",
@@ -15559,17 +15984,17 @@ function CheckoutForm({
15559
15984
  value: contact.name,
15560
15985
  onChange: (e) => patchContact({ name: e.target.value }),
15561
15986
  placeholder: t.namePlaceholder,
15562
- className: cn20(
15987
+ className: cn21(
15563
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",
15564
15989
  contactErrors?.name ? "border-destructive" : "border-border focus:border-primary"
15565
15990
  )
15566
15991
  }
15567
15992
  ),
15568
- 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 })
15569
15994
  ] }),
15570
- /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15571
- /* @__PURE__ */ jsx26("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
15572
- /* @__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(
15573
15998
  "input",
15574
15999
  {
15575
16000
  id: "checkout-form-email",
@@ -15578,15 +16003,15 @@ function CheckoutForm({
15578
16003
  value: contact.email,
15579
16004
  onChange: (e) => patchContact({ email: e.target.value }),
15580
16005
  placeholder: t.emailPlaceholder,
15581
- className: cn20(
16006
+ className: cn21(
15582
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",
15583
16008
  contactErrors?.email ? "border-destructive" : "border-border focus:border-primary"
15584
16009
  )
15585
16010
  }
15586
16011
  ),
15587
- 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 })
15588
16013
  ] }),
15589
- /* @__PURE__ */ jsx26("div", { className: "space-y-1", children: /* @__PURE__ */ jsx26(
16014
+ /* @__PURE__ */ jsx27("div", { className: "space-y-1", children: /* @__PURE__ */ jsx27(
15590
16015
  PhoneInput,
15591
16016
  {
15592
16017
  id: "checkout-form-phone",
@@ -15600,26 +16025,26 @@ function CheckoutForm({
15600
16025
  ] })
15601
16026
  ] }),
15602
16027
  children2,
15603
- generalError ? /* @__PURE__ */ jsx26("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
15604
- /* @__PURE__ */ jsxs24("section", { className: "space-y-3", children: [
15605
- /* @__PURE__ */ jsx26("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
15606
- 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(
15607
16032
  "div",
15608
16033
  {
15609
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",
15610
16035
  "data-slot": "checkout-staff-discount",
15611
16036
  children: [
15612
- /* @__PURE__ */ jsx26("span", { className: "font-semibold", children: t.staffDiscountApplied }),
15613
- /* @__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)) })
15614
16039
  ]
15615
16040
  }
15616
16041
  ) : null,
15617
- 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: [
15618
- /* @__PURE__ */ jsxs24("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
15619
- /* @__PURE__ */ jsx26("span", { className: "font-semibold", children: appliedDiscount.code }),
15620
- /* @__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)) })
15621
16046
  ] }),
15622
- /* @__PURE__ */ jsx26(
16047
+ /* @__PURE__ */ jsx27(
15623
16048
  "button",
15624
16049
  {
15625
16050
  type: "button",
@@ -15629,9 +16054,9 @@ function CheckoutForm({
15629
16054
  children: t.removeDiscount
15630
16055
  }
15631
16056
  )
15632
- ] }) : /* @__PURE__ */ jsxs24("div", { className: "flex gap-2", children: [
15633
- /* @__PURE__ */ jsx26("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
15634
- /* @__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(
15635
16060
  "input",
15636
16061
  {
15637
16062
  id: "checkout-form-discount-code",
@@ -15643,7 +16068,7 @@ function CheckoutForm({
15643
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"
15644
16069
  }
15645
16070
  ),
15646
- /* @__PURE__ */ jsx26(
16071
+ /* @__PURE__ */ jsx27(
15647
16072
  "button",
15648
16073
  {
15649
16074
  type: "button",
@@ -15654,14 +16079,14 @@ function CheckoutForm({
15654
16079
  }
15655
16080
  )
15656
16081
  ] }),
15657
- discountError && /* @__PURE__ */ jsx26("p", { className: "text-xs text-destructive", children: discountError })
16082
+ discountError && /* @__PURE__ */ jsx27("p", { className: "text-xs text-destructive", children: discountError })
15658
16083
  ] }),
15659
- /* @__PURE__ */ jsx26(
16084
+ /* @__PURE__ */ jsx27(
15660
16085
  "button",
15661
16086
  {
15662
16087
  type: "submit",
15663
16088
  disabled: submitting || submitDisabled,
15664
- className: cn20(
16089
+ className: cn21(
15665
16090
  "flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-3 font-semibold transition-all",
15666
16091
  submitting || submitDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
15667
16092
  ),
@@ -15675,11 +16100,11 @@ function CheckoutForm({
15675
16100
  }
15676
16101
 
15677
16102
  // src/components/order-confirmation.tsx
15678
- import { cn as cn22 } from "@reblu/site-ui/utils";
16103
+ import { cn as cn23 } from "@reblu/site-ui/utils";
15679
16104
 
15680
16105
  // src/components/order-invoice-link.tsx
15681
- import { cn as cn21 } from "@reblu/site-ui/utils";
15682
- 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";
15683
16108
  var DEFAULT_LABELS8 = {
15684
16109
  linkLabel: "Descargar la factura {number}",
15685
16110
  signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
@@ -15687,8 +16112,8 @@ var DEFAULT_LABELS8 = {
15687
16112
  function OrderInvoiceLink({ invoice, labels, className }) {
15688
16113
  if (!invoice) return null;
15689
16114
  const t = { ...DEFAULT_LABELS8, ...labels };
15690
- return /* @__PURE__ */ jsxs25("div", { className: cn21("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
15691
- /* @__PURE__ */ jsx27(
16115
+ return /* @__PURE__ */ jsxs26("div", { className: cn22("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
16116
+ /* @__PURE__ */ jsx28(
15692
16117
  "a",
15693
16118
  {
15694
16119
  href: invoice.url,
@@ -15696,19 +16121,21 @@ function OrderInvoiceLink({ invoice, labels, className }) {
15696
16121
  children: t.linkLabel.replace("{number}", invoice.number)
15697
16122
  }
15698
16123
  ),
15699
- /* @__PURE__ */ jsx27("p", { className: "text-muted-foreground", children: t.signInHint })
16124
+ /* @__PURE__ */ jsx28("p", { className: "text-muted-foreground", children: t.signInHint })
15700
16125
  ] });
15701
16126
  }
15702
16127
 
15703
16128
  // src/components/order-confirmation.tsx
15704
- import { jsx as jsx28, jsxs as jsxs26 } from "react/jsx-runtime";
16129
+ import { jsx as jsx29, jsxs as jsxs27 } from "react/jsx-runtime";
15705
16130
  var DEFAULT_LABELS9 = {
15706
16131
  pollingTitle: "Confirmando tu pedido\u2026",
15707
16132
  pollingDescription: "Estamos procesando el pago, un momento\u2026",
15708
16133
  foundTitle: "\xA1Pedido confirmado!",
15709
- // REB-1085: every buyer gets a customer account; the order email carries
15710
- // the access link. Files are never served from this page.
15711
- 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.",
15712
16139
  timeoutTitle: "Pago recibido",
15713
16140
  timeoutDescription: "Tu pago se ha procesado. Recibir\xE1s un email de confirmaci\xF3n en breve.",
15714
16141
  orderNumberLabel: "Pedido confirmado",
@@ -15734,6 +16161,12 @@ var DEFAULT_LABELS9 = {
15734
16161
  invoiceLinkLabel: "Descargar la factura {number}",
15735
16162
  invoiceSignInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
15736
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
+ }
15737
16170
  function OrderConfirmation({
15738
16171
  status,
15739
16172
  order,
@@ -15760,50 +16193,50 @@ function OrderConfirmation({
15760
16193
  }
15761
16194
  if (status === "not_found") return { title: t.notFoundTitle, description: t.notFoundDescription };
15762
16195
  if (status === "error") return { title: t.errorTitle, description: t.errorDescription };
15763
- if (isFound || order) return { title: t.foundTitle, description: t.foundDescription };
16196
+ if (isFound || order) return { title: t.foundTitle, description: foundDescription(t, order) };
15764
16197
  return { title: t.timeoutTitle, description: t.timeoutDescription };
15765
16198
  })();
15766
16199
  const showFullOrderSummary = Boolean(order) && (isFound || status === "timeout");
15767
16200
  const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
15768
16201
  const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
15769
16202
  const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
15770
- return /* @__PURE__ */ jsxs26("div", { className: cn22("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
15771
- /* @__PURE__ */ jsx28("h1", { className: "text-3xl font-bold", children: title }),
15772
- /* @__PURE__ */ jsx28("p", { className: "text-lg text-muted-foreground", children: description }),
15773
- showFullOrderSummary && order && /* @__PURE__ */ jsxs26("div", { className: "space-y-6", children: [
15774
- /* @__PURE__ */ jsxs26("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15775
- /* @__PURE__ */ jsx28("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
15776
- /* @__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 })
15777
16210
  ] }),
15778
- /* @__PURE__ */ jsxs26("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
15779
- 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(
15780
16213
  "div",
15781
16214
  {
15782
16215
  className: "flex justify-between gap-4 text-sm",
15783
16216
  children: [
15784
- /* @__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: [
15785
16218
  item.product.name,
15786
16219
  item.variant ? ` (${item.variant.name})` : "",
15787
16220
  " x",
15788
16221
  item.quantity
15789
16222
  ] }),
15790
- /* @__PURE__ */ jsx28("span", { children: formatPrice(item.total, currencyCode, locale) })
16223
+ /* @__PURE__ */ jsx29("span", { children: formatPrice(item.total, currencyCode, locale) })
15791
16224
  ]
15792
16225
  },
15793
16226
  idx
15794
16227
  )),
15795
- /* @__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: [
15796
- /* @__PURE__ */ jsx28("span", { children: t.totalLabel }),
15797
- /* @__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) })
15798
16231
  ] }) })
15799
16232
  ] }),
15800
- /* @__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: [
15801
16234
  t.confirmationEmailPrefix,
15802
16235
  " ",
15803
- /* @__PURE__ */ jsx28("span", { className: "font-medium text-foreground", children: order.customerEmail }),
16236
+ /* @__PURE__ */ jsx29("span", { className: "font-medium text-foreground", children: order.customerEmail }),
15804
16237
  "."
15805
16238
  ] }),
15806
- /* @__PURE__ */ jsx28(
16239
+ /* @__PURE__ */ jsx29(
15807
16240
  OrderInvoiceLink,
15808
16241
  {
15809
16242
  invoice: order.invoice,
@@ -15811,11 +16244,11 @@ function OrderConfirmation({
15811
16244
  }
15812
16245
  )
15813
16246
  ] }),
15814
- showOrderReference && order && /* @__PURE__ */ jsxs26("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15815
- /* @__PURE__ */ jsx28("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
15816
- /* @__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 })
15817
16250
  ] }),
15818
- status === "failed" && cartHref && /* @__PURE__ */ jsx28(
16251
+ status === "failed" && cartHref && /* @__PURE__ */ jsx29(
15819
16252
  "a",
15820
16253
  {
15821
16254
  href: cartHref,
@@ -15823,7 +16256,7 @@ function OrderConfirmation({
15823
16256
  children: t.backToCartLabel
15824
16257
  }
15825
16258
  ),
15826
- showRecheck && /* @__PURE__ */ jsx28(
16259
+ showRecheck && /* @__PURE__ */ jsx29(
15827
16260
  "button",
15828
16261
  {
15829
16262
  type: "button",
@@ -15832,16 +16265,16 @@ function OrderConfirmation({
15832
16265
  children: t.recheckLabel
15833
16266
  }
15834
16267
  ),
15835
- showSessionReference && /* @__PURE__ */ jsxs26("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15836
- /* @__PURE__ */ jsx28("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
15837
- /* @__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 })
15838
16271
  ] })
15839
16272
  ] });
15840
16273
  }
15841
16274
 
15842
16275
  // src/components/full-invoice-fields.tsx
15843
- import { cn as cn23 } from "@reblu/site-ui/utils";
15844
- 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";
15845
16278
  var EMPTY_FULL_INVOICE_VALUE = {
15846
16279
  wantsFullInvoice: false,
15847
16280
  billingIdType: "NIF",
@@ -15958,12 +16391,12 @@ function FullInvoiceFields({
15958
16391
  const showFields = value.wantsFullInvoice || overCap;
15959
16392
  const isSpanishNif = value.billingIdType === "NIF";
15960
16393
  const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
15961
- 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;
15962
16395
  const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
15963
- return /* @__PURE__ */ jsxs27("section", { className: cn23("space-y-4", className), "data-slot": "full-invoice-fields", children: [
15964
- 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: [
15965
- /* @__PURE__ */ jsxs27("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
15966
- /* @__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(
15967
16400
  "input",
15968
16401
  {
15969
16402
  type: "checkbox",
@@ -15973,12 +16406,12 @@ function FullInvoiceFields({
15973
16406
  ),
15974
16407
  t.toggle
15975
16408
  ] }),
15976
- /* @__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 })
15977
16410
  ] }),
15978
- showFields && /* @__PURE__ */ jsxs27("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15979
- /* @__PURE__ */ jsxs27("div", { className: "space-y-1", children: [
15980
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
15981
- /* @__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(
15982
16415
  "select",
15983
16416
  {
15984
16417
  id: "full-invoice-id-type",
@@ -15987,14 +16420,14 @@ function FullInvoiceFields({
15987
16420
  value: value.billingIdType,
15988
16421
  onChange: (e) => set("billingIdType", e.target.value),
15989
16422
  ...invalid2("billingIdType"),
15990
- 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))
15991
16424
  }
15992
16425
  ),
15993
16426
  error("billingIdType")
15994
16427
  ] }),
15995
- !isSpanishNif && /* @__PURE__ */ jsxs27("div", { className: "space-y-1", children: [
15996
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
15997
- /* @__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(
15998
16431
  "select",
15999
16432
  {
16000
16433
  id: "full-invoice-id-country",
@@ -16004,16 +16437,16 @@ function FullInvoiceFields({
16004
16437
  onChange: (e) => set("billingIdCountry", e.target.value),
16005
16438
  ...invalid2("billingIdCountry"),
16006
16439
  children: [
16007
- /* @__PURE__ */ jsx29("option", { value: "", disabled: true, children: t.chooseCountry }),
16008
- 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))
16009
16442
  ]
16010
16443
  }
16011
16444
  ),
16012
16445
  error("billingIdCountry")
16013
16446
  ] }),
16014
- /* @__PURE__ */ jsxs27("div", { className: "space-y-1", children: [
16015
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
16016
- /* @__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(
16017
16450
  "input",
16018
16451
  {
16019
16452
  id: "full-invoice-nif",
@@ -16026,9 +16459,9 @@ function FullInvoiceFields({
16026
16459
  ),
16027
16460
  error("billingNif")
16028
16461
  ] }),
16029
- /* @__PURE__ */ jsxs27("div", { className: "space-y-1", children: [
16030
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
16031
- /* @__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(
16032
16465
  "input",
16033
16466
  {
16034
16467
  id: "full-invoice-name",
@@ -16041,9 +16474,9 @@ function FullInvoiceFields({
16041
16474
  ),
16042
16475
  error("billingName")
16043
16476
  ] }),
16044
- /* @__PURE__ */ jsxs27("div", { className: "space-y-1 sm:col-span-2", children: [
16045
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
16046
- /* @__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(
16047
16480
  "input",
16048
16481
  {
16049
16482
  id: "full-invoice-street",
@@ -16055,9 +16488,9 @@ function FullInvoiceFields({
16055
16488
  }
16056
16489
  )
16057
16490
  ] }),
16058
- /* @__PURE__ */ jsxs27("div", { className: "space-y-1", children: [
16059
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
16060
- /* @__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(
16061
16494
  "input",
16062
16495
  {
16063
16496
  id: "full-invoice-postal-code",
@@ -16068,9 +16501,9 @@ function FullInvoiceFields({
16068
16501
  }
16069
16502
  )
16070
16503
  ] }),
16071
- /* @__PURE__ */ jsxs27("div", { className: "space-y-1", children: [
16072
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
16073
- /* @__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(
16074
16507
  "input",
16075
16508
  {
16076
16509
  id: "full-invoice-city",
@@ -16081,9 +16514,9 @@ function FullInvoiceFields({
16081
16514
  }
16082
16515
  )
16083
16516
  ] }),
16084
- /* @__PURE__ */ jsxs27("div", { className: "space-y-1", children: [
16085
- /* @__PURE__ */ jsx29("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
16086
- /* @__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(
16087
16520
  "select",
16088
16521
  {
16089
16522
  id: "full-invoice-country",
@@ -16091,18 +16524,18 @@ function FullInvoiceFields({
16091
16524
  required: true,
16092
16525
  value: value.country,
16093
16526
  onChange: (e) => set("country", e.target.value),
16094
- 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))
16095
16528
  }
16096
16529
  )
16097
16530
  ] }),
16098
- /* @__PURE__ */ jsx29("div", { className: "sm:col-span-2", children: error("address") })
16531
+ /* @__PURE__ */ jsx30("div", { className: "sm:col-span-2", children: error("address") })
16099
16532
  ] })
16100
16533
  ] });
16101
16534
  }
16102
16535
 
16103
16536
  // src/components/checkout-delivery-choice.tsx
16104
- import { cn as cn24 } from "@reblu/site-ui/utils";
16105
- 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";
16106
16539
  var EMPTY_CHECKOUT_ADDRESS = {
16107
16540
  firstName: "",
16108
16541
  lastName: "",
@@ -16165,17 +16598,17 @@ function CheckoutDeliveryChoice({
16165
16598
  const isPickup = value?.type === "PICKUP";
16166
16599
  const isShipping = value?.type === "SHIPPING";
16167
16600
  const errorId = `${uid}-delivery-error`;
16168
- return /* @__PURE__ */ jsxs28(
16601
+ return /* @__PURE__ */ jsxs29(
16169
16602
  "fieldset",
16170
16603
  {
16171
16604
  "data-slot": "checkout-delivery",
16172
16605
  "aria-describedby": error ? errorId : void 0,
16173
- className: cn24("space-y-4", className),
16606
+ className: cn25("space-y-4", className),
16174
16607
  children: [
16175
- /* @__PURE__ */ jsx30("legend", { className: "mb-2 text-lg font-semibold", children: t.legend }),
16176
- /* @__PURE__ */ jsxs28("div", { className: "grid gap-3 sm:grid-cols-2", children: [
16177
- homeDelivery ? /* @__PURE__ */ jsxs28("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16178
- /* @__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(
16179
16612
  "input",
16180
16613
  {
16181
16614
  type: "radio",
@@ -16185,42 +16618,42 @@ function CheckoutDeliveryChoice({
16185
16618
  className: "mt-0.5 size-4 accent-primary"
16186
16619
  }
16187
16620
  ),
16188
- /* @__PURE__ */ jsxs28("span", { className: "flex-1 space-y-1", children: [
16189
- /* @__PURE__ */ jsxs28("span", { className: "flex justify-between gap-2 font-medium", children: [
16190
- /* @__PURE__ */ jsx30("span", { children: copy.shippingOptionLabel }),
16191
- /* @__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 })
16192
16625
  ] }),
16193
- 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
16194
16627
  ] })
16195
16628
  ] }) : null,
16196
- pickup ? /* @__PURE__ */ jsxs28("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16197
- /* @__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(
16198
16631
  "input",
16199
16632
  {
16200
16633
  type: "radio",
16201
16634
  name: `${uid}-method`,
16202
16635
  checked: isPickup,
16203
- onChange: () => onChange({ type: "PICKUP" }),
16636
+ onChange: () => onChange(pickupFulfillment(delivery)),
16204
16637
  className: "mt-0.5 size-4 accent-primary"
16205
16638
  }
16206
16639
  ),
16207
- /* @__PURE__ */ jsxs28("span", { className: "flex flex-1 justify-between gap-2 font-medium", children: [
16208
- /* @__PURE__ */ jsx30("span", { children: copy.pickupOptionLabel }),
16209
- /* @__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 })
16210
16643
  ] })
16211
16644
  ] }) : null
16212
16645
  ] }),
16213
- error ? /* @__PURE__ */ jsx30("p", { id: errorId, role: "alert", className: "text-sm text-destructive", children: error }) : null,
16214
- isPickup ? /* @__PURE__ */ jsxs28("div", { role: "radiogroup", "aria-labelledby": `${uid}-points`, className: "space-y-2", children: [
16215
- /* @__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 }),
16216
16649
  delivery.pickupLocations.map((location2) => {
16217
16650
  const descId = `${uid}-point-${location2.id}`;
16218
- return /* @__PURE__ */ jsxs28(
16651
+ return /* @__PURE__ */ jsxs29(
16219
16652
  "label",
16220
16653
  {
16221
16654
  className: "flex cursor-pointer items-start gap-3 rounded-lg border border-border p-3 has-[:checked]:border-primary",
16222
16655
  children: [
16223
- /* @__PURE__ */ jsx30(
16656
+ /* @__PURE__ */ jsx31(
16224
16657
  "input",
16225
16658
  {
16226
16659
  type: "radio",
@@ -16231,9 +16664,9 @@ function CheckoutDeliveryChoice({
16231
16664
  className: "mt-0.5 size-4 accent-primary"
16232
16665
  }
16233
16666
  ),
16234
- /* @__PURE__ */ jsxs28("span", { className: "space-y-0.5 text-sm", children: [
16235
- /* @__PURE__ */ jsx30("span", { className: "block font-medium", children: location2.name }),
16236
- /* @__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) })
16237
16670
  ] })
16238
16671
  ]
16239
16672
  },
@@ -16241,14 +16674,14 @@ function CheckoutDeliveryChoice({
16241
16674
  );
16242
16675
  })
16243
16676
  ] }) : null,
16244
- isShipping ? /* @__PURE__ */ jsxs28("fieldset", { className: "space-y-3", children: [
16245
- /* @__PURE__ */ jsx30("legend", { className: "mb-2 text-sm font-medium", children: t.addressLegend }),
16246
- /* @__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 }) => {
16247
16680
  const fieldId = `${uid}-${key2}`;
16248
16681
  const fieldError = addressErrors?.[key2];
16249
- return /* @__PURE__ */ jsxs28("div", { className: cn24("space-y-1", wide && "sm:col-span-2"), children: [
16250
- /* @__PURE__ */ jsx30("label", { htmlFor: fieldId, className: "text-sm font-medium", children: t[key2] }),
16251
- /* @__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(
16252
16685
  "input",
16253
16686
  {
16254
16687
  id: fieldId,
@@ -16259,13 +16692,13 @@ function CheckoutDeliveryChoice({
16259
16692
  onChange: (e) => onAddressChange({ ...address, [key2]: e.target.value }),
16260
16693
  "aria-invalid": fieldError ? true : void 0,
16261
16694
  "aria-describedby": fieldError ? `${fieldId}-error` : void 0,
16262
- className: cn24(
16695
+ className: cn25(
16263
16696
  INPUT_CLASS,
16264
16697
  fieldError ? "border-destructive" : "border-border focus:border-primary"
16265
16698
  )
16266
16699
  }
16267
16700
  ),
16268
- 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
16269
16702
  ] }, key2);
16270
16703
  }) })
16271
16704
  ] }) : null
@@ -16273,12 +16706,19 @@ function CheckoutDeliveryChoice({
16273
16706
  }
16274
16707
  );
16275
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
+ }
16276
16713
  function defaultCheckoutFulfillment(delivery) {
16277
16714
  if (!delivery) return null;
16278
16715
  if (delivery.methods.homeDelivery) return { type: "SHIPPING" };
16279
16716
  if (!delivery.methods.pickup) return null;
16280
- const [only, ...rest] = delivery.pickupLocations;
16281
- 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);
16282
16722
  }
16283
16723
  function quoteRequiresDelivery(quote) {
16284
16724
  return quote ? quote.lines.some((line) => line.isShippable) : true;
@@ -16300,8 +16740,8 @@ function toCheckoutFulfillmentFields(value, address, requiresDelivery = true) {
16300
16740
  }
16301
16741
 
16302
16742
  // src/components/checkout-quote-summary.tsx
16303
- import { cn as cn25 } from "@reblu/site-ui/utils";
16304
- 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";
16305
16745
  var DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS = {
16306
16746
  subtotal: "Subtotal",
16307
16747
  discount: (codeOrLabel, isAutomatic) => isAutomatic ? codeOrLabel : `Descuento (${codeOrLabel})`,
@@ -16318,9 +16758,9 @@ function Row({
16318
16758
  value,
16319
16759
  className
16320
16760
  }) {
16321
- return /* @__PURE__ */ jsxs29("div", { "data-slot": "checkout-quote-row", className: cn25("flex justify-between gap-4", className), children: [
16322
- /* @__PURE__ */ jsx31("dt", { children: name }),
16323
- /* @__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 })
16324
16764
  ] });
16325
16765
  }
16326
16766
  function CheckoutQuoteSummary({
@@ -16336,22 +16776,22 @@ function CheckoutQuoteSummary({
16336
16776
  const price = (cents) => formatPrice(cents, currencyCode, locale);
16337
16777
  const { fulfillment, shipping, tax, discount } = quote;
16338
16778
  const Tag = `h${headingLevel}`;
16339
- return /* @__PURE__ */ jsxs29("section", { "data-slot": "checkout-quote-summary", className: slotClassName("space-y-4", "", className), children: [
16340
- heading ? /* @__PURE__ */ jsx31(Tag, { className: "text-lg font-semibold", children: heading }) : null,
16341
- /* @__PURE__ */ jsx31("ul", { className: "space-y-3 text-sm", children: quote.lines.map((line) => /* @__PURE__ */ jsxs29("li", { className: "flex justify-between gap-4", children: [
16342
- /* @__PURE__ */ jsxs29("div", { className: "min-w-0 space-y-0.5", children: [
16343
- /* @__PURE__ */ jsx31("p", { className: "font-medium", children: line.name }),
16344
- line.variantName ? /* @__PURE__ */ jsx31("p", { className: "text-muted-foreground", children: line.variantName }) : null,
16345
- /* @__PURE__ */ jsxs29("p", { className: "flex flex-wrap items-center gap-2 text-muted-foreground", children: [
16346
- 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,
16347
- /* @__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)) })
16348
16788
  ] })
16349
16789
  ] }),
16350
- /* @__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) })
16351
16791
  ] }, `${line.productId}-${line.variantId ?? ""}`)) }),
16352
- /* @__PURE__ */ jsxs29("dl", { className: "space-y-2 border-t border-border pt-3 text-sm", children: [
16353
- /* @__PURE__ */ jsx31(Row, { name: t.subtotal, value: price(quote.subtotal) }),
16354
- 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(
16355
16795
  Row,
16356
16796
  {
16357
16797
  className: "text-green-700 dark:text-green-400",
@@ -16359,17 +16799,17 @@ function CheckoutQuoteSummary({
16359
16799
  value: `\u2212${price(discount.amount)}`
16360
16800
  }
16361
16801
  ) : null,
16362
- fulfillment.type ? /* @__PURE__ */ jsx31(
16802
+ fulfillment.type ? /* @__PURE__ */ jsx32(
16363
16803
  Row,
16364
16804
  {
16365
- name: /* @__PURE__ */ jsxs29(Fragment6, { children: [
16805
+ name: /* @__PURE__ */ jsxs30(Fragment6, { children: [
16366
16806
  fulfillment.label ?? t.delivery,
16367
- 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
16368
16808
  ] }),
16369
16809
  value: fulfillment.type === "PICKUP" || shipping.isFree ? t.free : price(shipping.cost)
16370
16810
  }
16371
16811
  ) : null,
16372
- tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ jsx31(
16812
+ tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ jsx32(
16373
16813
  Row,
16374
16814
  {
16375
16815
  className: tax.isIncluded ? "text-muted-foreground" : void 0,
@@ -16378,19 +16818,44 @@ function CheckoutQuoteSummary({
16378
16818
  },
16379
16819
  entry.label
16380
16820
  )) : null,
16381
- /* @__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) })
16382
16822
  ] }),
16383
- tax.isIncluded ? /* @__PURE__ */ jsx31("p", { className: "text-sm text-muted-foreground", children: t.taxesIncludedNote }) : null,
16384
- fulfillment.type === "SHIPPING" && !shipping.isFree && shipping.remainingForFree ? /* @__PURE__ */ jsx31("p", { className: "text-sm text-muted-foreground", children: t.remainingForFree(price(shipping.remainingForFree)) }) : null,
16385
- fulfillment.type && quote.deliveryEstimateText ? /* @__PURE__ */ jsx31("p", { "data-slot": "checkout-quote-estimate", className: "text-sm text-muted-foreground", children: quote.deliveryEstimateText }) : null,
16386
- quote.discountError ? /* @__PURE__ */ jsx31("p", { role: "status", className: "text-sm text-destructive", children: quote.discountError.message }) : null,
16387
- 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
16388
16828
  ] });
16389
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
+ }
16390
16855
 
16391
16856
  // src/components/checkout-terms-acceptance.tsx
16392
- import { cn as cn26 } from "@reblu/site-ui/utils";
16393
- 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";
16394
16859
  function splitTermsLabel(label) {
16395
16860
  const at = label.indexOf("{terms}");
16396
16861
  return at === -1 ? [`${label} `, ""] : [label.slice(0, at), label.slice(at + "{terms}".length)];
@@ -16412,9 +16877,9 @@ function CheckoutTermsAcceptance({
16412
16877
  (part) => part.replaceAll("{tenant}", copy.tenantName)
16413
16878
  );
16414
16879
  const newTab = copy.isTermsLinkNewTab;
16415
- return /* @__PURE__ */ jsxs30("div", { "data-slot": "checkout-terms", className: cn26("space-y-1", className), children: [
16416
- /* @__PURE__ */ jsxs30("div", { className: "flex items-start gap-3", children: [
16417
- /* @__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(
16418
16883
  "input",
16419
16884
  {
16420
16885
  id: boxId,
@@ -16427,9 +16892,9 @@ function CheckoutTermsAcceptance({
16427
16892
  className: "mt-0.5 size-5 shrink-0 cursor-pointer accent-primary"
16428
16893
  }
16429
16894
  ),
16430
- /* @__PURE__ */ jsxs30("label", { htmlFor: boxId, className: "text-sm leading-relaxed", children: [
16895
+ /* @__PURE__ */ jsxs31("label", { htmlFor: boxId, className: "text-sm leading-relaxed", children: [
16431
16896
  before,
16432
- /* @__PURE__ */ jsxs30(
16897
+ /* @__PURE__ */ jsxs31(
16433
16898
  "a",
16434
16899
  {
16435
16900
  href: copy.termsLinkUrl ?? termsHref,
@@ -16437,9 +16902,9 @@ function CheckoutTermsAcceptance({
16437
16902
  className: "font-medium underline underline-offset-2 hover:text-primary",
16438
16903
  children: [
16439
16904
  copy.termsLinkText,
16440
- newTab ? /* @__PURE__ */ jsxs30(Fragment7, { children: [
16905
+ newTab ? /* @__PURE__ */ jsxs31(Fragment7, { children: [
16441
16906
  " ",
16442
- /* @__PURE__ */ jsx32("span", { className: "sr-only", children: newTabHint })
16907
+ /* @__PURE__ */ jsx33("span", { className: "sr-only", children: newTabHint })
16443
16908
  ] }) : null
16444
16909
  ]
16445
16910
  }
@@ -16447,7 +16912,7 @@ function CheckoutTermsAcceptance({
16447
16912
  after
16448
16913
  ] })
16449
16914
  ] }),
16450
- 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
16451
16916
  ] });
16452
16917
  }
16453
16918
  function toCheckoutTermsFields(copy, accepted) {
@@ -16456,8 +16921,8 @@ function toCheckoutTermsFields(copy, accepted) {
16456
16921
  }
16457
16922
 
16458
16923
  // src/components/checkout-pay-action.tsx
16459
- import { cn as cn27 } from "@reblu/site-ui/utils";
16460
- 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";
16461
16926
  function CheckoutPayAction({
16462
16927
  label,
16463
16928
  notice,
@@ -16471,28 +16936,50 @@ function CheckoutPayAction({
16471
16936
  }) {
16472
16937
  const noticeId = `${id}-notice`;
16473
16938
  const isDisabled = submitting || disabled;
16474
- return /* @__PURE__ */ jsxs31("div", { "data-slot": "checkout-pay-action", className: cn27("space-y-3", className), children: [
16475
- /* @__PURE__ */ jsx33(
16939
+ return /* @__PURE__ */ jsxs32("div", { "data-slot": "checkout-pay-action", className: cn28("space-y-3", className), children: [
16940
+ /* @__PURE__ */ jsx34(
16476
16941
  "button",
16477
16942
  {
16478
16943
  type: "submit",
16479
16944
  disabled: isDisabled,
16480
16945
  "aria-busy": submitting || void 0,
16481
16946
  "aria-describedby": notice ? noticeId : void 0,
16482
- className: buttonClassName ?? cn27(
16947
+ className: buttonClassName ?? cn28(
16483
16948
  "flex w-full items-center justify-center gap-2 rounded-xl px-4 py-3 text-base font-semibold transition-all",
16484
16949
  isDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "cursor-pointer bg-primary text-primary-foreground hover:bg-primary/90"
16485
16950
  ),
16486
16951
  children: submitting ? submittingLabel : label
16487
16952
  }
16488
16953
  ),
16489
- 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
16490
16955
  ] });
16491
16956
  }
16492
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
+
16493
16980
  // src/components/contact-interest-field.tsx
16494
- import { cn as cn28 } from "@reblu/site-ui/utils";
16495
- 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";
16496
16983
  function ContactInterestField({
16497
16984
  interest,
16498
16985
  value,
@@ -16509,18 +16996,18 @@ function ContactInterestField({
16509
16996
  else next2.delete(option2);
16510
16997
  onChange(interest.options.filter((candidate) => next2.has(candidate)));
16511
16998
  };
16512
- return /* @__PURE__ */ jsxs32("fieldset", { "data-slot": "contact-interest", className: cn28("space-y-2", className), children: [
16513
- /* @__PURE__ */ jsx34("legend", { className: "text-sm font-medium", children: interest.label }),
16514
- /* @__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) => {
16515
17002
  const id = `${idPrefix}-${index}`;
16516
- return /* @__PURE__ */ jsxs32(
17003
+ return /* @__PURE__ */ jsxs33(
16517
17004
  "label",
16518
17005
  {
16519
17006
  htmlFor: id,
16520
17007
  "data-slot": "contact-interest-option",
16521
17008
  className: "flex items-center gap-2 text-sm",
16522
17009
  children: [
16523
- /* @__PURE__ */ jsx34(
17010
+ /* @__PURE__ */ jsx35(
16524
17011
  "input",
16525
17012
  {
16526
17013
  id,
@@ -16545,21 +17032,29 @@ export {
16545
17032
  ALLOWED_YOUTUBE_HOSTS,
16546
17033
  AddedToCartToast,
16547
17034
  ArbitrationBadge,
17035
+ BeforeAfterPairs,
17036
+ CARD_ICON_NAMES,
17037
+ CardIconSvg,
16548
17038
  CartAdjustmentsNotice,
17039
+ CartLineIncludes,
16549
17040
  CartLineList,
16550
17041
  CartSummary,
16551
17042
  CheckoutDeliveryChoice,
16552
17043
  CheckoutForm,
16553
17044
  CheckoutLoginPrompt,
16554
17045
  CheckoutPayAction,
17046
+ CheckoutQuoteNotice,
16555
17047
  CheckoutQuoteSummary,
16556
17048
  CheckoutTermsAcceptance,
17049
+ ChipList,
16557
17050
  ContactInterestField,
16558
17051
  CourseCatalogFilters,
16559
17052
  CourseDescription,
16560
17053
  CoursePurchaseTerms,
16561
17054
  DATA_REQUEST_TYPES,
17055
+ DEFAULT_BEFORE_AFTER_LABELS,
16562
17056
  DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS,
17057
+ DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS,
16563
17058
  DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS,
16564
17059
  DEFAULT_COURSE_CATALOG_FILTERS_LABELS,
16565
17060
  DEFAULT_COURSE_PRICE_BANDS,
@@ -16576,6 +17071,8 @@ export {
16576
17071
  EMPTY_FULL_INVOICE_VALUE,
16577
17072
  FaqAccordion,
16578
17073
  FullInvoiceFields,
17074
+ IconCardGrid,
17075
+ ImageTextSplit,
16579
17076
  LegalDocument,
16580
17077
  LessonPreview,
16581
17078
  MarkdownRenderer,
@@ -16595,11 +17092,15 @@ export {
16595
17092
  TrustBadges,
16596
17093
  buildFaqPageJsonLd,
16597
17094
  buildShareUrls,
17095
+ bundleComponentsToIncludes,
17096
+ checkoutQuoteNotice,
16598
17097
  collectFaqItems,
17098
+ courseSellsAsGuest,
16599
17099
  defaultCheckoutFulfillment,
16600
17100
  formatPrice,
16601
17101
  getShopErrorMessage,
16602
17102
  isAllowedYouTubeHost,
17103
+ isCheckoutDeliveryComplete,
16603
17104
  isOverSimplifiedInvoiceCap,
16604
17105
  markdownToPlainText,
16605
17106
  markdownToSafeHtml,
@@ -16608,6 +17109,7 @@ export {
16608
17109
  sanitizeHtml,
16609
17110
  shopIssuesInvoices,
16610
17111
  shouldRenderShopFilters,
17112
+ toAcademyCheckoutInvoiceFields,
16611
17113
  toCheckoutFulfillmentFields,
16612
17114
  toCheckoutInvoiceFields,
16613
17115
  toCheckoutTermsFields