@reblu/site-blocks 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -46,6 +46,7 @@ __export(src_exports, {
46
46
  EMPTY_FULL_INVOICE_VALUE: () => EMPTY_FULL_INVOICE_VALUE,
47
47
  FaqAccordion: () => FaqAccordion,
48
48
  FullInvoiceFields: () => FullInvoiceFields,
49
+ LegalDocument: () => LegalDocument,
49
50
  LessonPreview: () => LessonPreview,
50
51
  MarkdownRenderer: () => MarkdownRenderer,
51
52
  OrderConfirmation: () => OrderConfirmation,
@@ -13547,6 +13548,8 @@ function CourseDescription({
13547
13548
  var import_jsx_runtime3 = require("react/jsx-runtime");
13548
13549
  var DEFAULT_COURSE_PURCHASE_TERMS_LABELS = {
13549
13550
  withdrawalWaiver: "El acceso empieza al comprar: al pagar pides el acceso inmediato y renuncias al derecho de desistimiento de 14 d\xEDas.",
13551
+ serviceStartRequest: "Al pagar pides expresamente que la formaci\xF3n empiece dentro del plazo de desistimiento de 14 d\xEDas.",
13552
+ consentText: (text3) => ` Texto de la casilla: \xAB${text3}\xBB`,
13550
13553
  accessDuration: (months) => `Acceso durante ${months} ${months === 1 ? "mes" : "meses"} desde la inscripci\xF3n.`,
13551
13554
  refundGuarantee: ({ basis, thresholdPercent, windowDays }) => {
13552
13555
  const period = windowDays != null ? ` durante ${windowDays} d\xEDas desde el pago` : "";
@@ -13567,7 +13570,21 @@ function CoursePurchaseTerms({
13567
13570
  }) {
13568
13571
  const text3 = { ...DEFAULT_COURSE_PURCHASE_TERMS_LABELS, ...labels };
13569
13572
  const items = [];
13570
- if (course.withdrawalWaiverRequired === true) {
13573
+ if (course.withdrawalConsent !== void 0) {
13574
+ const consent = course.withdrawalConsent;
13575
+ if (consent) {
13576
+ const line = consent.kind === "SERVICE_START_REQUEST" ? text3.serviceStartRequest : text3.withdrawalWaiver;
13577
+ items.push({
13578
+ // The waiver keeps its REB-1199 slot (existing SITE styles target it).
13579
+ key: consent.kind === "SERVICE_START_REQUEST" ? "service-start-request" : "withdrawal-waiver",
13580
+ kind: consent.kind,
13581
+ node: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
13582
+ line,
13583
+ text3.consentText(consent.text)
13584
+ ] })
13585
+ });
13586
+ }
13587
+ } else if (course.withdrawalWaiverRequired === true) {
13571
13588
  items.push({ key: "withdrawal-waiver", node: text3.withdrawalWaiver });
13572
13589
  }
13573
13590
  if (typeof course.accessDurationMonths === "number") {
@@ -13578,7 +13595,7 @@ function CoursePurchaseTerms({
13578
13595
  }
13579
13596
  if (items.length === 0) return null;
13580
13597
  const hasHeading = heading !== void 0 && heading !== null && heading !== "";
13581
- const list = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("ul", { className: slotClassName("list-disc space-y-1 pl-5", "text-sm text-muted-foreground", listClassName), children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("li", { "data-slot": `course-purchase-terms-${item.key}`, children: item.node }, item.key)) });
13598
+ const list = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("ul", { className: slotClassName("list-disc space-y-1 pl-5", "text-sm text-muted-foreground", listClassName), children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("li", { "data-slot": `course-purchase-terms-${item.key}`, "data-kind": item.kind, children: item.node }, item.key)) });
13582
13599
  const Tag = `h${headingLevel}`;
13583
13600
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
13584
13601
  "section",
@@ -13594,8 +13611,53 @@ function CoursePurchaseTerms({
13594
13611
  );
13595
13612
  }
13596
13613
 
13597
- // src/components/lesson-preview.tsx
13614
+ // src/components/legal-document.tsx
13598
13615
  var import_jsx_runtime4 = require("react/jsx-runtime");
13616
+ function isVisiblyEmpty2(html5) {
13617
+ if (/<(img|iframe|hr)\b/i.test(html5)) return false;
13618
+ return html5.replace(/<[^>]*>/g, "").trim() === "";
13619
+ }
13620
+ function LegalDocument({
13621
+ content,
13622
+ title,
13623
+ fallback,
13624
+ titleId = "legal-document-title",
13625
+ className,
13626
+ titleClassName,
13627
+ contentClassName
13628
+ }) {
13629
+ const html5 = markdownToSafeHtml(typeof content === "string" ? content : null);
13630
+ const isEmpty = !html5 || isVisiblyEmpty2(html5);
13631
+ const hasFallback = fallback !== void 0 && fallback !== null && fallback !== false;
13632
+ if (isEmpty && !hasFallback) return null;
13633
+ const hasTitle = title !== void 0 && title !== null && title !== "";
13634
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
13635
+ "article",
13636
+ {
13637
+ "data-slot": "legal-document",
13638
+ "aria-labelledby": hasTitle ? titleId : void 0,
13639
+ className: slotClassName("space-y-6", "", className),
13640
+ children: [
13641
+ hasTitle && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h1", { id: titleId, className: slotClassName("", "text-3xl font-bold", titleClassName), children: title }),
13642
+ isEmpty ? fallback : (
13643
+ // `html` is already sanitised by `markdownToSafeHtml` — SafeHtml only maps it.
13644
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
13645
+ SafeHtml,
13646
+ {
13647
+ html: html5,
13648
+ headingOffset: hasTitle ? 1 : 0,
13649
+ normalizeHeadings: hasTitle,
13650
+ className: contentClassName
13651
+ }
13652
+ )
13653
+ )
13654
+ ]
13655
+ }
13656
+ );
13657
+ }
13658
+
13659
+ // src/components/lesson-preview.tsx
13660
+ var import_jsx_runtime5 = require("react/jsx-runtime");
13599
13661
  var DEFAULT_LESSON_PREVIEW_LABELS = {
13600
13662
  badge: "Vista previa gratuita",
13601
13663
  player: "V\xEDdeo",
@@ -13619,7 +13681,7 @@ function clock(seconds) {
13619
13681
  iso: `PT${h2 > 0 ? `${h2}H` : ""}${m2}M${s2}S`
13620
13682
  };
13621
13683
  }
13622
- function isVisiblyEmpty2(html5) {
13684
+ function isVisiblyEmpty3(html5) {
13623
13685
  if (/<(img|iframe|hr)\b/i.test(html5)) return false;
13624
13686
  return html5.replace(/<[^>]*>/g, "").trim() === "";
13625
13687
  }
@@ -13636,17 +13698,17 @@ function LessonPreview({
13636
13698
  const Tag = `h${headingLevel}`;
13637
13699
  const video = lesson.video && isEmbeddable(lesson.video.embedUrl) ? lesson.video : null;
13638
13700
  const html5 = markdownToSafeHtml(lesson.content);
13639
- const hasBody = html5 !== null && html5 !== "" && !isVisiblyEmpty2(html5);
13701
+ const hasBody = html5 !== null && html5 !== "" && !isVisiblyEmpty3(html5);
13640
13702
  const duration = typeof lesson.durationSeconds === "number" && lesson.durationSeconds > 0 ? clock(lesson.durationSeconds) : null;
13641
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
13703
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
13642
13704
  "article",
13643
13705
  {
13644
13706
  "data-slot": "lesson-preview",
13645
13707
  "aria-labelledby": headingId,
13646
13708
  className: slotClassName("space-y-6", "", className),
13647
13709
  children: [
13648
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("header", { className: "space-y-2", children: [
13649
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
13710
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("header", { className: "space-y-2", children: [
13711
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13650
13712
  "span",
13651
13713
  {
13652
13714
  "data-slot": "lesson-preview-badge",
@@ -13654,7 +13716,7 @@ function LessonPreview({
13654
13716
  children: labels.badge
13655
13717
  }
13656
13718
  ),
13657
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
13719
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13658
13720
  Tag,
13659
13721
  {
13660
13722
  id: headingId,
@@ -13662,12 +13724,12 @@ function LessonPreview({
13662
13724
  children: lesson.title
13663
13725
  }
13664
13726
  ),
13665
- duration && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
13666
- /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "sr-only", children: [
13727
+ duration && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
13728
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "sr-only", children: [
13667
13729
  labels.duration,
13668
13730
  ": "
13669
13731
  ] }),
13670
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
13732
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13671
13733
  "time",
13672
13734
  {
13673
13735
  "data-slot": "lesson-preview-duration",
@@ -13678,12 +13740,12 @@ function LessonPreview({
13678
13740
  )
13679
13741
  ] })
13680
13742
  ] }),
13681
- video && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
13743
+ video && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13682
13744
  "div",
13683
13745
  {
13684
13746
  "data-slot": "lesson-preview-player",
13685
13747
  className: "aspect-video w-full overflow-hidden rounded-xl border border-border bg-black",
13686
- children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
13748
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13687
13749
  "iframe",
13688
13750
  {
13689
13751
  src: video.embedUrl,
@@ -13697,7 +13759,7 @@ function LessonPreview({
13697
13759
  )
13698
13760
  }
13699
13761
  ),
13700
- hasBody && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { "data-slot": "lesson-preview-content", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
13762
+ hasBody && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { "data-slot": "lesson-preview-content", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13701
13763
  SafeHtml,
13702
13764
  {
13703
13765
  html: html5,
@@ -13716,7 +13778,7 @@ var import_utils3 = require("@reblu/site-ui/utils");
13716
13778
  // src/components/_page-parts.tsx
13717
13779
  var import_utils2 = require("@reblu/site-ui/utils");
13718
13780
  var import_button_variants = require("@reblu/site-ui/button-variants");
13719
- var import_jsx_runtime5 = require("react/jsx-runtime");
13781
+ var import_jsx_runtime6 = require("react/jsx-runtime");
13720
13782
  var KNOWN_BUTTON_VARIANTS = /* @__PURE__ */ new Set([
13721
13783
  "default",
13722
13784
  "destructive",
@@ -13729,11 +13791,11 @@ function toButtonVariant(variant) {
13729
13791
  return variant && KNOWN_BUTTON_VARIANTS.has(variant) ? variant : "default";
13730
13792
  }
13731
13793
  function PageHero({ page }) {
13732
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("header", { className: "space-y-4", children: [
13733
- page.category && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: "inline-flex items-center rounded-full bg-secondary px-3 py-1 text-sm font-medium text-secondary-foreground", children: page.category.name }),
13734
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h1", { className: "text-4xl font-bold tracking-tight", children: page.title }),
13735
- page.subtitle && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("p", { className: "text-lg text-muted-foreground", children: page.subtitle }),
13736
- page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13794
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("header", { className: "space-y-4", children: [
13795
+ page.category && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "inline-flex items-center rounded-full bg-secondary px-3 py-1 text-sm font-medium text-secondary-foreground", children: page.category.name }),
13796
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h1", { className: "text-4xl font-bold tracking-tight", children: page.title }),
13797
+ page.subtitle && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-lg text-muted-foreground", children: page.subtitle }),
13798
+ page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
13737
13799
  "img",
13738
13800
  {
13739
13801
  src: page.coverImageUrl,
@@ -13747,7 +13809,7 @@ function PageHero({ page }) {
13747
13809
  function SectionCta({ section }) {
13748
13810
  if (!section.ctaLabel || !section.ctaUrl) return null;
13749
13811
  const variant = toButtonVariant(section.ctaVariant);
13750
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13812
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
13751
13813
  "a",
13752
13814
  {
13753
13815
  href: section.ctaUrl,
@@ -13762,46 +13824,46 @@ function SectionCta({ section }) {
13762
13824
  }
13763
13825
  function SectionImages({ section }) {
13764
13826
  if (section.images.length === 0) return null;
13765
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: (0, import_utils2.cn)("grid gap-4", section.images.length > 1 ? "sm:grid-cols-2" : "grid-cols-1"), children: section.images.map((img) => /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("figure", { className: "space-y-1", children: [
13766
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("img", { src: img.url, alt: img.alt, loading: "lazy", className: "h-full w-full object-cover" }) }),
13767
- img.caption && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
13827
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: (0, import_utils2.cn)("grid gap-4", section.images.length > 1 ? "sm:grid-cols-2" : "grid-cols-1"), children: section.images.map((img) => /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("figure", { className: "space-y-1", children: [
13828
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("img", { src: img.url, alt: img.alt, loading: "lazy", className: "h-full w-full object-cover" }) }),
13829
+ img.caption && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
13768
13830
  ] }, `${img.url}-${img.order}`)) });
13769
13831
  }
13770
13832
  function PageSectionBlock({ section }) {
13771
13833
  const imageFirst = section.layout === "IMAGE_TEXT";
13772
13834
  const sideBySide = section.layout === "TEXT_IMAGE" || section.layout === "IMAGE_TEXT";
13773
13835
  const hasImages = section.images.length > 0;
13774
- const body3 = /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "space-y-4", children: [
13775
- section.heading && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h2", { className: "text-2xl font-bold", children: section.heading }),
13776
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SafeHtml, { html: sanitizeHtml(section.contentHtml), headingOffset: 2 }),
13777
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionCta, { section })
13836
+ const body3 = /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "space-y-4", children: [
13837
+ section.heading && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h2", { className: "text-2xl font-bold", children: section.heading }),
13838
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SafeHtml, { html: sanitizeHtml(section.contentHtml), headingOffset: 2 }),
13839
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionCta, { section })
13778
13840
  ] });
13779
13841
  if (sideBySide && hasImages) {
13780
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("section", { className: "grid items-center gap-8 md:grid-cols-2", children: imageFirst ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
13781
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionImages, { section }),
13842
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("section", { className: "grid items-center gap-8 md:grid-cols-2", children: imageFirst ? /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
13843
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionImages, { section }),
13782
13844
  body3
13783
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_jsx_runtime5.Fragment, { children: [
13845
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
13784
13846
  body3,
13785
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionImages, { section })
13847
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionImages, { section })
13786
13848
  ] }) });
13787
13849
  }
13788
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("section", { className: "space-y-4", children: [
13850
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("section", { className: "space-y-4", children: [
13789
13851
  body3,
13790
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SectionImages, { section })
13852
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionImages, { section })
13791
13853
  ] });
13792
13854
  }
13793
13855
  function PageSectionList({ sections }) {
13794
13856
  if (sections.length === 0) return null;
13795
13857
  const ordered = sections.slice().sort((a, b2) => a.order - b2.order);
13796
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "space-y-12", children: ordered.map((section) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PageSectionBlock, { section }, section.id)) });
13858
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "space-y-12", children: ordered.map((section) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(PageSectionBlock, { section }, section.id)) });
13797
13859
  }
13798
13860
 
13799
13861
  // src/components/treatment.tsx
13800
- var import_jsx_runtime6 = require("react/jsx-runtime");
13862
+ var import_jsx_runtime7 = require("react/jsx-runtime");
13801
13863
  function Treatment({ page, className }) {
13802
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("article", { className: (0, import_utils3.cn)("space-y-12", className), "data-slot": "treatment", children: [
13803
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(PageHero, { page }),
13804
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(PageSectionList, { sections: page.sections })
13864
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("article", { className: (0, import_utils3.cn)("space-y-12", className), "data-slot": "treatment", children: [
13865
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PageHero, { page }),
13866
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PageSectionList, { sections: page.sections })
13805
13867
  ] });
13806
13868
  }
13807
13869
 
@@ -13810,11 +13872,11 @@ var import_utils5 = require("@reblu/site-ui/utils");
13810
13872
 
13811
13873
  // src/components/page-card-grid.tsx
13812
13874
  var import_utils4 = require("@reblu/site-ui/utils");
13813
- var import_jsx_runtime7 = require("react/jsx-runtime");
13875
+ var import_jsx_runtime8 = require("react/jsx-runtime");
13814
13876
  var defaultPageHref = (page) => `/${page.slug}`;
13815
13877
  var pageKey = (page) => `${page.category?.slug ?? ""}/${page.slug}`;
13816
13878
  function PageCardGrid(props) {
13817
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PageCardGridSection, { ...props });
13879
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PageCardGridSection, { ...props });
13818
13880
  }
13819
13881
  function PageCardGridSection({
13820
13882
  pages,
@@ -13825,15 +13887,15 @@ function PageCardGridSection({
13825
13887
  }) {
13826
13888
  if (pages.length === 0) return null;
13827
13889
  const showHeading = keepEmptyHeading ? heading !== void 0 : !!heading;
13828
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("section", { className: (0, import_utils4.cn)("space-y-6", className), children: [
13829
- showHeading && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h2", { className: "text-2xl font-bold", children: heading }),
13830
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("ul", { className: "grid list-none grid-cols-1 gap-6 p-0 sm:grid-cols-2 lg:grid-cols-3", children: pages.map((page) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
13890
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("section", { className: (0, import_utils4.cn)("space-y-6", className), children: [
13891
+ showHeading && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h2", { className: "text-2xl font-bold", children: heading }),
13892
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("ul", { className: "grid list-none grid-cols-1 gap-6 p-0 sm:grid-cols-2 lg:grid-cols-3", children: pages.map((page) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
13831
13893
  "a",
13832
13894
  {
13833
13895
  href: pageHref(page),
13834
13896
  className: "group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
13835
13897
  children: [
13836
- page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
13898
+ page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
13837
13899
  "img",
13838
13900
  {
13839
13901
  src: page.coverImageUrl,
@@ -13842,9 +13904,9 @@ function PageCardGridSection({
13842
13904
  className: "h-full w-full object-cover transition-transform group-hover:scale-105"
13843
13905
  }
13844
13906
  ) }),
13845
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13846
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
13847
- page.excerpt && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
13907
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13908
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
13909
+ page.excerpt && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
13848
13910
  ] })
13849
13911
  ]
13850
13912
  }
@@ -13853,7 +13915,7 @@ function PageCardGridSection({
13853
13915
  }
13854
13916
 
13855
13917
  // src/components/parent-page.tsx
13856
- var import_jsx_runtime8 = require("react/jsx-runtime");
13918
+ var import_jsx_runtime9 = require("react/jsx-runtime");
13857
13919
  var defaultChildPageHref = (slug) => `/${slug}`;
13858
13920
  function ParentPage({
13859
13921
  page,
@@ -13868,10 +13930,10 @@ function ParentPage({
13868
13930
  const pages = childPages ?? treatments ?? [];
13869
13931
  const hrefFor = childPageHref ?? treatmentHref ?? defaultChildPageHref;
13870
13932
  const label = childPagesLabel ?? treatmentsLabel ?? "Treatments";
13871
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("article", { className: (0, import_utils5.cn)("space-y-12", className), "data-slot": "specialty", children: [
13872
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PageHero, { page }),
13873
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PageSectionList, { sections: page.sections }),
13874
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
13933
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("article", { className: (0, import_utils5.cn)("space-y-12", className), "data-slot": "specialty", children: [
13934
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PageHero, { page }),
13935
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PageSectionList, { sections: page.sections }),
13936
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
13875
13937
  PageCardGridSection,
13876
13938
  {
13877
13939
  pages,
@@ -13891,7 +13953,7 @@ var import_utils7 = require("@reblu/site-ui/utils");
13891
13953
 
13892
13954
  // src/components/professional-fields.tsx
13893
13955
  var import_utils6 = require("@reblu/site-ui/utils");
13894
- var import_jsx_runtime9 = require("react/jsx-runtime");
13956
+ var import_jsx_runtime10 = require("react/jsx-runtime");
13895
13957
  function ProfessionalFields({
13896
13958
  fields,
13897
13959
  variant = "profile",
@@ -13899,7 +13961,7 @@ function ProfessionalFields({
13899
13961
  }) {
13900
13962
  const shown = (fields ?? []).filter((f) => variant !== "card" || f.showOnCard);
13901
13963
  if (shown.length === 0) return null;
13902
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
13964
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
13903
13965
  "dl",
13904
13966
  {
13905
13967
  className: (0, import_utils6.cn)(
@@ -13909,13 +13971,13 @@ function ProfessionalFields({
13909
13971
  ),
13910
13972
  "data-slot": "professional-fields",
13911
13973
  "data-variant": variant,
13912
- children: shown.map((field, index) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
13974
+ children: shown.map((field, index) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
13913
13975
  "div",
13914
13976
  {
13915
13977
  className: variant === "card" ? "flex justify-center gap-1" : "contents",
13916
13978
  children: [
13917
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("dt", { className: "text-muted-foreground", children: field.label }),
13918
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("dd", { className: "m-0 font-medium", children: field.value })
13979
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dt", { className: "text-muted-foreground", children: field.label }),
13980
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dd", { className: "m-0 font-medium", children: field.value })
13919
13981
  ]
13920
13982
  },
13921
13983
  `${field.label}-${index}`
@@ -13925,7 +13987,7 @@ function ProfessionalFields({
13925
13987
  }
13926
13988
 
13927
13989
  // src/components/profile-card.tsx
13928
- var import_jsx_runtime10 = require("react/jsx-runtime");
13990
+ var import_jsx_runtime11 = require("react/jsx-runtime");
13929
13991
  function initials(name) {
13930
13992
  return name.split(/\s+/).filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
13931
13993
  }
@@ -13940,7 +14002,7 @@ function ProfileCard({
13940
14002
  className
13941
14003
  }) {
13942
14004
  const NameTag = href ? "a" : "span";
13943
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
14005
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
13944
14006
  "article",
13945
14007
  {
13946
14008
  className: (0, import_utils7.cn)(
@@ -13949,7 +14011,7 @@ function ProfileCard({
13949
14011
  ),
13950
14012
  "data-slot": "profile-card",
13951
14013
  children: [
13952
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "relative h-24 w-24 overflow-hidden rounded-full bg-muted", children: imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("img", { src: imageUrl, alt: name, loading: "lazy", className: "h-full w-full object-cover" }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
14014
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "relative h-24 w-24 overflow-hidden rounded-full bg-muted", children: imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("img", { src: imageUrl, alt: name, loading: "lazy", className: "h-full w-full object-cover" }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
13953
14015
  "span",
13954
14016
  {
13955
14017
  className: "flex h-full w-full items-center justify-center text-2xl font-semibold text-muted-foreground",
@@ -13957,12 +14019,12 @@ function ProfileCard({
13957
14019
  children: initials(name)
13958
14020
  }
13959
14021
  ) }),
13960
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "space-y-1", children: [
13961
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(NameTag, { ...href ? { href, className: "transition-colors hover:text-primary" } : {}, children: name }) }),
13962
- role && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "text-sm text-muted-foreground", children: role })
14022
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "space-y-1", children: [
14023
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(NameTag, { ...href ? { href, className: "transition-colors hover:text-primary" } : {}, children: name }) }),
14024
+ role && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "text-sm text-muted-foreground", children: role })
13963
14025
  ] }),
13964
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ProfessionalFields, { fields, variant: "card" }),
13965
- specialties.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
14026
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ProfessionalFields, { fields, variant: "card" }),
14027
+ specialties.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
13966
14028
  "li",
13967
14029
  {
13968
14030
  className: "inline-flex items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground",
@@ -13970,7 +14032,7 @@ function ProfileCard({
13970
14032
  },
13971
14033
  s2
13972
14034
  )) }),
13973
- bio && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "text-sm text-muted-foreground", children: bio })
14035
+ bio && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "text-sm text-muted-foreground", children: bio })
13974
14036
  ]
13975
14037
  }
13976
14038
  );
@@ -13978,11 +14040,11 @@ function ProfileCard({
13978
14040
 
13979
14041
  // src/components/product-card.tsx
13980
14042
  var import_utils8 = require("@reblu/site-ui/utils");
13981
- var import_jsx_runtime11 = require("react/jsx-runtime");
14043
+ var import_jsx_runtime12 = require("react/jsx-runtime");
13982
14044
  function ProductCard({ product, href, currencyCode = "EUR", locale, className }) {
13983
14045
  const image = product.images.find((i) => i.isPrimary) ?? product.images[0];
13984
14046
  const hasDiscount = product.comparePrice != null && product.comparePrice > product.price;
13985
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
14047
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
13986
14048
  "article",
13987
14049
  {
13988
14050
  className: (0, import_utils8.cn)(
@@ -13991,7 +14053,7 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
13991
14053
  ),
13992
14054
  "data-slot": "product-card",
13993
14055
  children: [
13994
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
14056
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
13995
14057
  "img",
13996
14058
  {
13997
14059
  src: image.url,
@@ -13999,14 +14061,14 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
13999
14061
  loading: "lazy",
14000
14062
  className: "h-full w-full object-cover transition-transform group-hover:scale-105"
14001
14063
  }
14002
- ) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
14003
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
14004
- product.category && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "inline-flex w-fit items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground", children: product.category.name }),
14005
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
14006
- product.shortDescription && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
14007
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
14008
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
14009
- hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
14064
+ ) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
14065
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
14066
+ product.category && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "inline-flex w-fit items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground", children: product.category.name }),
14067
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
14068
+ product.shortDescription && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
14069
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
14070
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
14071
+ hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
14010
14072
  ] })
14011
14073
  ] })
14012
14074
  ]
@@ -14208,7 +14270,7 @@ var __iconNode8 = [
14208
14270
  var Truck = createLucideIcon("truck", __iconNode8);
14209
14271
 
14210
14272
  // src/components/product-trust-items.tsx
14211
- var import_jsx_runtime12 = require("react/jsx-runtime");
14273
+ var import_jsx_runtime13 = require("react/jsx-runtime");
14212
14274
  var DEFAULT_TRUST_ICONS = Object.freeze({
14213
14275
  shipping: Truck,
14214
14276
  returns: RotateCcw,
@@ -14242,9 +14304,9 @@ function ProductTrustItems({
14242
14304
  return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
14243
14305
  });
14244
14306
  if (rows.length === 0) return null;
14245
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(List, { "data-slot": "product-trust-items", className: slotClassName("space-y-2.5", "", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
14246
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
14247
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { children: text3 })
14307
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(List, { "data-slot": "product-trust-items", className: slotClassName("space-y-2.5", "", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
14308
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
14309
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: text3 })
14248
14310
  ] }, key2)) });
14249
14311
  }
14250
14312
 
@@ -14252,7 +14314,7 @@ function ProductTrustItems({
14252
14314
  var import_utils11 = require("@reblu/site-ui/utils");
14253
14315
 
14254
14316
  // src/components/_heading.tsx
14255
- var import_jsx_runtime13 = require("react/jsx-runtime");
14317
+ var import_jsx_runtime14 = require("react/jsx-runtime");
14256
14318
  function nextHeadingLevel(level) {
14257
14319
  return Math.min(level + 1, 6);
14258
14320
  }
@@ -14262,11 +14324,11 @@ function Heading({
14262
14324
  children: children2
14263
14325
  }) {
14264
14326
  const Tag = `h${level}`;
14265
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Tag, { className, children: children2 });
14327
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Tag, { className, children: children2 });
14266
14328
  }
14267
14329
 
14268
14330
  // src/components/faq-accordion.tsx
14269
- var import_jsx_runtime14 = require("react/jsx-runtime");
14331
+ var import_jsx_runtime15 = require("react/jsx-runtime");
14270
14332
  function FaqAccordion({
14271
14333
  items,
14272
14334
  heading,
@@ -14277,18 +14339,18 @@ function FaqAccordion({
14277
14339
  }) {
14278
14340
  const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
14279
14341
  if (visible.length === 0) return null;
14280
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: (0, import_utils11.cn)("space-y-4", className), "data-slot": "faq-accordion", children: [
14281
- heading && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
14282
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
14342
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: (0, import_utils11.cn)("space-y-4", className), "data-slot": "faq-accordion", children: [
14343
+ heading && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
14344
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
14283
14345
  "details",
14284
14346
  {
14285
14347
  className: "group px-4",
14286
14348
  "data-slot": "faq-item",
14287
14349
  ...defaultOpen.includes(index) ? { open: true } : {},
14288
14350
  children: [
14289
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("summary", { className: "flex cursor-pointer list-none items-center justify-between gap-4 py-4 font-medium focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring [&::-webkit-details-marker]:hidden", children: [
14290
- questionHeadingLevel ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { children: item.q }),
14291
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14351
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("summary", { className: "flex cursor-pointer list-none items-center justify-between gap-4 py-4 font-medium focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring [&::-webkit-details-marker]:hidden", children: [
14352
+ questionHeadingLevel ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { children: item.q }),
14353
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14292
14354
  "span",
14293
14355
  {
14294
14356
  "aria-hidden": "true",
@@ -14297,7 +14359,7 @@ function FaqAccordion({
14297
14359
  }
14298
14360
  )
14299
14361
  ] }),
14300
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
14362
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
14301
14363
  ]
14302
14364
  },
14303
14365
  index
@@ -14307,7 +14369,7 @@ function FaqAccordion({
14307
14369
 
14308
14370
  // src/components/trust-badges.tsx
14309
14371
  var import_utils12 = require("@reblu/site-ui/utils");
14310
- var import_jsx_runtime15 = (
14372
+ var import_jsx_runtime16 = (
14311
14373
  // eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
14312
14374
  require("react/jsx-runtime")
14313
14375
  );
@@ -14350,7 +14412,7 @@ function safeLogoSrc(url) {
14350
14412
  function BadgeContent({ badge, logoClassName }) {
14351
14413
  const src = safeLogoSrc(badge.logoUrl);
14352
14414
  if (src) {
14353
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14415
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14354
14416
  "img",
14355
14417
  {
14356
14418
  src,
@@ -14360,7 +14422,7 @@ function BadgeContent({ badge, logoClassName }) {
14360
14422
  }
14361
14423
  );
14362
14424
  }
14363
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "text-sm font-medium", children: badge.name });
14425
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "text-sm font-medium", children: badge.name });
14364
14426
  }
14365
14427
  function TrustBadges({
14366
14428
  badges,
@@ -14388,14 +14450,14 @@ function TrustBadges({
14388
14450
  if (groups.length === 0) return null;
14389
14451
  const hasHeading = heading !== void 0 && heading !== null && heading !== "";
14390
14452
  const groupHeadingLevel = hasHeading ? nextHeadingLevel(headingLevel) : headingLevel;
14391
- const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
14453
+ const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
14392
14454
  "div",
14393
14455
  {
14394
14456
  "data-slot": "trust-badge-group",
14395
14457
  "data-type": type,
14396
14458
  className: (0, import_utils12.cn)("space-y-3", groupClassName),
14397
14459
  children: [
14398
- groupHeading ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14460
+ groupHeading ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14399
14461
  Heading,
14400
14462
  {
14401
14463
  level: groupHeadingLevel,
@@ -14407,30 +14469,30 @@ function TrustBadges({
14407
14469
  children: groupHeading
14408
14470
  }
14409
14471
  ) : null,
14410
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("ul", { className: (0, import_utils12.cn)("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
14472
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("ul", { className: (0, import_utils12.cn)("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
14411
14473
  const href = safeHref(badge.url);
14412
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("li", { children: href ? /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14413
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(BadgeContent, { badge, logoClassName }),
14474
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("li", { children: href ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14475
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(BadgeContent, { badge, logoClassName }),
14414
14476
  " ",
14415
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "sr-only", children: newWindowLabel })
14416
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(BadgeContent, { badge, logoClassName }) }, badge.id);
14477
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "sr-only", children: newWindowLabel })
14478
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(BadgeContent, { badge, logoClassName }) }, badge.id);
14417
14479
  }) })
14418
14480
  ]
14419
14481
  },
14420
14482
  type
14421
14483
  ));
14422
14484
  if (!hasHeading) {
14423
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { "data-slot": "trust-badges", className: (0, import_utils12.cn)("space-y-6", className), children: content });
14485
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { "data-slot": "trust-badges", className: (0, import_utils12.cn)("space-y-6", className), children: content });
14424
14486
  }
14425
14487
  const Tag = `h${headingLevel}`;
14426
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
14488
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
14427
14489
  "section",
14428
14490
  {
14429
14491
  "data-slot": "trust-badges",
14430
14492
  "aria-labelledby": headingId,
14431
14493
  className: (0, import_utils12.cn)("space-y-6", className),
14432
14494
  children: [
14433
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14495
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14434
14496
  Tag,
14435
14497
  {
14436
14498
  id: headingId,
@@ -14447,38 +14509,38 @@ function TrustBadges({
14447
14509
  // src/components/page-blocks.tsx
14448
14510
  var import_utils13 = require("@reblu/site-ui/utils");
14449
14511
  var import_button_variants2 = require("@reblu/site-ui/button-variants");
14450
- var import_jsx_runtime16 = require("react/jsx-runtime");
14512
+ var import_jsx_runtime17 = require("react/jsx-runtime");
14451
14513
  var ALIASES = {
14452
14514
  doctor_embed: "profile_embed",
14453
14515
  specialty_embed: "page_embed"
14454
14516
  };
14455
14517
  function HeroBlock({ block, headingLevel }) {
14456
14518
  const { title, subtitle, imageUrl } = block.data;
14457
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "space-y-4", children: [
14458
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
14459
- subtitle && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "text-lg opacity-80", children: subtitle }),
14460
- imageUrl && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
14519
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "space-y-4", children: [
14520
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
14521
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-lg opacity-80", children: subtitle }),
14522
+ imageUrl && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
14461
14523
  ] });
14462
14524
  }
14463
14525
  function RichtextBlock({ block, headingLevel }) {
14464
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
14526
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
14465
14527
  }
14466
14528
  function FaqBlock({ block }) {
14467
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(FaqAccordion, { items: block.data.items });
14529
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(FaqAccordion, { items: block.data.items });
14468
14530
  }
14469
14531
  function StatsBlock({ block }) {
14470
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex flex-col-reverse gap-1", children: [
14471
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("dt", { className: "text-sm opacity-80", children: item.label }),
14472
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("dd", { className: "text-3xl font-bold", children: item.value })
14532
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex flex-col-reverse gap-1", children: [
14533
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("dt", { className: "text-sm opacity-80", children: item.label }),
14534
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("dd", { className: "text-3xl font-bold", children: item.value })
14473
14535
  ] }, i)) });
14474
14536
  }
14475
14537
  function TestimonialBlock({ block }) {
14476
14538
  const { quote, author, role, avatarUrl } = block.data;
14477
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("figure", { className: "space-y-4", children: [
14478
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { children: quote }) }),
14479
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("figcaption", { className: "flex items-center gap-3", children: [
14539
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("figure", { className: "space-y-4", children: [
14540
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { children: quote }) }),
14541
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("figcaption", { className: "flex items-center gap-3", children: [
14480
14542
  avatarUrl && // eslint-disable-next-line @next/next/no-img-element
14481
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14543
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14482
14544
  "img",
14483
14545
  {
14484
14546
  src: avatarUrl,
@@ -14487,9 +14549,9 @@ function TestimonialBlock({ block }) {
14487
14549
  className: "h-10 w-10 rounded-full object-cover"
14488
14550
  }
14489
14551
  ),
14490
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("span", { children: [
14491
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "font-semibold", children: author }),
14492
- role && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "block text-sm opacity-80", children: role })
14552
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("span", { children: [
14553
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "font-semibold", children: author }),
14554
+ role && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "block text-sm opacity-80", children: role })
14493
14555
  ] })
14494
14556
  ] })
14495
14557
  ] });
@@ -14498,19 +14560,19 @@ function CtaSlotBlock(_props) {
14498
14560
  return null;
14499
14561
  }
14500
14562
  function FeatureListBlock({ block }) {
14501
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("li", { children: item.text }, i)) });
14563
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("li", { children: item.text }, i)) });
14502
14564
  }
14503
14565
  function GalleryBlock({ block }) {
14504
14566
  const { images } = block.data;
14505
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14567
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14506
14568
  "div",
14507
14569
  {
14508
14570
  className: (0, import_utils13.cn)(
14509
14571
  "grid gap-4",
14510
14572
  images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
14511
14573
  ),
14512
- children: images.map((img, i) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("figure", { className: "space-y-1", children: [
14513
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14574
+ children: images.map((img, i) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("figure", { className: "space-y-1", children: [
14575
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14514
14576
  "img",
14515
14577
  {
14516
14578
  src: img.url,
@@ -14519,7 +14581,7 @@ function GalleryBlock({ block }) {
14519
14581
  className: "h-full w-full object-cover"
14520
14582
  }
14521
14583
  ) }),
14522
- img.caption && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
14584
+ img.caption && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
14523
14585
  ] }, `${img.url}-${i}`))
14524
14586
  }
14525
14587
  );
@@ -14529,13 +14591,13 @@ function EmbedCard({
14529
14591
  headingLevel,
14530
14592
  embedHref
14531
14593
  }) {
14532
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
14594
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
14533
14595
  "a",
14534
14596
  {
14535
14597
  href: embedHref(resolved),
14536
14598
  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",
14537
14599
  children: [
14538
- resolved.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14600
+ resolved.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14539
14601
  "img",
14540
14602
  {
14541
14603
  src: resolved.coverImageUrl,
@@ -14544,24 +14606,24 @@ function EmbedCard({
14544
14606
  className: "h-full w-full object-cover"
14545
14607
  }
14546
14608
  ) }),
14547
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "space-y-1 p-4", children: [
14548
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
14549
- resolved.role && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
14550
- resolved.excerpt && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "text-muted-foreground", children: resolved.excerpt })
14609
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "space-y-1 p-4", children: [
14610
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
14611
+ resolved.role && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
14612
+ resolved.excerpt && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-muted-foreground", children: resolved.excerpt })
14551
14613
  ] })
14552
14614
  ]
14553
14615
  }
14554
14616
  );
14555
14617
  }
14556
14618
  function PageEmbedBlock({ block, headingLevel, embedHref }) {
14557
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14619
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14558
14620
  }
14559
14621
  function ProfileEmbedBlock({
14560
14622
  block,
14561
14623
  headingLevel,
14562
14624
  embedHref
14563
14625
  }) {
14564
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14626
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14565
14627
  }
14566
14628
  var DEFAULT_RENDERERS = {
14567
14629
  hero: HeroBlock,
@@ -14618,7 +14680,7 @@ function toIdFragment(value) {
14618
14680
  function SectionCta2({ cta }) {
14619
14681
  if (!hasUsableCta(cta)) return null;
14620
14682
  const variant = toButtonVariant(cta.variant);
14621
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14683
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14622
14684
  "a",
14623
14685
  {
14624
14686
  href: cta.url,
@@ -14651,7 +14713,7 @@ function PageBlocks({
14651
14713
  const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
14652
14714
  const background = block.backgroundColor;
14653
14715
  return [
14654
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
14716
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
14655
14717
  "section",
14656
14718
  {
14657
14719
  "data-slot": "page-block",
@@ -14660,8 +14722,8 @@ function PageBlocks({
14660
14722
  style: surfaceStyle(background),
14661
14723
  className: (0, import_utils13.cn)("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
14662
14724
  children: [
14663
- block.heading && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { id: headingId, children: block.heading }) }),
14664
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14725
+ block.heading && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { id: headingId, children: block.heading }) }),
14726
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14665
14727
  Renderer,
14666
14728
  {
14667
14729
  block,
@@ -14669,7 +14731,7 @@ function PageBlocks({
14669
14731
  embedHref
14670
14732
  }
14671
14733
  ),
14672
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(SectionCta2, { cta: block.cta })
14734
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SectionCta2, { cta: block.cta })
14673
14735
  ]
14674
14736
  },
14675
14737
  block.id
@@ -14677,12 +14739,12 @@ function PageBlocks({
14677
14739
  ];
14678
14740
  });
14679
14741
  if (sections.length === 0) return null;
14680
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: (0, import_utils13.cn)("space-y-12", className), "data-slot": "page-blocks", children: sections });
14742
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: (0, import_utils13.cn)("space-y-12", className), "data-slot": "page-blocks", children: sections });
14681
14743
  }
14682
14744
 
14683
14745
  // src/components/shop-filters.tsx
14684
14746
  var import_utils14 = require("@reblu/site-ui/utils");
14685
- var import_jsx_runtime17 = require("react/jsx-runtime");
14747
+ var import_jsx_runtime18 = require("react/jsx-runtime");
14686
14748
  var DEFAULT_SHOP_PRICE_BANDS = [
14687
14749
  { max: 2500 },
14688
14750
  { min: 2500, max: 5e3 },
@@ -14726,7 +14788,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
14726
14788
  return "";
14727
14789
  }
14728
14790
  function OptionLink({ href, active, label, onActivate }) {
14729
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14791
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
14730
14792
  "a",
14731
14793
  {
14732
14794
  href,
@@ -14744,9 +14806,9 @@ function OptionLink({ href, active, label, onActivate }) {
14744
14806
  );
14745
14807
  }
14746
14808
  function FilterFieldset({ legend, children: children2 }) {
14747
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("fieldset", { className: "space-y-2", children: [
14748
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("legend", { className: "text-sm font-medium text-foreground", children: legend }),
14749
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex flex-wrap gap-2", children: children2 })
14809
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("fieldset", { className: "space-y-2", children: [
14810
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("legend", { className: "text-sm font-medium text-foreground", children: legend }),
14811
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "flex flex-wrap gap-2", children: children2 })
14750
14812
  ] });
14751
14813
  }
14752
14814
  function ShopFilters({
@@ -14769,11 +14831,11 @@ function ShopFilters({
14769
14831
  if (!shouldRenderShopFilters(facets, active)) {
14770
14832
  return null;
14771
14833
  }
14772
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: (0, import_utils14.cn)("space-y-6", className), "data-slot": "shop-filters", children: [
14834
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: (0, import_utils14.cn)("space-y-6", className), "data-slot": "shop-filters", children: [
14773
14835
  visibleTaxonomies.map((axis) => {
14774
14836
  const activeSlug = active.taxonomy?.[axis.key];
14775
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(FilterFieldset, { legend: axis.label, children: [
14776
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14837
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(FilterFieldset, { legend: axis.label, children: [
14838
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
14777
14839
  OptionLink,
14778
14840
  {
14779
14841
  href: hrefs.taxonomy(axis.key, void 0),
@@ -14788,7 +14850,7 @@ function ShopFilters({
14788
14850
  ),
14789
14851
  axis.terms.map((term) => {
14790
14852
  const isActive = activeSlug === term.slug;
14791
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14853
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
14792
14854
  OptionLink,
14793
14855
  {
14794
14856
  href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
@@ -14808,9 +14870,9 @@ function ShopFilters({
14808
14870
  }),
14809
14871
  visibleAttributes.map((attr) => {
14810
14872
  const activeValues = toValueArray(active.attr?.[attr.key]);
14811
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
14873
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
14812
14874
  const isActive = activeValues.includes(opt.value);
14813
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14875
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
14814
14876
  OptionLink,
14815
14877
  {
14816
14878
  href: hrefs.attr(attr.key, opt.value),
@@ -14828,11 +14890,11 @@ function ShopFilters({
14828
14890
  );
14829
14891
  }) }, attr.key);
14830
14892
  }),
14831
- showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
14893
+ showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
14832
14894
  const isActive = active.priceMin === band.min && active.priceMax === band.max;
14833
14895
  const nextMin = isActive ? void 0 : band.min;
14834
14896
  const nextMax = isActive ? void 0 : band.max;
14835
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14897
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
14836
14898
  OptionLink,
14837
14899
  {
14838
14900
  href: hrefs.price(nextMin, nextMax),
@@ -14843,7 +14905,7 @@ function ShopFilters({
14843
14905
  i
14844
14906
  );
14845
14907
  }) }),
14846
- hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14908
+ hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
14847
14909
  OptionLink,
14848
14910
  {
14849
14911
  href: hrefs.onSale(!active.onSale),
@@ -14852,7 +14914,7 @@ function ShopFilters({
14852
14914
  onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
14853
14915
  }
14854
14916
  ),
14855
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14917
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
14856
14918
  "a",
14857
14919
  {
14858
14920
  href: hrefs.clearAll(),
@@ -14869,7 +14931,7 @@ function ShopFilters({
14869
14931
 
14870
14932
  // src/components/course-catalog-filters.tsx
14871
14933
  var import_utils15 = require("@reblu/site-ui/utils");
14872
- var import_jsx_runtime18 = require("react/jsx-runtime");
14934
+ var import_jsx_runtime19 = require("react/jsx-runtime");
14873
14935
  var DEFAULT_COURSE_PRICE_BANDS = [
14874
14936
  { max: 5e3 },
14875
14937
  { min: 5e3, max: 15e3 },
@@ -14922,9 +14984,9 @@ function CourseCatalogFilters({
14922
14984
  const showPrice = enabled.price !== false;
14923
14985
  const isFree = Boolean(active.free);
14924
14986
  if (!showCategories && !showInstructors && !showPrice) return null;
14925
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: (0, import_utils15.cn)("space-y-6", className), "data-slot": "course-catalog-filters", children: [
14926
- showCategories && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(FilterFieldset, { legend: t.category, children: [
14927
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
14987
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: (0, import_utils15.cn)("space-y-6", className), "data-slot": "course-catalog-filters", children: [
14988
+ showCategories && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(FilterFieldset, { legend: t.category, children: [
14989
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
14928
14990
  OptionLink,
14929
14991
  {
14930
14992
  href: categoryHref(void 0),
@@ -14936,7 +14998,7 @@ function CourseCatalogFilters({
14936
14998
  sortedCategories.map((category) => {
14937
14999
  const isActive = active.category === category.slug;
14938
15000
  const next2 = isActive ? void 0 : category.slug;
14939
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
15001
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
14940
15002
  OptionLink,
14941
15003
  {
14942
15004
  href: categoryHref(next2),
@@ -14948,8 +15010,8 @@ function CourseCatalogFilters({
14948
15010
  );
14949
15011
  })
14950
15012
  ] }),
14951
- showInstructors && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(FilterFieldset, { legend: t.instructor, children: [
14952
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
15013
+ showInstructors && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(FilterFieldset, { legend: t.instructor, children: [
15014
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
14953
15015
  OptionLink,
14954
15016
  {
14955
15017
  href: hrefs.instructor(void 0),
@@ -14961,7 +15023,7 @@ function CourseCatalogFilters({
14961
15023
  named.map((instructor) => {
14962
15024
  const isActive = active.instructor === instructor.id;
14963
15025
  const next2 = isActive ? void 0 : instructor.id;
14964
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
15026
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
14965
15027
  OptionLink,
14966
15028
  {
14967
15029
  href: hrefs.instructor(next2),
@@ -14973,8 +15035,8 @@ function CourseCatalogFilters({
14973
15035
  );
14974
15036
  })
14975
15037
  ] }),
14976
- showPrice && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(FilterFieldset, { legend: t.price, children: [
14977
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
15038
+ showPrice && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(FilterFieldset, { legend: t.price, children: [
15039
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
14978
15040
  OptionLink,
14979
15041
  {
14980
15042
  href: hrefs.free(!isFree),
@@ -14989,7 +15051,7 @@ function CourseCatalogFilters({
14989
15051
  const isActive = !isFree && active.priceMin === band.min && active.priceMax === band.max;
14990
15052
  const nextMin = isActive ? void 0 : band.min;
14991
15053
  const nextMax = isActive ? void 0 : band.max;
14992
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
15054
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
14993
15055
  OptionLink,
14994
15056
  {
14995
15057
  href: hrefs.price(nextMin, nextMax),
@@ -15001,7 +15063,7 @@ function CourseCatalogFilters({
15001
15063
  );
15002
15064
  })
15003
15065
  ] }),
15004
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
15066
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
15005
15067
  "a",
15006
15068
  {
15007
15069
  href: hrefs.clearAll(),
@@ -15024,7 +15086,7 @@ function CourseCatalogFilters({
15024
15086
 
15025
15087
  // src/components/cart-line-list.tsx
15026
15088
  var import_utils16 = require("@reblu/site-ui/utils");
15027
- var import_jsx_runtime19 = require("react/jsx-runtime");
15089
+ var import_jsx_runtime20 = require("react/jsx-runtime");
15028
15090
  var DEFAULT_LABELS2 = {
15029
15091
  quantityLabel: "Cantidad",
15030
15092
  decrease: "Reducir cantidad",
@@ -15050,9 +15112,9 @@ function CartLineList({
15050
15112
  }) {
15051
15113
  const t = { ...DEFAULT_LABELS2, ...labels };
15052
15114
  const noticeContent = notice === true ? t.cancelledNotice : notice;
15053
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: (0, import_utils16.cn)("space-y-4", className), "data-slot": "cart-line-list", children: [
15054
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
15055
- noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
15115
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: (0, import_utils16.cn)("space-y-4", className), "data-slot": "cart-line-list", children: [
15116
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
15117
+ noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
15056
15118
  "div",
15057
15119
  {
15058
15120
  role: "status",
@@ -15061,33 +15123,33 @@ function CartLineList({
15061
15123
  children: noticeContent
15062
15124
  }
15063
15125
  ),
15064
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
15126
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
15065
15127
  const maxQty = item.maxStock ?? Infinity;
15066
15128
  const atMax = item.quantity >= maxQty;
15067
15129
  const atMin = item.quantity <= 1;
15068
15130
  const message = lineMessage?.(item);
15069
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
15131
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
15070
15132
  "li",
15071
15133
  {
15072
15134
  className: "flex gap-4 rounded-xl border border-border bg-card p-4",
15073
15135
  children: [
15074
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
15075
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "min-w-0 flex-1", children: [
15076
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
15077
- item.variantName && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
15078
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("p", { className: "mt-1 text-sm text-muted-foreground", children: [
15136
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
15137
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "min-w-0 flex-1", children: [
15138
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
15139
+ item.variantName && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
15140
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("p", { className: "mt-1 text-sm text-muted-foreground", children: [
15079
15141
  formatPrice(item.unitPrice, currencyCode, locale),
15080
15142
  " ",
15081
15143
  t.unitPriceSuffix
15082
15144
  ] }),
15083
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
15145
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
15084
15146
  "div",
15085
15147
  {
15086
15148
  role: "group",
15087
15149
  "aria-label": t.quantityLabel,
15088
15150
  className: "mt-3 flex items-center gap-3",
15089
15151
  children: [
15090
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
15152
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
15091
15153
  "button",
15092
15154
  {
15093
15155
  type: "button",
@@ -15098,8 +15160,8 @@ function CartLineList({
15098
15160
  children: "\u2212"
15099
15161
  }
15100
15162
  ),
15101
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
15102
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
15163
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
15164
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
15103
15165
  "button",
15104
15166
  {
15105
15167
  type: "button",
@@ -15110,7 +15172,7 @@ function CartLineList({
15110
15172
  children: "+"
15111
15173
  }
15112
15174
  ),
15113
- onRemove && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
15175
+ onRemove && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
15114
15176
  "button",
15115
15177
  {
15116
15178
  type: "button",
@@ -15123,7 +15185,7 @@ function CartLineList({
15123
15185
  ]
15124
15186
  }
15125
15187
  ),
15126
- message != null && message !== false && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
15188
+ message != null && message !== false && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
15127
15189
  "p",
15128
15190
  {
15129
15191
  className: "mt-2 text-sm text-destructive",
@@ -15132,7 +15194,7 @@ function CartLineList({
15132
15194
  }
15133
15195
  )
15134
15196
  ] }),
15135
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
15197
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
15136
15198
  ]
15137
15199
  },
15138
15200
  lineKey(item.productId, item.variantId)
@@ -15143,7 +15205,7 @@ function CartLineList({
15143
15205
 
15144
15206
  // src/components/cart-summary.tsx
15145
15207
  var import_utils17 = require("@reblu/site-ui/utils");
15146
- var import_jsx_runtime20 = require("react/jsx-runtime");
15208
+ var import_jsx_runtime21 = require("react/jsx-runtime");
15147
15209
  var DEFAULT_LABELS3 = {
15148
15210
  subtotal: "Subtotal",
15149
15211
  discountPrefix: "Descuento",
@@ -15173,37 +15235,37 @@ function CartSummary({
15173
15235
  const hasDiscount = Boolean(discountAmount && discountAmount > 0);
15174
15236
  const noticeContent = notice === true ? t.cancelledNotice : notice;
15175
15237
  const hasNotice = noticeContent != null && noticeContent !== false;
15176
- const breakdown = /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
15238
+ const breakdown = /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
15177
15239
  "dl",
15178
15240
  {
15179
15241
  className: (0, import_utils17.cn)("space-y-2 text-sm", !hasNotice && className),
15180
15242
  "data-slot": "cart-summary",
15181
15243
  children: [
15182
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
15183
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("dt", { children: t.subtotal }),
15184
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("dd", { children: formatPrice(subtotal, currencyCode, locale) })
15244
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
15245
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dt", { children: t.subtotal }),
15246
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dd", { children: formatPrice(subtotal, currencyCode, locale) })
15185
15247
  ] }),
15186
- hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
15187
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
15188
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("dd", { children: [
15248
+ hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
15249
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
15250
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("dd", { children: [
15189
15251
  "-",
15190
15252
  formatPrice(discountAmount, currencyCode, locale)
15191
15253
  ] })
15192
15254
  ] }),
15193
- shippingEnabled && /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
15194
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("dt", { children: t.shipping }),
15195
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
15255
+ shippingEnabled && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
15256
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dt", { children: t.shipping }),
15257
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
15196
15258
  ] }),
15197
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
15198
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("dt", { children: t.total }),
15199
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("dd", { children: formatPrice(total, currencyCode, locale) })
15259
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
15260
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dt", { children: t.total }),
15261
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dd", { children: formatPrice(total, currencyCode, locale) })
15200
15262
  ] })
15201
15263
  ]
15202
15264
  }
15203
15265
  );
15204
15266
  if (!hasNotice) return breakdown;
15205
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: (0, import_utils17.cn)("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
15206
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
15267
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: (0, import_utils17.cn)("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
15268
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15207
15269
  "div",
15208
15270
  {
15209
15271
  role: "status",
@@ -15218,7 +15280,7 @@ function CartSummary({
15218
15280
 
15219
15281
  // src/components/cart-adjustments-notice.tsx
15220
15282
  var import_utils18 = require("@reblu/site-ui/utils");
15221
- var import_jsx_runtime21 = require("react/jsx-runtime");
15283
+ var import_jsx_runtime22 = require("react/jsx-runtime");
15222
15284
  var DEFAULT_LABELS4 = {
15223
15285
  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.`,
15224
15286
  quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
@@ -15252,20 +15314,20 @@ function CartAdjustmentsNotice({
15252
15314
  );
15253
15315
  }
15254
15316
  if (messages.length === 0) return null;
15255
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15317
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15256
15318
  "div",
15257
15319
  {
15258
15320
  role: "status",
15259
15321
  className: (0, import_utils18.cn)("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
15260
15322
  "data-slot": "cart-adjustments-notice",
15261
- children: messages.length === 1 ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { children: messages[0] }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("li", { children: message }, index)) })
15323
+ children: messages.length === 1 ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { children: messages[0] }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("li", { children: message }, index)) })
15262
15324
  }
15263
15325
  );
15264
15326
  }
15265
15327
 
15266
15328
  // src/components/added-to-cart-toast.tsx
15267
15329
  var import_utils19 = require("@reblu/site-ui/utils");
15268
- var import_jsx_runtime22 = (
15330
+ var import_jsx_runtime23 = (
15269
15331
  // eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
15270
15332
  require("react/jsx-runtime")
15271
15333
  );
@@ -15288,7 +15350,7 @@ function AddedToCartToast({
15288
15350
  const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
15289
15351
  const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
15290
15352
  const variant = status === "success" ? "success" : "error";
15291
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
15353
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
15292
15354
  "div",
15293
15355
  {
15294
15356
  "data-slot": "added-to-cart-toast",
@@ -15300,12 +15362,12 @@ function AddedToCartToast({
15300
15362
  className
15301
15363
  ),
15302
15364
  children: [
15303
- hasThumbnail && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
15304
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "min-w-0 flex-1", children: [
15305
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "truncate font-semibold text-foreground", children: productName }),
15306
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
15365
+ hasThumbnail && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
15366
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "min-w-0 flex-1", children: [
15367
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "truncate font-semibold text-foreground", children: productName }),
15368
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
15307
15369
  ] }),
15308
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
15370
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
15309
15371
  ]
15310
15372
  }
15311
15373
  );
@@ -15313,7 +15375,7 @@ function AddedToCartToast({
15313
15375
 
15314
15376
  // src/components/checkout-login-prompt.tsx
15315
15377
  var import_utils20 = require("@reblu/site-ui/utils");
15316
- var import_jsx_runtime23 = require("react/jsx-runtime");
15378
+ var import_jsx_runtime24 = require("react/jsx-runtime");
15317
15379
  var DEFAULT_LABELS6 = {
15318
15380
  title: "Identificaci\xF3n",
15319
15381
  description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
@@ -15340,9 +15402,9 @@ function CheckoutLoginPrompt({
15340
15402
  if (!open) return null;
15341
15403
  const t = { ...DEFAULT_LABELS6, ...labels };
15342
15404
  const isValidEmail = EMAIL_PATTERN.test(email.trim());
15343
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
15344
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
15345
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
15405
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment, { children: [
15406
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
15407
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
15346
15408
  "div",
15347
15409
  {
15348
15410
  role: "dialog",
@@ -15354,12 +15416,12 @@ function CheckoutLoginPrompt({
15354
15416
  className
15355
15417
  ),
15356
15418
  children: [
15357
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
15358
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { children: [
15359
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
15360
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
15419
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
15420
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { children: [
15421
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
15422
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
15361
15423
  ] }),
15362
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15424
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15363
15425
  "button",
15364
15426
  {
15365
15427
  type: "button",
@@ -15370,9 +15432,9 @@ function CheckoutLoginPrompt({
15370
15432
  }
15371
15433
  )
15372
15434
  ] }),
15373
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-2", children: [
15374
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
15375
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15435
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-2", children: [
15436
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
15437
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15376
15438
  "input",
15377
15439
  {
15378
15440
  id: "checkout-login-prompt-email",
@@ -15387,10 +15449,10 @@ function CheckoutLoginPrompt({
15387
15449
  )
15388
15450
  }
15389
15451
  ),
15390
- error && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "text-xs text-destructive", children: error })
15452
+ error && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-xs text-destructive", children: error })
15391
15453
  ] }),
15392
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-2", children: [
15393
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15454
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-2", children: [
15455
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15394
15456
  "button",
15395
15457
  {
15396
15458
  type: "button",
@@ -15403,7 +15465,7 @@ function CheckoutLoginPrompt({
15403
15465
  children: checking ? t.checking : t.continueWithEmail
15404
15466
  }
15405
15467
  ),
15406
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15468
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15407
15469
  "button",
15408
15470
  {
15409
15471
  type: "button",
@@ -15422,7 +15484,7 @@ function CheckoutLoginPrompt({
15422
15484
  // src/components/checkout-form.tsx
15423
15485
  var import_utils21 = require("@reblu/site-ui/utils");
15424
15486
  var import_phone_input = require("@reblu/site-ui/phone-input");
15425
- var import_jsx_runtime24 = require("react/jsx-runtime");
15487
+ var import_jsx_runtime25 = require("react/jsx-runtime");
15426
15488
  var DEFAULT_LABELS7 = {
15427
15489
  contactTitle: "Datos de contacto",
15428
15490
  nameLabel: "Nombre completo",
@@ -15478,9 +15540,9 @@ function CheckoutForm({
15478
15540
  event.preventDefault();
15479
15541
  if (discountCode.trim() && !discountApplying) onApplyDiscount();
15480
15542
  }
15481
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment, { children: [
15543
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
15482
15544
  loginPrompt,
15483
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
15545
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
15484
15546
  "form",
15485
15547
  {
15486
15548
  "data-testid": "checkout-form",
@@ -15488,12 +15550,12 @@ function CheckoutForm({
15488
15550
  className: (0, import_utils21.cn)("space-y-8", className),
15489
15551
  "data-slot": "checkout-form",
15490
15552
  children: [
15491
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("section", { className: "space-y-4", children: [
15492
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
15493
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15494
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-1", children: [
15495
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
15496
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15553
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("section", { className: "space-y-4", children: [
15554
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
15555
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15556
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-1", children: [
15557
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
15558
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15497
15559
  "input",
15498
15560
  {
15499
15561
  id: "checkout-form-name",
@@ -15508,11 +15570,11 @@ function CheckoutForm({
15508
15570
  )
15509
15571
  }
15510
15572
  ),
15511
- contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
15573
+ contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
15512
15574
  ] }),
15513
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-1", children: [
15514
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
15515
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15575
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-1", children: [
15576
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
15577
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15516
15578
  "input",
15517
15579
  {
15518
15580
  id: "checkout-form-email",
@@ -15527,9 +15589,9 @@ function CheckoutForm({
15527
15589
  )
15528
15590
  }
15529
15591
  ),
15530
- contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
15592
+ contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
15531
15593
  ] }),
15532
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15594
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15533
15595
  import_phone_input.PhoneInput,
15534
15596
  {
15535
15597
  id: "checkout-form-phone",
@@ -15543,26 +15605,26 @@ function CheckoutForm({
15543
15605
  ] })
15544
15606
  ] }),
15545
15607
  children2,
15546
- generalError ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
15547
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("section", { className: "space-y-3", children: [
15548
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
15549
- autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
15608
+ generalError ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
15609
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("section", { className: "space-y-3", children: [
15610
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
15611
+ autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
15550
15612
  "div",
15551
15613
  {
15552
15614
  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",
15553
15615
  "data-slot": "checkout-staff-discount",
15554
15616
  children: [
15555
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "font-semibold", children: t.staffDiscountApplied }),
15556
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
15617
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "font-semibold", children: t.staffDiscountApplied }),
15618
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
15557
15619
  ]
15558
15620
  }
15559
15621
  ) : null,
15560
- appliedDiscount && !autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center justify-between rounded-lg border border-green-200 bg-green-50 px-4 py-3 dark:border-green-800 dark:bg-green-900/20", children: [
15561
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
15562
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "font-semibold", children: appliedDiscount.code }),
15563
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
15622
+ appliedDiscount && !autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center justify-between rounded-lg border border-green-200 bg-green-50 px-4 py-3 dark:border-green-800 dark:bg-green-900/20", children: [
15623
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
15624
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "font-semibold", children: appliedDiscount.code }),
15625
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
15564
15626
  ] }),
15565
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15627
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15566
15628
  "button",
15567
15629
  {
15568
15630
  type: "button",
@@ -15572,9 +15634,9 @@ function CheckoutForm({
15572
15634
  children: t.removeDiscount
15573
15635
  }
15574
15636
  )
15575
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex gap-2", children: [
15576
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
15577
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15637
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex gap-2", children: [
15638
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
15639
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15578
15640
  "input",
15579
15641
  {
15580
15642
  id: "checkout-form-discount-code",
@@ -15586,7 +15648,7 @@ function CheckoutForm({
15586
15648
  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"
15587
15649
  }
15588
15650
  ),
15589
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15651
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15590
15652
  "button",
15591
15653
  {
15592
15654
  type: "button",
@@ -15597,9 +15659,9 @@ function CheckoutForm({
15597
15659
  }
15598
15660
  )
15599
15661
  ] }),
15600
- discountError && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-xs text-destructive", children: discountError })
15662
+ discountError && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-xs text-destructive", children: discountError })
15601
15663
  ] }),
15602
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15664
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15603
15665
  "button",
15604
15666
  {
15605
15667
  type: "submit",
@@ -15622,7 +15684,7 @@ var import_utils23 = require("@reblu/site-ui/utils");
15622
15684
 
15623
15685
  // src/components/order-invoice-link.tsx
15624
15686
  var import_utils22 = require("@reblu/site-ui/utils");
15625
- var import_jsx_runtime25 = require("react/jsx-runtime");
15687
+ var import_jsx_runtime26 = require("react/jsx-runtime");
15626
15688
  var DEFAULT_LABELS8 = {
15627
15689
  linkLabel: "Descargar la factura {number}",
15628
15690
  signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
@@ -15630,8 +15692,8 @@ var DEFAULT_LABELS8 = {
15630
15692
  function OrderInvoiceLink({ invoice, labels, className }) {
15631
15693
  if (!invoice) return null;
15632
15694
  const t = { ...DEFAULT_LABELS8, ...labels };
15633
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: (0, import_utils22.cn)("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
15634
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15695
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: (0, import_utils22.cn)("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
15696
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
15635
15697
  "a",
15636
15698
  {
15637
15699
  href: invoice.url,
@@ -15639,12 +15701,12 @@ function OrderInvoiceLink({ invoice, labels, className }) {
15639
15701
  children: t.linkLabel.replace("{number}", invoice.number)
15640
15702
  }
15641
15703
  ),
15642
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-muted-foreground", children: t.signInHint })
15704
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-muted-foreground", children: t.signInHint })
15643
15705
  ] });
15644
15706
  }
15645
15707
 
15646
15708
  // src/components/order-confirmation.tsx
15647
- var import_jsx_runtime26 = require("react/jsx-runtime");
15709
+ var import_jsx_runtime27 = require("react/jsx-runtime");
15648
15710
  var DEFAULT_LABELS9 = {
15649
15711
  pollingTitle: "Confirmando tu pedido\u2026",
15650
15712
  pollingDescription: "Estamos procesando el pago, un momento\u2026",
@@ -15710,43 +15772,43 @@ function OrderConfirmation({
15710
15772
  const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
15711
15773
  const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
15712
15774
  const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
15713
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: (0, import_utils23.cn)("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
15714
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("h1", { className: "text-3xl font-bold", children: title }),
15715
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-lg text-muted-foreground", children: description }),
15716
- showFullOrderSummary && order && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "space-y-6", children: [
15717
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15718
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
15719
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15775
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: (0, import_utils23.cn)("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
15776
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("h1", { className: "text-3xl font-bold", children: title }),
15777
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "text-lg text-muted-foreground", children: description }),
15778
+ showFullOrderSummary && order && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "space-y-6", children: [
15779
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15780
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
15781
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15720
15782
  ] }),
15721
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
15722
- order.items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
15783
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
15784
+ order.items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
15723
15785
  "div",
15724
15786
  {
15725
15787
  className: "flex justify-between gap-4 text-sm",
15726
15788
  children: [
15727
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
15789
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
15728
15790
  item.product.name,
15729
15791
  item.variant ? ` (${item.variant.name})` : "",
15730
15792
  " x",
15731
15793
  item.quantity
15732
15794
  ] }),
15733
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
15795
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
15734
15796
  ]
15735
15797
  },
15736
15798
  idx
15737
15799
  )),
15738
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
15739
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { children: t.totalLabel }),
15740
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { children: formatPrice(order.total, currencyCode, locale) })
15800
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
15801
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: t.totalLabel }),
15802
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: formatPrice(order.total, currencyCode, locale) })
15741
15803
  ] }) })
15742
15804
  ] }),
15743
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
15805
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
15744
15806
  t.confirmationEmailPrefix,
15745
15807
  " ",
15746
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
15808
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
15747
15809
  "."
15748
15810
  ] }),
15749
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
15811
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
15750
15812
  OrderInvoiceLink,
15751
15813
  {
15752
15814
  invoice: order.invoice,
@@ -15754,11 +15816,11 @@ function OrderConfirmation({
15754
15816
  }
15755
15817
  )
15756
15818
  ] }),
15757
- showOrderReference && order && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15758
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
15759
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15819
+ showOrderReference && order && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15820
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
15821
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15760
15822
  ] }),
15761
- status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
15823
+ status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
15762
15824
  "a",
15763
15825
  {
15764
15826
  href: cartHref,
@@ -15766,7 +15828,7 @@ function OrderConfirmation({
15766
15828
  children: t.backToCartLabel
15767
15829
  }
15768
15830
  ),
15769
- showRecheck && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
15831
+ showRecheck && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
15770
15832
  "button",
15771
15833
  {
15772
15834
  type: "button",
@@ -15775,16 +15837,16 @@ function OrderConfirmation({
15775
15837
  children: t.recheckLabel
15776
15838
  }
15777
15839
  ),
15778
- showSessionReference && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15779
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
15780
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
15840
+ showSessionReference && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15841
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
15842
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
15781
15843
  ] })
15782
15844
  ] });
15783
15845
  }
15784
15846
 
15785
15847
  // src/components/full-invoice-fields.tsx
15786
15848
  var import_utils24 = require("@reblu/site-ui/utils");
15787
- var import_jsx_runtime27 = require("react/jsx-runtime");
15849
+ var import_jsx_runtime28 = require("react/jsx-runtime");
15788
15850
  var EMPTY_FULL_INVOICE_VALUE = {
15789
15851
  wantsFullInvoice: false,
15790
15852
  billingIdType: "NIF",
@@ -15901,12 +15963,12 @@ function FullInvoiceFields({
15901
15963
  const showFields = value.wantsFullInvoice || overCap;
15902
15964
  const isSpanishNif = value.billingIdType === "NIF";
15903
15965
  const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
15904
- const error = (key2) => errors[key2] ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
15966
+ const error = (key2) => errors[key2] ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
15905
15967
  const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
15906
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("section", { className: (0, import_utils24.cn)("space-y-4", className), "data-slot": "full-invoice-fields", children: [
15907
- overCap ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "space-y-1", children: [
15908
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
15909
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
15968
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("section", { className: (0, import_utils24.cn)("space-y-4", className), "data-slot": "full-invoice-fields", children: [
15969
+ overCap ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
15970
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
15971
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
15910
15972
  "input",
15911
15973
  {
15912
15974
  type: "checkbox",
@@ -15916,12 +15978,12 @@ function FullInvoiceFields({
15916
15978
  ),
15917
15979
  t.toggle
15918
15980
  ] }),
15919
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
15981
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
15920
15982
  ] }),
15921
- showFields && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15922
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "space-y-1", children: [
15923
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
15924
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
15983
+ showFields && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15984
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
15985
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
15986
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
15925
15987
  "select",
15926
15988
  {
15927
15989
  id: "full-invoice-id-type",
@@ -15930,14 +15992,14 @@ function FullInvoiceFields({
15930
15992
  value: value.billingIdType,
15931
15993
  onChange: (e) => set("billingIdType", e.target.value),
15932
15994
  ...invalid2("billingIdType"),
15933
- children: ID_TYPES.map((type) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("option", { value: type, children: t.idTypeOptions[type] }, type))
15995
+ children: ID_TYPES.map((type) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("option", { value: type, children: t.idTypeOptions[type] }, type))
15934
15996
  }
15935
15997
  ),
15936
15998
  error("billingIdType")
15937
15999
  ] }),
15938
- !isSpanishNif && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "space-y-1", children: [
15939
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
15940
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
16000
+ !isSpanishNif && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
16001
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
16002
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
15941
16003
  "select",
15942
16004
  {
15943
16005
  id: "full-invoice-id-country",
@@ -15947,16 +16009,16 @@ function FullInvoiceFields({
15947
16009
  onChange: (e) => set("billingIdCountry", e.target.value),
15948
16010
  ...invalid2("billingIdCountry"),
15949
16011
  children: [
15950
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("option", { value: "", disabled: true, children: t.chooseCountry }),
15951
- countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("option", { value: c.code, children: c.name }, c.code))
16012
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("option", { value: "", disabled: true, children: t.chooseCountry }),
16013
+ countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("option", { value: c.code, children: c.name }, c.code))
15952
16014
  ]
15953
16015
  }
15954
16016
  ),
15955
16017
  error("billingIdCountry")
15956
16018
  ] }),
15957
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "space-y-1", children: [
15958
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
15959
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
16019
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
16020
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
16021
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
15960
16022
  "input",
15961
16023
  {
15962
16024
  id: "full-invoice-nif",
@@ -15969,9 +16031,9 @@ function FullInvoiceFields({
15969
16031
  ),
15970
16032
  error("billingNif")
15971
16033
  ] }),
15972
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "space-y-1", children: [
15973
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
15974
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
16034
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
16035
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
16036
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
15975
16037
  "input",
15976
16038
  {
15977
16039
  id: "full-invoice-name",
@@ -15984,9 +16046,9 @@ function FullInvoiceFields({
15984
16046
  ),
15985
16047
  error("billingName")
15986
16048
  ] }),
15987
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "space-y-1 sm:col-span-2", children: [
15988
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
15989
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
16049
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1 sm:col-span-2", children: [
16050
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
16051
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
15990
16052
  "input",
15991
16053
  {
15992
16054
  id: "full-invoice-street",
@@ -15998,9 +16060,9 @@ function FullInvoiceFields({
15998
16060
  }
15999
16061
  )
16000
16062
  ] }),
16001
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "space-y-1", children: [
16002
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
16003
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
16063
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
16064
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
16065
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
16004
16066
  "input",
16005
16067
  {
16006
16068
  id: "full-invoice-postal-code",
@@ -16011,9 +16073,9 @@ function FullInvoiceFields({
16011
16073
  }
16012
16074
  )
16013
16075
  ] }),
16014
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "space-y-1", children: [
16015
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
16016
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
16076
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
16077
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
16078
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
16017
16079
  "input",
16018
16080
  {
16019
16081
  id: "full-invoice-city",
@@ -16024,9 +16086,9 @@ function FullInvoiceFields({
16024
16086
  }
16025
16087
  )
16026
16088
  ] }),
16027
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "space-y-1", children: [
16028
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
16029
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
16089
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
16090
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
16091
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
16030
16092
  "select",
16031
16093
  {
16032
16094
  id: "full-invoice-country",
@@ -16034,18 +16096,18 @@ function FullInvoiceFields({
16034
16096
  required: true,
16035
16097
  value: value.country,
16036
16098
  onChange: (e) => set("country", e.target.value),
16037
- children: countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("option", { value: c.code, children: c.name }, c.code))
16099
+ children: countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("option", { value: c.code, children: c.name }, c.code))
16038
16100
  }
16039
16101
  )
16040
16102
  ] }),
16041
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "sm:col-span-2", children: error("address") })
16103
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "sm:col-span-2", children: error("address") })
16042
16104
  ] })
16043
16105
  ] });
16044
16106
  }
16045
16107
 
16046
16108
  // src/components/contact-interest-field.tsx
16047
16109
  var import_utils25 = require("@reblu/site-ui/utils");
16048
- var import_jsx_runtime28 = require("react/jsx-runtime");
16110
+ var import_jsx_runtime29 = require("react/jsx-runtime");
16049
16111
  function ContactInterestField({
16050
16112
  interest,
16051
16113
  value,
@@ -16062,18 +16124,18 @@ function ContactInterestField({
16062
16124
  else next2.delete(option2);
16063
16125
  onChange(interest.options.filter((candidate) => next2.has(candidate)));
16064
16126
  };
16065
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("fieldset", { "data-slot": "contact-interest", className: (0, import_utils25.cn)("space-y-2", className), children: [
16066
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("legend", { className: "text-sm font-medium", children: interest.label }),
16067
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
16127
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("fieldset", { "data-slot": "contact-interest", className: (0, import_utils25.cn)("space-y-2", className), children: [
16128
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("legend", { className: "text-sm font-medium", children: interest.label }),
16129
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
16068
16130
  const id = `${idPrefix}-${index}`;
16069
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
16131
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
16070
16132
  "label",
16071
16133
  {
16072
16134
  htmlFor: id,
16073
16135
  "data-slot": "contact-interest-option",
16074
16136
  className: "flex items-center gap-2 text-sm",
16075
16137
  children: [
16076
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
16138
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
16077
16139
  "input",
16078
16140
  {
16079
16141
  id,
@@ -16122,6 +16184,7 @@ var import_site_contracts = require("@reblu/site-contracts");
16122
16184
  EMPTY_FULL_INVOICE_VALUE,
16123
16185
  FaqAccordion,
16124
16186
  FullInvoiceFields,
16187
+ LegalDocument,
16125
16188
  LessonPreview,
16126
16189
  MarkdownRenderer,
16127
16190
  OrderConfirmation,