@reblu/site-blocks 0.34.0 → 0.35.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
@@ -42,6 +42,7 @@ __export(src_exports, {
42
42
  CourseCatalogFilters: () => CourseCatalogFilters,
43
43
  CourseDescription: () => CourseDescription,
44
44
  CoursePurchaseTerms: () => CoursePurchaseTerms,
45
+ CourseSchedule: () => CourseSchedule,
45
46
  DATA_REQUEST_TYPES: () => import_site_contracts.DATA_REQUEST_TYPES,
46
47
  DEFAULT_BEFORE_AFTER_LABELS: () => DEFAULT_BEFORE_AFTER_LABELS,
47
48
  DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS: () => DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS,
@@ -50,6 +51,7 @@ __export(src_exports, {
50
51
  DEFAULT_COURSE_CATALOG_FILTERS_LABELS: () => DEFAULT_COURSE_CATALOG_FILTERS_LABELS,
51
52
  DEFAULT_COURSE_PRICE_BANDS: () => DEFAULT_COURSE_PRICE_BANDS,
52
53
  DEFAULT_COURSE_PURCHASE_TERMS_LABELS: () => DEFAULT_COURSE_PURCHASE_TERMS_LABELS,
54
+ DEFAULT_COURSE_SCHEDULE_LABELS: () => DEFAULT_COURSE_SCHEDULE_LABELS,
53
55
  DEFAULT_INVOICE_COUNTRIES: () => DEFAULT_INVOICE_COUNTRIES,
54
56
  DEFAULT_LESSON_PREVIEW_LABELS: () => DEFAULT_LESSON_PREVIEW_LABELS,
55
57
  DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE: () => DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,
@@ -13644,8 +13646,82 @@ function CoursePurchaseTerms({
13644
13646
  );
13645
13647
  }
13646
13648
 
13647
- // src/components/legal-document.tsx
13649
+ // src/components/course-schedule.tsx
13648
13650
  var import_jsx_runtime4 = require("react/jsx-runtime");
13651
+ function formatSession(session, timeZone, locale) {
13652
+ const day = new Intl.DateTimeFormat(locale, { weekday: "long", day: "numeric", month: "long", year: "numeric", timeZone });
13653
+ const time = new Intl.DateTimeFormat(locale, {
13654
+ hour: "2-digit",
13655
+ minute: "2-digit",
13656
+ hour12: false,
13657
+ timeZone,
13658
+ timeZoneName: "short"
13659
+ });
13660
+ const parts = (date) => {
13661
+ const p2 = time.formatToParts(date);
13662
+ const hhmm = p2.filter((x2) => x2.type === "hour" || x2.type === "minute").map((x2) => x2.value).join(":");
13663
+ return { hhmm, zone: p2.find((x2) => x2.type === "timeZoneName")?.value ?? timeZone };
13664
+ };
13665
+ const start = new Date(session.startsAt);
13666
+ const from = parts(start);
13667
+ if (!session.endsAt) return `${day.format(start)}, a las ${from.hhmm} (${from.zone})`;
13668
+ const end = new Date(session.endsAt);
13669
+ const to = parts(end);
13670
+ if (day.format(start) === day.format(end)) {
13671
+ return `${day.format(start)}, de ${from.hhmm} a ${to.hhmm} (${from.zone})`;
13672
+ }
13673
+ return `del ${day.format(start)}, ${from.hhmm} al ${day.format(end)}, ${to.hhmm} (${from.zone})`;
13674
+ }
13675
+ var DEFAULT_COURSE_SCHEDULE_LABELS = {
13676
+ modality: { IN_PERSON: "Presencial", WEBINAR: "Webinar, online y en directo" },
13677
+ dates: "Fechas",
13678
+ place: "Lugar",
13679
+ session: formatSession
13680
+ };
13681
+ function CourseSchedule({
13682
+ course,
13683
+ heading,
13684
+ headingLevel = 2,
13685
+ headingId = "course-schedule-heading",
13686
+ labels,
13687
+ locale = "es-ES",
13688
+ className,
13689
+ headingClassName,
13690
+ bodyClassName
13691
+ }) {
13692
+ const schedule = course.schedule;
13693
+ if (!schedule) return null;
13694
+ const text3 = { ...DEFAULT_COURSE_SCHEDULE_LABELS, ...labels };
13695
+ const place = [schedule.locationName, schedule.locationAddress].filter(Boolean).join(", ");
13696
+ const hasHeading = heading !== void 0 && heading !== null && heading !== "";
13697
+ const Tag = `h${headingLevel}`;
13698
+ const body3 = slotClassName("", "text-sm", bodyClassName);
13699
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
13700
+ "section",
13701
+ {
13702
+ "data-slot": "course-schedule",
13703
+ "data-modality": schedule.modality,
13704
+ "aria-labelledby": hasHeading ? headingId : void 0,
13705
+ className: slotClassName("space-y-3", "", className),
13706
+ children: [
13707
+ hasHeading ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Tag, { id: headingId, className: slotClassName("", "text-lg font-semibold", headingClassName), children: heading }) : null,
13708
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { "data-slot": "course-schedule-modality", className: body3, children: text3.modality[schedule.modality] }),
13709
+ schedule.sessions.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { "data-slot": "course-schedule-dates", className: body3, children: [
13710
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "font-medium", children: text3.dates }),
13711
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "list-disc space-y-1 pl-5", children: schedule.sessions.map((session) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("li", { "data-slot": "course-schedule-session", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("time", { dateTime: session.startsAt, children: text3.session(session, schedule.timeZone, locale) }) }, session.startsAt)) })
13712
+ ] }) : null,
13713
+ place ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { "data-slot": "course-schedule-place", className: body3, children: [
13714
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "font-medium", children: text3.place }),
13715
+ /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("address", { className: "not-italic", children: place })
13716
+ ] }) : null,
13717
+ schedule.attendanceNotes ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { "data-slot": "course-schedule-notes", className: slotClassName("whitespace-pre-line", "text-sm", bodyClassName), children: schedule.attendanceNotes }) : null
13718
+ ]
13719
+ }
13720
+ );
13721
+ }
13722
+
13723
+ // src/components/legal-document.tsx
13724
+ var import_jsx_runtime5 = require("react/jsx-runtime");
13649
13725
  function isVisiblyEmpty2(html5) {
13650
13726
  if (/<(img|iframe|hr)\b/i.test(html5)) return false;
13651
13727
  return html5.replace(/<[^>]*>/g, "").trim() === "";
@@ -13664,17 +13740,17 @@ function LegalDocument({
13664
13740
  const hasFallback = fallback !== void 0 && fallback !== null && fallback !== false;
13665
13741
  if (isEmpty && !hasFallback) return null;
13666
13742
  const hasTitle = title !== void 0 && title !== null && title !== "";
13667
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
13743
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
13668
13744
  "article",
13669
13745
  {
13670
13746
  "data-slot": "legal-document",
13671
13747
  "aria-labelledby": hasTitle ? titleId : void 0,
13672
13748
  className: slotClassName("space-y-6", "", className),
13673
13749
  children: [
13674
- hasTitle && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h1", { id: titleId, className: slotClassName("", "text-3xl font-bold", titleClassName), children: title }),
13750
+ hasTitle && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h1", { id: titleId, className: slotClassName("", "text-3xl font-bold", titleClassName), children: title }),
13675
13751
  isEmpty ? fallback : (
13676
13752
  // `html` is already sanitised by `markdownToSafeHtml` — SafeHtml only maps it.
13677
- /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
13753
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13678
13754
  SafeHtml,
13679
13755
  {
13680
13756
  html: html5,
@@ -13690,7 +13766,7 @@ function LegalDocument({
13690
13766
  }
13691
13767
 
13692
13768
  // src/components/lesson-preview.tsx
13693
- var import_jsx_runtime5 = require("react/jsx-runtime");
13769
+ var import_jsx_runtime6 = require("react/jsx-runtime");
13694
13770
  var DEFAULT_LESSON_PREVIEW_LABELS = {
13695
13771
  badge: "Vista previa gratuita",
13696
13772
  player: "V\xEDdeo",
@@ -13733,15 +13809,15 @@ function LessonPreview({
13733
13809
  const html5 = markdownToSafeHtml(lesson.content);
13734
13810
  const hasBody = html5 !== null && html5 !== "" && !isVisiblyEmpty3(html5);
13735
13811
  const duration = typeof lesson.durationSeconds === "number" && lesson.durationSeconds > 0 ? clock(lesson.durationSeconds) : null;
13736
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
13812
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
13737
13813
  "article",
13738
13814
  {
13739
13815
  "data-slot": "lesson-preview",
13740
13816
  "aria-labelledby": headingId,
13741
13817
  className: slotClassName("space-y-6", "", className),
13742
13818
  children: [
13743
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("header", { className: "space-y-2", children: [
13744
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13819
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("header", { className: "space-y-2", children: [
13820
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
13745
13821
  "span",
13746
13822
  {
13747
13823
  "data-slot": "lesson-preview-badge",
@@ -13749,7 +13825,7 @@ function LessonPreview({
13749
13825
  children: labels.badge
13750
13826
  }
13751
13827
  ),
13752
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13828
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
13753
13829
  Tag,
13754
13830
  {
13755
13831
  id: headingId,
@@ -13757,12 +13833,12 @@ function LessonPreview({
13757
13833
  children: lesson.title
13758
13834
  }
13759
13835
  ),
13760
- duration && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
13761
- /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "sr-only", children: [
13836
+ duration && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
13837
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "sr-only", children: [
13762
13838
  labels.duration,
13763
13839
  ": "
13764
13840
  ] }),
13765
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13841
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
13766
13842
  "time",
13767
13843
  {
13768
13844
  "data-slot": "lesson-preview-duration",
@@ -13773,12 +13849,12 @@ function LessonPreview({
13773
13849
  )
13774
13850
  ] })
13775
13851
  ] }),
13776
- video && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13852
+ video && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
13777
13853
  "div",
13778
13854
  {
13779
13855
  "data-slot": "lesson-preview-player",
13780
13856
  className: "aspect-video w-full overflow-hidden rounded-xl border border-border bg-black",
13781
- children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13857
+ children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
13782
13858
  "iframe",
13783
13859
  {
13784
13860
  src: video.embedUrl,
@@ -13792,7 +13868,7 @@ function LessonPreview({
13792
13868
  )
13793
13869
  }
13794
13870
  ),
13795
- hasBody && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { "data-slot": "lesson-preview-content", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
13871
+ hasBody && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { "data-slot": "lesson-preview-content", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
13796
13872
  SafeHtml,
13797
13873
  {
13798
13874
  html: html5,
@@ -13811,7 +13887,7 @@ var import_utils3 = require("@reblu/site-ui/utils");
13811
13887
  // src/components/_page-parts.tsx
13812
13888
  var import_utils2 = require("@reblu/site-ui/utils");
13813
13889
  var import_button_variants = require("@reblu/site-ui/button-variants");
13814
- var import_jsx_runtime6 = require("react/jsx-runtime");
13890
+ var import_jsx_runtime7 = require("react/jsx-runtime");
13815
13891
  var KNOWN_BUTTON_VARIANTS = /* @__PURE__ */ new Set([
13816
13892
  "default",
13817
13893
  "destructive",
@@ -13824,11 +13900,11 @@ function toButtonVariant(variant) {
13824
13900
  return variant && KNOWN_BUTTON_VARIANTS.has(variant) ? variant : "default";
13825
13901
  }
13826
13902
  function PageHero({ page }) {
13827
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("header", { className: "space-y-4", children: [
13828
- 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 }),
13829
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h1", { className: "text-4xl font-bold tracking-tight", children: page.title }),
13830
- page.subtitle && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-lg text-muted-foreground", children: page.subtitle }),
13831
- 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)(
13903
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("header", { className: "space-y-4", children: [
13904
+ page.category && /* @__PURE__ */ (0, import_jsx_runtime7.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 }),
13905
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h1", { className: "text-4xl font-bold tracking-tight", children: page.title }),
13906
+ page.subtitle && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "text-lg text-muted-foreground", children: page.subtitle }),
13907
+ page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
13832
13908
  "img",
13833
13909
  {
13834
13910
  src: page.coverImageUrl,
@@ -13842,7 +13918,7 @@ function PageHero({ page }) {
13842
13918
  function SectionCta({ section }) {
13843
13919
  if (!section.ctaLabel || !section.ctaUrl) return null;
13844
13920
  const variant = toButtonVariant(section.ctaVariant);
13845
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
13921
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
13846
13922
  "a",
13847
13923
  {
13848
13924
  href: section.ctaUrl,
@@ -13857,46 +13933,46 @@ function SectionCta({ section }) {
13857
13933
  }
13858
13934
  function SectionImages({ section }) {
13859
13935
  if (section.images.length === 0) return null;
13860
- 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: [
13861
- /* @__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" }) }),
13862
- img.caption && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
13936
+ return /* @__PURE__ */ (0, import_jsx_runtime7.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_runtime7.jsxs)("figure", { className: "space-y-1", children: [
13937
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("img", { src: img.url, alt: img.alt, loading: "lazy", className: "h-full w-full object-cover" }) }),
13938
+ img.caption && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
13863
13939
  ] }, `${img.url}-${img.order}`)) });
13864
13940
  }
13865
13941
  function PageSectionBlock({ section }) {
13866
13942
  const imageFirst = section.layout === "IMAGE_TEXT";
13867
13943
  const sideBySide = section.layout === "TEXT_IMAGE" || section.layout === "IMAGE_TEXT";
13868
13944
  const hasImages = section.images.length > 0;
13869
- const body3 = /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "space-y-4", children: [
13870
- section.heading && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h2", { className: "text-2xl font-bold", children: section.heading }),
13871
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SafeHtml, { html: sanitizeHtml(section.contentHtml), headingOffset: 2 }),
13872
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionCta, { section })
13945
+ const body3 = /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "space-y-4", children: [
13946
+ section.heading && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h2", { className: "text-2xl font-bold", children: section.heading }),
13947
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SafeHtml, { html: sanitizeHtml(section.contentHtml), headingOffset: 2 }),
13948
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SectionCta, { section })
13873
13949
  ] });
13874
13950
  if (sideBySide && hasImages) {
13875
- 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: [
13876
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionImages, { section }),
13951
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("section", { className: "grid items-center gap-8 md:grid-cols-2", children: imageFirst ? /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
13952
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SectionImages, { section }),
13877
13953
  body3
13878
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
13954
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
13879
13955
  body3,
13880
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionImages, { section })
13956
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SectionImages, { section })
13881
13957
  ] }) });
13882
13958
  }
13883
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("section", { className: "space-y-4", children: [
13959
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("section", { className: "space-y-4", children: [
13884
13960
  body3,
13885
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionImages, { section })
13961
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SectionImages, { section })
13886
13962
  ] });
13887
13963
  }
13888
13964
  function PageSectionList({ sections }) {
13889
13965
  if (sections.length === 0) return null;
13890
13966
  const ordered = sections.slice().sort((a, b2) => a.order - b2.order);
13891
- 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)) });
13967
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "space-y-12", children: ordered.map((section) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PageSectionBlock, { section }, section.id)) });
13892
13968
  }
13893
13969
 
13894
13970
  // src/components/treatment.tsx
13895
- var import_jsx_runtime7 = require("react/jsx-runtime");
13971
+ var import_jsx_runtime8 = require("react/jsx-runtime");
13896
13972
  function Treatment({ page, className }) {
13897
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("article", { className: (0, import_utils3.cn)("space-y-12", className), "data-slot": "treatment", children: [
13898
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PageHero, { page }),
13899
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PageSectionList, { sections: page.sections })
13973
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("article", { className: (0, import_utils3.cn)("space-y-12", className), "data-slot": "treatment", children: [
13974
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PageHero, { page }),
13975
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PageSectionList, { sections: page.sections })
13900
13976
  ] });
13901
13977
  }
13902
13978
 
@@ -13905,11 +13981,11 @@ var import_utils5 = require("@reblu/site-ui/utils");
13905
13981
 
13906
13982
  // src/components/page-card-grid.tsx
13907
13983
  var import_utils4 = require("@reblu/site-ui/utils");
13908
- var import_jsx_runtime8 = require("react/jsx-runtime");
13984
+ var import_jsx_runtime9 = require("react/jsx-runtime");
13909
13985
  var defaultPageHref = (page) => `/${page.slug}`;
13910
13986
  var pageKey = (page) => `${page.category?.slug ?? ""}/${page.slug}`;
13911
13987
  function PageCardGrid(props) {
13912
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PageCardGridSection, { ...props });
13988
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PageCardGridSection, { ...props });
13913
13989
  }
13914
13990
  function PageCardGridSection({
13915
13991
  pages,
@@ -13920,15 +13996,15 @@ function PageCardGridSection({
13920
13996
  }) {
13921
13997
  if (pages.length === 0) return null;
13922
13998
  const showHeading = keepEmptyHeading ? heading !== void 0 : !!heading;
13923
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("section", { className: (0, import_utils4.cn)("space-y-6", className), children: [
13924
- showHeading && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h2", { className: "text-2xl font-bold", children: heading }),
13925
- /* @__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)(
13999
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("section", { className: (0, import_utils4.cn)("space-y-6", className), children: [
14000
+ showHeading && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h2", { className: "text-2xl font-bold", children: heading }),
14001
+ /* @__PURE__ */ (0, import_jsx_runtime9.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_runtime9.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
13926
14002
  "a",
13927
14003
  {
13928
14004
  href: pageHref(page),
13929
14005
  className: "group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
13930
14006
  children: [
13931
- page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
14007
+ page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
13932
14008
  "img",
13933
14009
  {
13934
14010
  src: page.coverImageUrl,
@@ -13937,9 +14013,9 @@ function PageCardGridSection({
13937
14013
  className: "h-full w-full object-cover transition-transform group-hover:scale-105"
13938
14014
  }
13939
14015
  ) }),
13940
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13941
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
13942
- page.excerpt && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
14016
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
14017
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
14018
+ page.excerpt && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
13943
14019
  ] })
13944
14020
  ]
13945
14021
  }
@@ -13948,7 +14024,7 @@ function PageCardGridSection({
13948
14024
  }
13949
14025
 
13950
14026
  // src/components/parent-page.tsx
13951
- var import_jsx_runtime9 = require("react/jsx-runtime");
14027
+ var import_jsx_runtime10 = require("react/jsx-runtime");
13952
14028
  var defaultChildPageHref = (slug) => `/${slug}`;
13953
14029
  function ParentPage({
13954
14030
  page,
@@ -13963,10 +14039,10 @@ function ParentPage({
13963
14039
  const pages = childPages ?? treatments ?? [];
13964
14040
  const hrefFor = childPageHref ?? treatmentHref ?? defaultChildPageHref;
13965
14041
  const label = childPagesLabel ?? treatmentsLabel ?? "Treatments";
13966
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("article", { className: (0, import_utils5.cn)("space-y-12", className), "data-slot": "specialty", children: [
13967
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PageHero, { page }),
13968
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PageSectionList, { sections: page.sections }),
13969
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
14042
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("article", { className: (0, import_utils5.cn)("space-y-12", className), "data-slot": "specialty", children: [
14043
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(PageHero, { page }),
14044
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(PageSectionList, { sections: page.sections }),
14045
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
13970
14046
  PageCardGridSection,
13971
14047
  {
13972
14048
  pages,
@@ -13986,7 +14062,7 @@ var import_utils7 = require("@reblu/site-ui/utils");
13986
14062
 
13987
14063
  // src/components/professional-fields.tsx
13988
14064
  var import_utils6 = require("@reblu/site-ui/utils");
13989
- var import_jsx_runtime10 = require("react/jsx-runtime");
14065
+ var import_jsx_runtime11 = require("react/jsx-runtime");
13990
14066
  function ProfessionalFields({
13991
14067
  fields,
13992
14068
  variant = "profile",
@@ -13994,7 +14070,7 @@ function ProfessionalFields({
13994
14070
  }) {
13995
14071
  const shown = (fields ?? []).filter((f) => variant !== "card" || f.showOnCard);
13996
14072
  if (shown.length === 0) return null;
13997
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
14073
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
13998
14074
  "dl",
13999
14075
  {
14000
14076
  className: (0, import_utils6.cn)(
@@ -14004,13 +14080,13 @@ function ProfessionalFields({
14004
14080
  ),
14005
14081
  "data-slot": "professional-fields",
14006
14082
  "data-variant": variant,
14007
- children: shown.map((field, index) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
14083
+ children: shown.map((field, index) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
14008
14084
  "div",
14009
14085
  {
14010
14086
  className: variant === "card" ? "flex justify-center gap-1" : "contents",
14011
14087
  children: [
14012
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dt", { className: "text-muted-foreground", children: field.label }),
14013
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dd", { className: "m-0 font-medium", children: field.value })
14088
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("dt", { className: "text-muted-foreground", children: field.label }),
14089
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("dd", { className: "m-0 font-medium", children: field.value })
14014
14090
  ]
14015
14091
  },
14016
14092
  `${field.label}-${index}`
@@ -14020,7 +14096,7 @@ function ProfessionalFields({
14020
14096
  }
14021
14097
 
14022
14098
  // src/components/profile-card.tsx
14023
- var import_jsx_runtime11 = require("react/jsx-runtime");
14099
+ var import_jsx_runtime12 = require("react/jsx-runtime");
14024
14100
  function initials(name) {
14025
14101
  return name.split(/\s+/).filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
14026
14102
  }
@@ -14035,7 +14111,7 @@ function ProfileCard({
14035
14111
  className
14036
14112
  }) {
14037
14113
  const NameTag = href ? "a" : "span";
14038
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
14114
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
14039
14115
  "article",
14040
14116
  {
14041
14117
  className: (0, import_utils7.cn)(
@@ -14044,7 +14120,7 @@ function ProfileCard({
14044
14120
  ),
14045
14121
  "data-slot": "profile-card",
14046
14122
  children: [
14047
- /* @__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)(
14123
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "relative h-24 w-24 overflow-hidden rounded-full bg-muted", children: imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("img", { src: imageUrl, alt: name, loading: "lazy", className: "h-full w-full object-cover" }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
14048
14124
  "span",
14049
14125
  {
14050
14126
  className: "flex h-full w-full items-center justify-center text-2xl font-semibold text-muted-foreground",
@@ -14052,12 +14128,12 @@ function ProfileCard({
14052
14128
  children: initials(name)
14053
14129
  }
14054
14130
  ) }),
14055
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "space-y-1", children: [
14056
- /* @__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 }) }),
14057
- role && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "text-sm text-muted-foreground", children: role })
14131
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "space-y-1", children: [
14132
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(NameTag, { ...href ? { href, className: "transition-colors hover:text-primary" } : {}, children: name }) }),
14133
+ role && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "text-sm text-muted-foreground", children: role })
14058
14134
  ] }),
14059
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ProfessionalFields, { fields, variant: "card" }),
14060
- 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)(
14135
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ProfessionalFields, { fields, variant: "card" }),
14136
+ specialties.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
14061
14137
  "li",
14062
14138
  {
14063
14139
  className: "inline-flex items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground",
@@ -14065,7 +14141,7 @@ function ProfileCard({
14065
14141
  },
14066
14142
  s2
14067
14143
  )) }),
14068
- bio && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "text-sm text-muted-foreground", children: bio })
14144
+ bio && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "text-sm text-muted-foreground", children: bio })
14069
14145
  ]
14070
14146
  }
14071
14147
  );
@@ -14094,7 +14170,7 @@ function filterByLink(items, key2) {
14094
14170
  }
14095
14171
 
14096
14172
  // src/components/linked-pages.tsx
14097
- var import_jsx_runtime12 = require("react/jsx-runtime");
14173
+ var import_jsx_runtime13 = require("react/jsx-runtime");
14098
14174
  function LinkedPagesGrid({
14099
14175
  pages,
14100
14176
  pageHref = (page) => `/${page.slug}`,
@@ -14102,15 +14178,15 @@ function LinkedPagesGrid({
14102
14178
  className
14103
14179
  }) {
14104
14180
  if (!pages || pages.length === 0) return null;
14105
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("section", { className: (0, import_utils8.cn)("space-y-6", className), "data-slot": "linked-pages", children: [
14106
- heading && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("h2", { className: "text-2xl font-bold", children: heading }),
14107
- /* @__PURE__ */ (0, import_jsx_runtime12.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_runtime12.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
14181
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("section", { className: (0, import_utils8.cn)("space-y-6", className), "data-slot": "linked-pages", children: [
14182
+ heading && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("h2", { className: "text-2xl font-bold", children: heading }),
14183
+ /* @__PURE__ */ (0, import_jsx_runtime13.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_runtime13.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
14108
14184
  "a",
14109
14185
  {
14110
14186
  href: pageHref(page),
14111
14187
  className: "group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
14112
14188
  children: [
14113
- page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
14189
+ page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
14114
14190
  "img",
14115
14191
  {
14116
14192
  src: page.coverImageUrl,
@@ -14119,9 +14195,9 @@ function LinkedPagesGrid({
14119
14195
  className: "h-full w-full object-cover transition-transform group-hover:scale-105"
14120
14196
  }
14121
14197
  ) }),
14122
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
14123
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
14124
- page.excerpt && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
14198
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
14199
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
14200
+ page.excerpt && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
14125
14201
  ] })
14126
14202
  ]
14127
14203
  }
@@ -14135,9 +14211,9 @@ function TeamGrid({
14135
14211
  className
14136
14212
  }) {
14137
14213
  if (!members || members.length === 0) return null;
14138
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("section", { className: (0, import_utils8.cn)("space-y-6", className), "data-slot": "team-grid", children: [
14139
- heading && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("h2", { className: "text-2xl font-bold", children: heading }),
14140
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("ul", { className: "grid list-none grid-cols-1 gap-6 p-0 sm:grid-cols-2 lg:grid-cols-3", children: members.map((member) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
14214
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("section", { className: (0, import_utils8.cn)("space-y-6", className), "data-slot": "team-grid", children: [
14215
+ heading && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("h2", { className: "text-2xl font-bold", children: heading }),
14216
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("ul", { className: "grid list-none grid-cols-1 gap-6 p-0 sm:grid-cols-2 lg:grid-cols-3", children: members.map((member) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
14141
14217
  ProfileCard,
14142
14218
  {
14143
14219
  name: member.title,
@@ -14152,11 +14228,11 @@ function TeamGrid({
14152
14228
 
14153
14229
  // src/components/product-card.tsx
14154
14230
  var import_utils9 = require("@reblu/site-ui/utils");
14155
- var import_jsx_runtime13 = require("react/jsx-runtime");
14231
+ var import_jsx_runtime14 = require("react/jsx-runtime");
14156
14232
  function ProductCard({ product, href, currencyCode = "EUR", locale, className }) {
14157
14233
  const image = product.images.find((i) => i.isPrimary) ?? product.images[0];
14158
14234
  const hasDiscount = product.comparePrice != null && product.comparePrice > product.price;
14159
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
14235
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
14160
14236
  "article",
14161
14237
  {
14162
14238
  className: (0, import_utils9.cn)(
@@ -14165,7 +14241,7 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
14165
14241
  ),
14166
14242
  "data-slot": "product-card",
14167
14243
  children: [
14168
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
14244
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14169
14245
  "img",
14170
14246
  {
14171
14247
  src: image.url,
@@ -14173,14 +14249,14 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
14173
14249
  loading: "lazy",
14174
14250
  className: "h-full w-full object-cover transition-transform group-hover:scale-105"
14175
14251
  }
14176
- ) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
14177
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
14178
- product.category && /* @__PURE__ */ (0, import_jsx_runtime13.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 }),
14179
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
14180
- product.shortDescription && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
14181
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
14182
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
14183
- hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
14252
+ ) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
14253
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
14254
+ product.category && /* @__PURE__ */ (0, import_jsx_runtime14.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 }),
14255
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
14256
+ product.shortDescription && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
14257
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
14258
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
14259
+ hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
14184
14260
  ] })
14185
14261
  ] })
14186
14262
  ]
@@ -14382,7 +14458,7 @@ var __iconNode8 = [
14382
14458
  var Truck = createLucideIcon("truck", __iconNode8);
14383
14459
 
14384
14460
  // src/components/product-trust-items.tsx
14385
- var import_jsx_runtime14 = require("react/jsx-runtime");
14461
+ var import_jsx_runtime15 = require("react/jsx-runtime");
14386
14462
  var DEFAULT_TRUST_ICONS = Object.freeze({
14387
14463
  shipping: Truck,
14388
14464
  returns: RotateCcw,
@@ -14416,9 +14492,9 @@ function ProductTrustItems({
14416
14492
  return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
14417
14493
  });
14418
14494
  if (rows.length === 0) return null;
14419
- return /* @__PURE__ */ (0, import_jsx_runtime14.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_runtime14.jsxs)("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
14420
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
14421
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { children: text3 })
14495
+ return /* @__PURE__ */ (0, import_jsx_runtime15.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_runtime15.jsxs)("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
14496
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
14497
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { children: text3 })
14422
14498
  ] }, key2)) });
14423
14499
  }
14424
14500
 
@@ -14426,7 +14502,7 @@ function ProductTrustItems({
14426
14502
  var import_utils12 = require("@reblu/site-ui/utils");
14427
14503
 
14428
14504
  // src/components/_heading.tsx
14429
- var import_jsx_runtime15 = require("react/jsx-runtime");
14505
+ var import_jsx_runtime16 = require("react/jsx-runtime");
14430
14506
  function nextHeadingLevel(level) {
14431
14507
  return Math.min(level + 1, 6);
14432
14508
  }
@@ -14436,11 +14512,11 @@ function Heading({
14436
14512
  children: children2
14437
14513
  }) {
14438
14514
  const Tag = `h${level}`;
14439
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Tag, { className, children: children2 });
14515
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Tag, { className, children: children2 });
14440
14516
  }
14441
14517
 
14442
14518
  // src/components/faq-accordion.tsx
14443
- var import_jsx_runtime16 = require("react/jsx-runtime");
14519
+ var import_jsx_runtime17 = require("react/jsx-runtime");
14444
14520
  function FaqAccordion({
14445
14521
  items,
14446
14522
  heading,
@@ -14451,18 +14527,18 @@ function FaqAccordion({
14451
14527
  }) {
14452
14528
  const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
14453
14529
  if (visible.length === 0) return null;
14454
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: (0, import_utils12.cn)("space-y-4", className), "data-slot": "faq-accordion", children: [
14455
- heading && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
14456
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
14530
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: (0, import_utils12.cn)("space-y-4", className), "data-slot": "faq-accordion", children: [
14531
+ heading && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
14532
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
14457
14533
  "details",
14458
14534
  {
14459
14535
  className: "group px-4",
14460
14536
  "data-slot": "faq-item",
14461
14537
  ...defaultOpen.includes(index) ? { open: true } : {},
14462
14538
  children: [
14463
- /* @__PURE__ */ (0, import_jsx_runtime16.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: [
14464
- questionHeadingLevel ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { children: item.q }),
14465
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14539
+ /* @__PURE__ */ (0, import_jsx_runtime17.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: [
14540
+ questionHeadingLevel ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: item.q }),
14541
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14466
14542
  "span",
14467
14543
  {
14468
14544
  "aria-hidden": "true",
@@ -14471,7 +14547,7 @@ function FaqAccordion({
14471
14547
  }
14472
14548
  )
14473
14549
  ] }),
14474
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
14550
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
14475
14551
  ]
14476
14552
  },
14477
14553
  index
@@ -14508,7 +14584,7 @@ function trustBadgeAlt(badge, numberLabel = DEFAULT_ADHESION_NUMBER_LABEL) {
14508
14584
  }
14509
14585
 
14510
14586
  // src/components/trust-badges.tsx
14511
- var import_jsx_runtime17 = (
14587
+ var import_jsx_runtime18 = (
14512
14588
  // eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
14513
14589
  require("react/jsx-runtime")
14514
14590
  );
@@ -14538,7 +14614,7 @@ function isUsable(value) {
14538
14614
  function BadgeContent({ badge, logoClassName }) {
14539
14615
  const src = safeLogoSrc(badge.logoUrl);
14540
14616
  if (src) {
14541
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14617
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
14542
14618
  "img",
14543
14619
  {
14544
14620
  src,
@@ -14548,7 +14624,7 @@ function BadgeContent({ badge, logoClassName }) {
14548
14624
  }
14549
14625
  );
14550
14626
  }
14551
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "text-sm font-medium", children: badge.name });
14627
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-sm font-medium", children: badge.name });
14552
14628
  }
14553
14629
  function TrustBadges({
14554
14630
  badges,
@@ -14576,14 +14652,14 @@ function TrustBadges({
14576
14652
  if (groups.length === 0) return null;
14577
14653
  const hasHeading = heading !== void 0 && heading !== null && heading !== "";
14578
14654
  const groupHeadingLevel = hasHeading ? nextHeadingLevel(headingLevel) : headingLevel;
14579
- const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
14655
+ const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
14580
14656
  "div",
14581
14657
  {
14582
14658
  "data-slot": "trust-badge-group",
14583
14659
  "data-type": type,
14584
14660
  className: (0, import_utils13.cn)("space-y-3", groupClassName),
14585
14661
  children: [
14586
- groupHeading ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14662
+ groupHeading ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
14587
14663
  Heading,
14588
14664
  {
14589
14665
  level: groupHeadingLevel,
@@ -14595,30 +14671,30 @@ function TrustBadges({
14595
14671
  children: groupHeading
14596
14672
  }
14597
14673
  ) : null,
14598
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("ul", { className: (0, import_utils13.cn)("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
14674
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("ul", { className: (0, import_utils13.cn)("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
14599
14675
  const href = safeHref(badge.url);
14600
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("li", { children: href ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14601
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(BadgeContent, { badge, logoClassName }),
14676
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("li", { children: href ? /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14677
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(BadgeContent, { badge, logoClassName }),
14602
14678
  " ",
14603
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "sr-only", children: newWindowLabel })
14604
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(BadgeContent, { badge, logoClassName }) }, badge.id);
14679
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "sr-only", children: newWindowLabel })
14680
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(BadgeContent, { badge, logoClassName }) }, badge.id);
14605
14681
  }) })
14606
14682
  ]
14607
14683
  },
14608
14684
  type
14609
14685
  ));
14610
14686
  if (!hasHeading) {
14611
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { "data-slot": "trust-badges", className: (0, import_utils13.cn)("space-y-6", className), children: content });
14687
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { "data-slot": "trust-badges", className: (0, import_utils13.cn)("space-y-6", className), children: content });
14612
14688
  }
14613
14689
  const Tag = `h${headingLevel}`;
14614
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
14690
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
14615
14691
  "section",
14616
14692
  {
14617
14693
  "data-slot": "trust-badges",
14618
14694
  "aria-labelledby": headingId,
14619
14695
  className: (0, import_utils13.cn)("space-y-6", className),
14620
14696
  children: [
14621
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14697
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
14622
14698
  Tag,
14623
14699
  {
14624
14700
  id: headingId,
@@ -14634,7 +14710,7 @@ function TrustBadges({
14634
14710
 
14635
14711
  // src/components/arbitration-badge.tsx
14636
14712
  var import_utils14 = require("@reblu/site-ui/utils");
14637
- var import_jsx_runtime18 = require("react/jsx-runtime");
14713
+ var import_jsx_runtime19 = require("react/jsx-runtime");
14638
14714
  function isArbitrationBadge(value) {
14639
14715
  if (typeof value !== "object" || value === null) return false;
14640
14716
  const entry = value;
@@ -14652,7 +14728,7 @@ function ArbitrationBadge({
14652
14728
  if (!Array.isArray(badges)) return null;
14653
14729
  const items = badges.filter(isArbitrationBadge);
14654
14730
  if (items.length === 0) return null;
14655
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
14731
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
14656
14732
  "ul",
14657
14733
  {
14658
14734
  "data-slot": "arbitration-badges",
@@ -14661,11 +14737,11 @@ function ArbitrationBadge({
14661
14737
  const src = safeLogoSrc(badge.logoUrl);
14662
14738
  const href = safeHref(badge.url);
14663
14739
  const number2 = adhesionNumberOf(badge);
14664
- const caption = number2 && (showNumber || !src) ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: (0, import_utils14.cn)("text-xs", numberClassName), "aria-hidden": src ? "true" : void 0, children: `${numberLabel} ${number2}` }) : null;
14665
- const content = /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("span", { className: "inline-flex flex-col items-center gap-1 text-center", children: [
14740
+ const caption = number2 && (showNumber || !src) ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: (0, import_utils14.cn)("text-xs", numberClassName), "aria-hidden": src ? "true" : void 0, children: `${numberLabel} ${number2}` }) : null;
14741
+ const content = /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { className: "inline-flex flex-col items-center gap-1 text-center", children: [
14666
14742
  src ? (
14667
14743
  // eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
14668
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
14744
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
14669
14745
  "img",
14670
14746
  {
14671
14747
  src,
@@ -14674,13 +14750,13 @@ function ArbitrationBadge({
14674
14750
  className: (0, import_utils14.cn)("h-16 w-auto object-contain", logoClassName)
14675
14751
  }
14676
14752
  )
14677
- ) : /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-sm font-medium", children: badge.name }),
14753
+ ) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "text-sm font-medium", children: badge.name }),
14678
14754
  caption
14679
14755
  ] });
14680
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("li", { "data-slot": "arbitration-badge", children: href ? /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14756
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("li", { "data-slot": "arbitration-badge", children: href ? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14681
14757
  content,
14682
14758
  " ",
14683
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "sr-only", children: newWindowLabel })
14759
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "sr-only", children: newWindowLabel })
14684
14760
  ] }) : content }, badge.id);
14685
14761
  })
14686
14762
  }
@@ -14692,7 +14768,7 @@ var import_utils16 = require("@reblu/site-ui/utils");
14692
14768
 
14693
14769
  // src/components/_review-card.tsx
14694
14770
  var import_utils15 = require("@reblu/site-ui/utils");
14695
- var import_jsx_runtime19 = require("react/jsx-runtime");
14771
+ var import_jsx_runtime20 = require("react/jsx-runtime");
14696
14772
  function isHttps(value) {
14697
14773
  if (typeof value !== "string") return false;
14698
14774
  try {
@@ -14715,7 +14791,7 @@ function formatDay(day, locale) {
14715
14791
  }
14716
14792
  var STAR_PATH = "M12 2.5l2.9 5.9 6.5.9-4.7 4.6 1.1 6.5L12 17.3l-5.8 3.1 1.1-6.5L2.6 9.3l6.5-.9z";
14717
14793
  function Stars({ rating }) {
14718
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { role: "img", "aria-label": `${rating} de 5 estrellas`, className: "flex gap-0.5", children: [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
14794
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { role: "img", "aria-label": `${rating} de 5 estrellas`, className: "flex gap-0.5", children: [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
14719
14795
  "svg",
14720
14796
  {
14721
14797
  "aria-hidden": "true",
@@ -14727,7 +14803,7 @@ function Stars({ rating }) {
14727
14803
  stroke: "currentColor",
14728
14804
  strokeWidth: "1.5",
14729
14805
  strokeLinejoin: "round",
14730
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("path", { d: STAR_PATH })
14806
+ children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("path", { d: STAR_PATH })
14731
14807
  },
14732
14808
  n
14733
14809
  )) });
@@ -14743,19 +14819,19 @@ function ReviewCard({
14743
14819
  className
14744
14820
  }) {
14745
14821
  const date = formatDay(review.reviewDate, locale);
14746
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
14822
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
14747
14823
  "article",
14748
14824
  {
14749
14825
  "data-slot": "review",
14750
14826
  "data-source": review.source,
14751
14827
  className: (0, import_utils15.cn)("flex h-full flex-col gap-3 rounded-lg border p-5", className),
14752
14828
  children: [
14753
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Stars, { rating: review.rating }),
14754
- review.text && review.text.trim() !== "" ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("blockquote", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { children: review.text }) }) : null,
14755
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("footer", { className: "mt-auto space-y-1 text-sm", children: [
14756
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "font-semibold", children: review.authorName }),
14757
- date ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("time", { dateTime: review.reviewDate, className: "block text-muted-foreground", children: date }) : null,
14758
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
14829
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Stars, { rating: review.rating }),
14830
+ review.text && review.text.trim() !== "" ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("blockquote", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { children: review.text }) }) : null,
14831
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("footer", { className: "mt-auto space-y-1 text-sm", children: [
14832
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "font-semibold", children: review.authorName }),
14833
+ date ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("time", { dateTime: review.reviewDate, className: "block text-muted-foreground", children: date }) : null,
14834
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
14759
14835
  "a",
14760
14836
  {
14761
14837
  href: review.sourceUrl,
@@ -14765,7 +14841,7 @@ function ReviewCard({
14765
14841
  children: [
14766
14842
  linkLabel(review.sourceName),
14767
14843
  " ",
14768
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "sr-only", children: newWindowLabel })
14844
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "sr-only", children: newWindowLabel })
14769
14845
  ]
14770
14846
  }
14771
14847
  )
@@ -14776,7 +14852,7 @@ function ReviewCard({
14776
14852
  }
14777
14853
 
14778
14854
  // src/components/reviews.tsx
14779
- var import_jsx_runtime20 = require("react/jsx-runtime");
14855
+ var import_jsx_runtime21 = require("react/jsx-runtime");
14780
14856
  function Reviews({
14781
14857
  reviews,
14782
14858
  heading,
@@ -14796,7 +14872,7 @@ function Reviews({
14796
14872
  const usable = usableReviews(reviews);
14797
14873
  if (usable.length === 0) return null;
14798
14874
  const hasNotice = notice !== void 0 && notice !== null && notice !== "";
14799
- const noticeNode = hasNotice ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
14875
+ const noticeNode = hasNotice ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
14800
14876
  "p",
14801
14877
  {
14802
14878
  "data-slot": "reviews-notice",
@@ -14804,13 +14880,13 @@ function Reviews({
14804
14880
  children: notice
14805
14881
  }
14806
14882
  ) : null;
14807
- const grid = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
14883
+ const grid = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
14808
14884
  "ul",
14809
14885
  {
14810
14886
  "data-slot": "reviews-grid",
14811
14887
  className: slotClassName("grid gap-6", "sm:grid-cols-2 lg:grid-cols-3", gridClassName),
14812
14888
  children: usable.map((review) => {
14813
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
14889
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
14814
14890
  ReviewCard,
14815
14891
  {
14816
14892
  review,
@@ -14823,18 +14899,18 @@ function Reviews({
14823
14899
  })
14824
14900
  }
14825
14901
  );
14826
- const body3 = /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment, { children: [
14902
+ const body3 = /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [
14827
14903
  noticePosition === "above" ? noticeNode : null,
14828
14904
  grid,
14829
14905
  noticePosition === "below" ? noticeNode : null
14830
14906
  ] });
14831
14907
  const hasHeading = heading !== void 0 && heading !== null && heading !== "";
14832
14908
  if (!hasHeading) {
14833
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { "data-slot": "reviews", className: (0, import_utils16.cn)("space-y-4", className), children: body3 });
14909
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { "data-slot": "reviews", className: (0, import_utils16.cn)("space-y-4", className), children: body3 });
14834
14910
  }
14835
14911
  const Tag = `h${headingLevel}`;
14836
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("section", { "data-slot": "reviews", "aria-labelledby": headingId, className: (0, import_utils16.cn)("space-y-4", className), children: [
14837
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Tag, { id: headingId, className: slotClassName("", "text-xl font-semibold", headingClassName), children: heading }),
14912
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("section", { "data-slot": "reviews", "aria-labelledby": headingId, className: (0, import_utils16.cn)("space-y-4", className), children: [
14913
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Tag, { id: headingId, className: slotClassName("", "text-xl font-semibold", headingClassName), children: heading }),
14838
14914
  body3
14839
14915
  ] });
14840
14916
  }
@@ -15007,11 +15083,11 @@ var CARD_ICON_NODES = {
15007
15083
  };
15008
15084
 
15009
15085
  // src/components/content-blocks.tsx
15010
- var import_jsx_runtime21 = require("react/jsx-runtime");
15086
+ var import_jsx_runtime22 = require("react/jsx-runtime");
15011
15087
  var DEFAULT_BEFORE_AFTER_LABELS = Object.freeze({ before: "Antes", after: "Despu\xE9s" });
15012
15088
  function PairImage({ url, alt, label }) {
15013
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("figure", { className: "space-y-2", children: [
15014
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15089
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("figure", { className: "space-y-2", children: [
15090
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15015
15091
  "img",
15016
15092
  {
15017
15093
  src: url,
@@ -15021,7 +15097,7 @@ function PairImage({ url, alt, label }) {
15021
15097
  className: "h-full w-full object-cover"
15022
15098
  }
15023
15099
  ) }),
15024
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("figcaption", { className: "text-sm font-semibold", children: label })
15100
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("figcaption", { className: "text-sm font-semibold", children: label })
15025
15101
  ] });
15026
15102
  }
15027
15103
  function BeforeAfterPairs({
@@ -15033,26 +15109,26 @@ function BeforeAfterPairs({
15033
15109
  }) {
15034
15110
  const visibleCaption = showCaption && caption && caption.trim() !== "" ? caption : null;
15035
15111
  if (pairs.length === 0 && !visibleCaption) return null;
15036
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { "data-slot": "before-after", className: (0, import_utils17.cn)("space-y-4", className), children: [
15037
- pairs.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("ul", { className: "grid gap-6 lg:grid-cols-2", children: pairs.map((pair, i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
15112
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { "data-slot": "before-after", className: (0, import_utils17.cn)("space-y-4", className), children: [
15113
+ pairs.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("ul", { className: "grid gap-6 lg:grid-cols-2", children: pairs.map((pair, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
15038
15114
  "li",
15039
15115
  {
15040
15116
  "data-slot": "before-after-pair",
15041
15117
  className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
15042
15118
  children: [
15043
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(PairImage, { url: pair.beforeUrl, alt: pair.alt ?? "", label: labels.before }),
15044
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(PairImage, { url: pair.afterUrl, alt: pair.alt ?? "", label: labels.after })
15119
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(PairImage, { url: pair.beforeUrl, alt: pair.alt ?? "", label: labels.before }),
15120
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(PairImage, { url: pair.afterUrl, alt: pair.alt ?? "", label: labels.after })
15045
15121
  ]
15046
15122
  },
15047
15123
  `${pair.beforeUrl}-${pair.afterUrl}-${i}`
15048
15124
  )) }),
15049
- visibleCaption && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { "data-slot": "before-after-caption", className: "whitespace-pre-line text-sm opacity-80", children: visibleCaption })
15125
+ visibleCaption && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { "data-slot": "before-after-caption", className: "whitespace-pre-line text-sm opacity-80", children: visibleCaption })
15050
15126
  ] });
15051
15127
  }
15052
15128
  function ChipList({ items, className }) {
15053
15129
  const visible = items.filter((item) => item.trim() !== "");
15054
15130
  if (visible.length === 0) return null;
15055
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("ul", { "data-slot": "chip-list", className: (0, import_utils17.cn)("flex flex-wrap gap-3", className), children: visible.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15131
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("ul", { "data-slot": "chip-list", className: (0, import_utils17.cn)("flex flex-wrap gap-3", className), children: visible.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15056
15132
  "li",
15057
15133
  {
15058
15134
  "data-slot": "chip",
@@ -15068,7 +15144,7 @@ function hasCardIcon(icon) {
15068
15144
  }
15069
15145
  function CardIconSvg({ icon, className }) {
15070
15146
  if (!hasCardIcon(icon)) return null;
15071
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15147
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15072
15148
  "svg",
15073
15149
  {
15074
15150
  xmlns: "http://www.w3.org/2000/svg",
@@ -15082,29 +15158,29 @@ function CardIconSvg({ icon, className }) {
15082
15158
  focusable: "false",
15083
15159
  "data-icon": icon,
15084
15160
  className: (0, import_utils17.cn)("h-5 w-5", className),
15085
- children: CARD_ICON_NODES[icon].map(([Tag, attrs], i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Tag, { ...attrs }, i))
15161
+ children: CARD_ICON_NODES[icon].map(([Tag, attrs], i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Tag, { ...attrs }, i))
15086
15162
  }
15087
15163
  );
15088
15164
  }
15089
15165
  function IconCardGrid({ items, intro, headingLevel = 3, className }) {
15090
15166
  const hasIntro = !!intro && intro.trim() !== "";
15091
15167
  if (items.length === 0 && !hasIntro) return null;
15092
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { "data-slot": "icon-cards", className: (0, import_utils17.cn)("space-y-6", className), children: [
15093
- hasIntro && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "max-w-prose text-lg opacity-80", children: intro }),
15094
- items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15168
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { "data-slot": "icon-cards", className: (0, import_utils17.cn)("space-y-6", className), children: [
15169
+ hasIntro && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "max-w-prose text-lg opacity-80", children: intro }),
15170
+ items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15095
15171
  "ul",
15096
15172
  {
15097
15173
  "data-slot": "icon-card-grid",
15098
15174
  className: "grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3",
15099
- children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
15175
+ children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
15100
15176
  "li",
15101
15177
  {
15102
15178
  "data-slot": "icon-card",
15103
15179
  className: "space-y-3 rounded-xl border border-border bg-card p-6 text-card-foreground",
15104
15180
  children: [
15105
- hasCardIcon(item.icon) && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "inline-flex h-12 w-12 items-center justify-center rounded-xl bg-primary/10 text-primary", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(CardIconSvg, { icon: item.icon }) }),
15106
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: item.title }),
15107
- item.text && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "text-muted-foreground", children: item.text })
15181
+ hasCardIcon(item.icon) && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "inline-flex h-12 w-12 items-center justify-center rounded-xl bg-primary/10 text-primary", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(CardIconSvg, { icon: item.icon }) }),
15182
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: item.title }),
15183
+ item.text && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-muted-foreground", children: item.text })
15108
15184
  ]
15109
15185
  },
15110
15186
  `${item.title}-${i}`
@@ -15130,19 +15206,19 @@ function ImageTextSplit({
15130
15206
  const imageRight = imageSide === "right";
15131
15207
  const hasKicker = !!kicker && kicker.trim() !== "";
15132
15208
  const bodyOffset = heading ? headingLevel : headingLevel - 1;
15133
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
15209
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
15134
15210
  "div",
15135
15211
  {
15136
15212
  "data-slot": "image-text",
15137
15213
  "data-image-side": imageRight ? "right" : "left",
15138
15214
  className: (0, import_utils17.cn)("grid grid-cols-1 items-center gap-8 md:grid-cols-2", className),
15139
15215
  children: [
15140
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15216
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15141
15217
  "div",
15142
15218
  {
15143
15219
  "data-slot": "image-text-media",
15144
15220
  className: (0, import_utils17.cn)(textFirst ? "order-2" : "order-1", imageRight ? "md:order-2" : "md:order-1"),
15145
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15221
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15146
15222
  "img",
15147
15223
  {
15148
15224
  src: imageUrl,
@@ -15154,7 +15230,7 @@ function ImageTextSplit({
15154
15230
  ) })
15155
15231
  }
15156
15232
  ),
15157
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
15233
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
15158
15234
  "div",
15159
15235
  {
15160
15236
  "data-slot": "image-text-body",
@@ -15164,11 +15240,11 @@ function ImageTextSplit({
15164
15240
  imageRight ? "md:order-1" : "md:order-2"
15165
15241
  ),
15166
15242
  children: [
15167
- (hasKicker || heading) && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-2", children: [
15168
- hasKicker && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { "data-slot": "page-block-kicker", className: KICKER_CLASS_NAME, children: kicker }),
15169
- heading && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { id: headingId, children: heading }) })
15243
+ (hasKicker || heading) && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "space-y-2", children: [
15244
+ hasKicker && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { "data-slot": "page-block-kicker", className: KICKER_CLASS_NAME, children: kicker }),
15245
+ heading && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { id: headingId, children: heading }) })
15170
15246
  ] }),
15171
- html5 && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SafeHtml, { html: sanitizeHtml(html5), headingOffset: bodyOffset })
15247
+ html5 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SafeHtml, { html: sanitizeHtml(html5), headingOffset: bodyOffset })
15172
15248
  ]
15173
15249
  }
15174
15250
  )
@@ -15178,38 +15254,38 @@ function ImageTextSplit({
15178
15254
  }
15179
15255
 
15180
15256
  // src/components/page-blocks.tsx
15181
- var import_jsx_runtime22 = require("react/jsx-runtime");
15257
+ var import_jsx_runtime23 = require("react/jsx-runtime");
15182
15258
  var ALIASES = {
15183
15259
  doctor_embed: "profile_embed",
15184
15260
  specialty_embed: "page_embed"
15185
15261
  };
15186
15262
  function HeroBlock({ block, headingLevel }) {
15187
15263
  const { title, subtitle, imageUrl } = block.data;
15188
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "space-y-4", children: [
15189
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
15190
- subtitle && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-lg opacity-80", children: subtitle }),
15191
- imageUrl && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
15264
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-4", children: [
15265
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
15266
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "text-lg opacity-80", children: subtitle }),
15267
+ imageUrl && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
15192
15268
  ] });
15193
15269
  }
15194
15270
  function RichtextBlock({ block, headingLevel }) {
15195
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
15271
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
15196
15272
  }
15197
15273
  function FaqBlock({ block }) {
15198
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(FaqAccordion, { items: block.data.items });
15274
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(FaqAccordion, { items: block.data.items });
15199
15275
  }
15200
15276
  function StatsBlock({ block }) {
15201
- return /* @__PURE__ */ (0, import_jsx_runtime22.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_runtime22.jsxs)("div", { className: "flex flex-col-reverse gap-1", children: [
15202
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("dt", { className: "text-sm opacity-80", children: item.label }),
15203
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("dd", { className: "text-3xl font-bold", children: item.value })
15277
+ return /* @__PURE__ */ (0, import_jsx_runtime23.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_runtime23.jsxs)("div", { className: "flex flex-col-reverse gap-1", children: [
15278
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("dt", { className: "text-sm opacity-80", children: item.label }),
15279
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("dd", { className: "text-3xl font-bold", children: item.value })
15204
15280
  ] }, i)) });
15205
15281
  }
15206
15282
  function TestimonialBlock({ block }) {
15207
15283
  const { quote, author, role, avatarUrl } = block.data;
15208
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("figure", { className: "space-y-4", children: [
15209
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { children: quote }) }),
15210
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("figcaption", { className: "flex items-center gap-3", children: [
15284
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("figure", { className: "space-y-4", children: [
15285
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { children: quote }) }),
15286
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("figcaption", { className: "flex items-center gap-3", children: [
15211
15287
  avatarUrl && // eslint-disable-next-line @next/next/no-img-element
15212
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15288
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15213
15289
  "img",
15214
15290
  {
15215
15291
  src: avatarUrl,
@@ -15218,9 +15294,9 @@ function TestimonialBlock({ block }) {
15218
15294
  className: "h-10 w-10 rounded-full object-cover"
15219
15295
  }
15220
15296
  ),
15221
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("span", { children: [
15222
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "font-semibold", children: author }),
15223
- role && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "block text-sm opacity-80", children: role })
15297
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { children: [
15298
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "font-semibold", children: author }),
15299
+ role && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "block text-sm opacity-80", children: role })
15224
15300
  ] })
15225
15301
  ] })
15226
15302
  ] });
@@ -15229,19 +15305,19 @@ function CtaSlotBlock(_props) {
15229
15305
  return null;
15230
15306
  }
15231
15307
  function FeatureListBlock({ block }) {
15232
- return /* @__PURE__ */ (0, import_jsx_runtime22.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_runtime22.jsx)("li", { children: item.text }, i)) });
15308
+ return /* @__PURE__ */ (0, import_jsx_runtime23.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_runtime23.jsx)("li", { children: item.text }, i)) });
15233
15309
  }
15234
15310
  function GalleryBlock({ block }) {
15235
15311
  const { images } = block.data;
15236
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15312
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15237
15313
  "div",
15238
15314
  {
15239
15315
  className: (0, import_utils18.cn)(
15240
15316
  "grid gap-4",
15241
15317
  images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
15242
15318
  ),
15243
- children: images.map((img, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("figure", { className: "space-y-1", children: [
15244
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15319
+ children: images.map((img, i) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("figure", { className: "space-y-1", children: [
15320
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15245
15321
  "img",
15246
15322
  {
15247
15323
  src: img.url,
@@ -15250,7 +15326,7 @@ function GalleryBlock({ block }) {
15250
15326
  className: "h-full w-full object-cover"
15251
15327
  }
15252
15328
  ) }),
15253
- img.caption && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
15329
+ img.caption && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
15254
15330
  ] }, `${img.url}-${i}`))
15255
15331
  }
15256
15332
  );
@@ -15260,13 +15336,13 @@ function EmbedCard({
15260
15336
  headingLevel,
15261
15337
  embedHref
15262
15338
  }) {
15263
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
15339
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
15264
15340
  "a",
15265
15341
  {
15266
15342
  href: embedHref(resolved),
15267
15343
  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",
15268
15344
  children: [
15269
- resolved.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15345
+ resolved.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15270
15346
  "img",
15271
15347
  {
15272
15348
  src: resolved.coverImageUrl,
@@ -15275,35 +15351,35 @@ function EmbedCard({
15275
15351
  className: "h-full w-full object-cover"
15276
15352
  }
15277
15353
  ) }),
15278
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "space-y-1 p-4", children: [
15279
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
15280
- resolved.role && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
15281
- resolved.excerpt && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-muted-foreground", children: resolved.excerpt })
15354
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-1 p-4", children: [
15355
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
15356
+ resolved.role && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
15357
+ resolved.excerpt && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "text-muted-foreground", children: resolved.excerpt })
15282
15358
  ] })
15283
15359
  ]
15284
15360
  }
15285
15361
  );
15286
15362
  }
15287
15363
  function PageEmbedBlock({ block, headingLevel, embedHref }) {
15288
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
15364
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
15289
15365
  }
15290
15366
  function ProfileEmbedBlock({
15291
15367
  block,
15292
15368
  headingLevel,
15293
15369
  embedHref
15294
15370
  }) {
15295
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
15371
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
15296
15372
  }
15297
15373
  function BeforeAfterBlock({ block }) {
15298
15374
  const { pairs, showCaption, caption } = block.data;
15299
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(BeforeAfterPairs, { pairs, showCaption, caption });
15375
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(BeforeAfterPairs, { pairs, showCaption, caption });
15300
15376
  }
15301
15377
  function ChipsBlock({ block }) {
15302
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ChipList, { items: block.data.items });
15378
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ChipList, { items: block.data.items });
15303
15379
  }
15304
15380
  function ImageTextBlock({ block, headingLevel, headingId }) {
15305
15381
  const { kicker, imageUrl, alt, imageSide, mobileOrder, html: html5 } = block.data;
15306
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15382
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15307
15383
  ImageTextSplit,
15308
15384
  {
15309
15385
  imageUrl,
@@ -15319,11 +15395,11 @@ function ImageTextBlock({ block, headingLevel, headingId }) {
15319
15395
  );
15320
15396
  }
15321
15397
  function IconCardsBlock({ block, headingLevel }) {
15322
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(IconCardGrid, { items: block.data.items, intro: block.data.intro, headingLevel });
15398
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(IconCardGrid, { items: block.data.items, intro: block.data.intro, headingLevel });
15323
15399
  }
15324
15400
  function ReviewsBlock({ block }) {
15325
15401
  const { layout, notice } = block.data;
15326
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { "data-slot": "reviews-block", "data-reviews-layout": layout ?? "grid", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15402
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { "data-slot": "reviews-block", "data-reviews-layout": layout ?? "grid", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15327
15403
  Reviews,
15328
15404
  {
15329
15405
  reviews: block.reviews,
@@ -15404,7 +15480,7 @@ function toIdFragment(value) {
15404
15480
  function SectionCta2({ cta }) {
15405
15481
  if (!hasUsableCta(cta)) return null;
15406
15482
  const variant = toButtonVariant(cta.variant);
15407
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15483
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15408
15484
  "a",
15409
15485
  {
15410
15486
  href: cta.url,
@@ -15441,7 +15517,7 @@ function PageBlocks({
15441
15517
  const kicker = kickerOf(type, block);
15442
15518
  const ownsHeading = OWN_HEADING_TYPES.has(type);
15443
15519
  return [
15444
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
15520
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
15445
15521
  "section",
15446
15522
  {
15447
15523
  "data-slot": "page-block",
@@ -15450,9 +15526,9 @@ function PageBlocks({
15450
15526
  style: surfaceStyle(background),
15451
15527
  className: (0, import_utils18.cn)("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
15452
15528
  children: [
15453
- kicker && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { "data-slot": "page-block-kicker", className: (0, import_utils18.cn)("-mb-4", KICKER_CLASS_NAME), children: kicker }),
15454
- block.heading && !ownsHeading && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { id: headingId, children: block.heading }) }),
15455
- ownsHeading ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15529
+ kicker && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { "data-slot": "page-block-kicker", className: (0, import_utils18.cn)("-mb-4", KICKER_CLASS_NAME), children: kicker }),
15530
+ block.heading && !ownsHeading && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { id: headingId, children: block.heading }) }),
15531
+ ownsHeading ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15456
15532
  Renderer,
15457
15533
  {
15458
15534
  block,
@@ -15460,7 +15536,7 @@ function PageBlocks({
15460
15536
  embedHref,
15461
15537
  headingId
15462
15538
  }
15463
- ) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15539
+ ) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15464
15540
  Renderer,
15465
15541
  {
15466
15542
  block,
@@ -15468,7 +15544,7 @@ function PageBlocks({
15468
15544
  embedHref
15469
15545
  }
15470
15546
  ),
15471
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SectionCta2, { cta: block.cta })
15547
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SectionCta2, { cta: block.cta })
15472
15548
  ]
15473
15549
  },
15474
15550
  block.id
@@ -15476,12 +15552,12 @@ function PageBlocks({
15476
15552
  ];
15477
15553
  });
15478
15554
  if (sections.length === 0) return null;
15479
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: (0, import_utils18.cn)("space-y-12", className), "data-slot": "page-blocks", children: sections });
15555
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: (0, import_utils18.cn)("space-y-12", className), "data-slot": "page-blocks", children: sections });
15480
15556
  }
15481
15557
 
15482
15558
  // src/components/shop-filters.tsx
15483
15559
  var import_utils19 = require("@reblu/site-ui/utils");
15484
- var import_jsx_runtime23 = require("react/jsx-runtime");
15560
+ var import_jsx_runtime24 = require("react/jsx-runtime");
15485
15561
  var DEFAULT_SHOP_PRICE_BANDS = [
15486
15562
  { max: 2500 },
15487
15563
  { min: 2500, max: 5e3 },
@@ -15525,7 +15601,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
15525
15601
  return "";
15526
15602
  }
15527
15603
  function OptionLink({ href, active, label, onActivate }) {
15528
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15604
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15529
15605
  "a",
15530
15606
  {
15531
15607
  href,
@@ -15543,9 +15619,9 @@ function OptionLink({ href, active, label, onActivate }) {
15543
15619
  );
15544
15620
  }
15545
15621
  function FilterFieldset({ legend, children: children2 }) {
15546
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("fieldset", { className: "space-y-2", children: [
15547
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("legend", { className: "text-sm font-medium text-foreground", children: legend }),
15548
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex flex-wrap gap-2", children: children2 })
15622
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("fieldset", { className: "space-y-2", children: [
15623
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("legend", { className: "text-sm font-medium text-foreground", children: legend }),
15624
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex flex-wrap gap-2", children: children2 })
15549
15625
  ] });
15550
15626
  }
15551
15627
  function ShopFilters({
@@ -15568,11 +15644,11 @@ function ShopFilters({
15568
15644
  if (!shouldRenderShopFilters(facets, active)) {
15569
15645
  return null;
15570
15646
  }
15571
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: (0, import_utils19.cn)("space-y-6", className), "data-slot": "shop-filters", children: [
15647
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: (0, import_utils19.cn)("space-y-6", className), "data-slot": "shop-filters", children: [
15572
15648
  visibleTaxonomies.map((axis) => {
15573
15649
  const activeSlug = active.taxonomy?.[axis.key];
15574
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(FilterFieldset, { legend: axis.label, children: [
15575
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15650
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(FilterFieldset, { legend: axis.label, children: [
15651
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15576
15652
  OptionLink,
15577
15653
  {
15578
15654
  href: hrefs.taxonomy(axis.key, void 0),
@@ -15587,7 +15663,7 @@ function ShopFilters({
15587
15663
  ),
15588
15664
  axis.terms.map((term) => {
15589
15665
  const isActive = activeSlug === term.slug;
15590
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15666
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15591
15667
  OptionLink,
15592
15668
  {
15593
15669
  href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
@@ -15607,9 +15683,9 @@ function ShopFilters({
15607
15683
  }),
15608
15684
  visibleAttributes.map((attr) => {
15609
15685
  const activeValues = toValueArray(active.attr?.[attr.key]);
15610
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
15686
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
15611
15687
  const isActive = activeValues.includes(opt.value);
15612
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15688
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15613
15689
  OptionLink,
15614
15690
  {
15615
15691
  href: hrefs.attr(attr.key, opt.value),
@@ -15627,11 +15703,11 @@ function ShopFilters({
15627
15703
  );
15628
15704
  }) }, attr.key);
15629
15705
  }),
15630
- showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
15706
+ showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
15631
15707
  const isActive = active.priceMin === band.min && active.priceMax === band.max;
15632
15708
  const nextMin = isActive ? void 0 : band.min;
15633
15709
  const nextMax = isActive ? void 0 : band.max;
15634
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15710
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15635
15711
  OptionLink,
15636
15712
  {
15637
15713
  href: hrefs.price(nextMin, nextMax),
@@ -15642,7 +15718,7 @@ function ShopFilters({
15642
15718
  i
15643
15719
  );
15644
15720
  }) }),
15645
- hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15721
+ hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15646
15722
  OptionLink,
15647
15723
  {
15648
15724
  href: hrefs.onSale(!active.onSale),
@@ -15651,7 +15727,7 @@ function ShopFilters({
15651
15727
  onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
15652
15728
  }
15653
15729
  ),
15654
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15730
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15655
15731
  "a",
15656
15732
  {
15657
15733
  href: hrefs.clearAll(),
@@ -15668,7 +15744,7 @@ function ShopFilters({
15668
15744
 
15669
15745
  // src/components/course-catalog-filters.tsx
15670
15746
  var import_utils20 = require("@reblu/site-ui/utils");
15671
- var import_jsx_runtime24 = require("react/jsx-runtime");
15747
+ var import_jsx_runtime25 = require("react/jsx-runtime");
15672
15748
  var DEFAULT_COURSE_PRICE_BANDS = [
15673
15749
  { max: 5e3 },
15674
15750
  { min: 5e3, max: 15e3 },
@@ -15721,9 +15797,9 @@ function CourseCatalogFilters({
15721
15797
  const showPrice = enabled.price !== false;
15722
15798
  const isFree = Boolean(active.free);
15723
15799
  if (!showCategories && !showInstructors && !showPrice) return null;
15724
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: (0, import_utils20.cn)("space-y-6", className), "data-slot": "course-catalog-filters", children: [
15725
- showCategories && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(FilterFieldset, { legend: t.category, children: [
15726
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15800
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: (0, import_utils20.cn)("space-y-6", className), "data-slot": "course-catalog-filters", children: [
15801
+ showCategories && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(FilterFieldset, { legend: t.category, children: [
15802
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15727
15803
  OptionLink,
15728
15804
  {
15729
15805
  href: categoryHref(void 0),
@@ -15735,7 +15811,7 @@ function CourseCatalogFilters({
15735
15811
  sortedCategories.map((category) => {
15736
15812
  const isActive = active.category === category.slug;
15737
15813
  const next2 = isActive ? void 0 : category.slug;
15738
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15814
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15739
15815
  OptionLink,
15740
15816
  {
15741
15817
  href: categoryHref(next2),
@@ -15747,8 +15823,8 @@ function CourseCatalogFilters({
15747
15823
  );
15748
15824
  })
15749
15825
  ] }),
15750
- showInstructors && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(FilterFieldset, { legend: t.instructor, children: [
15751
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15826
+ showInstructors && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(FilterFieldset, { legend: t.instructor, children: [
15827
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15752
15828
  OptionLink,
15753
15829
  {
15754
15830
  href: hrefs.instructor(void 0),
@@ -15760,7 +15836,7 @@ function CourseCatalogFilters({
15760
15836
  named.map((instructor) => {
15761
15837
  const isActive = active.instructor === instructor.id;
15762
15838
  const next2 = isActive ? void 0 : instructor.id;
15763
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15839
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15764
15840
  OptionLink,
15765
15841
  {
15766
15842
  href: hrefs.instructor(next2),
@@ -15772,8 +15848,8 @@ function CourseCatalogFilters({
15772
15848
  );
15773
15849
  })
15774
15850
  ] }),
15775
- showPrice && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(FilterFieldset, { legend: t.price, children: [
15776
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15851
+ showPrice && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(FilterFieldset, { legend: t.price, children: [
15852
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15777
15853
  OptionLink,
15778
15854
  {
15779
15855
  href: hrefs.free(!isFree),
@@ -15788,7 +15864,7 @@ function CourseCatalogFilters({
15788
15864
  const isActive = !isFree && active.priceMin === band.min && active.priceMax === band.max;
15789
15865
  const nextMin = isActive ? void 0 : band.min;
15790
15866
  const nextMax = isActive ? void 0 : band.max;
15791
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15867
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15792
15868
  OptionLink,
15793
15869
  {
15794
15870
  href: hrefs.price(nextMin, nextMax),
@@ -15800,7 +15876,7 @@ function CourseCatalogFilters({
15800
15876
  );
15801
15877
  })
15802
15878
  ] }),
15803
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15879
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15804
15880
  "a",
15805
15881
  {
15806
15882
  href: hrefs.clearAll(),
@@ -15823,7 +15899,7 @@ function CourseCatalogFilters({
15823
15899
 
15824
15900
  // src/components/cart-line-list.tsx
15825
15901
  var import_utils21 = require("@reblu/site-ui/utils");
15826
- var import_jsx_runtime25 = (
15902
+ var import_jsx_runtime26 = (
15827
15903
  // eslint-disable-next-line react/no-array-index-key -- entries are positional, SITE-built rows
15828
15904
  require("react/jsx-runtime")
15829
15905
  );
@@ -15839,17 +15915,17 @@ var DEFAULT_LABELS2 = {
15839
15915
  function CartLineIncludes({ entries, note, className }) {
15840
15916
  const hasNote = note != null && note !== false && note !== "";
15841
15917
  if (entries.length === 0 && !hasNote) return null;
15842
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
15918
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
15843
15919
  "div",
15844
15920
  {
15845
15921
  className: (0, import_utils21.cn)("mt-2 space-y-2 rounded-lg bg-muted px-4 py-3 text-sm", className),
15846
15922
  "data-slot": "cart-line-includes",
15847
15923
  children: [
15848
- entries.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("dl", { className: "grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1.5", children: entries.map((entry, idx) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "contents", children: [
15849
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("dt", { className: "font-semibold text-muted-foreground", children: entry.label }),
15850
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("dd", { className: "m-0", children: entry.value })
15924
+ entries.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("dl", { className: "grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1.5", children: entries.map((entry, idx) => /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "contents", children: [
15925
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("dt", { className: "font-semibold text-muted-foreground", children: entry.label }),
15926
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("dd", { className: "m-0", children: entry.value })
15851
15927
  ] }, idx)) }),
15852
- hasNote && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-muted-foreground", children: note })
15928
+ hasNote && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-muted-foreground", children: note })
15853
15929
  ]
15854
15930
  }
15855
15931
  );
@@ -15878,9 +15954,9 @@ function CartLineList({
15878
15954
  }) {
15879
15955
  const t = { ...DEFAULT_LABELS2, ...labels };
15880
15956
  const noticeContent = notice === true ? t.cancelledNotice : notice;
15881
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: (0, import_utils21.cn)("space-y-4", className), "data-slot": "cart-line-list", children: [
15882
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
15883
- noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15957
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: (0, import_utils21.cn)("space-y-4", className), "data-slot": "cart-line-list", children: [
15958
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
15959
+ noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
15884
15960
  "div",
15885
15961
  {
15886
15962
  role: "status",
@@ -15889,34 +15965,34 @@ function CartLineList({
15889
15965
  children: noticeContent
15890
15966
  }
15891
15967
  ),
15892
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
15968
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
15893
15969
  const maxQty = item.maxStock ?? Infinity;
15894
15970
  const atMax = item.quantity >= maxQty;
15895
15971
  const atMin = item.quantity <= 1;
15896
15972
  const message = lineMessage?.(item);
15897
15973
  const includes = lineIncludes?.(item);
15898
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
15974
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
15899
15975
  "li",
15900
15976
  {
15901
15977
  className: "flex gap-4 rounded-xl border border-border bg-card p-4",
15902
15978
  children: [
15903
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
15904
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "min-w-0 flex-1", children: [
15905
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
15906
- item.variantName && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
15907
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("p", { className: "mt-1 text-sm text-muted-foreground", children: [
15979
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
15980
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "min-w-0 flex-1", children: [
15981
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
15982
+ item.variantName && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
15983
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("p", { className: "mt-1 text-sm text-muted-foreground", children: [
15908
15984
  formatPrice(item.unitPrice, currencyCode, locale),
15909
15985
  " ",
15910
15986
  t.unitPriceSuffix
15911
15987
  ] }),
15912
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
15988
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
15913
15989
  "div",
15914
15990
  {
15915
15991
  role: "group",
15916
15992
  "aria-label": t.quantityLabel,
15917
15993
  className: "mt-3 flex items-center gap-3",
15918
15994
  children: [
15919
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
15995
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
15920
15996
  "button",
15921
15997
  {
15922
15998
  type: "button",
@@ -15927,8 +16003,8 @@ function CartLineList({
15927
16003
  children: "\u2212"
15928
16004
  }
15929
16005
  ),
15930
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
15931
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
16006
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
16007
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
15932
16008
  "button",
15933
16009
  {
15934
16010
  type: "button",
@@ -15939,7 +16015,7 @@ function CartLineList({
15939
16015
  children: "+"
15940
16016
  }
15941
16017
  ),
15942
- onRemove && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
16018
+ onRemove && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
15943
16019
  "button",
15944
16020
  {
15945
16021
  type: "button",
@@ -15952,7 +16028,7 @@ function CartLineList({
15952
16028
  ]
15953
16029
  }
15954
16030
  ),
15955
- message != null && message !== false && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
16031
+ message != null && message !== false && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
15956
16032
  "p",
15957
16033
  {
15958
16034
  className: "mt-2 text-sm text-destructive",
@@ -15960,12 +16036,12 @@ function CartLineList({
15960
16036
  children: message
15961
16037
  }
15962
16038
  ),
15963
- includes != null && includes !== false && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("details", { className: "mt-2", "data-slot": "cart-line-list-includes", children: [
15964
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("summary", { className: "cursor-pointer text-sm font-semibold text-primary", children: t.includesSummary }),
16039
+ includes != null && includes !== false && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("details", { className: "mt-2", "data-slot": "cart-line-list-includes", children: [
16040
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("summary", { className: "cursor-pointer text-sm font-semibold text-primary", children: t.includesSummary }),
15965
16041
  includes
15966
16042
  ] })
15967
16043
  ] }),
15968
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
16044
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
15969
16045
  ]
15970
16046
  },
15971
16047
  lineKey(item.productId, item.variantId)
@@ -15976,7 +16052,7 @@ function CartLineList({
15976
16052
 
15977
16053
  // src/components/cart-summary.tsx
15978
16054
  var import_utils22 = require("@reblu/site-ui/utils");
15979
- var import_jsx_runtime26 = require("react/jsx-runtime");
16055
+ var import_jsx_runtime27 = require("react/jsx-runtime");
15980
16056
  var DEFAULT_LABELS3 = {
15981
16057
  subtotal: "Subtotal",
15982
16058
  discountPrefix: "Descuento",
@@ -16006,37 +16082,37 @@ function CartSummary({
16006
16082
  const hasDiscount = Boolean(discountAmount && discountAmount > 0);
16007
16083
  const noticeContent = notice === true ? t.cancelledNotice : notice;
16008
16084
  const hasNotice = noticeContent != null && noticeContent !== false;
16009
- const breakdown = /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
16085
+ const breakdown = /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
16010
16086
  "dl",
16011
16087
  {
16012
16088
  className: (0, import_utils22.cn)("space-y-2 text-sm", !hasNotice && className),
16013
16089
  "data-slot": "cart-summary",
16014
16090
  children: [
16015
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
16016
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("dt", { children: t.subtotal }),
16017
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("dd", { children: formatPrice(subtotal, currencyCode, locale) })
16091
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
16092
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("dt", { children: t.subtotal }),
16093
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("dd", { children: formatPrice(subtotal, currencyCode, locale) })
16018
16094
  ] }),
16019
- hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
16020
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
16021
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("dd", { children: [
16095
+ hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
16096
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
16097
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("dd", { children: [
16022
16098
  "-",
16023
16099
  formatPrice(discountAmount, currencyCode, locale)
16024
16100
  ] })
16025
16101
  ] }),
16026
- shippingEnabled && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
16027
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("dt", { children: t.shipping }),
16028
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
16102
+ shippingEnabled && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
16103
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("dt", { children: t.shipping }),
16104
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
16029
16105
  ] }),
16030
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
16031
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("dt", { children: t.total }),
16032
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("dd", { children: formatPrice(total, currencyCode, locale) })
16106
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
16107
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("dt", { children: t.total }),
16108
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("dd", { children: formatPrice(total, currencyCode, locale) })
16033
16109
  ] })
16034
16110
  ]
16035
16111
  }
16036
16112
  );
16037
16113
  if (!hasNotice) return breakdown;
16038
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: (0, import_utils22.cn)("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
16039
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
16114
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: (0, import_utils22.cn)("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
16115
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
16040
16116
  "div",
16041
16117
  {
16042
16118
  role: "status",
@@ -16051,7 +16127,7 @@ function CartSummary({
16051
16127
 
16052
16128
  // src/components/cart-adjustments-notice.tsx
16053
16129
  var import_utils23 = require("@reblu/site-ui/utils");
16054
- var import_jsx_runtime27 = require("react/jsx-runtime");
16130
+ var import_jsx_runtime28 = require("react/jsx-runtime");
16055
16131
  var DEFAULT_LABELS4 = {
16056
16132
  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.`,
16057
16133
  quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
@@ -16085,20 +16161,20 @@ function CartAdjustmentsNotice({
16085
16161
  );
16086
16162
  }
16087
16163
  if (messages.length === 0) return null;
16088
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
16164
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
16089
16165
  "div",
16090
16166
  {
16091
16167
  role: "status",
16092
16168
  className: (0, import_utils23.cn)("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
16093
16169
  "data-slot": "cart-adjustments-notice",
16094
- children: messages.length === 1 ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { children: messages[0] }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("li", { children: message }, index)) })
16170
+ children: messages.length === 1 ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { children: messages[0] }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("li", { children: message }, index)) })
16095
16171
  }
16096
16172
  );
16097
16173
  }
16098
16174
 
16099
16175
  // src/components/added-to-cart-toast.tsx
16100
16176
  var import_utils24 = require("@reblu/site-ui/utils");
16101
- var import_jsx_runtime28 = (
16177
+ var import_jsx_runtime29 = (
16102
16178
  // eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
16103
16179
  require("react/jsx-runtime")
16104
16180
  );
@@ -16121,7 +16197,7 @@ function AddedToCartToast({
16121
16197
  const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
16122
16198
  const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
16123
16199
  const variant = status === "success" ? "success" : "error";
16124
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
16200
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
16125
16201
  "div",
16126
16202
  {
16127
16203
  "data-slot": "added-to-cart-toast",
@@ -16133,12 +16209,12 @@ function AddedToCartToast({
16133
16209
  className
16134
16210
  ),
16135
16211
  children: [
16136
- hasThumbnail && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
16137
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "min-w-0 flex-1", children: [
16138
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: "truncate font-semibold text-foreground", children: productName }),
16139
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
16212
+ hasThumbnail && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
16213
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "min-w-0 flex-1", children: [
16214
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "truncate font-semibold text-foreground", children: productName }),
16215
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
16140
16216
  ] }),
16141
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
16217
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
16142
16218
  ]
16143
16219
  }
16144
16220
  );
@@ -16146,7 +16222,7 @@ function AddedToCartToast({
16146
16222
 
16147
16223
  // src/components/checkout-login-prompt.tsx
16148
16224
  var import_utils25 = require("@reblu/site-ui/utils");
16149
- var import_jsx_runtime29 = require("react/jsx-runtime");
16225
+ var import_jsx_runtime30 = require("react/jsx-runtime");
16150
16226
  var DEFAULT_LABELS6 = {
16151
16227
  title: "Identificaci\xF3n",
16152
16228
  description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
@@ -16173,9 +16249,9 @@ function CheckoutLoginPrompt({
16173
16249
  if (!open) return null;
16174
16250
  const t = { ...DEFAULT_LABELS6, ...labels };
16175
16251
  const isValidEmail = EMAIL_PATTERN.test(email.trim());
16176
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
16177
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
16178
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
16252
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
16253
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
16254
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
16179
16255
  "div",
16180
16256
  {
16181
16257
  role: "dialog",
@@ -16187,12 +16263,12 @@ function CheckoutLoginPrompt({
16187
16263
  className
16188
16264
  ),
16189
16265
  children: [
16190
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
16191
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { children: [
16192
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
16193
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
16266
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
16267
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { children: [
16268
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
16269
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
16194
16270
  ] }),
16195
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
16271
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
16196
16272
  "button",
16197
16273
  {
16198
16274
  type: "button",
@@ -16203,9 +16279,9 @@ function CheckoutLoginPrompt({
16203
16279
  }
16204
16280
  )
16205
16281
  ] }),
16206
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "space-y-2", children: [
16207
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
16208
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
16282
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-2", children: [
16283
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
16284
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
16209
16285
  "input",
16210
16286
  {
16211
16287
  id: "checkout-login-prompt-email",
@@ -16220,10 +16296,10 @@ function CheckoutLoginPrompt({
16220
16296
  )
16221
16297
  }
16222
16298
  ),
16223
- error && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "text-xs text-destructive", children: error })
16299
+ error && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { className: "text-xs text-destructive", children: error })
16224
16300
  ] }),
16225
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "space-y-2", children: [
16226
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
16301
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-2", children: [
16302
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
16227
16303
  "button",
16228
16304
  {
16229
16305
  type: "button",
@@ -16236,7 +16312,7 @@ function CheckoutLoginPrompt({
16236
16312
  children: checking ? t.checking : t.continueWithEmail
16237
16313
  }
16238
16314
  ),
16239
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
16315
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
16240
16316
  "button",
16241
16317
  {
16242
16318
  type: "button",
@@ -16255,7 +16331,7 @@ function CheckoutLoginPrompt({
16255
16331
  // src/components/checkout-form.tsx
16256
16332
  var import_utils26 = require("@reblu/site-ui/utils");
16257
16333
  var import_phone_input = require("@reblu/site-ui/phone-input");
16258
- var import_jsx_runtime30 = require("react/jsx-runtime");
16334
+ var import_jsx_runtime31 = require("react/jsx-runtime");
16259
16335
  var DEFAULT_LABELS7 = {
16260
16336
  contactTitle: "Datos de contacto",
16261
16337
  nameLabel: "Nombre completo",
@@ -16311,9 +16387,9 @@ function CheckoutForm({
16311
16387
  event.preventDefault();
16312
16388
  if (discountCode.trim() && !discountApplying) onApplyDiscount();
16313
16389
  }
16314
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
16390
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
16315
16391
  loginPrompt,
16316
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
16392
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
16317
16393
  "form",
16318
16394
  {
16319
16395
  "data-testid": "checkout-form",
@@ -16321,12 +16397,12 @@ function CheckoutForm({
16321
16397
  className: (0, import_utils26.cn)("space-y-8", className),
16322
16398
  "data-slot": "checkout-form",
16323
16399
  children: [
16324
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("section", { className: "space-y-4", children: [
16325
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
16326
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
16327
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-1", children: [
16328
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
16329
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
16400
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("section", { className: "space-y-4", children: [
16401
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
16402
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
16403
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "space-y-1", children: [
16404
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
16405
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
16330
16406
  "input",
16331
16407
  {
16332
16408
  id: "checkout-form-name",
@@ -16341,11 +16417,11 @@ function CheckoutForm({
16341
16417
  )
16342
16418
  }
16343
16419
  ),
16344
- contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
16420
+ contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
16345
16421
  ] }),
16346
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-1", children: [
16347
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
16348
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
16422
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "space-y-1", children: [
16423
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
16424
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
16349
16425
  "input",
16350
16426
  {
16351
16427
  id: "checkout-form-email",
@@ -16360,9 +16436,9 @@ function CheckoutForm({
16360
16436
  )
16361
16437
  }
16362
16438
  ),
16363
- contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
16439
+ contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
16364
16440
  ] }),
16365
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
16441
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
16366
16442
  import_phone_input.PhoneInput,
16367
16443
  {
16368
16444
  id: "checkout-form-phone",
@@ -16376,26 +16452,26 @@ function CheckoutForm({
16376
16452
  ] })
16377
16453
  ] }),
16378
16454
  children2,
16379
- generalError ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
16380
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("section", { className: "space-y-3", children: [
16381
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
16382
- autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
16455
+ generalError ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
16456
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("section", { className: "space-y-3", children: [
16457
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
16458
+ autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
16383
16459
  "div",
16384
16460
  {
16385
16461
  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",
16386
16462
  "data-slot": "checkout-staff-discount",
16387
16463
  children: [
16388
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "font-semibold", children: t.staffDiscountApplied }),
16389
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
16464
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "font-semibold", children: t.staffDiscountApplied }),
16465
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
16390
16466
  ]
16391
16467
  }
16392
16468
  ) : null,
16393
- appliedDiscount && !autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime30.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: [
16394
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
16395
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "font-semibold", children: appliedDiscount.code }),
16396
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
16469
+ appliedDiscount && !autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime31.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: [
16470
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
16471
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "font-semibold", children: appliedDiscount.code }),
16472
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
16397
16473
  ] }),
16398
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
16474
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
16399
16475
  "button",
16400
16476
  {
16401
16477
  type: "button",
@@ -16405,9 +16481,9 @@ function CheckoutForm({
16405
16481
  children: t.removeDiscount
16406
16482
  }
16407
16483
  )
16408
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex gap-2", children: [
16409
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
16410
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
16484
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex gap-2", children: [
16485
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
16486
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
16411
16487
  "input",
16412
16488
  {
16413
16489
  id: "checkout-form-discount-code",
@@ -16419,7 +16495,7 @@ function CheckoutForm({
16419
16495
  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"
16420
16496
  }
16421
16497
  ),
16422
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
16498
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
16423
16499
  "button",
16424
16500
  {
16425
16501
  type: "button",
@@ -16430,9 +16506,9 @@ function CheckoutForm({
16430
16506
  }
16431
16507
  )
16432
16508
  ] }),
16433
- discountError && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { className: "text-xs text-destructive", children: discountError })
16509
+ discountError && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { className: "text-xs text-destructive", children: discountError })
16434
16510
  ] }),
16435
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
16511
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
16436
16512
  "button",
16437
16513
  {
16438
16514
  type: "submit",
@@ -16455,7 +16531,7 @@ var import_utils28 = require("@reblu/site-ui/utils");
16455
16531
 
16456
16532
  // src/components/order-invoice-link.tsx
16457
16533
  var import_utils27 = require("@reblu/site-ui/utils");
16458
- var import_jsx_runtime31 = require("react/jsx-runtime");
16534
+ var import_jsx_runtime32 = require("react/jsx-runtime");
16459
16535
  var DEFAULT_LABELS8 = {
16460
16536
  linkLabel: "Descargar la factura {number}",
16461
16537
  signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
@@ -16463,8 +16539,8 @@ var DEFAULT_LABELS8 = {
16463
16539
  function OrderInvoiceLink({ invoice, labels, className }) {
16464
16540
  if (!invoice) return null;
16465
16541
  const t = { ...DEFAULT_LABELS8, ...labels };
16466
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: (0, import_utils27.cn)("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
16467
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
16542
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: (0, import_utils27.cn)("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
16543
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
16468
16544
  "a",
16469
16545
  {
16470
16546
  href: invoice.url,
@@ -16472,12 +16548,12 @@ function OrderInvoiceLink({ invoice, labels, className }) {
16472
16548
  children: t.linkLabel.replace("{number}", invoice.number)
16473
16549
  }
16474
16550
  ),
16475
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { className: "text-muted-foreground", children: t.signInHint })
16551
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "text-muted-foreground", children: t.signInHint })
16476
16552
  ] });
16477
16553
  }
16478
16554
 
16479
16555
  // src/components/order-confirmation.tsx
16480
- var import_jsx_runtime32 = require("react/jsx-runtime");
16556
+ var import_jsx_runtime33 = require("react/jsx-runtime");
16481
16557
  var DEFAULT_LABELS9 = {
16482
16558
  pollingTitle: "Confirmando tu pedido\u2026",
16483
16559
  pollingDescription: "Estamos procesando el pago, un momento\u2026",
@@ -16552,60 +16628,60 @@ function OrderConfirmation({
16552
16628
  const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
16553
16629
  const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
16554
16630
  const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
16555
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: (0, import_utils28.cn)("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
16556
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("h1", { className: "text-3xl font-bold", children: title }),
16557
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "text-lg text-muted-foreground", children: description }),
16558
- showFullOrderSummary && order && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "space-y-6", children: [
16559
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16560
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
16561
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
16631
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: (0, import_utils28.cn)("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
16632
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("h1", { className: "text-3xl font-bold", children: title }),
16633
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "text-lg text-muted-foreground", children: description }),
16634
+ showFullOrderSummary && order && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "space-y-6", children: [
16635
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16636
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
16637
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
16562
16638
  ] }),
16563
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
16564
- order.items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
16639
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
16640
+ order.items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
16565
16641
  "div",
16566
16642
  {
16567
16643
  className: "flex justify-between gap-4 text-sm",
16568
16644
  children: [
16569
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
16645
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
16570
16646
  item.product.name,
16571
16647
  item.variant ? ` (${item.variant.name})` : "",
16572
16648
  " x",
16573
16649
  item.quantity
16574
16650
  ] }),
16575
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
16651
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
16576
16652
  ]
16577
16653
  },
16578
16654
  idx
16579
16655
  )),
16580
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
16581
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { children: t.totalLabel }),
16582
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { children: formatPrice(order.total, currencyCode, locale) })
16656
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
16657
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { children: t.totalLabel }),
16658
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { children: formatPrice(order.total, currencyCode, locale) })
16583
16659
  ] }) })
16584
16660
  ] }),
16585
- showPurchaseTexts && order.purchaseTexts?.length ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "mx-auto max-w-sm space-y-3 text-left", "data-slot": "order-confirmation-purchase-texts", children: order.purchaseTexts.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
16661
+ showPurchaseTexts && order.purchaseTexts?.length ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "mx-auto max-w-sm space-y-3 text-left", "data-slot": "order-confirmation-purchase-texts", children: order.purchaseTexts.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
16586
16662
  "div",
16587
16663
  {
16588
16664
  className: "rounded-xl border border-border bg-card p-4",
16589
16665
  "data-slot": "order-confirmation-purchase-text",
16590
16666
  "data-kind": entry.kind,
16591
16667
  children: [
16592
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: entry.label }),
16593
- entry.place ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("address", { className: "mb-2 text-sm not-italic", "data-slot": "order-confirmation-pickup-place", children: [
16594
- entry.place.name ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "block font-medium", children: entry.place.name }) : null,
16595
- entry.place.address.map((line) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "block", children: line }, line))
16668
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: entry.label }),
16669
+ entry.place ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("address", { className: "mb-2 text-sm not-italic", "data-slot": "order-confirmation-pickup-place", children: [
16670
+ entry.place.name ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "block font-medium", children: entry.place.name }) : null,
16671
+ entry.place.address.map((line) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "block", children: line }, line))
16596
16672
  ] }) : null,
16597
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "whitespace-pre-line text-sm", children: entry.text })
16673
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "whitespace-pre-line text-sm", children: entry.text })
16598
16674
  ]
16599
16675
  },
16600
16676
  entry.kind
16601
16677
  )) }) : null,
16602
- t.foundDescription.includes("{email}") ? null : /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
16678
+ t.foundDescription.includes("{email}") ? null : /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
16603
16679
  t.confirmationEmailPrefix,
16604
16680
  " ",
16605
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
16681
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
16606
16682
  "."
16607
16683
  ] }),
16608
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
16684
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
16609
16685
  OrderInvoiceLink,
16610
16686
  {
16611
16687
  invoice: order.invoice,
@@ -16613,11 +16689,11 @@ function OrderConfirmation({
16613
16689
  }
16614
16690
  )
16615
16691
  ] }),
16616
- showOrderReference && order && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16617
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
16618
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
16692
+ showOrderReference && order && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16693
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
16694
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
16619
16695
  ] }),
16620
- status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
16696
+ status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
16621
16697
  "a",
16622
16698
  {
16623
16699
  href: cartHref,
@@ -16625,7 +16701,7 @@ function OrderConfirmation({
16625
16701
  children: t.backToCartLabel
16626
16702
  }
16627
16703
  ),
16628
- showRecheck && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
16704
+ showRecheck && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
16629
16705
  "button",
16630
16706
  {
16631
16707
  type: "button",
@@ -16634,16 +16710,16 @@ function OrderConfirmation({
16634
16710
  children: t.recheckLabel
16635
16711
  }
16636
16712
  ),
16637
- showSessionReference && /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16638
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
16639
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
16713
+ showSessionReference && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16714
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
16715
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
16640
16716
  ] })
16641
16717
  ] });
16642
16718
  }
16643
16719
 
16644
16720
  // src/components/full-invoice-fields.tsx
16645
16721
  var import_utils29 = require("@reblu/site-ui/utils");
16646
- var import_jsx_runtime33 = require("react/jsx-runtime");
16722
+ var import_jsx_runtime34 = require("react/jsx-runtime");
16647
16723
  var EMPTY_FULL_INVOICE_VALUE = {
16648
16724
  wantsFullInvoice: false,
16649
16725
  billingIdType: "NIF",
@@ -16760,12 +16836,12 @@ function FullInvoiceFields({
16760
16836
  const showFields = value.wantsFullInvoice || overCap;
16761
16837
  const isSpanishNif = value.billingIdType === "NIF";
16762
16838
  const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
16763
- const error = (key2) => errors[key2] ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
16839
+ const error = (key2) => errors[key2] ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
16764
16840
  const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
16765
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("section", { className: (0, import_utils29.cn)("space-y-4", className), "data-slot": "full-invoice-fields", children: [
16766
- overCap ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "space-y-1", children: [
16767
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
16768
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
16841
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("section", { className: (0, import_utils29.cn)("space-y-4", className), "data-slot": "full-invoice-fields", children: [
16842
+ overCap ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
16843
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
16844
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
16769
16845
  "input",
16770
16846
  {
16771
16847
  type: "checkbox",
@@ -16775,12 +16851,12 @@ function FullInvoiceFields({
16775
16851
  ),
16776
16852
  t.toggle
16777
16853
  ] }),
16778
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
16854
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
16779
16855
  ] }),
16780
- showFields && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
16781
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "space-y-1", children: [
16782
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
16783
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
16856
+ showFields && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
16857
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
16858
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
16859
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
16784
16860
  "select",
16785
16861
  {
16786
16862
  id: "full-invoice-id-type",
@@ -16789,14 +16865,14 @@ function FullInvoiceFields({
16789
16865
  value: value.billingIdType,
16790
16866
  onChange: (e) => set("billingIdType", e.target.value),
16791
16867
  ...invalid2("billingIdType"),
16792
- children: ID_TYPES.map((type) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("option", { value: type, children: t.idTypeOptions[type] }, type))
16868
+ children: ID_TYPES.map((type) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("option", { value: type, children: t.idTypeOptions[type] }, type))
16793
16869
  }
16794
16870
  ),
16795
16871
  error("billingIdType")
16796
16872
  ] }),
16797
- !isSpanishNif && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "space-y-1", children: [
16798
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
16799
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
16873
+ !isSpanishNif && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
16874
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
16875
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
16800
16876
  "select",
16801
16877
  {
16802
16878
  id: "full-invoice-id-country",
@@ -16806,16 +16882,16 @@ function FullInvoiceFields({
16806
16882
  onChange: (e) => set("billingIdCountry", e.target.value),
16807
16883
  ...invalid2("billingIdCountry"),
16808
16884
  children: [
16809
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("option", { value: "", disabled: true, children: t.chooseCountry }),
16810
- countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("option", { value: c.code, children: c.name }, c.code))
16885
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("option", { value: "", disabled: true, children: t.chooseCountry }),
16886
+ countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("option", { value: c.code, children: c.name }, c.code))
16811
16887
  ]
16812
16888
  }
16813
16889
  ),
16814
16890
  error("billingIdCountry")
16815
16891
  ] }),
16816
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "space-y-1", children: [
16817
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
16818
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
16892
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
16893
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
16894
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
16819
16895
  "input",
16820
16896
  {
16821
16897
  id: "full-invoice-nif",
@@ -16828,9 +16904,9 @@ function FullInvoiceFields({
16828
16904
  ),
16829
16905
  error("billingNif")
16830
16906
  ] }),
16831
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "space-y-1", children: [
16832
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
16833
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
16907
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
16908
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
16909
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
16834
16910
  "input",
16835
16911
  {
16836
16912
  id: "full-invoice-name",
@@ -16843,9 +16919,9 @@ function FullInvoiceFields({
16843
16919
  ),
16844
16920
  error("billingName")
16845
16921
  ] }),
16846
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "space-y-1 sm:col-span-2", children: [
16847
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
16848
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
16922
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1 sm:col-span-2", children: [
16923
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
16924
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
16849
16925
  "input",
16850
16926
  {
16851
16927
  id: "full-invoice-street",
@@ -16857,9 +16933,9 @@ function FullInvoiceFields({
16857
16933
  }
16858
16934
  )
16859
16935
  ] }),
16860
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "space-y-1", children: [
16861
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
16862
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
16936
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
16937
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
16938
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
16863
16939
  "input",
16864
16940
  {
16865
16941
  id: "full-invoice-postal-code",
@@ -16870,9 +16946,9 @@ function FullInvoiceFields({
16870
16946
  }
16871
16947
  )
16872
16948
  ] }),
16873
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "space-y-1", children: [
16874
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
16875
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
16949
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
16950
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
16951
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
16876
16952
  "input",
16877
16953
  {
16878
16954
  id: "full-invoice-city",
@@ -16883,9 +16959,9 @@ function FullInvoiceFields({
16883
16959
  }
16884
16960
  )
16885
16961
  ] }),
16886
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "space-y-1", children: [
16887
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
16888
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
16962
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
16963
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
16964
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
16889
16965
  "select",
16890
16966
  {
16891
16967
  id: "full-invoice-country",
@@ -16893,18 +16969,18 @@ function FullInvoiceFields({
16893
16969
  required: true,
16894
16970
  value: value.country,
16895
16971
  onChange: (e) => set("country", e.target.value),
16896
- children: countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("option", { value: c.code, children: c.name }, c.code))
16972
+ children: countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("option", { value: c.code, children: c.name }, c.code))
16897
16973
  }
16898
16974
  )
16899
16975
  ] }),
16900
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "sm:col-span-2", children: error("address") })
16976
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "sm:col-span-2", children: error("address") })
16901
16977
  ] })
16902
16978
  ] });
16903
16979
  }
16904
16980
 
16905
16981
  // src/components/checkout-delivery-choice.tsx
16906
16982
  var import_utils30 = require("@reblu/site-ui/utils");
16907
- var import_jsx_runtime34 = require("react/jsx-runtime");
16983
+ var import_jsx_runtime35 = require("react/jsx-runtime");
16908
16984
  var EMPTY_CHECKOUT_ADDRESS = {
16909
16985
  firstName: "",
16910
16986
  lastName: "",
@@ -16967,17 +17043,17 @@ function CheckoutDeliveryChoice({
16967
17043
  const isPickup = value?.type === "PICKUP";
16968
17044
  const isShipping = value?.type === "SHIPPING";
16969
17045
  const errorId = `${uid}-delivery-error`;
16970
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
17046
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
16971
17047
  "fieldset",
16972
17048
  {
16973
17049
  "data-slot": "checkout-delivery",
16974
17050
  "aria-describedby": error ? errorId : void 0,
16975
17051
  className: (0, import_utils30.cn)("space-y-4", className),
16976
17052
  children: [
16977
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("legend", { className: "mb-2 text-lg font-semibold", children: t.legend }),
16978
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "grid gap-3 sm:grid-cols-2", children: [
16979
- homeDelivery ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16980
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
17053
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("legend", { className: "mb-2 text-lg font-semibold", children: t.legend }),
17054
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "grid gap-3 sm:grid-cols-2", children: [
17055
+ homeDelivery ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
17056
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
16981
17057
  "input",
16982
17058
  {
16983
17059
  type: "radio",
@@ -16987,16 +17063,16 @@ function CheckoutDeliveryChoice({
16987
17063
  className: "mt-0.5 size-4 accent-primary"
16988
17064
  }
16989
17065
  ),
16990
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "flex-1 space-y-1", children: [
16991
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "flex justify-between gap-2 font-medium", children: [
16992
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { children: copy.shippingOptionLabel }),
16993
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "tabular-nums", children: homeCost })
17066
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "flex-1 space-y-1", children: [
17067
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "flex justify-between gap-2 font-medium", children: [
17068
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: copy.shippingOptionLabel }),
17069
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "tabular-nums", children: homeCost })
16994
17070
  ] }),
16995
- delivery.estimatedDeliveryText ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "block text-sm text-muted-foreground", children: delivery.estimatedDeliveryText }) : null
17071
+ delivery.estimatedDeliveryText ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "block text-sm text-muted-foreground", children: delivery.estimatedDeliveryText }) : null
16996
17072
  ] })
16997
17073
  ] }) : null,
16998
- pickup ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16999
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
17074
+ pickup ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
17075
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
17000
17076
  "input",
17001
17077
  {
17002
17078
  type: "radio",
@@ -17006,23 +17082,23 @@ function CheckoutDeliveryChoice({
17006
17082
  className: "mt-0.5 size-4 accent-primary"
17007
17083
  }
17008
17084
  ),
17009
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "flex flex-1 justify-between gap-2 font-medium", children: [
17010
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { children: copy.pickupOptionLabel }),
17011
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { children: t.free })
17085
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "flex flex-1 justify-between gap-2 font-medium", children: [
17086
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: copy.pickupOptionLabel }),
17087
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: t.free })
17012
17088
  ] })
17013
17089
  ] }) : null
17014
17090
  ] }),
17015
- error ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { id: errorId, role: "alert", className: "text-sm text-destructive", children: error }) : null,
17016
- isPickup ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { role: "radiogroup", "aria-labelledby": `${uid}-points`, className: "space-y-2", children: [
17017
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { id: `${uid}-points`, className: "text-sm font-medium", children: t.pickupPointsLegend }),
17091
+ error ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { id: errorId, role: "alert", className: "text-sm text-destructive", children: error }) : null,
17092
+ isPickup ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { role: "radiogroup", "aria-labelledby": `${uid}-points`, className: "space-y-2", children: [
17093
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { id: `${uid}-points`, className: "text-sm font-medium", children: t.pickupPointsLegend }),
17018
17094
  delivery.pickupLocations.map((location2) => {
17019
17095
  const descId = `${uid}-point-${location2.id}`;
17020
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
17096
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
17021
17097
  "label",
17022
17098
  {
17023
17099
  className: "flex cursor-pointer items-start gap-3 rounded-lg border border-border p-3 has-[:checked]:border-primary",
17024
17100
  children: [
17025
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
17101
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
17026
17102
  "input",
17027
17103
  {
17028
17104
  type: "radio",
@@ -17033,9 +17109,9 @@ function CheckoutDeliveryChoice({
17033
17109
  className: "mt-0.5 size-4 accent-primary"
17034
17110
  }
17035
17111
  ),
17036
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "space-y-0.5 text-sm", children: [
17037
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "block font-medium", children: location2.name }),
17038
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { id: descId, className: "block text-muted-foreground", children: pickupDescription(location2) })
17112
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "space-y-0.5 text-sm", children: [
17113
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "block font-medium", children: location2.name }),
17114
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { id: descId, className: "block text-muted-foreground", children: pickupDescription(location2) })
17039
17115
  ] })
17040
17116
  ]
17041
17117
  },
@@ -17043,14 +17119,14 @@ function CheckoutDeliveryChoice({
17043
17119
  );
17044
17120
  })
17045
17121
  ] }) : null,
17046
- isShipping ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("fieldset", { className: "space-y-3", children: [
17047
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("legend", { className: "mb-2 text-sm font-medium", children: t.addressLegend }),
17048
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: ADDRESS_FIELDS.map(({ key: key2, autoComplete, required, wide }) => {
17122
+ isShipping ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("fieldset", { className: "space-y-3", children: [
17123
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("legend", { className: "mb-2 text-sm font-medium", children: t.addressLegend }),
17124
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: ADDRESS_FIELDS.map(({ key: key2, autoComplete, required, wide }) => {
17049
17125
  const fieldId = `${uid}-${key2}`;
17050
17126
  const fieldError = addressErrors?.[key2];
17051
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: (0, import_utils30.cn)("space-y-1", wide && "sm:col-span-2"), children: [
17052
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: fieldId, className: "text-sm font-medium", children: t[key2] }),
17053
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
17127
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: (0, import_utils30.cn)("space-y-1", wide && "sm:col-span-2"), children: [
17128
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("label", { htmlFor: fieldId, className: "text-sm font-medium", children: t[key2] }),
17129
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
17054
17130
  "input",
17055
17131
  {
17056
17132
  id: fieldId,
@@ -17067,7 +17143,7 @@ function CheckoutDeliveryChoice({
17067
17143
  )
17068
17144
  }
17069
17145
  ),
17070
- fieldError ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { id: `${fieldId}-error`, className: "text-sm text-destructive", children: fieldError }) : null
17146
+ fieldError ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { id: `${fieldId}-error`, className: "text-sm text-destructive", children: fieldError }) : null
17071
17147
  ] }, key2);
17072
17148
  }) })
17073
17149
  ] }) : null
@@ -17110,7 +17186,7 @@ function toCheckoutFulfillmentFields(value, address, requiresDelivery = true) {
17110
17186
 
17111
17187
  // src/components/checkout-quote-summary.tsx
17112
17188
  var import_utils31 = require("@reblu/site-ui/utils");
17113
- var import_jsx_runtime35 = require("react/jsx-runtime");
17189
+ var import_jsx_runtime36 = require("react/jsx-runtime");
17114
17190
  var DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS = {
17115
17191
  subtotal: "Subtotal",
17116
17192
  discount: (codeOrLabel, isAutomatic) => isAutomatic ? codeOrLabel : `Descuento (${codeOrLabel})`,
@@ -17127,9 +17203,9 @@ function Row({
17127
17203
  value,
17128
17204
  className
17129
17205
  }) {
17130
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { "data-slot": "checkout-quote-row", className: (0, import_utils31.cn)("flex justify-between gap-4", className), children: [
17131
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("dt", { children: name }),
17132
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("dd", { className: "shrink-0 tabular-nums", children: value })
17206
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { "data-slot": "checkout-quote-row", className: (0, import_utils31.cn)("flex justify-between gap-4", className), children: [
17207
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("dt", { children: name }),
17208
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("dd", { className: "shrink-0 tabular-nums", children: value })
17133
17209
  ] });
17134
17210
  }
17135
17211
  function CheckoutQuoteSummary({
@@ -17145,22 +17221,22 @@ function CheckoutQuoteSummary({
17145
17221
  const price = (cents) => formatPrice(cents, currencyCode, locale);
17146
17222
  const { fulfillment, shipping, tax, discount } = quote;
17147
17223
  const Tag = `h${headingLevel}`;
17148
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("section", { "data-slot": "checkout-quote-summary", className: slotClassName("space-y-4", "", className), children: [
17149
- heading ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Tag, { className: "text-lg font-semibold", children: heading }) : null,
17150
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("ul", { className: "space-y-3 text-sm", children: quote.lines.map((line) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("li", { className: "flex justify-between gap-4", children: [
17151
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "min-w-0 space-y-0.5", children: [
17152
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "font-medium", children: line.name }),
17153
- line.variantName ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "text-muted-foreground", children: line.variantName }) : null,
17154
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("p", { className: "flex flex-wrap items-center gap-2 text-muted-foreground", children: [
17155
- line.kindLabel ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { "data-slot": "checkout-quote-kind", className: "rounded-full border border-border px-2 py-0.5 text-xs font-medium text-foreground", children: line.kindLabel }) : null,
17156
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: t.quantityTimesUnit(line.quantity, price(line.unitPrice)) })
17224
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("section", { "data-slot": "checkout-quote-summary", className: slotClassName("space-y-4", "", className), children: [
17225
+ heading ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Tag, { className: "text-lg font-semibold", children: heading }) : null,
17226
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("ul", { className: "space-y-3 text-sm", children: quote.lines.map((line) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("li", { className: "flex justify-between gap-4", children: [
17227
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "min-w-0 space-y-0.5", children: [
17228
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "font-medium", children: line.name }),
17229
+ line.variantName ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "text-muted-foreground", children: line.variantName }) : null,
17230
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("p", { className: "flex flex-wrap items-center gap-2 text-muted-foreground", children: [
17231
+ line.kindLabel ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { "data-slot": "checkout-quote-kind", className: "rounded-full border border-border px-2 py-0.5 text-xs font-medium text-foreground", children: line.kindLabel }) : null,
17232
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: t.quantityTimesUnit(line.quantity, price(line.unitPrice)) })
17157
17233
  ] })
17158
17234
  ] }),
17159
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "shrink-0 tabular-nums", children: price(line.total) })
17235
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "shrink-0 tabular-nums", children: price(line.total) })
17160
17236
  ] }, `${line.productId}-${line.variantId ?? ""}`)) }),
17161
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("dl", { className: "space-y-2 border-t border-border pt-3 text-sm", children: [
17162
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Row, { name: t.subtotal, value: price(quote.subtotal) }),
17163
- discount && discount.amount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
17237
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("dl", { className: "space-y-2 border-t border-border pt-3 text-sm", children: [
17238
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Row, { name: t.subtotal, value: price(quote.subtotal) }),
17239
+ discount && discount.amount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
17164
17240
  Row,
17165
17241
  {
17166
17242
  className: "text-green-700 dark:text-green-400",
@@ -17168,17 +17244,17 @@ function CheckoutQuoteSummary({
17168
17244
  value: `\u2212${price(discount.amount)}`
17169
17245
  }
17170
17246
  ) : null,
17171
- fulfillment.type ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
17247
+ fulfillment.type ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
17172
17248
  Row,
17173
17249
  {
17174
- name: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_jsx_runtime35.Fragment, { children: [
17250
+ name: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
17175
17251
  fulfillment.label ?? t.delivery,
17176
- fulfillment.type === "PICKUP" && fulfillment.pickupLocation ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "block text-muted-foreground", children: fulfillment.pickupLocation.name }) : null
17252
+ fulfillment.type === "PICKUP" && fulfillment.pickupLocation ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "block text-muted-foreground", children: fulfillment.pickupLocation.name }) : null
17177
17253
  ] }),
17178
17254
  value: fulfillment.type === "PICKUP" || shipping.isFree ? t.free : price(shipping.cost)
17179
17255
  }
17180
17256
  ) : null,
17181
- tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
17257
+ tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
17182
17258
  Row,
17183
17259
  {
17184
17260
  className: tax.isIncluded ? "text-muted-foreground" : void 0,
@@ -17187,13 +17263,13 @@ function CheckoutQuoteSummary({
17187
17263
  },
17188
17264
  entry.label
17189
17265
  )) : null,
17190
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Row, { className: "border-t border-border pt-2 text-base font-bold", name: t.total, value: price(quote.total) })
17266
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Row, { className: "border-t border-border pt-2 text-base font-bold", name: t.total, value: price(quote.total) })
17191
17267
  ] }),
17192
- tax.isIncluded ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "text-sm text-muted-foreground", children: t.taxesIncludedNote }) : null,
17193
- fulfillment.type === "SHIPPING" && !shipping.isFree && shipping.remainingForFree ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "text-sm text-muted-foreground", children: t.remainingForFree(price(shipping.remainingForFree)) }) : null,
17194
- fulfillment.type && quote.deliveryEstimateText ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { "data-slot": "checkout-quote-estimate", className: "text-sm text-muted-foreground", children: quote.deliveryEstimateText }) : null,
17195
- quote.discountError ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { role: "status", className: "text-sm text-destructive", children: quote.discountError.message }) : null,
17196
- quote.blockingReason ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { role: "alert", className: "rounded-lg border border-destructive/50 bg-destructive/10 p-3 text-sm text-destructive", children: quote.blockingReason.message }) : null
17268
+ tax.isIncluded ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "text-sm text-muted-foreground", children: t.taxesIncludedNote }) : null,
17269
+ fulfillment.type === "SHIPPING" && !shipping.isFree && shipping.remainingForFree ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "text-sm text-muted-foreground", children: t.remainingForFree(price(shipping.remainingForFree)) }) : null,
17270
+ fulfillment.type && quote.deliveryEstimateText ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { "data-slot": "checkout-quote-estimate", className: "text-sm text-muted-foreground", children: quote.deliveryEstimateText }) : null,
17271
+ quote.discountError ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { role: "status", className: "text-sm text-destructive", children: quote.discountError.message }) : null,
17272
+ quote.blockingReason ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { role: "alert", className: "rounded-lg border border-destructive/50 bg-destructive/10 p-3 text-sm text-destructive", children: quote.blockingReason.message }) : null
17197
17273
  ] });
17198
17274
  }
17199
17275
  var DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS = {
@@ -17211,7 +17287,7 @@ function checkoutQuoteNotice({
17211
17287
  function CheckoutQuoteNotice({ reason, labels, className }) {
17212
17288
  if (!reason) return null;
17213
17289
  const t = { ...DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS, ...labels };
17214
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
17290
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
17215
17291
  "p",
17216
17292
  {
17217
17293
  role: "status",
@@ -17224,7 +17300,7 @@ function CheckoutQuoteNotice({ reason, labels, className }) {
17224
17300
 
17225
17301
  // src/components/checkout-terms-acceptance.tsx
17226
17302
  var import_utils32 = require("@reblu/site-ui/utils");
17227
- var import_jsx_runtime36 = require("react/jsx-runtime");
17303
+ var import_jsx_runtime37 = require("react/jsx-runtime");
17228
17304
  function splitTermsLabel(label) {
17229
17305
  const at = label.indexOf("{terms}");
17230
17306
  return at === -1 ? [`${label} `, ""] : [label.slice(0, at), label.slice(at + "{terms}".length)];
@@ -17246,9 +17322,9 @@ function CheckoutTermsAcceptance({
17246
17322
  (part) => part.replaceAll("{tenant}", copy.tenantName)
17247
17323
  );
17248
17324
  const newTab = copy.isTermsLinkNewTab;
17249
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { "data-slot": "checkout-terms", className: (0, import_utils32.cn)("space-y-1", className), children: [
17250
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "flex items-start gap-3", children: [
17251
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
17325
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { "data-slot": "checkout-terms", className: (0, import_utils32.cn)("space-y-1", className), children: [
17326
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-start gap-3", children: [
17327
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
17252
17328
  "input",
17253
17329
  {
17254
17330
  id: boxId,
@@ -17261,9 +17337,9 @@ function CheckoutTermsAcceptance({
17261
17337
  className: "mt-0.5 size-5 shrink-0 cursor-pointer accent-primary"
17262
17338
  }
17263
17339
  ),
17264
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("label", { htmlFor: boxId, className: "text-sm leading-relaxed", children: [
17340
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("label", { htmlFor: boxId, className: "text-sm leading-relaxed", children: [
17265
17341
  before,
17266
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
17342
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
17267
17343
  "a",
17268
17344
  {
17269
17345
  href: copy.termsLinkUrl ?? termsHref,
@@ -17271,9 +17347,9 @@ function CheckoutTermsAcceptance({
17271
17347
  className: "font-medium underline underline-offset-2 hover:text-primary",
17272
17348
  children: [
17273
17349
  copy.termsLinkText,
17274
- newTab ? /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
17350
+ newTab ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
17275
17351
  " ",
17276
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "sr-only", children: newTabHint })
17352
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "sr-only", children: newTabHint })
17277
17353
  ] }) : null
17278
17354
  ]
17279
17355
  }
@@ -17281,7 +17357,7 @@ function CheckoutTermsAcceptance({
17281
17357
  after
17282
17358
  ] })
17283
17359
  ] }),
17284
- error ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { id: errorId, className: "pl-8 text-sm text-destructive", children: error }) : null
17360
+ error ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { id: errorId, className: "pl-8 text-sm text-destructive", children: error }) : null
17285
17361
  ] });
17286
17362
  }
17287
17363
  function toCheckoutTermsFields(copy, accepted) {
@@ -17291,7 +17367,7 @@ function toCheckoutTermsFields(copy, accepted) {
17291
17367
 
17292
17368
  // src/components/checkout-pay-action.tsx
17293
17369
  var import_utils33 = require("@reblu/site-ui/utils");
17294
- var import_jsx_runtime37 = require("react/jsx-runtime");
17370
+ var import_jsx_runtime38 = require("react/jsx-runtime");
17295
17371
  function CheckoutPayAction({
17296
17372
  label,
17297
17373
  notice,
@@ -17305,8 +17381,8 @@ function CheckoutPayAction({
17305
17381
  }) {
17306
17382
  const noticeId = `${id}-notice`;
17307
17383
  const isDisabled = submitting || disabled;
17308
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { "data-slot": "checkout-pay-action", className: (0, import_utils33.cn)("space-y-3", className), children: [
17309
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
17384
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { "data-slot": "checkout-pay-action", className: (0, import_utils33.cn)("space-y-3", className), children: [
17385
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
17310
17386
  "button",
17311
17387
  {
17312
17388
  type: "submit",
@@ -17320,7 +17396,7 @@ function CheckoutPayAction({
17320
17396
  children: submitting ? submittingLabel : label
17321
17397
  }
17322
17398
  ),
17323
- notice ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { id: noticeId, "data-slot": "checkout-pay-notice", className: noticeClassName ?? "text-sm text-muted-foreground", children: notice }) : null
17399
+ notice ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { id: noticeId, "data-slot": "checkout-pay-notice", className: noticeClassName ?? "text-sm text-muted-foreground", children: notice }) : null
17324
17400
  ] });
17325
17401
  }
17326
17402
 
@@ -17348,7 +17424,7 @@ function toAcademyCheckoutInvoiceFields(value, overCap, issuesInvoices = true) {
17348
17424
 
17349
17425
  // src/components/contact-interest-field.tsx
17350
17426
  var import_utils34 = require("@reblu/site-ui/utils");
17351
- var import_jsx_runtime38 = require("react/jsx-runtime");
17427
+ var import_jsx_runtime39 = require("react/jsx-runtime");
17352
17428
  function ContactInterestField({
17353
17429
  interest,
17354
17430
  value,
@@ -17365,18 +17441,18 @@ function ContactInterestField({
17365
17441
  else next2.delete(option2);
17366
17442
  onChange(interest.options.filter((candidate) => next2.has(candidate)));
17367
17443
  };
17368
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("fieldset", { "data-slot": "contact-interest", className: (0, import_utils34.cn)("space-y-2", className), children: [
17369
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("legend", { className: "text-sm font-medium", children: interest.label }),
17370
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
17444
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("fieldset", { "data-slot": "contact-interest", className: (0, import_utils34.cn)("space-y-2", className), children: [
17445
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("legend", { className: "text-sm font-medium", children: interest.label }),
17446
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
17371
17447
  const id = `${idPrefix}-${index}`;
17372
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
17448
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
17373
17449
  "label",
17374
17450
  {
17375
17451
  htmlFor: id,
17376
17452
  "data-slot": "contact-interest-option",
17377
17453
  className: "flex items-center gap-2 text-sm",
17378
17454
  children: [
17379
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
17455
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
17380
17456
  "input",
17381
17457
  {
17382
17458
  id,
@@ -17421,6 +17497,7 @@ var import_site_contracts = require("@reblu/site-contracts");
17421
17497
  CourseCatalogFilters,
17422
17498
  CourseDescription,
17423
17499
  CoursePurchaseTerms,
17500
+ CourseSchedule,
17424
17501
  DATA_REQUEST_TYPES,
17425
17502
  DEFAULT_BEFORE_AFTER_LABELS,
17426
17503
  DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS,
@@ -17429,6 +17506,7 @@ var import_site_contracts = require("@reblu/site-contracts");
17429
17506
  DEFAULT_COURSE_CATALOG_FILTERS_LABELS,
17430
17507
  DEFAULT_COURSE_PRICE_BANDS,
17431
17508
  DEFAULT_COURSE_PURCHASE_TERMS_LABELS,
17509
+ DEFAULT_COURSE_SCHEDULE_LABELS,
17432
17510
  DEFAULT_INVOICE_COUNTRIES,
17433
17511
  DEFAULT_LESSON_PREVIEW_LABELS,
17434
17512
  DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,