@reblu/site-blocks 0.33.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.js CHANGED
@@ -13539,8 +13539,82 @@ function CoursePurchaseTerms({
13539
13539
  );
13540
13540
  }
13541
13541
 
13542
- // src/components/legal-document.tsx
13542
+ // src/components/course-schedule.tsx
13543
13543
  import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
13544
+ function formatSession(session, timeZone, locale) {
13545
+ const day = new Intl.DateTimeFormat(locale, { weekday: "long", day: "numeric", month: "long", year: "numeric", timeZone });
13546
+ const time = new Intl.DateTimeFormat(locale, {
13547
+ hour: "2-digit",
13548
+ minute: "2-digit",
13549
+ hour12: false,
13550
+ timeZone,
13551
+ timeZoneName: "short"
13552
+ });
13553
+ const parts = (date) => {
13554
+ const p2 = time.formatToParts(date);
13555
+ const hhmm = p2.filter((x2) => x2.type === "hour" || x2.type === "minute").map((x2) => x2.value).join(":");
13556
+ return { hhmm, zone: p2.find((x2) => x2.type === "timeZoneName")?.value ?? timeZone };
13557
+ };
13558
+ const start = new Date(session.startsAt);
13559
+ const from = parts(start);
13560
+ if (!session.endsAt) return `${day.format(start)}, a las ${from.hhmm} (${from.zone})`;
13561
+ const end = new Date(session.endsAt);
13562
+ const to = parts(end);
13563
+ if (day.format(start) === day.format(end)) {
13564
+ return `${day.format(start)}, de ${from.hhmm} a ${to.hhmm} (${from.zone})`;
13565
+ }
13566
+ return `del ${day.format(start)}, ${from.hhmm} al ${day.format(end)}, ${to.hhmm} (${from.zone})`;
13567
+ }
13568
+ var DEFAULT_COURSE_SCHEDULE_LABELS = {
13569
+ modality: { IN_PERSON: "Presencial", WEBINAR: "Webinar, online y en directo" },
13570
+ dates: "Fechas",
13571
+ place: "Lugar",
13572
+ session: formatSession
13573
+ };
13574
+ function CourseSchedule({
13575
+ course,
13576
+ heading,
13577
+ headingLevel = 2,
13578
+ headingId = "course-schedule-heading",
13579
+ labels,
13580
+ locale = "es-ES",
13581
+ className,
13582
+ headingClassName,
13583
+ bodyClassName
13584
+ }) {
13585
+ const schedule = course.schedule;
13586
+ if (!schedule) return null;
13587
+ const text3 = { ...DEFAULT_COURSE_SCHEDULE_LABELS, ...labels };
13588
+ const place = [schedule.locationName, schedule.locationAddress].filter(Boolean).join(", ");
13589
+ const hasHeading = heading !== void 0 && heading !== null && heading !== "";
13590
+ const Tag = `h${headingLevel}`;
13591
+ const body3 = slotClassName("", "text-sm", bodyClassName);
13592
+ return /* @__PURE__ */ jsxs4(
13593
+ "section",
13594
+ {
13595
+ "data-slot": "course-schedule",
13596
+ "data-modality": schedule.modality,
13597
+ "aria-labelledby": hasHeading ? headingId : void 0,
13598
+ className: slotClassName("space-y-3", "", className),
13599
+ children: [
13600
+ hasHeading ? /* @__PURE__ */ jsx4(Tag, { id: headingId, className: slotClassName("", "text-lg font-semibold", headingClassName), children: heading }) : null,
13601
+ /* @__PURE__ */ jsx4("p", { "data-slot": "course-schedule-modality", className: body3, children: text3.modality[schedule.modality] }),
13602
+ schedule.sessions.length > 0 ? /* @__PURE__ */ jsxs4("div", { "data-slot": "course-schedule-dates", className: body3, children: [
13603
+ /* @__PURE__ */ jsx4("p", { className: "font-medium", children: text3.dates }),
13604
+ /* @__PURE__ */ jsx4("ul", { className: "list-disc space-y-1 pl-5", children: schedule.sessions.map((session) => /* @__PURE__ */ jsx4("li", { "data-slot": "course-schedule-session", children: /* @__PURE__ */ jsx4("time", { dateTime: session.startsAt, children: text3.session(session, schedule.timeZone, locale) }) }, session.startsAt)) })
13605
+ ] }) : null,
13606
+ place ? /* @__PURE__ */ jsxs4("div", { "data-slot": "course-schedule-place", className: body3, children: [
13607
+ /* @__PURE__ */ jsx4("p", { className: "font-medium", children: text3.place }),
13608
+ /* @__PURE__ */ jsx4("address", { className: "not-italic", children: place })
13609
+ ] }) : null,
13610
+ schedule.attendanceNotes ? /* @__PURE__ */ jsx4("p", { "data-slot": "course-schedule-notes", className: slotClassName("whitespace-pre-line", "text-sm", bodyClassName), children: schedule.attendanceNotes }) : null
13611
+ ]
13612
+ }
13613
+ );
13614
+ }
13615
+
13616
+ // src/components/legal-document.tsx
13617
+ import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
13544
13618
  function isVisiblyEmpty2(html5) {
13545
13619
  if (/<(img|iframe|hr)\b/i.test(html5)) return false;
13546
13620
  return html5.replace(/<[^>]*>/g, "").trim() === "";
@@ -13559,17 +13633,17 @@ function LegalDocument({
13559
13633
  const hasFallback = fallback !== void 0 && fallback !== null && fallback !== false;
13560
13634
  if (isEmpty && !hasFallback) return null;
13561
13635
  const hasTitle = title !== void 0 && title !== null && title !== "";
13562
- return /* @__PURE__ */ jsxs4(
13636
+ return /* @__PURE__ */ jsxs5(
13563
13637
  "article",
13564
13638
  {
13565
13639
  "data-slot": "legal-document",
13566
13640
  "aria-labelledby": hasTitle ? titleId : void 0,
13567
13641
  className: slotClassName("space-y-6", "", className),
13568
13642
  children: [
13569
- hasTitle && /* @__PURE__ */ jsx4("h1", { id: titleId, className: slotClassName("", "text-3xl font-bold", titleClassName), children: title }),
13643
+ hasTitle && /* @__PURE__ */ jsx5("h1", { id: titleId, className: slotClassName("", "text-3xl font-bold", titleClassName), children: title }),
13570
13644
  isEmpty ? fallback : (
13571
13645
  // `html` is already sanitised by `markdownToSafeHtml` — SafeHtml only maps it.
13572
- /* @__PURE__ */ jsx4(
13646
+ /* @__PURE__ */ jsx5(
13573
13647
  SafeHtml,
13574
13648
  {
13575
13649
  html: html5,
@@ -13585,7 +13659,7 @@ function LegalDocument({
13585
13659
  }
13586
13660
 
13587
13661
  // src/components/lesson-preview.tsx
13588
- import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
13662
+ import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
13589
13663
  var DEFAULT_LESSON_PREVIEW_LABELS = {
13590
13664
  badge: "Vista previa gratuita",
13591
13665
  player: "V\xEDdeo",
@@ -13628,15 +13702,15 @@ function LessonPreview({
13628
13702
  const html5 = markdownToSafeHtml(lesson.content);
13629
13703
  const hasBody = html5 !== null && html5 !== "" && !isVisiblyEmpty3(html5);
13630
13704
  const duration = typeof lesson.durationSeconds === "number" && lesson.durationSeconds > 0 ? clock(lesson.durationSeconds) : null;
13631
- return /* @__PURE__ */ jsxs5(
13705
+ return /* @__PURE__ */ jsxs6(
13632
13706
  "article",
13633
13707
  {
13634
13708
  "data-slot": "lesson-preview",
13635
13709
  "aria-labelledby": headingId,
13636
13710
  className: slotClassName("space-y-6", "", className),
13637
13711
  children: [
13638
- /* @__PURE__ */ jsxs5("header", { className: "space-y-2", children: [
13639
- /* @__PURE__ */ jsx5(
13712
+ /* @__PURE__ */ jsxs6("header", { className: "space-y-2", children: [
13713
+ /* @__PURE__ */ jsx6(
13640
13714
  "span",
13641
13715
  {
13642
13716
  "data-slot": "lesson-preview-badge",
@@ -13644,7 +13718,7 @@ function LessonPreview({
13644
13718
  children: labels.badge
13645
13719
  }
13646
13720
  ),
13647
- /* @__PURE__ */ jsx5(
13721
+ /* @__PURE__ */ jsx6(
13648
13722
  Tag,
13649
13723
  {
13650
13724
  id: headingId,
@@ -13652,12 +13726,12 @@ function LessonPreview({
13652
13726
  children: lesson.title
13653
13727
  }
13654
13728
  ),
13655
- duration && /* @__PURE__ */ jsxs5("p", { className: "text-sm text-muted-foreground", children: [
13656
- /* @__PURE__ */ jsxs5("span", { className: "sr-only", children: [
13729
+ duration && /* @__PURE__ */ jsxs6("p", { className: "text-sm text-muted-foreground", children: [
13730
+ /* @__PURE__ */ jsxs6("span", { className: "sr-only", children: [
13657
13731
  labels.duration,
13658
13732
  ": "
13659
13733
  ] }),
13660
- /* @__PURE__ */ jsx5(
13734
+ /* @__PURE__ */ jsx6(
13661
13735
  "time",
13662
13736
  {
13663
13737
  "data-slot": "lesson-preview-duration",
@@ -13668,12 +13742,12 @@ function LessonPreview({
13668
13742
  )
13669
13743
  ] })
13670
13744
  ] }),
13671
- video && /* @__PURE__ */ jsx5(
13745
+ video && /* @__PURE__ */ jsx6(
13672
13746
  "div",
13673
13747
  {
13674
13748
  "data-slot": "lesson-preview-player",
13675
13749
  className: "aspect-video w-full overflow-hidden rounded-xl border border-border bg-black",
13676
- children: /* @__PURE__ */ jsx5(
13750
+ children: /* @__PURE__ */ jsx6(
13677
13751
  "iframe",
13678
13752
  {
13679
13753
  src: video.embedUrl,
@@ -13687,7 +13761,7 @@ function LessonPreview({
13687
13761
  )
13688
13762
  }
13689
13763
  ),
13690
- hasBody && /* @__PURE__ */ jsx5("div", { "data-slot": "lesson-preview-content", children: /* @__PURE__ */ jsx5(
13764
+ hasBody && /* @__PURE__ */ jsx6("div", { "data-slot": "lesson-preview-content", children: /* @__PURE__ */ jsx6(
13691
13765
  SafeHtml,
13692
13766
  {
13693
13767
  html: html5,
@@ -13706,7 +13780,7 @@ import { cn as cn3 } from "@reblu/site-ui/utils";
13706
13780
  // src/components/_page-parts.tsx
13707
13781
  import { cn as cn2 } from "@reblu/site-ui/utils";
13708
13782
  import { buttonVariants } from "@reblu/site-ui/button-variants";
13709
- import { Fragment as Fragment3, jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
13783
+ import { Fragment as Fragment3, jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
13710
13784
  var KNOWN_BUTTON_VARIANTS = /* @__PURE__ */ new Set([
13711
13785
  "default",
13712
13786
  "destructive",
@@ -13719,11 +13793,11 @@ function toButtonVariant(variant) {
13719
13793
  return variant && KNOWN_BUTTON_VARIANTS.has(variant) ? variant : "default";
13720
13794
  }
13721
13795
  function PageHero({ page }) {
13722
- return /* @__PURE__ */ jsxs6("header", { className: "space-y-4", children: [
13723
- page.category && /* @__PURE__ */ jsx6("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 }),
13724
- /* @__PURE__ */ jsx6("h1", { className: "text-4xl font-bold tracking-tight", children: page.title }),
13725
- page.subtitle && /* @__PURE__ */ jsx6("p", { className: "text-lg text-muted-foreground", children: page.subtitle }),
13726
- page.coverImageUrl && /* @__PURE__ */ jsx6("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx6(
13796
+ return /* @__PURE__ */ jsxs7("header", { className: "space-y-4", children: [
13797
+ page.category && /* @__PURE__ */ jsx7("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 }),
13798
+ /* @__PURE__ */ jsx7("h1", { className: "text-4xl font-bold tracking-tight", children: page.title }),
13799
+ page.subtitle && /* @__PURE__ */ jsx7("p", { className: "text-lg text-muted-foreground", children: page.subtitle }),
13800
+ page.coverImageUrl && /* @__PURE__ */ jsx7("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx7(
13727
13801
  "img",
13728
13802
  {
13729
13803
  src: page.coverImageUrl,
@@ -13737,7 +13811,7 @@ function PageHero({ page }) {
13737
13811
  function SectionCta({ section }) {
13738
13812
  if (!section.ctaLabel || !section.ctaUrl) return null;
13739
13813
  const variant = toButtonVariant(section.ctaVariant);
13740
- return /* @__PURE__ */ jsx6("div", { className: "pt-2", children: /* @__PURE__ */ jsx6(
13814
+ return /* @__PURE__ */ jsx7("div", { className: "pt-2", children: /* @__PURE__ */ jsx7(
13741
13815
  "a",
13742
13816
  {
13743
13817
  href: section.ctaUrl,
@@ -13752,46 +13826,46 @@ function SectionCta({ section }) {
13752
13826
  }
13753
13827
  function SectionImages({ section }) {
13754
13828
  if (section.images.length === 0) return null;
13755
- return /* @__PURE__ */ jsx6("div", { className: cn2("grid gap-4", section.images.length > 1 ? "sm:grid-cols-2" : "grid-cols-1"), children: section.images.map((img) => /* @__PURE__ */ jsxs6("figure", { className: "space-y-1", children: [
13756
- /* @__PURE__ */ jsx6("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx6("img", { src: img.url, alt: img.alt, loading: "lazy", className: "h-full w-full object-cover" }) }),
13757
- img.caption && /* @__PURE__ */ jsx6("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
13829
+ return /* @__PURE__ */ jsx7("div", { className: cn2("grid gap-4", section.images.length > 1 ? "sm:grid-cols-2" : "grid-cols-1"), children: section.images.map((img) => /* @__PURE__ */ jsxs7("figure", { className: "space-y-1", children: [
13830
+ /* @__PURE__ */ jsx7("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx7("img", { src: img.url, alt: img.alt, loading: "lazy", className: "h-full w-full object-cover" }) }),
13831
+ img.caption && /* @__PURE__ */ jsx7("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
13758
13832
  ] }, `${img.url}-${img.order}`)) });
13759
13833
  }
13760
13834
  function PageSectionBlock({ section }) {
13761
13835
  const imageFirst = section.layout === "IMAGE_TEXT";
13762
13836
  const sideBySide = section.layout === "TEXT_IMAGE" || section.layout === "IMAGE_TEXT";
13763
13837
  const hasImages = section.images.length > 0;
13764
- const body3 = /* @__PURE__ */ jsxs6("div", { className: "space-y-4", children: [
13765
- section.heading && /* @__PURE__ */ jsx6("h2", { className: "text-2xl font-bold", children: section.heading }),
13766
- /* @__PURE__ */ jsx6(SafeHtml, { html: sanitizeHtml(section.contentHtml), headingOffset: 2 }),
13767
- /* @__PURE__ */ jsx6(SectionCta, { section })
13838
+ const body3 = /* @__PURE__ */ jsxs7("div", { className: "space-y-4", children: [
13839
+ section.heading && /* @__PURE__ */ jsx7("h2", { className: "text-2xl font-bold", children: section.heading }),
13840
+ /* @__PURE__ */ jsx7(SafeHtml, { html: sanitizeHtml(section.contentHtml), headingOffset: 2 }),
13841
+ /* @__PURE__ */ jsx7(SectionCta, { section })
13768
13842
  ] });
13769
13843
  if (sideBySide && hasImages) {
13770
- return /* @__PURE__ */ jsx6("section", { className: "grid items-center gap-8 md:grid-cols-2", children: imageFirst ? /* @__PURE__ */ jsxs6(Fragment3, { children: [
13771
- /* @__PURE__ */ jsx6(SectionImages, { section }),
13844
+ return /* @__PURE__ */ jsx7("section", { className: "grid items-center gap-8 md:grid-cols-2", children: imageFirst ? /* @__PURE__ */ jsxs7(Fragment3, { children: [
13845
+ /* @__PURE__ */ jsx7(SectionImages, { section }),
13772
13846
  body3
13773
- ] }) : /* @__PURE__ */ jsxs6(Fragment3, { children: [
13847
+ ] }) : /* @__PURE__ */ jsxs7(Fragment3, { children: [
13774
13848
  body3,
13775
- /* @__PURE__ */ jsx6(SectionImages, { section })
13849
+ /* @__PURE__ */ jsx7(SectionImages, { section })
13776
13850
  ] }) });
13777
13851
  }
13778
- return /* @__PURE__ */ jsxs6("section", { className: "space-y-4", children: [
13852
+ return /* @__PURE__ */ jsxs7("section", { className: "space-y-4", children: [
13779
13853
  body3,
13780
- /* @__PURE__ */ jsx6(SectionImages, { section })
13854
+ /* @__PURE__ */ jsx7(SectionImages, { section })
13781
13855
  ] });
13782
13856
  }
13783
13857
  function PageSectionList({ sections }) {
13784
13858
  if (sections.length === 0) return null;
13785
13859
  const ordered = sections.slice().sort((a, b2) => a.order - b2.order);
13786
- return /* @__PURE__ */ jsx6("div", { className: "space-y-12", children: ordered.map((section) => /* @__PURE__ */ jsx6(PageSectionBlock, { section }, section.id)) });
13860
+ return /* @__PURE__ */ jsx7("div", { className: "space-y-12", children: ordered.map((section) => /* @__PURE__ */ jsx7(PageSectionBlock, { section }, section.id)) });
13787
13861
  }
13788
13862
 
13789
13863
  // src/components/treatment.tsx
13790
- import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
13864
+ import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
13791
13865
  function Treatment({ page, className }) {
13792
- return /* @__PURE__ */ jsxs7("article", { className: cn3("space-y-12", className), "data-slot": "treatment", children: [
13793
- /* @__PURE__ */ jsx7(PageHero, { page }),
13794
- /* @__PURE__ */ jsx7(PageSectionList, { sections: page.sections })
13866
+ return /* @__PURE__ */ jsxs8("article", { className: cn3("space-y-12", className), "data-slot": "treatment", children: [
13867
+ /* @__PURE__ */ jsx8(PageHero, { page }),
13868
+ /* @__PURE__ */ jsx8(PageSectionList, { sections: page.sections })
13795
13869
  ] });
13796
13870
  }
13797
13871
 
@@ -13800,11 +13874,11 @@ import { cn as cn5 } from "@reblu/site-ui/utils";
13800
13874
 
13801
13875
  // src/components/page-card-grid.tsx
13802
13876
  import { cn as cn4 } from "@reblu/site-ui/utils";
13803
- import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
13877
+ import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
13804
13878
  var defaultPageHref = (page) => `/${page.slug}`;
13805
13879
  var pageKey = (page) => `${page.category?.slug ?? ""}/${page.slug}`;
13806
13880
  function PageCardGrid(props) {
13807
- return /* @__PURE__ */ jsx8(PageCardGridSection, { ...props });
13881
+ return /* @__PURE__ */ jsx9(PageCardGridSection, { ...props });
13808
13882
  }
13809
13883
  function PageCardGridSection({
13810
13884
  pages,
@@ -13815,15 +13889,15 @@ function PageCardGridSection({
13815
13889
  }) {
13816
13890
  if (pages.length === 0) return null;
13817
13891
  const showHeading = keepEmptyHeading ? heading !== void 0 : !!heading;
13818
- return /* @__PURE__ */ jsxs8("section", { className: cn4("space-y-6", className), children: [
13819
- showHeading && /* @__PURE__ */ jsx8("h2", { className: "text-2xl font-bold", children: heading }),
13820
- /* @__PURE__ */ jsx8("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__ */ jsx8("li", { children: /* @__PURE__ */ jsxs8(
13892
+ return /* @__PURE__ */ jsxs9("section", { className: cn4("space-y-6", className), children: [
13893
+ showHeading && /* @__PURE__ */ jsx9("h2", { className: "text-2xl font-bold", children: heading }),
13894
+ /* @__PURE__ */ jsx9("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__ */ jsx9("li", { children: /* @__PURE__ */ jsxs9(
13821
13895
  "a",
13822
13896
  {
13823
13897
  href: pageHref(page),
13824
13898
  className: "group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
13825
13899
  children: [
13826
- page.coverImageUrl && /* @__PURE__ */ jsx8("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ jsx8(
13900
+ page.coverImageUrl && /* @__PURE__ */ jsx9("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ jsx9(
13827
13901
  "img",
13828
13902
  {
13829
13903
  src: page.coverImageUrl,
@@ -13832,9 +13906,9 @@ function PageCardGridSection({
13832
13906
  className: "h-full w-full object-cover transition-transform group-hover:scale-105"
13833
13907
  }
13834
13908
  ) }),
13835
- /* @__PURE__ */ jsxs8("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13836
- /* @__PURE__ */ jsx8("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
13837
- page.excerpt && /* @__PURE__ */ jsx8("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
13909
+ /* @__PURE__ */ jsxs9("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13910
+ /* @__PURE__ */ jsx9("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
13911
+ page.excerpt && /* @__PURE__ */ jsx9("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
13838
13912
  ] })
13839
13913
  ]
13840
13914
  }
@@ -13843,7 +13917,7 @@ function PageCardGridSection({
13843
13917
  }
13844
13918
 
13845
13919
  // src/components/parent-page.tsx
13846
- import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
13920
+ import { jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
13847
13921
  var defaultChildPageHref = (slug) => `/${slug}`;
13848
13922
  function ParentPage({
13849
13923
  page,
@@ -13858,10 +13932,10 @@ function ParentPage({
13858
13932
  const pages = childPages ?? treatments ?? [];
13859
13933
  const hrefFor = childPageHref ?? treatmentHref ?? defaultChildPageHref;
13860
13934
  const label = childPagesLabel ?? treatmentsLabel ?? "Treatments";
13861
- return /* @__PURE__ */ jsxs9("article", { className: cn5("space-y-12", className), "data-slot": "specialty", children: [
13862
- /* @__PURE__ */ jsx9(PageHero, { page }),
13863
- /* @__PURE__ */ jsx9(PageSectionList, { sections: page.sections }),
13864
- /* @__PURE__ */ jsx9(
13935
+ return /* @__PURE__ */ jsxs10("article", { className: cn5("space-y-12", className), "data-slot": "specialty", children: [
13936
+ /* @__PURE__ */ jsx10(PageHero, { page }),
13937
+ /* @__PURE__ */ jsx10(PageSectionList, { sections: page.sections }),
13938
+ /* @__PURE__ */ jsx10(
13865
13939
  PageCardGridSection,
13866
13940
  {
13867
13941
  pages,
@@ -13881,7 +13955,7 @@ import { cn as cn7 } from "@reblu/site-ui/utils";
13881
13955
 
13882
13956
  // src/components/professional-fields.tsx
13883
13957
  import { cn as cn6 } from "@reblu/site-ui/utils";
13884
- import { jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
13958
+ import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
13885
13959
  function ProfessionalFields({
13886
13960
  fields,
13887
13961
  variant = "profile",
@@ -13889,7 +13963,7 @@ function ProfessionalFields({
13889
13963
  }) {
13890
13964
  const shown = (fields ?? []).filter((f) => variant !== "card" || f.showOnCard);
13891
13965
  if (shown.length === 0) return null;
13892
- return /* @__PURE__ */ jsx10(
13966
+ return /* @__PURE__ */ jsx11(
13893
13967
  "dl",
13894
13968
  {
13895
13969
  className: cn6(
@@ -13899,13 +13973,13 @@ function ProfessionalFields({
13899
13973
  ),
13900
13974
  "data-slot": "professional-fields",
13901
13975
  "data-variant": variant,
13902
- children: shown.map((field, index) => /* @__PURE__ */ jsxs10(
13976
+ children: shown.map((field, index) => /* @__PURE__ */ jsxs11(
13903
13977
  "div",
13904
13978
  {
13905
13979
  className: variant === "card" ? "flex justify-center gap-1" : "contents",
13906
13980
  children: [
13907
- /* @__PURE__ */ jsx10("dt", { className: "text-muted-foreground", children: field.label }),
13908
- /* @__PURE__ */ jsx10("dd", { className: "m-0 font-medium", children: field.value })
13981
+ /* @__PURE__ */ jsx11("dt", { className: "text-muted-foreground", children: field.label }),
13982
+ /* @__PURE__ */ jsx11("dd", { className: "m-0 font-medium", children: field.value })
13909
13983
  ]
13910
13984
  },
13911
13985
  `${field.label}-${index}`
@@ -13915,7 +13989,7 @@ function ProfessionalFields({
13915
13989
  }
13916
13990
 
13917
13991
  // src/components/profile-card.tsx
13918
- import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
13992
+ import { jsx as jsx12, jsxs as jsxs12 } from "react/jsx-runtime";
13919
13993
  function initials(name) {
13920
13994
  return name.split(/\s+/).filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
13921
13995
  }
@@ -13930,7 +14004,7 @@ function ProfileCard({
13930
14004
  className
13931
14005
  }) {
13932
14006
  const NameTag = href ? "a" : "span";
13933
- return /* @__PURE__ */ jsxs11(
14007
+ return /* @__PURE__ */ jsxs12(
13934
14008
  "article",
13935
14009
  {
13936
14010
  className: cn7(
@@ -13939,7 +14013,7 @@ function ProfileCard({
13939
14013
  ),
13940
14014
  "data-slot": "profile-card",
13941
14015
  children: [
13942
- /* @__PURE__ */ jsx11("div", { className: "relative h-24 w-24 overflow-hidden rounded-full bg-muted", children: imageUrl ? /* @__PURE__ */ jsx11("img", { src: imageUrl, alt: name, loading: "lazy", className: "h-full w-full object-cover" }) : /* @__PURE__ */ jsx11(
14016
+ /* @__PURE__ */ jsx12("div", { className: "relative h-24 w-24 overflow-hidden rounded-full bg-muted", children: imageUrl ? /* @__PURE__ */ jsx12("img", { src: imageUrl, alt: name, loading: "lazy", className: "h-full w-full object-cover" }) : /* @__PURE__ */ jsx12(
13943
14017
  "span",
13944
14018
  {
13945
14019
  className: "flex h-full w-full items-center justify-center text-2xl font-semibold text-muted-foreground",
@@ -13947,12 +14021,12 @@ function ProfileCard({
13947
14021
  children: initials(name)
13948
14022
  }
13949
14023
  ) }),
13950
- /* @__PURE__ */ jsxs11("div", { className: "space-y-1", children: [
13951
- /* @__PURE__ */ jsx11("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ jsx11(NameTag, { ...href ? { href, className: "transition-colors hover:text-primary" } : {}, children: name }) }),
13952
- role && /* @__PURE__ */ jsx11("p", { className: "text-sm text-muted-foreground", children: role })
14024
+ /* @__PURE__ */ jsxs12("div", { className: "space-y-1", children: [
14025
+ /* @__PURE__ */ jsx12("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ jsx12(NameTag, { ...href ? { href, className: "transition-colors hover:text-primary" } : {}, children: name }) }),
14026
+ role && /* @__PURE__ */ jsx12("p", { className: "text-sm text-muted-foreground", children: role })
13953
14027
  ] }),
13954
- /* @__PURE__ */ jsx11(ProfessionalFields, { fields, variant: "card" }),
13955
- specialties.length > 0 && /* @__PURE__ */ jsx11("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ jsx11(
14028
+ /* @__PURE__ */ jsx12(ProfessionalFields, { fields, variant: "card" }),
14029
+ specialties.length > 0 && /* @__PURE__ */ jsx12("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ jsx12(
13956
14030
  "li",
13957
14031
  {
13958
14032
  className: "inline-flex items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground",
@@ -13960,28 +14034,107 @@ function ProfileCard({
13960
14034
  },
13961
14035
  s2
13962
14036
  )) }),
13963
- bio && /* @__PURE__ */ jsx11("p", { className: "text-sm text-muted-foreground", children: bio })
14037
+ bio && /* @__PURE__ */ jsx12("p", { className: "text-sm text-muted-foreground", children: bio })
13964
14038
  ]
13965
14039
  }
13966
14040
  );
13967
14041
  }
13968
14042
 
13969
- // src/components/product-card.tsx
14043
+ // src/components/linked-pages.tsx
13970
14044
  import { cn as cn8 } from "@reblu/site-ui/utils";
13971
- import { jsx as jsx12, jsxs as jsxs12 } from "react/jsx-runtime";
14045
+
14046
+ // src/lib/page-links.ts
14047
+ function linkKey(link) {
14048
+ return `${link.category?.slug ?? ""}/${link.slug}`;
14049
+ }
14050
+ function linkFilterOptions(items) {
14051
+ const seen = /* @__PURE__ */ new Map();
14052
+ for (const item of items) {
14053
+ for (const link of item.links ?? []) {
14054
+ const key2 = linkKey(link);
14055
+ if (!seen.has(key2)) seen.set(key2, { key: key2, label: link.title });
14056
+ }
14057
+ }
14058
+ return [...seen.values()];
14059
+ }
14060
+ function filterByLink(items, key2) {
14061
+ if (key2 === null) return items;
14062
+ return items.filter((item) => (item.links ?? []).some((link) => linkKey(link) === key2));
14063
+ }
14064
+
14065
+ // src/components/linked-pages.tsx
14066
+ import { jsx as jsx13, jsxs as jsxs13 } from "react/jsx-runtime";
14067
+ function LinkedPagesGrid({
14068
+ pages,
14069
+ pageHref = (page) => `/${page.slug}`,
14070
+ heading,
14071
+ className
14072
+ }) {
14073
+ if (!pages || pages.length === 0) return null;
14074
+ return /* @__PURE__ */ jsxs13("section", { className: cn8("space-y-6", className), "data-slot": "linked-pages", children: [
14075
+ heading && /* @__PURE__ */ jsx13("h2", { className: "text-2xl font-bold", children: heading }),
14076
+ /* @__PURE__ */ jsx13("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__ */ jsx13("li", { children: /* @__PURE__ */ jsxs13(
14077
+ "a",
14078
+ {
14079
+ href: pageHref(page),
14080
+ className: "group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
14081
+ children: [
14082
+ page.coverImageUrl && /* @__PURE__ */ jsx13("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ jsx13(
14083
+ "img",
14084
+ {
14085
+ src: page.coverImageUrl,
14086
+ alt: "",
14087
+ loading: "lazy",
14088
+ className: "h-full w-full object-cover transition-transform group-hover:scale-105"
14089
+ }
14090
+ ) }),
14091
+ /* @__PURE__ */ jsxs13("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
14092
+ /* @__PURE__ */ jsx13("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
14093
+ page.excerpt && /* @__PURE__ */ jsx13("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
14094
+ ] })
14095
+ ]
14096
+ }
14097
+ ) }, linkKey(page))) })
14098
+ ] });
14099
+ }
14100
+ function TeamGrid({
14101
+ members,
14102
+ memberHref,
14103
+ heading,
14104
+ className
14105
+ }) {
14106
+ if (!members || members.length === 0) return null;
14107
+ return /* @__PURE__ */ jsxs13("section", { className: cn8("space-y-6", className), "data-slot": "team-grid", children: [
14108
+ heading && /* @__PURE__ */ jsx13("h2", { className: "text-2xl font-bold", children: heading }),
14109
+ /* @__PURE__ */ jsx13("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__ */ jsx13("li", { children: /* @__PURE__ */ jsx13(
14110
+ ProfileCard,
14111
+ {
14112
+ name: member.title,
14113
+ role: member.role ?? void 0,
14114
+ imageUrl: member.coverImageUrl ?? void 0,
14115
+ href: memberHref?.(member),
14116
+ className: "h-full"
14117
+ }
14118
+ ) }, linkKey(member))) })
14119
+ ] });
14120
+ }
14121
+
14122
+ // src/components/product-card.tsx
14123
+ import { cn as cn9 } from "@reblu/site-ui/utils";
14124
+ import { jsx as jsx14, jsxs as jsxs14 } from "react/jsx-runtime";
13972
14125
  function ProductCard({ product, href, currencyCode = "EUR", locale, className }) {
13973
14126
  const image = product.images.find((i) => i.isPrimary) ?? product.images[0];
13974
14127
  const hasDiscount = product.comparePrice != null && product.comparePrice > product.price;
13975
- return /* @__PURE__ */ jsxs12(
14128
+ return /* @__PURE__ */ jsxs14(
13976
14129
  "article",
13977
14130
  {
13978
- className: cn8(
14131
+ className: cn9(
13979
14132
  "group flex flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
13980
14133
  className
13981
14134
  ),
13982
14135
  "data-slot": "product-card",
13983
14136
  children: [
13984
- /* @__PURE__ */ jsx12("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ jsx12(
14137
+ /* @__PURE__ */ jsx14("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ jsx14(
13985
14138
  "img",
13986
14139
  {
13987
14140
  src: image.url,
@@ -13989,14 +14142,14 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
13989
14142
  loading: "lazy",
13990
14143
  className: "h-full w-full object-cover transition-transform group-hover:scale-105"
13991
14144
  }
13992
- ) : /* @__PURE__ */ jsx12("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
13993
- /* @__PURE__ */ jsxs12("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13994
- product.category && /* @__PURE__ */ jsx12("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 }),
13995
- /* @__PURE__ */ jsx12("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ jsx12("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
13996
- product.shortDescription && /* @__PURE__ */ jsx12("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
13997
- /* @__PURE__ */ jsxs12("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
13998
- /* @__PURE__ */ jsx12("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
13999
- hasDiscount && /* @__PURE__ */ jsx12("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
14145
+ ) : /* @__PURE__ */ jsx14("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
14146
+ /* @__PURE__ */ jsxs14("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
14147
+ product.category && /* @__PURE__ */ jsx14("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 }),
14148
+ /* @__PURE__ */ jsx14("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ jsx14("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
14149
+ product.shortDescription && /* @__PURE__ */ jsx14("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
14150
+ /* @__PURE__ */ jsxs14("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
14151
+ /* @__PURE__ */ jsx14("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
14152
+ hasDiscount && /* @__PURE__ */ jsx14("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
14000
14153
  ] })
14001
14154
  ] })
14002
14155
  ]
@@ -14198,7 +14351,7 @@ var __iconNode8 = [
14198
14351
  var Truck = createLucideIcon("truck", __iconNode8);
14199
14352
 
14200
14353
  // src/components/product-trust-items.tsx
14201
- import { jsx as jsx13, jsxs as jsxs13 } from "react/jsx-runtime";
14354
+ import { jsx as jsx15, jsxs as jsxs15 } from "react/jsx-runtime";
14202
14355
  var DEFAULT_TRUST_ICONS = Object.freeze({
14203
14356
  shipping: Truck,
14204
14357
  returns: RotateCcw,
@@ -14232,17 +14385,17 @@ function ProductTrustItems({
14232
14385
  return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
14233
14386
  });
14234
14387
  if (rows.length === 0) return null;
14235
- return /* @__PURE__ */ jsx13(List, { "data-slot": "product-trust-items", className: slotClassName("space-y-2.5", "", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ jsxs13("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
14236
- /* @__PURE__ */ jsx13(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
14237
- /* @__PURE__ */ jsx13("span", { children: text3 })
14388
+ return /* @__PURE__ */ jsx15(List, { "data-slot": "product-trust-items", className: slotClassName("space-y-2.5", "", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ jsxs15("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
14389
+ /* @__PURE__ */ jsx15(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
14390
+ /* @__PURE__ */ jsx15("span", { children: text3 })
14238
14391
  ] }, key2)) });
14239
14392
  }
14240
14393
 
14241
14394
  // src/components/faq-accordion.tsx
14242
- import { cn as cn9 } from "@reblu/site-ui/utils";
14395
+ import { cn as cn10 } from "@reblu/site-ui/utils";
14243
14396
 
14244
14397
  // src/components/_heading.tsx
14245
- import { jsx as jsx14 } from "react/jsx-runtime";
14398
+ import { jsx as jsx16 } from "react/jsx-runtime";
14246
14399
  function nextHeadingLevel(level) {
14247
14400
  return Math.min(level + 1, 6);
14248
14401
  }
@@ -14252,11 +14405,11 @@ function Heading({
14252
14405
  children: children2
14253
14406
  }) {
14254
14407
  const Tag = `h${level}`;
14255
- return /* @__PURE__ */ jsx14(Tag, { className, children: children2 });
14408
+ return /* @__PURE__ */ jsx16(Tag, { className, children: children2 });
14256
14409
  }
14257
14410
 
14258
14411
  // src/components/faq-accordion.tsx
14259
- import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
14412
+ import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
14260
14413
  function FaqAccordion({
14261
14414
  items,
14262
14415
  heading,
@@ -14267,18 +14420,18 @@ function FaqAccordion({
14267
14420
  }) {
14268
14421
  const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
14269
14422
  if (visible.length === 0) return null;
14270
- return /* @__PURE__ */ jsxs14("div", { className: cn9("space-y-4", className), "data-slot": "faq-accordion", children: [
14271
- heading && /* @__PURE__ */ jsx15(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
14272
- /* @__PURE__ */ jsx15("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ jsxs14(
14423
+ return /* @__PURE__ */ jsxs16("div", { className: cn10("space-y-4", className), "data-slot": "faq-accordion", children: [
14424
+ heading && /* @__PURE__ */ jsx17(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
14425
+ /* @__PURE__ */ jsx17("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ jsxs16(
14273
14426
  "details",
14274
14427
  {
14275
14428
  className: "group px-4",
14276
14429
  "data-slot": "faq-item",
14277
14430
  ...defaultOpen.includes(index) ? { open: true } : {},
14278
14431
  children: [
14279
- /* @__PURE__ */ jsxs14("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: [
14280
- questionHeadingLevel ? /* @__PURE__ */ jsx15(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ jsx15("span", { children: item.q }),
14281
- /* @__PURE__ */ jsx15(
14432
+ /* @__PURE__ */ jsxs16("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: [
14433
+ questionHeadingLevel ? /* @__PURE__ */ jsx17(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ jsx17("span", { children: item.q }),
14434
+ /* @__PURE__ */ jsx17(
14282
14435
  "span",
14283
14436
  {
14284
14437
  "aria-hidden": "true",
@@ -14287,7 +14440,7 @@ function FaqAccordion({
14287
14440
  }
14288
14441
  )
14289
14442
  ] }),
14290
- /* @__PURE__ */ jsx15("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
14443
+ /* @__PURE__ */ jsx17("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
14291
14444
  ]
14292
14445
  },
14293
14446
  index
@@ -14296,7 +14449,7 @@ function FaqAccordion({
14296
14449
  }
14297
14450
 
14298
14451
  // src/components/trust-badges.tsx
14299
- import { cn as cn10 } from "@reblu/site-ui/utils";
14452
+ import { cn as cn11 } from "@reblu/site-ui/utils";
14300
14453
 
14301
14454
  // src/lib/trust-badge-media.ts
14302
14455
  var DEFAULT_ADHESION_NUMBER_LABEL = "N.\xBA de adhesi\xF3n";
@@ -14324,7 +14477,7 @@ function trustBadgeAlt(badge, numberLabel = DEFAULT_ADHESION_NUMBER_LABEL) {
14324
14477
  }
14325
14478
 
14326
14479
  // src/components/trust-badges.tsx
14327
- import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
14480
+ import { jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
14328
14481
  var DEFAULT_TRUST_BADGE_HEADINGS = Object.freeze(
14329
14482
  {
14330
14483
  PARTNER: "Colaboradores",
@@ -14353,18 +14506,18 @@ function BadgeContent({ badge, logoClassName }) {
14353
14506
  if (src) {
14354
14507
  return (
14355
14508
  // eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
14356
- /* @__PURE__ */ jsx16(
14509
+ /* @__PURE__ */ jsx18(
14357
14510
  "img",
14358
14511
  {
14359
14512
  src,
14360
14513
  alt: trustBadgeAlt(badge),
14361
14514
  loading: "lazy",
14362
- className: cn10("h-12 w-auto object-contain", logoClassName)
14515
+ className: cn11("h-12 w-auto object-contain", logoClassName)
14363
14516
  }
14364
14517
  )
14365
14518
  );
14366
14519
  }
14367
- return /* @__PURE__ */ jsx16("span", { className: "text-sm font-medium", children: badge.name });
14520
+ return /* @__PURE__ */ jsx18("span", { className: "text-sm font-medium", children: badge.name });
14368
14521
  }
14369
14522
  function TrustBadges({
14370
14523
  badges,
@@ -14392,14 +14545,14 @@ function TrustBadges({
14392
14545
  if (groups.length === 0) return null;
14393
14546
  const hasHeading = heading !== void 0 && heading !== null && heading !== "";
14394
14547
  const groupHeadingLevel = hasHeading ? nextHeadingLevel(headingLevel) : headingLevel;
14395
- const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ jsxs15(
14548
+ const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ jsxs17(
14396
14549
  "div",
14397
14550
  {
14398
14551
  "data-slot": "trust-badge-group",
14399
14552
  "data-type": type,
14400
- className: cn10("space-y-3", groupClassName),
14553
+ className: cn11("space-y-3", groupClassName),
14401
14554
  children: [
14402
- groupHeading ? /* @__PURE__ */ jsx16(
14555
+ groupHeading ? /* @__PURE__ */ jsx18(
14403
14556
  Heading,
14404
14557
  {
14405
14558
  level: groupHeadingLevel,
@@ -14411,30 +14564,30 @@ function TrustBadges({
14411
14564
  children: groupHeading
14412
14565
  }
14413
14566
  ) : null,
14414
- /* @__PURE__ */ jsx16("ul", { className: cn10("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
14567
+ /* @__PURE__ */ jsx18("ul", { className: cn11("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
14415
14568
  const href = safeHref(badge.url);
14416
- return /* @__PURE__ */ jsx16("li", { children: href ? /* @__PURE__ */ jsxs15("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14417
- /* @__PURE__ */ jsx16(BadgeContent, { badge, logoClassName }),
14569
+ return /* @__PURE__ */ jsx18("li", { children: href ? /* @__PURE__ */ jsxs17("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14570
+ /* @__PURE__ */ jsx18(BadgeContent, { badge, logoClassName }),
14418
14571
  " ",
14419
- /* @__PURE__ */ jsx16("span", { className: "sr-only", children: newWindowLabel })
14420
- ] }) : /* @__PURE__ */ jsx16(BadgeContent, { badge, logoClassName }) }, badge.id);
14572
+ /* @__PURE__ */ jsx18("span", { className: "sr-only", children: newWindowLabel })
14573
+ ] }) : /* @__PURE__ */ jsx18(BadgeContent, { badge, logoClassName }) }, badge.id);
14421
14574
  }) })
14422
14575
  ]
14423
14576
  },
14424
14577
  type
14425
14578
  ));
14426
14579
  if (!hasHeading) {
14427
- return /* @__PURE__ */ jsx16("div", { "data-slot": "trust-badges", className: cn10("space-y-6", className), children: content });
14580
+ return /* @__PURE__ */ jsx18("div", { "data-slot": "trust-badges", className: cn11("space-y-6", className), children: content });
14428
14581
  }
14429
14582
  const Tag = `h${headingLevel}`;
14430
- return /* @__PURE__ */ jsxs15(
14583
+ return /* @__PURE__ */ jsxs17(
14431
14584
  "section",
14432
14585
  {
14433
14586
  "data-slot": "trust-badges",
14434
14587
  "aria-labelledby": headingId,
14435
- className: cn10("space-y-6", className),
14588
+ className: cn11("space-y-6", className),
14436
14589
  children: [
14437
- /* @__PURE__ */ jsx16(
14590
+ /* @__PURE__ */ jsx18(
14438
14591
  Tag,
14439
14592
  {
14440
14593
  id: headingId,
@@ -14449,8 +14602,8 @@ function TrustBadges({
14449
14602
  }
14450
14603
 
14451
14604
  // src/components/arbitration-badge.tsx
14452
- import { cn as cn11 } from "@reblu/site-ui/utils";
14453
- import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
14605
+ import { cn as cn12 } from "@reblu/site-ui/utils";
14606
+ import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
14454
14607
  function isArbitrationBadge(value) {
14455
14608
  if (typeof value !== "object" || value === null) return false;
14456
14609
  const entry = value;
@@ -14468,35 +14621,35 @@ function ArbitrationBadge({
14468
14621
  if (!Array.isArray(badges)) return null;
14469
14622
  const items = badges.filter(isArbitrationBadge);
14470
14623
  if (items.length === 0) return null;
14471
- return /* @__PURE__ */ jsx17(
14624
+ return /* @__PURE__ */ jsx19(
14472
14625
  "ul",
14473
14626
  {
14474
14627
  "data-slot": "arbitration-badges",
14475
- className: cn11("flex flex-wrap items-start gap-6", className),
14628
+ className: cn12("flex flex-wrap items-start gap-6", className),
14476
14629
  children: items.map((badge) => {
14477
14630
  const src = safeLogoSrc(badge.logoUrl);
14478
14631
  const href = safeHref(badge.url);
14479
14632
  const number2 = adhesionNumberOf(badge);
14480
- const caption = number2 && (showNumber || !src) ? /* @__PURE__ */ jsx17("span", { className: cn11("text-xs", numberClassName), "aria-hidden": src ? "true" : void 0, children: `${numberLabel} ${number2}` }) : null;
14481
- const content = /* @__PURE__ */ jsxs16("span", { className: "inline-flex flex-col items-center gap-1 text-center", children: [
14633
+ const caption = number2 && (showNumber || !src) ? /* @__PURE__ */ jsx19("span", { className: cn12("text-xs", numberClassName), "aria-hidden": src ? "true" : void 0, children: `${numberLabel} ${number2}` }) : null;
14634
+ const content = /* @__PURE__ */ jsxs18("span", { className: "inline-flex flex-col items-center gap-1 text-center", children: [
14482
14635
  src ? (
14483
14636
  // eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
14484
- /* @__PURE__ */ jsx17(
14637
+ /* @__PURE__ */ jsx19(
14485
14638
  "img",
14486
14639
  {
14487
14640
  src,
14488
14641
  alt: trustBadgeAlt(badge, numberLabel),
14489
14642
  loading: "lazy",
14490
- className: cn11("h-16 w-auto object-contain", logoClassName)
14643
+ className: cn12("h-16 w-auto object-contain", logoClassName)
14491
14644
  }
14492
14645
  )
14493
- ) : /* @__PURE__ */ jsx17("span", { className: "text-sm font-medium", children: badge.name }),
14646
+ ) : /* @__PURE__ */ jsx19("span", { className: "text-sm font-medium", children: badge.name }),
14494
14647
  caption
14495
14648
  ] });
14496
- return /* @__PURE__ */ jsx17("li", { "data-slot": "arbitration-badge", children: href ? /* @__PURE__ */ jsxs16("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14649
+ return /* @__PURE__ */ jsx19("li", { "data-slot": "arbitration-badge", children: href ? /* @__PURE__ */ jsxs18("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14497
14650
  content,
14498
14651
  " ",
14499
- /* @__PURE__ */ jsx17("span", { className: "sr-only", children: newWindowLabel })
14652
+ /* @__PURE__ */ jsx19("span", { className: "sr-only", children: newWindowLabel })
14500
14653
  ] }) : content }, badge.id);
14501
14654
  })
14502
14655
  }
@@ -14504,8 +14657,11 @@ function ArbitrationBadge({
14504
14657
  }
14505
14658
 
14506
14659
  // src/components/reviews.tsx
14507
- import { cn as cn12 } from "@reblu/site-ui/utils";
14508
- import { Fragment as Fragment4, jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
14660
+ import { cn as cn14 } from "@reblu/site-ui/utils";
14661
+
14662
+ // src/components/_review-card.tsx
14663
+ import { cn as cn13 } from "@reblu/site-ui/utils";
14664
+ import { jsx as jsx20, jsxs as jsxs19 } from "react/jsx-runtime";
14509
14665
  function isHttps(value) {
14510
14666
  if (typeof value !== "string") return false;
14511
14667
  try {
@@ -14515,7 +14671,7 @@ function isHttps(value) {
14515
14671
  return false;
14516
14672
  }
14517
14673
  }
14518
- function isUsable2(value) {
14674
+ function isUsableReview(value) {
14519
14675
  if (typeof value !== "object" || value === null) return false;
14520
14676
  const review = value;
14521
14677
  return typeof review.id === "string" && typeof review.authorName === "string" && review.authorName.trim() !== "" && typeof review.rating === "number" && Number.isInteger(review.rating) && review.rating >= 1 && review.rating <= 5 && typeof review.sourceName === "string" && isHttps(review.sourceUrl);
@@ -14528,7 +14684,7 @@ function formatDay(day, locale) {
14528
14684
  }
14529
14685
  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";
14530
14686
  function Stars({ rating }) {
14531
- return /* @__PURE__ */ jsx18("div", { role: "img", "aria-label": `${rating} de 5 estrellas`, className: "flex gap-0.5", children: [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ jsx18(
14687
+ return /* @__PURE__ */ jsx20("div", { role: "img", "aria-label": `${rating} de 5 estrellas`, className: "flex gap-0.5", children: [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ jsx20(
14532
14688
  "svg",
14533
14689
  {
14534
14690
  "aria-hidden": "true",
@@ -14540,11 +14696,56 @@ function Stars({ rating }) {
14540
14696
  stroke: "currentColor",
14541
14697
  strokeWidth: "1.5",
14542
14698
  strokeLinejoin: "round",
14543
- children: /* @__PURE__ */ jsx18("path", { d: STAR_PATH })
14699
+ children: /* @__PURE__ */ jsx20("path", { d: STAR_PATH })
14544
14700
  },
14545
14701
  n
14546
14702
  )) });
14547
14703
  }
14704
+ function usableReviews(reviews) {
14705
+ return Array.isArray(reviews) ? reviews.filter(isUsableReview) : [];
14706
+ }
14707
+ function ReviewCard({
14708
+ review,
14709
+ linkLabel,
14710
+ newWindowLabel,
14711
+ locale,
14712
+ className
14713
+ }) {
14714
+ const date = formatDay(review.reviewDate, locale);
14715
+ return /* @__PURE__ */ jsxs19(
14716
+ "article",
14717
+ {
14718
+ "data-slot": "review",
14719
+ "data-source": review.source,
14720
+ className: cn13("flex h-full flex-col gap-3 rounded-lg border p-5", className),
14721
+ children: [
14722
+ /* @__PURE__ */ jsx20(Stars, { rating: review.rating }),
14723
+ review.text && review.text.trim() !== "" ? /* @__PURE__ */ jsx20("blockquote", { className: "flex-1", children: /* @__PURE__ */ jsx20("p", { children: review.text }) }) : null,
14724
+ /* @__PURE__ */ jsxs19("footer", { className: "mt-auto space-y-1 text-sm", children: [
14725
+ /* @__PURE__ */ jsx20("p", { className: "font-semibold", children: review.authorName }),
14726
+ date ? /* @__PURE__ */ jsx20("time", { dateTime: review.reviewDate, className: "block text-muted-foreground", children: date }) : null,
14727
+ /* @__PURE__ */ jsxs19(
14728
+ "a",
14729
+ {
14730
+ href: review.sourceUrl,
14731
+ target: "_blank",
14732
+ rel: "noopener nofollow",
14733
+ className: "inline-flex underline underline-offset-4",
14734
+ children: [
14735
+ linkLabel(review.sourceName),
14736
+ " ",
14737
+ /* @__PURE__ */ jsx20("span", { className: "sr-only", children: newWindowLabel })
14738
+ ]
14739
+ }
14740
+ )
14741
+ ] })
14742
+ ]
14743
+ }
14744
+ );
14745
+ }
14746
+
14747
+ // src/components/reviews.tsx
14748
+ import { Fragment as Fragment4, jsx as jsx21, jsxs as jsxs20 } from "react/jsx-runtime";
14548
14749
  function Reviews({
14549
14750
  reviews,
14550
14751
  heading,
@@ -14561,11 +14762,10 @@ function Reviews({
14561
14762
  cardClassName,
14562
14763
  noticeClassName
14563
14764
  }) {
14564
- if (!Array.isArray(reviews) || reviews.length === 0) return null;
14565
- const usable = reviews.filter(isUsable2);
14765
+ const usable = usableReviews(reviews);
14566
14766
  if (usable.length === 0) return null;
14567
14767
  const hasNotice = notice !== void 0 && notice !== null && notice !== "";
14568
- const noticeNode = hasNotice ? /* @__PURE__ */ jsx18(
14768
+ const noticeNode = hasNotice ? /* @__PURE__ */ jsx21(
14569
14769
  "p",
14570
14770
  {
14571
14771
  "data-slot": "reviews-notice",
@@ -14573,68 +14773,47 @@ function Reviews({
14573
14773
  children: notice
14574
14774
  }
14575
14775
  ) : null;
14576
- const grid = /* @__PURE__ */ jsx18(
14776
+ const grid = /* @__PURE__ */ jsx21(
14577
14777
  "ul",
14578
14778
  {
14579
14779
  "data-slot": "reviews-grid",
14580
14780
  className: slotClassName("grid gap-6", "sm:grid-cols-2 lg:grid-cols-3", gridClassName),
14581
14781
  children: usable.map((review) => {
14582
- const date = formatDay(review.reviewDate, locale);
14583
- return /* @__PURE__ */ jsx18("li", { children: /* @__PURE__ */ jsxs17(
14584
- "article",
14782
+ return /* @__PURE__ */ jsx21("li", { children: /* @__PURE__ */ jsx21(
14783
+ ReviewCard,
14585
14784
  {
14586
- "data-slot": "review",
14587
- "data-source": review.source,
14588
- className: cn12("flex h-full flex-col gap-3 rounded-lg border p-5", cardClassName),
14589
- children: [
14590
- /* @__PURE__ */ jsx18(Stars, { rating: review.rating }),
14591
- review.text && review.text.trim() !== "" ? /* @__PURE__ */ jsx18("blockquote", { className: "flex-1", children: /* @__PURE__ */ jsx18("p", { children: review.text }) }) : null,
14592
- /* @__PURE__ */ jsxs17("footer", { className: "mt-auto space-y-1 text-sm", children: [
14593
- /* @__PURE__ */ jsx18("p", { className: "font-semibold", children: review.authorName }),
14594
- date ? /* @__PURE__ */ jsx18("time", { dateTime: review.reviewDate, className: "block text-muted-foreground", children: date }) : null,
14595
- /* @__PURE__ */ jsxs17(
14596
- "a",
14597
- {
14598
- href: review.sourceUrl,
14599
- target: "_blank",
14600
- rel: "noopener nofollow",
14601
- className: "inline-flex underline underline-offset-4",
14602
- children: [
14603
- linkLabel(review.sourceName),
14604
- " ",
14605
- /* @__PURE__ */ jsx18("span", { className: "sr-only", children: newWindowLabel })
14606
- ]
14607
- }
14608
- )
14609
- ] })
14610
- ]
14785
+ review,
14786
+ linkLabel,
14787
+ newWindowLabel,
14788
+ locale,
14789
+ className: cardClassName
14611
14790
  }
14612
14791
  ) }, review.id);
14613
14792
  })
14614
14793
  }
14615
14794
  );
14616
- const body3 = /* @__PURE__ */ jsxs17(Fragment4, { children: [
14795
+ const body3 = /* @__PURE__ */ jsxs20(Fragment4, { children: [
14617
14796
  noticePosition === "above" ? noticeNode : null,
14618
14797
  grid,
14619
14798
  noticePosition === "below" ? noticeNode : null
14620
14799
  ] });
14621
14800
  const hasHeading = heading !== void 0 && heading !== null && heading !== "";
14622
14801
  if (!hasHeading) {
14623
- return /* @__PURE__ */ jsx18("div", { "data-slot": "reviews", className: cn12("space-y-4", className), children: body3 });
14802
+ return /* @__PURE__ */ jsx21("div", { "data-slot": "reviews", className: cn14("space-y-4", className), children: body3 });
14624
14803
  }
14625
14804
  const Tag = `h${headingLevel}`;
14626
- return /* @__PURE__ */ jsxs17("section", { "data-slot": "reviews", "aria-labelledby": headingId, className: cn12("space-y-4", className), children: [
14627
- /* @__PURE__ */ jsx18(Tag, { id: headingId, className: slotClassName("", "text-xl font-semibold", headingClassName), children: heading }),
14805
+ return /* @__PURE__ */ jsxs20("section", { "data-slot": "reviews", "aria-labelledby": headingId, className: cn14("space-y-4", className), children: [
14806
+ /* @__PURE__ */ jsx21(Tag, { id: headingId, className: slotClassName("", "text-xl font-semibold", headingClassName), children: heading }),
14628
14807
  body3
14629
14808
  ] });
14630
14809
  }
14631
14810
 
14632
14811
  // src/components/page-blocks.tsx
14633
- import { cn as cn14 } from "@reblu/site-ui/utils";
14812
+ import { cn as cn16 } from "@reblu/site-ui/utils";
14634
14813
  import { buttonVariants as buttonVariants2 } from "@reblu/site-ui/button-variants";
14635
14814
 
14636
14815
  // src/components/content-blocks.tsx
14637
- import { cn as cn13 } from "@reblu/site-ui/utils";
14816
+ import { cn as cn15 } from "@reblu/site-ui/utils";
14638
14817
 
14639
14818
  // src/components/_card-icons.ts
14640
14819
  var CARD_ICON_NODES = {
@@ -14797,11 +14976,11 @@ var CARD_ICON_NODES = {
14797
14976
  };
14798
14977
 
14799
14978
  // src/components/content-blocks.tsx
14800
- import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
14979
+ import { jsx as jsx22, jsxs as jsxs21 } from "react/jsx-runtime";
14801
14980
  var DEFAULT_BEFORE_AFTER_LABELS = Object.freeze({ before: "Antes", after: "Despu\xE9s" });
14802
14981
  function PairImage({ url, alt, label }) {
14803
- return /* @__PURE__ */ jsxs18("figure", { className: "space-y-2", children: [
14804
- /* @__PURE__ */ jsx19("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx19(
14982
+ return /* @__PURE__ */ jsxs21("figure", { className: "space-y-2", children: [
14983
+ /* @__PURE__ */ jsx22("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx22(
14805
14984
  "img",
14806
14985
  {
14807
14986
  src: url,
@@ -14811,7 +14990,7 @@ function PairImage({ url, alt, label }) {
14811
14990
  className: "h-full w-full object-cover"
14812
14991
  }
14813
14992
  ) }),
14814
- /* @__PURE__ */ jsx19("figcaption", { className: "text-sm font-semibold", children: label })
14993
+ /* @__PURE__ */ jsx22("figcaption", { className: "text-sm font-semibold", children: label })
14815
14994
  ] });
14816
14995
  }
14817
14996
  function BeforeAfterPairs({
@@ -14823,26 +15002,26 @@ function BeforeAfterPairs({
14823
15002
  }) {
14824
15003
  const visibleCaption = showCaption && caption && caption.trim() !== "" ? caption : null;
14825
15004
  if (pairs.length === 0 && !visibleCaption) return null;
14826
- return /* @__PURE__ */ jsxs18("div", { "data-slot": "before-after", className: cn13("space-y-4", className), children: [
14827
- pairs.length > 0 && /* @__PURE__ */ jsx19("ul", { className: "grid gap-6 lg:grid-cols-2", children: pairs.map((pair, i) => /* @__PURE__ */ jsxs18(
15005
+ return /* @__PURE__ */ jsxs21("div", { "data-slot": "before-after", className: cn15("space-y-4", className), children: [
15006
+ pairs.length > 0 && /* @__PURE__ */ jsx22("ul", { className: "grid gap-6 lg:grid-cols-2", children: pairs.map((pair, i) => /* @__PURE__ */ jsxs21(
14828
15007
  "li",
14829
15008
  {
14830
15009
  "data-slot": "before-after-pair",
14831
15010
  className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
14832
15011
  children: [
14833
- /* @__PURE__ */ jsx19(PairImage, { url: pair.beforeUrl, alt: pair.alt ?? "", label: labels.before }),
14834
- /* @__PURE__ */ jsx19(PairImage, { url: pair.afterUrl, alt: pair.alt ?? "", label: labels.after })
15012
+ /* @__PURE__ */ jsx22(PairImage, { url: pair.beforeUrl, alt: pair.alt ?? "", label: labels.before }),
15013
+ /* @__PURE__ */ jsx22(PairImage, { url: pair.afterUrl, alt: pair.alt ?? "", label: labels.after })
14835
15014
  ]
14836
15015
  },
14837
15016
  `${pair.beforeUrl}-${pair.afterUrl}-${i}`
14838
15017
  )) }),
14839
- visibleCaption && /* @__PURE__ */ jsx19("p", { "data-slot": "before-after-caption", className: "whitespace-pre-line text-sm opacity-80", children: visibleCaption })
15018
+ visibleCaption && /* @__PURE__ */ jsx22("p", { "data-slot": "before-after-caption", className: "whitespace-pre-line text-sm opacity-80", children: visibleCaption })
14840
15019
  ] });
14841
15020
  }
14842
15021
  function ChipList({ items, className }) {
14843
15022
  const visible = items.filter((item) => item.trim() !== "");
14844
15023
  if (visible.length === 0) return null;
14845
- return /* @__PURE__ */ jsx19("ul", { "data-slot": "chip-list", className: cn13("flex flex-wrap gap-3", className), children: visible.map((item, i) => /* @__PURE__ */ jsx19(
15024
+ return /* @__PURE__ */ jsx22("ul", { "data-slot": "chip-list", className: cn15("flex flex-wrap gap-3", className), children: visible.map((item, i) => /* @__PURE__ */ jsx22(
14846
15025
  "li",
14847
15026
  {
14848
15027
  "data-slot": "chip",
@@ -14858,7 +15037,7 @@ function hasCardIcon(icon) {
14858
15037
  }
14859
15038
  function CardIconSvg({ icon, className }) {
14860
15039
  if (!hasCardIcon(icon)) return null;
14861
- return /* @__PURE__ */ jsx19(
15040
+ return /* @__PURE__ */ jsx22(
14862
15041
  "svg",
14863
15042
  {
14864
15043
  xmlns: "http://www.w3.org/2000/svg",
@@ -14871,30 +15050,30 @@ function CardIconSvg({ icon, className }) {
14871
15050
  "aria-hidden": "true",
14872
15051
  focusable: "false",
14873
15052
  "data-icon": icon,
14874
- className: cn13("h-5 w-5", className),
14875
- children: CARD_ICON_NODES[icon].map(([Tag, attrs], i) => /* @__PURE__ */ jsx19(Tag, { ...attrs }, i))
15053
+ className: cn15("h-5 w-5", className),
15054
+ children: CARD_ICON_NODES[icon].map(([Tag, attrs], i) => /* @__PURE__ */ jsx22(Tag, { ...attrs }, i))
14876
15055
  }
14877
15056
  );
14878
15057
  }
14879
15058
  function IconCardGrid({ items, intro, headingLevel = 3, className }) {
14880
15059
  const hasIntro = !!intro && intro.trim() !== "";
14881
15060
  if (items.length === 0 && !hasIntro) return null;
14882
- return /* @__PURE__ */ jsxs18("div", { "data-slot": "icon-cards", className: cn13("space-y-6", className), children: [
14883
- hasIntro && /* @__PURE__ */ jsx19("p", { className: "max-w-prose text-lg opacity-80", children: intro }),
14884
- items.length > 0 && /* @__PURE__ */ jsx19(
15061
+ return /* @__PURE__ */ jsxs21("div", { "data-slot": "icon-cards", className: cn15("space-y-6", className), children: [
15062
+ hasIntro && /* @__PURE__ */ jsx22("p", { className: "max-w-prose text-lg opacity-80", children: intro }),
15063
+ items.length > 0 && /* @__PURE__ */ jsx22(
14885
15064
  "ul",
14886
15065
  {
14887
15066
  "data-slot": "icon-card-grid",
14888
15067
  className: "grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3",
14889
- children: items.map((item, i) => /* @__PURE__ */ jsxs18(
15068
+ children: items.map((item, i) => /* @__PURE__ */ jsxs21(
14890
15069
  "li",
14891
15070
  {
14892
15071
  "data-slot": "icon-card",
14893
15072
  className: "space-y-3 rounded-xl border border-border bg-card p-6 text-card-foreground",
14894
15073
  children: [
14895
- hasCardIcon(item.icon) && /* @__PURE__ */ jsx19("span", { className: "inline-flex h-12 w-12 items-center justify-center rounded-xl bg-primary/10 text-primary", children: /* @__PURE__ */ jsx19(CardIconSvg, { icon: item.icon }) }),
14896
- /* @__PURE__ */ jsx19(Heading, { level: headingLevel, className: "text-lg font-semibold", children: item.title }),
14897
- item.text && /* @__PURE__ */ jsx19("p", { className: "text-muted-foreground", children: item.text })
15074
+ hasCardIcon(item.icon) && /* @__PURE__ */ jsx22("span", { className: "inline-flex h-12 w-12 items-center justify-center rounded-xl bg-primary/10 text-primary", children: /* @__PURE__ */ jsx22(CardIconSvg, { icon: item.icon }) }),
15075
+ /* @__PURE__ */ jsx22(Heading, { level: headingLevel, className: "text-lg font-semibold", children: item.title }),
15076
+ item.text && /* @__PURE__ */ jsx22("p", { className: "text-muted-foreground", children: item.text })
14898
15077
  ]
14899
15078
  },
14900
15079
  `${item.title}-${i}`
@@ -14920,19 +15099,19 @@ function ImageTextSplit({
14920
15099
  const imageRight = imageSide === "right";
14921
15100
  const hasKicker = !!kicker && kicker.trim() !== "";
14922
15101
  const bodyOffset = heading ? headingLevel : headingLevel - 1;
14923
- return /* @__PURE__ */ jsxs18(
15102
+ return /* @__PURE__ */ jsxs21(
14924
15103
  "div",
14925
15104
  {
14926
15105
  "data-slot": "image-text",
14927
15106
  "data-image-side": imageRight ? "right" : "left",
14928
- className: cn13("grid grid-cols-1 items-center gap-8 md:grid-cols-2", className),
15107
+ className: cn15("grid grid-cols-1 items-center gap-8 md:grid-cols-2", className),
14929
15108
  children: [
14930
- /* @__PURE__ */ jsx19(
15109
+ /* @__PURE__ */ jsx22(
14931
15110
  "div",
14932
15111
  {
14933
15112
  "data-slot": "image-text-media",
14934
- className: cn13(textFirst ? "order-2" : "order-1", imageRight ? "md:order-2" : "md:order-1"),
14935
- children: /* @__PURE__ */ jsx19("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx19(
15113
+ className: cn15(textFirst ? "order-2" : "order-1", imageRight ? "md:order-2" : "md:order-1"),
15114
+ children: /* @__PURE__ */ jsx22("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx22(
14936
15115
  "img",
14937
15116
  {
14938
15117
  src: imageUrl,
@@ -14944,21 +15123,21 @@ function ImageTextSplit({
14944
15123
  ) })
14945
15124
  }
14946
15125
  ),
14947
- /* @__PURE__ */ jsxs18(
15126
+ /* @__PURE__ */ jsxs21(
14948
15127
  "div",
14949
15128
  {
14950
15129
  "data-slot": "image-text-body",
14951
- className: cn13(
15130
+ className: cn15(
14952
15131
  "space-y-4",
14953
15132
  textFirst ? "order-1" : "order-2",
14954
15133
  imageRight ? "md:order-1" : "md:order-2"
14955
15134
  ),
14956
15135
  children: [
14957
- (hasKicker || heading) && /* @__PURE__ */ jsxs18("div", { className: "space-y-2", children: [
14958
- hasKicker && /* @__PURE__ */ jsx19("p", { "data-slot": "page-block-kicker", className: KICKER_CLASS_NAME, children: kicker }),
14959
- heading && /* @__PURE__ */ jsx19(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx19("span", { id: headingId, children: heading }) })
15136
+ (hasKicker || heading) && /* @__PURE__ */ jsxs21("div", { className: "space-y-2", children: [
15137
+ hasKicker && /* @__PURE__ */ jsx22("p", { "data-slot": "page-block-kicker", className: KICKER_CLASS_NAME, children: kicker }),
15138
+ heading && /* @__PURE__ */ jsx22(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx22("span", { id: headingId, children: heading }) })
14960
15139
  ] }),
14961
- html5 && /* @__PURE__ */ jsx19(SafeHtml, { html: sanitizeHtml(html5), headingOffset: bodyOffset })
15140
+ html5 && /* @__PURE__ */ jsx22(SafeHtml, { html: sanitizeHtml(html5), headingOffset: bodyOffset })
14962
15141
  ]
14963
15142
  }
14964
15143
  )
@@ -14968,38 +15147,38 @@ function ImageTextSplit({
14968
15147
  }
14969
15148
 
14970
15149
  // src/components/page-blocks.tsx
14971
- import { jsx as jsx20, jsxs as jsxs19 } from "react/jsx-runtime";
15150
+ import { jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
14972
15151
  var ALIASES = {
14973
15152
  doctor_embed: "profile_embed",
14974
15153
  specialty_embed: "page_embed"
14975
15154
  };
14976
15155
  function HeroBlock({ block, headingLevel }) {
14977
15156
  const { title, subtitle, imageUrl } = block.data;
14978
- return /* @__PURE__ */ jsxs19("div", { className: "space-y-4", children: [
14979
- /* @__PURE__ */ jsx20(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
14980
- subtitle && /* @__PURE__ */ jsx20("p", { className: "text-lg opacity-80", children: subtitle }),
14981
- imageUrl && /* @__PURE__ */ jsx20("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx20("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
15157
+ return /* @__PURE__ */ jsxs22("div", { className: "space-y-4", children: [
15158
+ /* @__PURE__ */ jsx23(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
15159
+ subtitle && /* @__PURE__ */ jsx23("p", { className: "text-lg opacity-80", children: subtitle }),
15160
+ imageUrl && /* @__PURE__ */ jsx23("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx23("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
14982
15161
  ] });
14983
15162
  }
14984
15163
  function RichtextBlock({ block, headingLevel }) {
14985
- return /* @__PURE__ */ jsx20(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
15164
+ return /* @__PURE__ */ jsx23(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
14986
15165
  }
14987
15166
  function FaqBlock({ block }) {
14988
- return /* @__PURE__ */ jsx20(FaqAccordion, { items: block.data.items });
15167
+ return /* @__PURE__ */ jsx23(FaqAccordion, { items: block.data.items });
14989
15168
  }
14990
15169
  function StatsBlock({ block }) {
14991
- return /* @__PURE__ */ jsx20("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ jsxs19("div", { className: "flex flex-col-reverse gap-1", children: [
14992
- /* @__PURE__ */ jsx20("dt", { className: "text-sm opacity-80", children: item.label }),
14993
- /* @__PURE__ */ jsx20("dd", { className: "text-3xl font-bold", children: item.value })
15170
+ return /* @__PURE__ */ jsx23("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ jsxs22("div", { className: "flex flex-col-reverse gap-1", children: [
15171
+ /* @__PURE__ */ jsx23("dt", { className: "text-sm opacity-80", children: item.label }),
15172
+ /* @__PURE__ */ jsx23("dd", { className: "text-3xl font-bold", children: item.value })
14994
15173
  ] }, i)) });
14995
15174
  }
14996
15175
  function TestimonialBlock({ block }) {
14997
15176
  const { quote, author, role, avatarUrl } = block.data;
14998
- return /* @__PURE__ */ jsxs19("figure", { className: "space-y-4", children: [
14999
- /* @__PURE__ */ jsx20("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ jsx20("p", { children: quote }) }),
15000
- /* @__PURE__ */ jsxs19("figcaption", { className: "flex items-center gap-3", children: [
15177
+ return /* @__PURE__ */ jsxs22("figure", { className: "space-y-4", children: [
15178
+ /* @__PURE__ */ jsx23("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ jsx23("p", { children: quote }) }),
15179
+ /* @__PURE__ */ jsxs22("figcaption", { className: "flex items-center gap-3", children: [
15001
15180
  avatarUrl && // eslint-disable-next-line @next/next/no-img-element
15002
- /* @__PURE__ */ jsx20(
15181
+ /* @__PURE__ */ jsx23(
15003
15182
  "img",
15004
15183
  {
15005
15184
  src: avatarUrl,
@@ -15008,9 +15187,9 @@ function TestimonialBlock({ block }) {
15008
15187
  className: "h-10 w-10 rounded-full object-cover"
15009
15188
  }
15010
15189
  ),
15011
- /* @__PURE__ */ jsxs19("span", { children: [
15012
- /* @__PURE__ */ jsx20("span", { className: "font-semibold", children: author }),
15013
- role && /* @__PURE__ */ jsx20("span", { className: "block text-sm opacity-80", children: role })
15190
+ /* @__PURE__ */ jsxs22("span", { children: [
15191
+ /* @__PURE__ */ jsx23("span", { className: "font-semibold", children: author }),
15192
+ role && /* @__PURE__ */ jsx23("span", { className: "block text-sm opacity-80", children: role })
15014
15193
  ] })
15015
15194
  ] })
15016
15195
  ] });
@@ -15019,19 +15198,19 @@ function CtaSlotBlock(_props) {
15019
15198
  return null;
15020
15199
  }
15021
15200
  function FeatureListBlock({ block }) {
15022
- return /* @__PURE__ */ jsx20("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ jsx20("li", { children: item.text }, i)) });
15201
+ return /* @__PURE__ */ jsx23("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ jsx23("li", { children: item.text }, i)) });
15023
15202
  }
15024
15203
  function GalleryBlock({ block }) {
15025
15204
  const { images } = block.data;
15026
- return /* @__PURE__ */ jsx20(
15205
+ return /* @__PURE__ */ jsx23(
15027
15206
  "div",
15028
15207
  {
15029
- className: cn14(
15208
+ className: cn16(
15030
15209
  "grid gap-4",
15031
15210
  images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
15032
15211
  ),
15033
- children: images.map((img, i) => /* @__PURE__ */ jsxs19("figure", { className: "space-y-1", children: [
15034
- /* @__PURE__ */ jsx20("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx20(
15212
+ children: images.map((img, i) => /* @__PURE__ */ jsxs22("figure", { className: "space-y-1", children: [
15213
+ /* @__PURE__ */ jsx23("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx23(
15035
15214
  "img",
15036
15215
  {
15037
15216
  src: img.url,
@@ -15040,7 +15219,7 @@ function GalleryBlock({ block }) {
15040
15219
  className: "h-full w-full object-cover"
15041
15220
  }
15042
15221
  ) }),
15043
- img.caption && /* @__PURE__ */ jsx20("figcaption", { className: "text-sm opacity-80", children: img.caption })
15222
+ img.caption && /* @__PURE__ */ jsx23("figcaption", { className: "text-sm opacity-80", children: img.caption })
15044
15223
  ] }, `${img.url}-${i}`))
15045
15224
  }
15046
15225
  );
@@ -15050,13 +15229,13 @@ function EmbedCard({
15050
15229
  headingLevel,
15051
15230
  embedHref
15052
15231
  }) {
15053
- return /* @__PURE__ */ jsxs19(
15232
+ return /* @__PURE__ */ jsxs22(
15054
15233
  "a",
15055
15234
  {
15056
15235
  href: embedHref(resolved),
15057
15236
  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",
15058
15237
  children: [
15059
- resolved.coverImageUrl && /* @__PURE__ */ jsx20("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ jsx20(
15238
+ resolved.coverImageUrl && /* @__PURE__ */ jsx23("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ jsx23(
15060
15239
  "img",
15061
15240
  {
15062
15241
  src: resolved.coverImageUrl,
@@ -15065,35 +15244,35 @@ function EmbedCard({
15065
15244
  className: "h-full w-full object-cover"
15066
15245
  }
15067
15246
  ) }),
15068
- /* @__PURE__ */ jsxs19("div", { className: "space-y-1 p-4", children: [
15069
- /* @__PURE__ */ jsx20(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
15070
- resolved.role && /* @__PURE__ */ jsx20("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
15071
- resolved.excerpt && /* @__PURE__ */ jsx20("p", { className: "text-muted-foreground", children: resolved.excerpt })
15247
+ /* @__PURE__ */ jsxs22("div", { className: "space-y-1 p-4", children: [
15248
+ /* @__PURE__ */ jsx23(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
15249
+ resolved.role && /* @__PURE__ */ jsx23("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
15250
+ resolved.excerpt && /* @__PURE__ */ jsx23("p", { className: "text-muted-foreground", children: resolved.excerpt })
15072
15251
  ] })
15073
15252
  ]
15074
15253
  }
15075
15254
  );
15076
15255
  }
15077
15256
  function PageEmbedBlock({ block, headingLevel, embedHref }) {
15078
- return /* @__PURE__ */ jsx20(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
15257
+ return /* @__PURE__ */ jsx23(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
15079
15258
  }
15080
15259
  function ProfileEmbedBlock({
15081
15260
  block,
15082
15261
  headingLevel,
15083
15262
  embedHref
15084
15263
  }) {
15085
- return /* @__PURE__ */ jsx20(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
15264
+ return /* @__PURE__ */ jsx23(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
15086
15265
  }
15087
15266
  function BeforeAfterBlock({ block }) {
15088
15267
  const { pairs, showCaption, caption } = block.data;
15089
- return /* @__PURE__ */ jsx20(BeforeAfterPairs, { pairs, showCaption, caption });
15268
+ return /* @__PURE__ */ jsx23(BeforeAfterPairs, { pairs, showCaption, caption });
15090
15269
  }
15091
15270
  function ChipsBlock({ block }) {
15092
- return /* @__PURE__ */ jsx20(ChipList, { items: block.data.items });
15271
+ return /* @__PURE__ */ jsx23(ChipList, { items: block.data.items });
15093
15272
  }
15094
15273
  function ImageTextBlock({ block, headingLevel, headingId }) {
15095
15274
  const { kicker, imageUrl, alt, imageSide, mobileOrder, html: html5 } = block.data;
15096
- return /* @__PURE__ */ jsx20(
15275
+ return /* @__PURE__ */ jsx23(
15097
15276
  ImageTextSplit,
15098
15277
  {
15099
15278
  imageUrl,
@@ -15109,7 +15288,17 @@ function ImageTextBlock({ block, headingLevel, headingId }) {
15109
15288
  );
15110
15289
  }
15111
15290
  function IconCardsBlock({ block, headingLevel }) {
15112
- return /* @__PURE__ */ jsx20(IconCardGrid, { items: block.data.items, intro: block.data.intro, headingLevel });
15291
+ return /* @__PURE__ */ jsx23(IconCardGrid, { items: block.data.items, intro: block.data.intro, headingLevel });
15292
+ }
15293
+ function ReviewsBlock({ block }) {
15294
+ const { layout, notice } = block.data;
15295
+ return /* @__PURE__ */ jsx23("div", { "data-slot": "reviews-block", "data-reviews-layout": layout ?? "grid", children: /* @__PURE__ */ jsx23(
15296
+ Reviews,
15297
+ {
15298
+ reviews: block.reviews,
15299
+ notice: notice && notice.trim() !== "" ? notice : void 0
15300
+ }
15301
+ ) });
15113
15302
  }
15114
15303
  var DEFAULT_RENDERERS = {
15115
15304
  hero: HeroBlock,
@@ -15125,7 +15314,8 @@ var DEFAULT_RENDERERS = {
15125
15314
  before_after: BeforeAfterBlock,
15126
15315
  chips: ChipsBlock,
15127
15316
  icon_cards: IconCardsBlock,
15128
- image_text: ImageTextBlock
15317
+ image_text: ImageTextBlock,
15318
+ reviews: ReviewsBlock
15129
15319
  };
15130
15320
  var KICKER_TYPES = /* @__PURE__ */ new Set([
15131
15321
  "before_after",
@@ -15183,14 +15373,14 @@ function toIdFragment(value) {
15183
15373
  function SectionCta2({ cta }) {
15184
15374
  if (!hasUsableCta(cta)) return null;
15185
15375
  const variant = toButtonVariant(cta.variant);
15186
- return /* @__PURE__ */ jsx20("div", { className: "pt-2", children: /* @__PURE__ */ jsx20(
15376
+ return /* @__PURE__ */ jsx23("div", { className: "pt-2", children: /* @__PURE__ */ jsx23(
15187
15377
  "a",
15188
15378
  {
15189
15379
  href: cta.url,
15190
15380
  "data-slot": "button",
15191
15381
  "data-variant": variant,
15192
15382
  "data-size": "default",
15193
- className: cn14(buttonVariants2({ variant, size: "default" })),
15383
+ className: cn16(buttonVariants2({ variant, size: "default" })),
15194
15384
  ...cta.isExternal ? { target: "_blank", rel: "noopener noreferrer" } : {},
15195
15385
  children: cta.label
15196
15386
  }
@@ -15211,6 +15401,8 @@ function PageBlocks({
15211
15401
  const type = canonicalTypeOf(block.blockType);
15212
15402
  if (type === null) return [];
15213
15403
  if (EMBED_TYPES.has(type) && !block.resolved) return [];
15404
+ if (type === "reviews" && (!Array.isArray(block.reviews) || block.reviews.length === 0))
15405
+ return [];
15214
15406
  if (type === "cta" && !components?.cta && !block.heading && !hasUsableCta(block.cta)) return [];
15215
15407
  const Renderer = components?.[type] ?? DEFAULT_RENDERERS[type];
15216
15408
  const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
@@ -15218,18 +15410,18 @@ function PageBlocks({
15218
15410
  const kicker = kickerOf(type, block);
15219
15411
  const ownsHeading = OWN_HEADING_TYPES.has(type);
15220
15412
  return [
15221
- /* @__PURE__ */ jsxs19(
15413
+ /* @__PURE__ */ jsxs22(
15222
15414
  "section",
15223
15415
  {
15224
15416
  "data-slot": "page-block",
15225
15417
  "data-block-type": type,
15226
15418
  "aria-labelledby": headingId,
15227
15419
  style: surfaceStyle(background),
15228
- className: cn14("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
15420
+ className: cn16("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
15229
15421
  children: [
15230
- kicker && /* @__PURE__ */ jsx20("p", { "data-slot": "page-block-kicker", className: cn14("-mb-4", KICKER_CLASS_NAME), children: kicker }),
15231
- block.heading && !ownsHeading && /* @__PURE__ */ jsx20(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx20("span", { id: headingId, children: block.heading }) }),
15232
- ownsHeading ? /* @__PURE__ */ jsx20(
15422
+ kicker && /* @__PURE__ */ jsx23("p", { "data-slot": "page-block-kicker", className: cn16("-mb-4", KICKER_CLASS_NAME), children: kicker }),
15423
+ block.heading && !ownsHeading && /* @__PURE__ */ jsx23(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx23("span", { id: headingId, children: block.heading }) }),
15424
+ ownsHeading ? /* @__PURE__ */ jsx23(
15233
15425
  Renderer,
15234
15426
  {
15235
15427
  block,
@@ -15237,7 +15429,7 @@ function PageBlocks({
15237
15429
  embedHref,
15238
15430
  headingId
15239
15431
  }
15240
- ) : /* @__PURE__ */ jsx20(
15432
+ ) : /* @__PURE__ */ jsx23(
15241
15433
  Renderer,
15242
15434
  {
15243
15435
  block,
@@ -15245,7 +15437,7 @@ function PageBlocks({
15245
15437
  embedHref
15246
15438
  }
15247
15439
  ),
15248
- /* @__PURE__ */ jsx20(SectionCta2, { cta: block.cta })
15440
+ /* @__PURE__ */ jsx23(SectionCta2, { cta: block.cta })
15249
15441
  ]
15250
15442
  },
15251
15443
  block.id
@@ -15253,12 +15445,12 @@ function PageBlocks({
15253
15445
  ];
15254
15446
  });
15255
15447
  if (sections.length === 0) return null;
15256
- return /* @__PURE__ */ jsx20("div", { className: cn14("space-y-12", className), "data-slot": "page-blocks", children: sections });
15448
+ return /* @__PURE__ */ jsx23("div", { className: cn16("space-y-12", className), "data-slot": "page-blocks", children: sections });
15257
15449
  }
15258
15450
 
15259
15451
  // src/components/shop-filters.tsx
15260
- import { cn as cn15 } from "@reblu/site-ui/utils";
15261
- import { jsx as jsx21, jsxs as jsxs20 } from "react/jsx-runtime";
15452
+ import { cn as cn17 } from "@reblu/site-ui/utils";
15453
+ import { jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
15262
15454
  var DEFAULT_SHOP_PRICE_BANDS = [
15263
15455
  { max: 2500 },
15264
15456
  { min: 2500, max: 5e3 },
@@ -15302,7 +15494,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
15302
15494
  return "";
15303
15495
  }
15304
15496
  function OptionLink({ href, active, label, onActivate }) {
15305
- return /* @__PURE__ */ jsx21(
15497
+ return /* @__PURE__ */ jsx24(
15306
15498
  "a",
15307
15499
  {
15308
15500
  href,
@@ -15311,7 +15503,7 @@ function OptionLink({ href, active, label, onActivate }) {
15311
15503
  event.preventDefault();
15312
15504
  onActivate();
15313
15505
  } : void 0,
15314
- className: cn15(
15506
+ className: cn17(
15315
15507
  "inline-flex items-center rounded-full border px-3 py-1 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
15316
15508
  active ? "border-transparent bg-primary text-primary-foreground" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground"
15317
15509
  ),
@@ -15320,9 +15512,9 @@ function OptionLink({ href, active, label, onActivate }) {
15320
15512
  );
15321
15513
  }
15322
15514
  function FilterFieldset({ legend, children: children2 }) {
15323
- return /* @__PURE__ */ jsxs20("fieldset", { className: "space-y-2", children: [
15324
- /* @__PURE__ */ jsx21("legend", { className: "text-sm font-medium text-foreground", children: legend }),
15325
- /* @__PURE__ */ jsx21("div", { className: "flex flex-wrap gap-2", children: children2 })
15515
+ return /* @__PURE__ */ jsxs23("fieldset", { className: "space-y-2", children: [
15516
+ /* @__PURE__ */ jsx24("legend", { className: "text-sm font-medium text-foreground", children: legend }),
15517
+ /* @__PURE__ */ jsx24("div", { className: "flex flex-wrap gap-2", children: children2 })
15326
15518
  ] });
15327
15519
  }
15328
15520
  function ShopFilters({
@@ -15345,11 +15537,11 @@ function ShopFilters({
15345
15537
  if (!shouldRenderShopFilters(facets, active)) {
15346
15538
  return null;
15347
15539
  }
15348
- return /* @__PURE__ */ jsxs20("div", { className: cn15("space-y-6", className), "data-slot": "shop-filters", children: [
15540
+ return /* @__PURE__ */ jsxs23("div", { className: cn17("space-y-6", className), "data-slot": "shop-filters", children: [
15349
15541
  visibleTaxonomies.map((axis) => {
15350
15542
  const activeSlug = active.taxonomy?.[axis.key];
15351
- return /* @__PURE__ */ jsxs20(FilterFieldset, { legend: axis.label, children: [
15352
- /* @__PURE__ */ jsx21(
15543
+ return /* @__PURE__ */ jsxs23(FilterFieldset, { legend: axis.label, children: [
15544
+ /* @__PURE__ */ jsx24(
15353
15545
  OptionLink,
15354
15546
  {
15355
15547
  href: hrefs.taxonomy(axis.key, void 0),
@@ -15364,7 +15556,7 @@ function ShopFilters({
15364
15556
  ),
15365
15557
  axis.terms.map((term) => {
15366
15558
  const isActive = activeSlug === term.slug;
15367
- return /* @__PURE__ */ jsx21(
15559
+ return /* @__PURE__ */ jsx24(
15368
15560
  OptionLink,
15369
15561
  {
15370
15562
  href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
@@ -15384,9 +15576,9 @@ function ShopFilters({
15384
15576
  }),
15385
15577
  visibleAttributes.map((attr) => {
15386
15578
  const activeValues = toValueArray(active.attr?.[attr.key]);
15387
- return /* @__PURE__ */ jsx21(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
15579
+ return /* @__PURE__ */ jsx24(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
15388
15580
  const isActive = activeValues.includes(opt.value);
15389
- return /* @__PURE__ */ jsx21(
15581
+ return /* @__PURE__ */ jsx24(
15390
15582
  OptionLink,
15391
15583
  {
15392
15584
  href: hrefs.attr(attr.key, opt.value),
@@ -15404,11 +15596,11 @@ function ShopFilters({
15404
15596
  );
15405
15597
  }) }, attr.key);
15406
15598
  }),
15407
- showPriceGroup && /* @__PURE__ */ jsx21(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
15599
+ showPriceGroup && /* @__PURE__ */ jsx24(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
15408
15600
  const isActive = active.priceMin === band.min && active.priceMax === band.max;
15409
15601
  const nextMin = isActive ? void 0 : band.min;
15410
15602
  const nextMax = isActive ? void 0 : band.max;
15411
- return /* @__PURE__ */ jsx21(
15603
+ return /* @__PURE__ */ jsx24(
15412
15604
  OptionLink,
15413
15605
  {
15414
15606
  href: hrefs.price(nextMin, nextMax),
@@ -15419,7 +15611,7 @@ function ShopFilters({
15419
15611
  i
15420
15612
  );
15421
15613
  }) }),
15422
- hasOnSale && /* @__PURE__ */ jsx21(
15614
+ hasOnSale && /* @__PURE__ */ jsx24(
15423
15615
  OptionLink,
15424
15616
  {
15425
15617
  href: hrefs.onSale(!active.onSale),
@@ -15428,7 +15620,7 @@ function ShopFilters({
15428
15620
  onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
15429
15621
  }
15430
15622
  ),
15431
- /* @__PURE__ */ jsx21(
15623
+ /* @__PURE__ */ jsx24(
15432
15624
  "a",
15433
15625
  {
15434
15626
  href: hrefs.clearAll(),
@@ -15444,8 +15636,8 @@ function ShopFilters({
15444
15636
  }
15445
15637
 
15446
15638
  // src/components/course-catalog-filters.tsx
15447
- import { cn as cn16 } from "@reblu/site-ui/utils";
15448
- import { jsx as jsx22, jsxs as jsxs21 } from "react/jsx-runtime";
15639
+ import { cn as cn18 } from "@reblu/site-ui/utils";
15640
+ import { jsx as jsx25, jsxs as jsxs24 } from "react/jsx-runtime";
15449
15641
  var DEFAULT_COURSE_PRICE_BANDS = [
15450
15642
  { max: 5e3 },
15451
15643
  { min: 5e3, max: 15e3 },
@@ -15498,9 +15690,9 @@ function CourseCatalogFilters({
15498
15690
  const showPrice = enabled.price !== false;
15499
15691
  const isFree = Boolean(active.free);
15500
15692
  if (!showCategories && !showInstructors && !showPrice) return null;
15501
- return /* @__PURE__ */ jsxs21("div", { className: cn16("space-y-6", className), "data-slot": "course-catalog-filters", children: [
15502
- showCategories && /* @__PURE__ */ jsxs21(FilterFieldset, { legend: t.category, children: [
15503
- /* @__PURE__ */ jsx22(
15693
+ return /* @__PURE__ */ jsxs24("div", { className: cn18("space-y-6", className), "data-slot": "course-catalog-filters", children: [
15694
+ showCategories && /* @__PURE__ */ jsxs24(FilterFieldset, { legend: t.category, children: [
15695
+ /* @__PURE__ */ jsx25(
15504
15696
  OptionLink,
15505
15697
  {
15506
15698
  href: categoryHref(void 0),
@@ -15512,7 +15704,7 @@ function CourseCatalogFilters({
15512
15704
  sortedCategories.map((category) => {
15513
15705
  const isActive = active.category === category.slug;
15514
15706
  const next2 = isActive ? void 0 : category.slug;
15515
- return /* @__PURE__ */ jsx22(
15707
+ return /* @__PURE__ */ jsx25(
15516
15708
  OptionLink,
15517
15709
  {
15518
15710
  href: categoryHref(next2),
@@ -15524,8 +15716,8 @@ function CourseCatalogFilters({
15524
15716
  );
15525
15717
  })
15526
15718
  ] }),
15527
- showInstructors && /* @__PURE__ */ jsxs21(FilterFieldset, { legend: t.instructor, children: [
15528
- /* @__PURE__ */ jsx22(
15719
+ showInstructors && /* @__PURE__ */ jsxs24(FilterFieldset, { legend: t.instructor, children: [
15720
+ /* @__PURE__ */ jsx25(
15529
15721
  OptionLink,
15530
15722
  {
15531
15723
  href: hrefs.instructor(void 0),
@@ -15537,7 +15729,7 @@ function CourseCatalogFilters({
15537
15729
  named.map((instructor) => {
15538
15730
  const isActive = active.instructor === instructor.id;
15539
15731
  const next2 = isActive ? void 0 : instructor.id;
15540
- return /* @__PURE__ */ jsx22(
15732
+ return /* @__PURE__ */ jsx25(
15541
15733
  OptionLink,
15542
15734
  {
15543
15735
  href: hrefs.instructor(next2),
@@ -15549,8 +15741,8 @@ function CourseCatalogFilters({
15549
15741
  );
15550
15742
  })
15551
15743
  ] }),
15552
- showPrice && /* @__PURE__ */ jsxs21(FilterFieldset, { legend: t.price, children: [
15553
- /* @__PURE__ */ jsx22(
15744
+ showPrice && /* @__PURE__ */ jsxs24(FilterFieldset, { legend: t.price, children: [
15745
+ /* @__PURE__ */ jsx25(
15554
15746
  OptionLink,
15555
15747
  {
15556
15748
  href: hrefs.free(!isFree),
@@ -15565,7 +15757,7 @@ function CourseCatalogFilters({
15565
15757
  const isActive = !isFree && active.priceMin === band.min && active.priceMax === band.max;
15566
15758
  const nextMin = isActive ? void 0 : band.min;
15567
15759
  const nextMax = isActive ? void 0 : band.max;
15568
- return /* @__PURE__ */ jsx22(
15760
+ return /* @__PURE__ */ jsx25(
15569
15761
  OptionLink,
15570
15762
  {
15571
15763
  href: hrefs.price(nextMin, nextMax),
@@ -15577,7 +15769,7 @@ function CourseCatalogFilters({
15577
15769
  );
15578
15770
  })
15579
15771
  ] }),
15580
- /* @__PURE__ */ jsx22(
15772
+ /* @__PURE__ */ jsx25(
15581
15773
  "a",
15582
15774
  {
15583
15775
  href: hrefs.clearAll(),
@@ -15599,8 +15791,8 @@ function CourseCatalogFilters({
15599
15791
  }
15600
15792
 
15601
15793
  // src/components/cart-line-list.tsx
15602
- import { cn as cn17 } from "@reblu/site-ui/utils";
15603
- import { jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
15794
+ import { cn as cn19 } from "@reblu/site-ui/utils";
15795
+ import { jsx as jsx26, jsxs as jsxs25 } from "react/jsx-runtime";
15604
15796
  var DEFAULT_LABELS2 = {
15605
15797
  quantityLabel: "Cantidad",
15606
15798
  decrease: "Reducir cantidad",
@@ -15613,20 +15805,20 @@ var DEFAULT_LABELS2 = {
15613
15805
  function CartLineIncludes({ entries, note, className }) {
15614
15806
  const hasNote = note != null && note !== false && note !== "";
15615
15807
  if (entries.length === 0 && !hasNote) return null;
15616
- return /* @__PURE__ */ jsxs22(
15808
+ return /* @__PURE__ */ jsxs25(
15617
15809
  "div",
15618
15810
  {
15619
- className: cn17("mt-2 space-y-2 rounded-lg bg-muted px-4 py-3 text-sm", className),
15811
+ className: cn19("mt-2 space-y-2 rounded-lg bg-muted px-4 py-3 text-sm", className),
15620
15812
  "data-slot": "cart-line-includes",
15621
15813
  children: [
15622
- entries.length > 0 && /* @__PURE__ */ jsx23("dl", { className: "grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1.5", children: entries.map((entry, idx) => (
15814
+ entries.length > 0 && /* @__PURE__ */ jsx26("dl", { className: "grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1.5", children: entries.map((entry, idx) => (
15623
15815
  // eslint-disable-next-line react/no-array-index-key -- entries are positional, SITE-built rows
15624
- /* @__PURE__ */ jsxs22("div", { className: "contents", children: [
15625
- /* @__PURE__ */ jsx23("dt", { className: "font-semibold text-muted-foreground", children: entry.label }),
15626
- /* @__PURE__ */ jsx23("dd", { className: "m-0", children: entry.value })
15816
+ /* @__PURE__ */ jsxs25("div", { className: "contents", children: [
15817
+ /* @__PURE__ */ jsx26("dt", { className: "font-semibold text-muted-foreground", children: entry.label }),
15818
+ /* @__PURE__ */ jsx26("dd", { className: "m-0", children: entry.value })
15627
15819
  ] }, idx)
15628
15820
  )) }),
15629
- hasNote && /* @__PURE__ */ jsx23("p", { className: "text-muted-foreground", children: note })
15821
+ hasNote && /* @__PURE__ */ jsx26("p", { className: "text-muted-foreground", children: note })
15630
15822
  ]
15631
15823
  }
15632
15824
  );
@@ -15655,9 +15847,9 @@ function CartLineList({
15655
15847
  }) {
15656
15848
  const t = { ...DEFAULT_LABELS2, ...labels };
15657
15849
  const noticeContent = notice === true ? t.cancelledNotice : notice;
15658
- return /* @__PURE__ */ jsxs22("div", { className: cn17("space-y-4", className), "data-slot": "cart-line-list", children: [
15659
- /* @__PURE__ */ jsx23("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
15660
- noticeContent != null && noticeContent !== false && /* @__PURE__ */ jsx23(
15850
+ return /* @__PURE__ */ jsxs25("div", { className: cn19("space-y-4", className), "data-slot": "cart-line-list", children: [
15851
+ /* @__PURE__ */ jsx26("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
15852
+ noticeContent != null && noticeContent !== false && /* @__PURE__ */ jsx26(
15661
15853
  "div",
15662
15854
  {
15663
15855
  role: "status",
@@ -15666,34 +15858,34 @@ function CartLineList({
15666
15858
  children: noticeContent
15667
15859
  }
15668
15860
  ),
15669
- /* @__PURE__ */ jsx23("ul", { className: "space-y-4", children: items.map((item) => {
15861
+ /* @__PURE__ */ jsx26("ul", { className: "space-y-4", children: items.map((item) => {
15670
15862
  const maxQty = item.maxStock ?? Infinity;
15671
15863
  const atMax = item.quantity >= maxQty;
15672
15864
  const atMin = item.quantity <= 1;
15673
15865
  const message = lineMessage?.(item);
15674
15866
  const includes = lineIncludes?.(item);
15675
- return /* @__PURE__ */ jsxs22(
15867
+ return /* @__PURE__ */ jsxs25(
15676
15868
  "li",
15677
15869
  {
15678
15870
  className: "flex gap-4 rounded-xl border border-border bg-card p-4",
15679
15871
  children: [
15680
- /* @__PURE__ */ jsx23("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ jsx23("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
15681
- /* @__PURE__ */ jsxs22("div", { className: "min-w-0 flex-1", children: [
15682
- /* @__PURE__ */ jsx23("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
15683
- item.variantName && /* @__PURE__ */ jsx23("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
15684
- /* @__PURE__ */ jsxs22("p", { className: "mt-1 text-sm text-muted-foreground", children: [
15872
+ /* @__PURE__ */ jsx26("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ jsx26("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
15873
+ /* @__PURE__ */ jsxs25("div", { className: "min-w-0 flex-1", children: [
15874
+ /* @__PURE__ */ jsx26("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
15875
+ item.variantName && /* @__PURE__ */ jsx26("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
15876
+ /* @__PURE__ */ jsxs25("p", { className: "mt-1 text-sm text-muted-foreground", children: [
15685
15877
  formatPrice(item.unitPrice, currencyCode, locale),
15686
15878
  " ",
15687
15879
  t.unitPriceSuffix
15688
15880
  ] }),
15689
- /* @__PURE__ */ jsxs22(
15881
+ /* @__PURE__ */ jsxs25(
15690
15882
  "div",
15691
15883
  {
15692
15884
  role: "group",
15693
15885
  "aria-label": t.quantityLabel,
15694
15886
  className: "mt-3 flex items-center gap-3",
15695
15887
  children: [
15696
- /* @__PURE__ */ jsx23(
15888
+ /* @__PURE__ */ jsx26(
15697
15889
  "button",
15698
15890
  {
15699
15891
  type: "button",
@@ -15704,8 +15896,8 @@ function CartLineList({
15704
15896
  children: "\u2212"
15705
15897
  }
15706
15898
  ),
15707
- /* @__PURE__ */ jsx23("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
15708
- /* @__PURE__ */ jsx23(
15899
+ /* @__PURE__ */ jsx26("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
15900
+ /* @__PURE__ */ jsx26(
15709
15901
  "button",
15710
15902
  {
15711
15903
  type: "button",
@@ -15716,7 +15908,7 @@ function CartLineList({
15716
15908
  children: "+"
15717
15909
  }
15718
15910
  ),
15719
- onRemove && /* @__PURE__ */ jsx23(
15911
+ onRemove && /* @__PURE__ */ jsx26(
15720
15912
  "button",
15721
15913
  {
15722
15914
  type: "button",
@@ -15729,7 +15921,7 @@ function CartLineList({
15729
15921
  ]
15730
15922
  }
15731
15923
  ),
15732
- message != null && message !== false && /* @__PURE__ */ jsx23(
15924
+ message != null && message !== false && /* @__PURE__ */ jsx26(
15733
15925
  "p",
15734
15926
  {
15735
15927
  className: "mt-2 text-sm text-destructive",
@@ -15737,12 +15929,12 @@ function CartLineList({
15737
15929
  children: message
15738
15930
  }
15739
15931
  ),
15740
- includes != null && includes !== false && /* @__PURE__ */ jsxs22("details", { className: "mt-2", "data-slot": "cart-line-list-includes", children: [
15741
- /* @__PURE__ */ jsx23("summary", { className: "cursor-pointer text-sm font-semibold text-primary", children: t.includesSummary }),
15932
+ includes != null && includes !== false && /* @__PURE__ */ jsxs25("details", { className: "mt-2", "data-slot": "cart-line-list-includes", children: [
15933
+ /* @__PURE__ */ jsx26("summary", { className: "cursor-pointer text-sm font-semibold text-primary", children: t.includesSummary }),
15742
15934
  includes
15743
15935
  ] })
15744
15936
  ] }),
15745
- /* @__PURE__ */ jsx23("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ jsx23("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
15937
+ /* @__PURE__ */ jsx26("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ jsx26("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
15746
15938
  ]
15747
15939
  },
15748
15940
  lineKey(item.productId, item.variantId)
@@ -15752,8 +15944,8 @@ function CartLineList({
15752
15944
  }
15753
15945
 
15754
15946
  // src/components/cart-summary.tsx
15755
- import { cn as cn18 } from "@reblu/site-ui/utils";
15756
- import { jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
15947
+ import { cn as cn20 } from "@reblu/site-ui/utils";
15948
+ import { jsx as jsx27, jsxs as jsxs26 } from "react/jsx-runtime";
15757
15949
  var DEFAULT_LABELS3 = {
15758
15950
  subtotal: "Subtotal",
15759
15951
  discountPrefix: "Descuento",
@@ -15783,37 +15975,37 @@ function CartSummary({
15783
15975
  const hasDiscount = Boolean(discountAmount && discountAmount > 0);
15784
15976
  const noticeContent = notice === true ? t.cancelledNotice : notice;
15785
15977
  const hasNotice = noticeContent != null && noticeContent !== false;
15786
- const breakdown = /* @__PURE__ */ jsxs23(
15978
+ const breakdown = /* @__PURE__ */ jsxs26(
15787
15979
  "dl",
15788
15980
  {
15789
- className: cn18("space-y-2 text-sm", !hasNotice && className),
15981
+ className: cn20("space-y-2 text-sm", !hasNotice && className),
15790
15982
  "data-slot": "cart-summary",
15791
15983
  children: [
15792
- /* @__PURE__ */ jsxs23("div", { className: "flex justify-between text-muted-foreground", children: [
15793
- /* @__PURE__ */ jsx24("dt", { children: t.subtotal }),
15794
- /* @__PURE__ */ jsx24("dd", { children: formatPrice(subtotal, currencyCode, locale) })
15984
+ /* @__PURE__ */ jsxs26("div", { className: "flex justify-between text-muted-foreground", children: [
15985
+ /* @__PURE__ */ jsx27("dt", { children: t.subtotal }),
15986
+ /* @__PURE__ */ jsx27("dd", { children: formatPrice(subtotal, currencyCode, locale) })
15795
15987
  ] }),
15796
- hasDiscount && /* @__PURE__ */ jsxs23("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
15797
- /* @__PURE__ */ jsx24("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
15798
- /* @__PURE__ */ jsxs23("dd", { children: [
15988
+ hasDiscount && /* @__PURE__ */ jsxs26("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
15989
+ /* @__PURE__ */ jsx27("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
15990
+ /* @__PURE__ */ jsxs26("dd", { children: [
15799
15991
  "-",
15800
15992
  formatPrice(discountAmount, currencyCode, locale)
15801
15993
  ] })
15802
15994
  ] }),
15803
- shippingEnabled && /* @__PURE__ */ jsxs23("div", { className: "flex justify-between text-muted-foreground", children: [
15804
- /* @__PURE__ */ jsx24("dt", { children: t.shipping }),
15805
- /* @__PURE__ */ jsx24("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
15995
+ shippingEnabled && /* @__PURE__ */ jsxs26("div", { className: "flex justify-between text-muted-foreground", children: [
15996
+ /* @__PURE__ */ jsx27("dt", { children: t.shipping }),
15997
+ /* @__PURE__ */ jsx27("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
15806
15998
  ] }),
15807
- /* @__PURE__ */ jsxs23("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
15808
- /* @__PURE__ */ jsx24("dt", { children: t.total }),
15809
- /* @__PURE__ */ jsx24("dd", { children: formatPrice(total, currencyCode, locale) })
15999
+ /* @__PURE__ */ jsxs26("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
16000
+ /* @__PURE__ */ jsx27("dt", { children: t.total }),
16001
+ /* @__PURE__ */ jsx27("dd", { children: formatPrice(total, currencyCode, locale) })
15810
16002
  ] })
15811
16003
  ]
15812
16004
  }
15813
16005
  );
15814
16006
  if (!hasNotice) return breakdown;
15815
- return /* @__PURE__ */ jsxs23("div", { className: cn18("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
15816
- /* @__PURE__ */ jsx24(
16007
+ return /* @__PURE__ */ jsxs26("div", { className: cn20("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
16008
+ /* @__PURE__ */ jsx27(
15817
16009
  "div",
15818
16010
  {
15819
16011
  role: "status",
@@ -15827,8 +16019,8 @@ function CartSummary({
15827
16019
  }
15828
16020
 
15829
16021
  // src/components/cart-adjustments-notice.tsx
15830
- import { cn as cn19 } from "@reblu/site-ui/utils";
15831
- import { jsx as jsx25 } from "react/jsx-runtime";
16022
+ import { cn as cn21 } from "@reblu/site-ui/utils";
16023
+ import { jsx as jsx28 } from "react/jsx-runtime";
15832
16024
  var DEFAULT_LABELS4 = {
15833
16025
  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.`,
15834
16026
  quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
@@ -15862,20 +16054,20 @@ function CartAdjustmentsNotice({
15862
16054
  );
15863
16055
  }
15864
16056
  if (messages.length === 0) return null;
15865
- return /* @__PURE__ */ jsx25(
16057
+ return /* @__PURE__ */ jsx28(
15866
16058
  "div",
15867
16059
  {
15868
16060
  role: "status",
15869
- className: cn19("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
16061
+ className: cn21("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
15870
16062
  "data-slot": "cart-adjustments-notice",
15871
- children: messages.length === 1 ? /* @__PURE__ */ jsx25("p", { children: messages[0] }) : /* @__PURE__ */ jsx25("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ jsx25("li", { children: message }, index)) })
16063
+ children: messages.length === 1 ? /* @__PURE__ */ jsx28("p", { children: messages[0] }) : /* @__PURE__ */ jsx28("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ jsx28("li", { children: message }, index)) })
15872
16064
  }
15873
16065
  );
15874
16066
  }
15875
16067
 
15876
16068
  // src/components/added-to-cart-toast.tsx
15877
- import { cn as cn20 } from "@reblu/site-ui/utils";
15878
- import { jsx as jsx26, jsxs as jsxs24 } from "react/jsx-runtime";
16069
+ import { cn as cn22 } from "@reblu/site-ui/utils";
16070
+ import { jsx as jsx29, jsxs as jsxs27 } from "react/jsx-runtime";
15879
16071
  var DEFAULT_LABELS5 = {
15880
16072
  success: "A\xF1adido al carrito",
15881
16073
  error: "No se pudo a\xF1adir al carrito",
@@ -15895,12 +16087,12 @@ function AddedToCartToast({
15895
16087
  const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
15896
16088
  const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
15897
16089
  const variant = status === "success" ? "success" : "error";
15898
- return /* @__PURE__ */ jsxs24(
16090
+ return /* @__PURE__ */ jsxs27(
15899
16091
  "div",
15900
16092
  {
15901
16093
  "data-slot": "added-to-cart-toast",
15902
16094
  "data-variant": variant,
15903
- className: cn20(
16095
+ className: cn22(
15904
16096
  "flex items-center gap-3 rounded-xl border border-border bg-card p-3 text-sm shadow-lg",
15905
16097
  variant === "success" && "border-green-600/30 dark:border-green-400/30",
15906
16098
  variant === "error" && "border-destructive/30",
@@ -15908,20 +16100,20 @@ function AddedToCartToast({
15908
16100
  ),
15909
16101
  children: [
15910
16102
  hasThumbnail && // eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
15911
- /* @__PURE__ */ jsx26("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
15912
- /* @__PURE__ */ jsxs24("div", { className: "min-w-0 flex-1", children: [
15913
- /* @__PURE__ */ jsx26("p", { className: "truncate font-semibold text-foreground", children: productName }),
15914
- /* @__PURE__ */ jsx26("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
16103
+ /* @__PURE__ */ jsx29("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
16104
+ /* @__PURE__ */ jsxs27("div", { className: "min-w-0 flex-1", children: [
16105
+ /* @__PURE__ */ jsx29("p", { className: "truncate font-semibold text-foreground", children: productName }),
16106
+ /* @__PURE__ */ jsx29("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
15915
16107
  ] }),
15916
- /* @__PURE__ */ jsx26("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsx26("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
16108
+ /* @__PURE__ */ jsx29("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsx29("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
15917
16109
  ]
15918
16110
  }
15919
16111
  );
15920
16112
  }
15921
16113
 
15922
16114
  // src/components/checkout-login-prompt.tsx
15923
- import { cn as cn21 } from "@reblu/site-ui/utils";
15924
- import { Fragment as Fragment5, jsx as jsx27, jsxs as jsxs25 } from "react/jsx-runtime";
16115
+ import { cn as cn23 } from "@reblu/site-ui/utils";
16116
+ import { Fragment as Fragment5, jsx as jsx30, jsxs as jsxs28 } from "react/jsx-runtime";
15925
16117
  var DEFAULT_LABELS6 = {
15926
16118
  title: "Identificaci\xF3n",
15927
16119
  description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
@@ -15948,26 +16140,26 @@ function CheckoutLoginPrompt({
15948
16140
  if (!open) return null;
15949
16141
  const t = { ...DEFAULT_LABELS6, ...labels };
15950
16142
  const isValidEmail = EMAIL_PATTERN.test(email.trim());
15951
- return /* @__PURE__ */ jsxs25(Fragment5, { children: [
15952
- /* @__PURE__ */ jsx27("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
15953
- /* @__PURE__ */ jsxs25(
16143
+ return /* @__PURE__ */ jsxs28(Fragment5, { children: [
16144
+ /* @__PURE__ */ jsx30("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
16145
+ /* @__PURE__ */ jsxs28(
15954
16146
  "div",
15955
16147
  {
15956
16148
  role: "dialog",
15957
16149
  "aria-modal": "true",
15958
16150
  "aria-labelledby": "checkout-login-prompt-title",
15959
16151
  "data-slot": "checkout-login-prompt",
15960
- className: cn21(
16152
+ className: cn23(
15961
16153
  "fixed left-1/2 top-1/2 z-50 w-full max-w-md -translate-x-1/2 -translate-y-1/2 space-y-5 rounded-2xl border border-border bg-background p-6 shadow-2xl",
15962
16154
  className
15963
16155
  ),
15964
16156
  children: [
15965
- /* @__PURE__ */ jsxs25("div", { className: "flex items-start justify-between gap-3", children: [
15966
- /* @__PURE__ */ jsxs25("div", { children: [
15967
- /* @__PURE__ */ jsx27("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
15968
- /* @__PURE__ */ jsx27("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
16157
+ /* @__PURE__ */ jsxs28("div", { className: "flex items-start justify-between gap-3", children: [
16158
+ /* @__PURE__ */ jsxs28("div", { children: [
16159
+ /* @__PURE__ */ jsx30("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
16160
+ /* @__PURE__ */ jsx30("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
15969
16161
  ] }),
15970
- /* @__PURE__ */ jsx27(
16162
+ /* @__PURE__ */ jsx30(
15971
16163
  "button",
15972
16164
  {
15973
16165
  type: "button",
@@ -15978,9 +16170,9 @@ function CheckoutLoginPrompt({
15978
16170
  }
15979
16171
  )
15980
16172
  ] }),
15981
- /* @__PURE__ */ jsxs25("div", { className: "space-y-2", children: [
15982
- /* @__PURE__ */ jsx27("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
15983
- /* @__PURE__ */ jsx27(
16173
+ /* @__PURE__ */ jsxs28("div", { className: "space-y-2", children: [
16174
+ /* @__PURE__ */ jsx30("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
16175
+ /* @__PURE__ */ jsx30(
15984
16176
  "input",
15985
16177
  {
15986
16178
  id: "checkout-login-prompt-email",
@@ -15989,29 +16181,29 @@ function CheckoutLoginPrompt({
15989
16181
  value: email,
15990
16182
  onChange: (e) => onEmailChange(e.target.value),
15991
16183
  placeholder: t.emailPlaceholder,
15992
- className: cn21(
16184
+ className: cn23(
15993
16185
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
15994
16186
  error ? "border-destructive" : "border-border focus:border-primary"
15995
16187
  )
15996
16188
  }
15997
16189
  ),
15998
- error && /* @__PURE__ */ jsx27("p", { className: "text-xs text-destructive", children: error })
16190
+ error && /* @__PURE__ */ jsx30("p", { className: "text-xs text-destructive", children: error })
15999
16191
  ] }),
16000
- /* @__PURE__ */ jsxs25("div", { className: "space-y-2", children: [
16001
- /* @__PURE__ */ jsx27(
16192
+ /* @__PURE__ */ jsxs28("div", { className: "space-y-2", children: [
16193
+ /* @__PURE__ */ jsx30(
16002
16194
  "button",
16003
16195
  {
16004
16196
  type: "button",
16005
16197
  onClick: onSubmitEmail,
16006
16198
  disabled: checking || !isValidEmail,
16007
- className: cn21(
16199
+ className: cn23(
16008
16200
  "flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-2.5 text-sm font-semibold transition-all",
16009
16201
  checking || !isValidEmail ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
16010
16202
  ),
16011
16203
  children: checking ? t.checking : t.continueWithEmail
16012
16204
  }
16013
16205
  ),
16014
- /* @__PURE__ */ jsx27(
16206
+ /* @__PURE__ */ jsx30(
16015
16207
  "button",
16016
16208
  {
16017
16209
  type: "button",
@@ -16028,9 +16220,9 @@ function CheckoutLoginPrompt({
16028
16220
  }
16029
16221
 
16030
16222
  // src/components/checkout-form.tsx
16031
- import { cn as cn22 } from "@reblu/site-ui/utils";
16223
+ import { cn as cn24 } from "@reblu/site-ui/utils";
16032
16224
  import { PhoneInput } from "@reblu/site-ui/phone-input";
16033
- import { Fragment as Fragment6, jsx as jsx28, jsxs as jsxs26 } from "react/jsx-runtime";
16225
+ import { Fragment as Fragment6, jsx as jsx31, jsxs as jsxs29 } from "react/jsx-runtime";
16034
16226
  var DEFAULT_LABELS7 = {
16035
16227
  contactTitle: "Datos de contacto",
16036
16228
  nameLabel: "Nombre completo",
@@ -16086,22 +16278,22 @@ function CheckoutForm({
16086
16278
  event.preventDefault();
16087
16279
  if (discountCode.trim() && !discountApplying) onApplyDiscount();
16088
16280
  }
16089
- return /* @__PURE__ */ jsxs26(Fragment6, { children: [
16281
+ return /* @__PURE__ */ jsxs29(Fragment6, { children: [
16090
16282
  loginPrompt,
16091
- /* @__PURE__ */ jsxs26(
16283
+ /* @__PURE__ */ jsxs29(
16092
16284
  "form",
16093
16285
  {
16094
16286
  "data-testid": "checkout-form",
16095
16287
  onSubmit,
16096
- className: cn22("space-y-8", className),
16288
+ className: cn24("space-y-8", className),
16097
16289
  "data-slot": "checkout-form",
16098
16290
  children: [
16099
- /* @__PURE__ */ jsxs26("section", { className: "space-y-4", children: [
16100
- /* @__PURE__ */ jsx28("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
16101
- /* @__PURE__ */ jsxs26("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
16102
- /* @__PURE__ */ jsxs26("div", { className: "space-y-1", children: [
16103
- /* @__PURE__ */ jsx28("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
16104
- /* @__PURE__ */ jsx28(
16291
+ /* @__PURE__ */ jsxs29("section", { className: "space-y-4", children: [
16292
+ /* @__PURE__ */ jsx31("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
16293
+ /* @__PURE__ */ jsxs29("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
16294
+ /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16295
+ /* @__PURE__ */ jsx31("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
16296
+ /* @__PURE__ */ jsx31(
16105
16297
  "input",
16106
16298
  {
16107
16299
  id: "checkout-form-name",
@@ -16110,17 +16302,17 @@ function CheckoutForm({
16110
16302
  value: contact.name,
16111
16303
  onChange: (e) => patchContact({ name: e.target.value }),
16112
16304
  placeholder: t.namePlaceholder,
16113
- className: cn22(
16305
+ className: cn24(
16114
16306
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
16115
16307
  contactErrors?.name ? "border-destructive" : "border-border focus:border-primary"
16116
16308
  )
16117
16309
  }
16118
16310
  ),
16119
- contactErrors?.name && /* @__PURE__ */ jsx28("p", { className: "text-xs text-destructive", children: contactErrors.name })
16311
+ contactErrors?.name && /* @__PURE__ */ jsx31("p", { className: "text-xs text-destructive", children: contactErrors.name })
16120
16312
  ] }),
16121
- /* @__PURE__ */ jsxs26("div", { className: "space-y-1", children: [
16122
- /* @__PURE__ */ jsx28("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
16123
- /* @__PURE__ */ jsx28(
16313
+ /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16314
+ /* @__PURE__ */ jsx31("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
16315
+ /* @__PURE__ */ jsx31(
16124
16316
  "input",
16125
16317
  {
16126
16318
  id: "checkout-form-email",
@@ -16129,15 +16321,15 @@ function CheckoutForm({
16129
16321
  value: contact.email,
16130
16322
  onChange: (e) => patchContact({ email: e.target.value }),
16131
16323
  placeholder: t.emailPlaceholder,
16132
- className: cn22(
16324
+ className: cn24(
16133
16325
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
16134
16326
  contactErrors?.email ? "border-destructive" : "border-border focus:border-primary"
16135
16327
  )
16136
16328
  }
16137
16329
  ),
16138
- contactErrors?.email && /* @__PURE__ */ jsx28("p", { className: "text-xs text-destructive", children: contactErrors.email })
16330
+ contactErrors?.email && /* @__PURE__ */ jsx31("p", { className: "text-xs text-destructive", children: contactErrors.email })
16139
16331
  ] }),
16140
- /* @__PURE__ */ jsx28("div", { className: "space-y-1", children: /* @__PURE__ */ jsx28(
16332
+ /* @__PURE__ */ jsx31("div", { className: "space-y-1", children: /* @__PURE__ */ jsx31(
16141
16333
  PhoneInput,
16142
16334
  {
16143
16335
  id: "checkout-form-phone",
@@ -16151,26 +16343,26 @@ function CheckoutForm({
16151
16343
  ] })
16152
16344
  ] }),
16153
16345
  children2,
16154
- generalError ? /* @__PURE__ */ jsx28("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
16155
- /* @__PURE__ */ jsxs26("section", { className: "space-y-3", children: [
16156
- /* @__PURE__ */ jsx28("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
16157
- autoDiscount ? /* @__PURE__ */ jsxs26(
16346
+ generalError ? /* @__PURE__ */ jsx31("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
16347
+ /* @__PURE__ */ jsxs29("section", { className: "space-y-3", children: [
16348
+ /* @__PURE__ */ jsx31("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
16349
+ autoDiscount ? /* @__PURE__ */ jsxs29(
16158
16350
  "div",
16159
16351
  {
16160
16352
  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",
16161
16353
  "data-slot": "checkout-staff-discount",
16162
16354
  children: [
16163
- /* @__PURE__ */ jsx28("span", { className: "font-semibold", children: t.staffDiscountApplied }),
16164
- /* @__PURE__ */ jsx28("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
16355
+ /* @__PURE__ */ jsx31("span", { className: "font-semibold", children: t.staffDiscountApplied }),
16356
+ /* @__PURE__ */ jsx31("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
16165
16357
  ]
16166
16358
  }
16167
16359
  ) : null,
16168
- appliedDiscount && !autoDiscount ? /* @__PURE__ */ jsxs26("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: [
16169
- /* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
16170
- /* @__PURE__ */ jsx28("span", { className: "font-semibold", children: appliedDiscount.code }),
16171
- /* @__PURE__ */ jsx28("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
16360
+ appliedDiscount && !autoDiscount ? /* @__PURE__ */ jsxs29("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: [
16361
+ /* @__PURE__ */ jsxs29("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
16362
+ /* @__PURE__ */ jsx31("span", { className: "font-semibold", children: appliedDiscount.code }),
16363
+ /* @__PURE__ */ jsx31("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
16172
16364
  ] }),
16173
- /* @__PURE__ */ jsx28(
16365
+ /* @__PURE__ */ jsx31(
16174
16366
  "button",
16175
16367
  {
16176
16368
  type: "button",
@@ -16180,9 +16372,9 @@ function CheckoutForm({
16180
16372
  children: t.removeDiscount
16181
16373
  }
16182
16374
  )
16183
- ] }) : /* @__PURE__ */ jsxs26("div", { className: "flex gap-2", children: [
16184
- /* @__PURE__ */ jsx28("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
16185
- /* @__PURE__ */ jsx28(
16375
+ ] }) : /* @__PURE__ */ jsxs29("div", { className: "flex gap-2", children: [
16376
+ /* @__PURE__ */ jsx31("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
16377
+ /* @__PURE__ */ jsx31(
16186
16378
  "input",
16187
16379
  {
16188
16380
  id: "checkout-form-discount-code",
@@ -16194,7 +16386,7 @@ function CheckoutForm({
16194
16386
  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"
16195
16387
  }
16196
16388
  ),
16197
- /* @__PURE__ */ jsx28(
16389
+ /* @__PURE__ */ jsx31(
16198
16390
  "button",
16199
16391
  {
16200
16392
  type: "button",
@@ -16205,14 +16397,14 @@ function CheckoutForm({
16205
16397
  }
16206
16398
  )
16207
16399
  ] }),
16208
- discountError && /* @__PURE__ */ jsx28("p", { className: "text-xs text-destructive", children: discountError })
16400
+ discountError && /* @__PURE__ */ jsx31("p", { className: "text-xs text-destructive", children: discountError })
16209
16401
  ] }),
16210
- /* @__PURE__ */ jsx28(
16402
+ /* @__PURE__ */ jsx31(
16211
16403
  "button",
16212
16404
  {
16213
16405
  type: "submit",
16214
16406
  disabled: submitting || submitDisabled,
16215
- className: cn22(
16407
+ className: cn24(
16216
16408
  "flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-3 font-semibold transition-all",
16217
16409
  submitting || submitDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
16218
16410
  ),
@@ -16226,11 +16418,11 @@ function CheckoutForm({
16226
16418
  }
16227
16419
 
16228
16420
  // src/components/order-confirmation.tsx
16229
- import { cn as cn24 } from "@reblu/site-ui/utils";
16421
+ import { cn as cn26 } from "@reblu/site-ui/utils";
16230
16422
 
16231
16423
  // src/components/order-invoice-link.tsx
16232
- import { cn as cn23 } from "@reblu/site-ui/utils";
16233
- import { jsx as jsx29, jsxs as jsxs27 } from "react/jsx-runtime";
16424
+ import { cn as cn25 } from "@reblu/site-ui/utils";
16425
+ import { jsx as jsx32, jsxs as jsxs30 } from "react/jsx-runtime";
16234
16426
  var DEFAULT_LABELS8 = {
16235
16427
  linkLabel: "Descargar la factura {number}",
16236
16428
  signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
@@ -16238,8 +16430,8 @@ var DEFAULT_LABELS8 = {
16238
16430
  function OrderInvoiceLink({ invoice, labels, className }) {
16239
16431
  if (!invoice) return null;
16240
16432
  const t = { ...DEFAULT_LABELS8, ...labels };
16241
- return /* @__PURE__ */ jsxs27("div", { className: cn23("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
16242
- /* @__PURE__ */ jsx29(
16433
+ return /* @__PURE__ */ jsxs30("div", { className: cn25("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
16434
+ /* @__PURE__ */ jsx32(
16243
16435
  "a",
16244
16436
  {
16245
16437
  href: invoice.url,
@@ -16247,12 +16439,12 @@ function OrderInvoiceLink({ invoice, labels, className }) {
16247
16439
  children: t.linkLabel.replace("{number}", invoice.number)
16248
16440
  }
16249
16441
  ),
16250
- /* @__PURE__ */ jsx29("p", { className: "text-muted-foreground", children: t.signInHint })
16442
+ /* @__PURE__ */ jsx32("p", { className: "text-muted-foreground", children: t.signInHint })
16251
16443
  ] });
16252
16444
  }
16253
16445
 
16254
16446
  // src/components/order-confirmation.tsx
16255
- import { jsx as jsx30, jsxs as jsxs28 } from "react/jsx-runtime";
16447
+ import { jsx as jsx33, jsxs as jsxs31 } from "react/jsx-runtime";
16256
16448
  var DEFAULT_LABELS9 = {
16257
16449
  pollingTitle: "Confirmando tu pedido\u2026",
16258
16450
  pollingDescription: "Estamos procesando el pago, un momento\u2026",
@@ -16327,60 +16519,60 @@ function OrderConfirmation({
16327
16519
  const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
16328
16520
  const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
16329
16521
  const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
16330
- return /* @__PURE__ */ jsxs28("div", { className: cn24("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
16331
- /* @__PURE__ */ jsx30("h1", { className: "text-3xl font-bold", children: title }),
16332
- /* @__PURE__ */ jsx30("p", { className: "text-lg text-muted-foreground", children: description }),
16333
- showFullOrderSummary && order && /* @__PURE__ */ jsxs28("div", { className: "space-y-6", children: [
16334
- /* @__PURE__ */ jsxs28("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16335
- /* @__PURE__ */ jsx30("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
16336
- /* @__PURE__ */ jsx30("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
16522
+ return /* @__PURE__ */ jsxs31("div", { className: cn26("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
16523
+ /* @__PURE__ */ jsx33("h1", { className: "text-3xl font-bold", children: title }),
16524
+ /* @__PURE__ */ jsx33("p", { className: "text-lg text-muted-foreground", children: description }),
16525
+ showFullOrderSummary && order && /* @__PURE__ */ jsxs31("div", { className: "space-y-6", children: [
16526
+ /* @__PURE__ */ jsxs31("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16527
+ /* @__PURE__ */ jsx33("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
16528
+ /* @__PURE__ */ jsx33("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
16337
16529
  ] }),
16338
- /* @__PURE__ */ jsxs28("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
16339
- order.items.map((item, idx) => /* @__PURE__ */ jsxs28(
16530
+ /* @__PURE__ */ jsxs31("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
16531
+ order.items.map((item, idx) => /* @__PURE__ */ jsxs31(
16340
16532
  "div",
16341
16533
  {
16342
16534
  className: "flex justify-between gap-4 text-sm",
16343
16535
  children: [
16344
- /* @__PURE__ */ jsxs28("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
16536
+ /* @__PURE__ */ jsxs31("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
16345
16537
  item.product.name,
16346
16538
  item.variant ? ` (${item.variant.name})` : "",
16347
16539
  " x",
16348
16540
  item.quantity
16349
16541
  ] }),
16350
- /* @__PURE__ */ jsx30("span", { children: formatPrice(item.total, currencyCode, locale) })
16542
+ /* @__PURE__ */ jsx33("span", { children: formatPrice(item.total, currencyCode, locale) })
16351
16543
  ]
16352
16544
  },
16353
16545
  idx
16354
16546
  )),
16355
- /* @__PURE__ */ jsx30("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ jsxs28("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
16356
- /* @__PURE__ */ jsx30("span", { children: t.totalLabel }),
16357
- /* @__PURE__ */ jsx30("span", { children: formatPrice(order.total, currencyCode, locale) })
16547
+ /* @__PURE__ */ jsx33("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ jsxs31("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
16548
+ /* @__PURE__ */ jsx33("span", { children: t.totalLabel }),
16549
+ /* @__PURE__ */ jsx33("span", { children: formatPrice(order.total, currencyCode, locale) })
16358
16550
  ] }) })
16359
16551
  ] }),
16360
- showPurchaseTexts && order.purchaseTexts?.length ? /* @__PURE__ */ jsx30("div", { className: "mx-auto max-w-sm space-y-3 text-left", "data-slot": "order-confirmation-purchase-texts", children: order.purchaseTexts.map((entry) => /* @__PURE__ */ jsxs28(
16552
+ showPurchaseTexts && order.purchaseTexts?.length ? /* @__PURE__ */ jsx33("div", { className: "mx-auto max-w-sm space-y-3 text-left", "data-slot": "order-confirmation-purchase-texts", children: order.purchaseTexts.map((entry) => /* @__PURE__ */ jsxs31(
16361
16553
  "div",
16362
16554
  {
16363
16555
  className: "rounded-xl border border-border bg-card p-4",
16364
16556
  "data-slot": "order-confirmation-purchase-text",
16365
16557
  "data-kind": entry.kind,
16366
16558
  children: [
16367
- /* @__PURE__ */ jsx30("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: entry.label }),
16368
- entry.place ? /* @__PURE__ */ jsxs28("address", { className: "mb-2 text-sm not-italic", "data-slot": "order-confirmation-pickup-place", children: [
16369
- entry.place.name ? /* @__PURE__ */ jsx30("span", { className: "block font-medium", children: entry.place.name }) : null,
16370
- entry.place.address.map((line) => /* @__PURE__ */ jsx30("span", { className: "block", children: line }, line))
16559
+ /* @__PURE__ */ jsx33("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: entry.label }),
16560
+ entry.place ? /* @__PURE__ */ jsxs31("address", { className: "mb-2 text-sm not-italic", "data-slot": "order-confirmation-pickup-place", children: [
16561
+ entry.place.name ? /* @__PURE__ */ jsx33("span", { className: "block font-medium", children: entry.place.name }) : null,
16562
+ entry.place.address.map((line) => /* @__PURE__ */ jsx33("span", { className: "block", children: line }, line))
16371
16563
  ] }) : null,
16372
- /* @__PURE__ */ jsx30("p", { className: "whitespace-pre-line text-sm", children: entry.text })
16564
+ /* @__PURE__ */ jsx33("p", { className: "whitespace-pre-line text-sm", children: entry.text })
16373
16565
  ]
16374
16566
  },
16375
16567
  entry.kind
16376
16568
  )) }) : null,
16377
- t.foundDescription.includes("{email}") ? null : /* @__PURE__ */ jsxs28("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
16569
+ t.foundDescription.includes("{email}") ? null : /* @__PURE__ */ jsxs31("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
16378
16570
  t.confirmationEmailPrefix,
16379
16571
  " ",
16380
- /* @__PURE__ */ jsx30("span", { className: "font-medium text-foreground", children: order.customerEmail }),
16572
+ /* @__PURE__ */ jsx33("span", { className: "font-medium text-foreground", children: order.customerEmail }),
16381
16573
  "."
16382
16574
  ] }),
16383
- /* @__PURE__ */ jsx30(
16575
+ /* @__PURE__ */ jsx33(
16384
16576
  OrderInvoiceLink,
16385
16577
  {
16386
16578
  invoice: order.invoice,
@@ -16388,11 +16580,11 @@ function OrderConfirmation({
16388
16580
  }
16389
16581
  )
16390
16582
  ] }),
16391
- showOrderReference && order && /* @__PURE__ */ jsxs28("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16392
- /* @__PURE__ */ jsx30("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
16393
- /* @__PURE__ */ jsx30("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
16583
+ showOrderReference && order && /* @__PURE__ */ jsxs31("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16584
+ /* @__PURE__ */ jsx33("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
16585
+ /* @__PURE__ */ jsx33("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
16394
16586
  ] }),
16395
- status === "failed" && cartHref && /* @__PURE__ */ jsx30(
16587
+ status === "failed" && cartHref && /* @__PURE__ */ jsx33(
16396
16588
  "a",
16397
16589
  {
16398
16590
  href: cartHref,
@@ -16400,7 +16592,7 @@ function OrderConfirmation({
16400
16592
  children: t.backToCartLabel
16401
16593
  }
16402
16594
  ),
16403
- showRecheck && /* @__PURE__ */ jsx30(
16595
+ showRecheck && /* @__PURE__ */ jsx33(
16404
16596
  "button",
16405
16597
  {
16406
16598
  type: "button",
@@ -16409,16 +16601,16 @@ function OrderConfirmation({
16409
16601
  children: t.recheckLabel
16410
16602
  }
16411
16603
  ),
16412
- showSessionReference && /* @__PURE__ */ jsxs28("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16413
- /* @__PURE__ */ jsx30("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
16414
- /* @__PURE__ */ jsx30("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
16604
+ showSessionReference && /* @__PURE__ */ jsxs31("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16605
+ /* @__PURE__ */ jsx33("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
16606
+ /* @__PURE__ */ jsx33("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
16415
16607
  ] })
16416
16608
  ] });
16417
16609
  }
16418
16610
 
16419
16611
  // src/components/full-invoice-fields.tsx
16420
- import { cn as cn25 } from "@reblu/site-ui/utils";
16421
- import { jsx as jsx31, jsxs as jsxs29 } from "react/jsx-runtime";
16612
+ import { cn as cn27 } from "@reblu/site-ui/utils";
16613
+ import { jsx as jsx34, jsxs as jsxs32 } from "react/jsx-runtime";
16422
16614
  var EMPTY_FULL_INVOICE_VALUE = {
16423
16615
  wantsFullInvoice: false,
16424
16616
  billingIdType: "NIF",
@@ -16535,12 +16727,12 @@ function FullInvoiceFields({
16535
16727
  const showFields = value.wantsFullInvoice || overCap;
16536
16728
  const isSpanishNif = value.billingIdType === "NIF";
16537
16729
  const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
16538
- const error = (key2) => errors[key2] ? /* @__PURE__ */ jsx31("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
16730
+ const error = (key2) => errors[key2] ? /* @__PURE__ */ jsx34("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
16539
16731
  const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
16540
- return /* @__PURE__ */ jsxs29("section", { className: cn25("space-y-4", className), "data-slot": "full-invoice-fields", children: [
16541
- overCap ? /* @__PURE__ */ jsx31("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16542
- /* @__PURE__ */ jsxs29("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
16543
- /* @__PURE__ */ jsx31(
16732
+ return /* @__PURE__ */ jsxs32("section", { className: cn27("space-y-4", className), "data-slot": "full-invoice-fields", children: [
16733
+ overCap ? /* @__PURE__ */ jsx34("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ jsxs32("div", { className: "space-y-1", children: [
16734
+ /* @__PURE__ */ jsxs32("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
16735
+ /* @__PURE__ */ jsx34(
16544
16736
  "input",
16545
16737
  {
16546
16738
  type: "checkbox",
@@ -16550,12 +16742,12 @@ function FullInvoiceFields({
16550
16742
  ),
16551
16743
  t.toggle
16552
16744
  ] }),
16553
- /* @__PURE__ */ jsx31("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
16745
+ /* @__PURE__ */ jsx34("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
16554
16746
  ] }),
16555
- showFields && /* @__PURE__ */ jsxs29("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
16556
- /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16557
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
16558
- /* @__PURE__ */ jsx31(
16747
+ showFields && /* @__PURE__ */ jsxs32("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
16748
+ /* @__PURE__ */ jsxs32("div", { className: "space-y-1", children: [
16749
+ /* @__PURE__ */ jsx34("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
16750
+ /* @__PURE__ */ jsx34(
16559
16751
  "select",
16560
16752
  {
16561
16753
  id: "full-invoice-id-type",
@@ -16564,14 +16756,14 @@ function FullInvoiceFields({
16564
16756
  value: value.billingIdType,
16565
16757
  onChange: (e) => set("billingIdType", e.target.value),
16566
16758
  ...invalid2("billingIdType"),
16567
- children: ID_TYPES.map((type) => /* @__PURE__ */ jsx31("option", { value: type, children: t.idTypeOptions[type] }, type))
16759
+ children: ID_TYPES.map((type) => /* @__PURE__ */ jsx34("option", { value: type, children: t.idTypeOptions[type] }, type))
16568
16760
  }
16569
16761
  ),
16570
16762
  error("billingIdType")
16571
16763
  ] }),
16572
- !isSpanishNif && /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16573
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
16574
- /* @__PURE__ */ jsxs29(
16764
+ !isSpanishNif && /* @__PURE__ */ jsxs32("div", { className: "space-y-1", children: [
16765
+ /* @__PURE__ */ jsx34("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
16766
+ /* @__PURE__ */ jsxs32(
16575
16767
  "select",
16576
16768
  {
16577
16769
  id: "full-invoice-id-country",
@@ -16581,16 +16773,16 @@ function FullInvoiceFields({
16581
16773
  onChange: (e) => set("billingIdCountry", e.target.value),
16582
16774
  ...invalid2("billingIdCountry"),
16583
16775
  children: [
16584
- /* @__PURE__ */ jsx31("option", { value: "", disabled: true, children: t.chooseCountry }),
16585
- countries.map((c) => /* @__PURE__ */ jsx31("option", { value: c.code, children: c.name }, c.code))
16776
+ /* @__PURE__ */ jsx34("option", { value: "", disabled: true, children: t.chooseCountry }),
16777
+ countries.map((c) => /* @__PURE__ */ jsx34("option", { value: c.code, children: c.name }, c.code))
16586
16778
  ]
16587
16779
  }
16588
16780
  ),
16589
16781
  error("billingIdCountry")
16590
16782
  ] }),
16591
- /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16592
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
16593
- /* @__PURE__ */ jsx31(
16783
+ /* @__PURE__ */ jsxs32("div", { className: "space-y-1", children: [
16784
+ /* @__PURE__ */ jsx34("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
16785
+ /* @__PURE__ */ jsx34(
16594
16786
  "input",
16595
16787
  {
16596
16788
  id: "full-invoice-nif",
@@ -16603,9 +16795,9 @@ function FullInvoiceFields({
16603
16795
  ),
16604
16796
  error("billingNif")
16605
16797
  ] }),
16606
- /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16607
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
16608
- /* @__PURE__ */ jsx31(
16798
+ /* @__PURE__ */ jsxs32("div", { className: "space-y-1", children: [
16799
+ /* @__PURE__ */ jsx34("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
16800
+ /* @__PURE__ */ jsx34(
16609
16801
  "input",
16610
16802
  {
16611
16803
  id: "full-invoice-name",
@@ -16618,9 +16810,9 @@ function FullInvoiceFields({
16618
16810
  ),
16619
16811
  error("billingName")
16620
16812
  ] }),
16621
- /* @__PURE__ */ jsxs29("div", { className: "space-y-1 sm:col-span-2", children: [
16622
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
16623
- /* @__PURE__ */ jsx31(
16813
+ /* @__PURE__ */ jsxs32("div", { className: "space-y-1 sm:col-span-2", children: [
16814
+ /* @__PURE__ */ jsx34("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
16815
+ /* @__PURE__ */ jsx34(
16624
16816
  "input",
16625
16817
  {
16626
16818
  id: "full-invoice-street",
@@ -16632,9 +16824,9 @@ function FullInvoiceFields({
16632
16824
  }
16633
16825
  )
16634
16826
  ] }),
16635
- /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16636
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
16637
- /* @__PURE__ */ jsx31(
16827
+ /* @__PURE__ */ jsxs32("div", { className: "space-y-1", children: [
16828
+ /* @__PURE__ */ jsx34("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
16829
+ /* @__PURE__ */ jsx34(
16638
16830
  "input",
16639
16831
  {
16640
16832
  id: "full-invoice-postal-code",
@@ -16645,9 +16837,9 @@ function FullInvoiceFields({
16645
16837
  }
16646
16838
  )
16647
16839
  ] }),
16648
- /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16649
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
16650
- /* @__PURE__ */ jsx31(
16840
+ /* @__PURE__ */ jsxs32("div", { className: "space-y-1", children: [
16841
+ /* @__PURE__ */ jsx34("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
16842
+ /* @__PURE__ */ jsx34(
16651
16843
  "input",
16652
16844
  {
16653
16845
  id: "full-invoice-city",
@@ -16658,9 +16850,9 @@ function FullInvoiceFields({
16658
16850
  }
16659
16851
  )
16660
16852
  ] }),
16661
- /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16662
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
16663
- /* @__PURE__ */ jsx31(
16853
+ /* @__PURE__ */ jsxs32("div", { className: "space-y-1", children: [
16854
+ /* @__PURE__ */ jsx34("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
16855
+ /* @__PURE__ */ jsx34(
16664
16856
  "select",
16665
16857
  {
16666
16858
  id: "full-invoice-country",
@@ -16668,18 +16860,18 @@ function FullInvoiceFields({
16668
16860
  required: true,
16669
16861
  value: value.country,
16670
16862
  onChange: (e) => set("country", e.target.value),
16671
- children: countries.map((c) => /* @__PURE__ */ jsx31("option", { value: c.code, children: c.name }, c.code))
16863
+ children: countries.map((c) => /* @__PURE__ */ jsx34("option", { value: c.code, children: c.name }, c.code))
16672
16864
  }
16673
16865
  )
16674
16866
  ] }),
16675
- /* @__PURE__ */ jsx31("div", { className: "sm:col-span-2", children: error("address") })
16867
+ /* @__PURE__ */ jsx34("div", { className: "sm:col-span-2", children: error("address") })
16676
16868
  ] })
16677
16869
  ] });
16678
16870
  }
16679
16871
 
16680
16872
  // src/components/checkout-delivery-choice.tsx
16681
- import { cn as cn26 } from "@reblu/site-ui/utils";
16682
- import { jsx as jsx32, jsxs as jsxs30 } from "react/jsx-runtime";
16873
+ import { cn as cn28 } from "@reblu/site-ui/utils";
16874
+ import { jsx as jsx35, jsxs as jsxs33 } from "react/jsx-runtime";
16683
16875
  var EMPTY_CHECKOUT_ADDRESS = {
16684
16876
  firstName: "",
16685
16877
  lastName: "",
@@ -16742,17 +16934,17 @@ function CheckoutDeliveryChoice({
16742
16934
  const isPickup = value?.type === "PICKUP";
16743
16935
  const isShipping = value?.type === "SHIPPING";
16744
16936
  const errorId = `${uid}-delivery-error`;
16745
- return /* @__PURE__ */ jsxs30(
16937
+ return /* @__PURE__ */ jsxs33(
16746
16938
  "fieldset",
16747
16939
  {
16748
16940
  "data-slot": "checkout-delivery",
16749
16941
  "aria-describedby": error ? errorId : void 0,
16750
- className: cn26("space-y-4", className),
16942
+ className: cn28("space-y-4", className),
16751
16943
  children: [
16752
- /* @__PURE__ */ jsx32("legend", { className: "mb-2 text-lg font-semibold", children: t.legend }),
16753
- /* @__PURE__ */ jsxs30("div", { className: "grid gap-3 sm:grid-cols-2", children: [
16754
- homeDelivery ? /* @__PURE__ */ jsxs30("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16755
- /* @__PURE__ */ jsx32(
16944
+ /* @__PURE__ */ jsx35("legend", { className: "mb-2 text-lg font-semibold", children: t.legend }),
16945
+ /* @__PURE__ */ jsxs33("div", { className: "grid gap-3 sm:grid-cols-2", children: [
16946
+ homeDelivery ? /* @__PURE__ */ jsxs33("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16947
+ /* @__PURE__ */ jsx35(
16756
16948
  "input",
16757
16949
  {
16758
16950
  type: "radio",
@@ -16762,16 +16954,16 @@ function CheckoutDeliveryChoice({
16762
16954
  className: "mt-0.5 size-4 accent-primary"
16763
16955
  }
16764
16956
  ),
16765
- /* @__PURE__ */ jsxs30("span", { className: "flex-1 space-y-1", children: [
16766
- /* @__PURE__ */ jsxs30("span", { className: "flex justify-between gap-2 font-medium", children: [
16767
- /* @__PURE__ */ jsx32("span", { children: copy.shippingOptionLabel }),
16768
- /* @__PURE__ */ jsx32("span", { className: "tabular-nums", children: homeCost })
16957
+ /* @__PURE__ */ jsxs33("span", { className: "flex-1 space-y-1", children: [
16958
+ /* @__PURE__ */ jsxs33("span", { className: "flex justify-between gap-2 font-medium", children: [
16959
+ /* @__PURE__ */ jsx35("span", { children: copy.shippingOptionLabel }),
16960
+ /* @__PURE__ */ jsx35("span", { className: "tabular-nums", children: homeCost })
16769
16961
  ] }),
16770
- delivery.estimatedDeliveryText ? /* @__PURE__ */ jsx32("span", { className: "block text-sm text-muted-foreground", children: delivery.estimatedDeliveryText }) : null
16962
+ delivery.estimatedDeliveryText ? /* @__PURE__ */ jsx35("span", { className: "block text-sm text-muted-foreground", children: delivery.estimatedDeliveryText }) : null
16771
16963
  ] })
16772
16964
  ] }) : null,
16773
- pickup ? /* @__PURE__ */ jsxs30("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16774
- /* @__PURE__ */ jsx32(
16965
+ pickup ? /* @__PURE__ */ jsxs33("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16966
+ /* @__PURE__ */ jsx35(
16775
16967
  "input",
16776
16968
  {
16777
16969
  type: "radio",
@@ -16781,23 +16973,23 @@ function CheckoutDeliveryChoice({
16781
16973
  className: "mt-0.5 size-4 accent-primary"
16782
16974
  }
16783
16975
  ),
16784
- /* @__PURE__ */ jsxs30("span", { className: "flex flex-1 justify-between gap-2 font-medium", children: [
16785
- /* @__PURE__ */ jsx32("span", { children: copy.pickupOptionLabel }),
16786
- /* @__PURE__ */ jsx32("span", { children: t.free })
16976
+ /* @__PURE__ */ jsxs33("span", { className: "flex flex-1 justify-between gap-2 font-medium", children: [
16977
+ /* @__PURE__ */ jsx35("span", { children: copy.pickupOptionLabel }),
16978
+ /* @__PURE__ */ jsx35("span", { children: t.free })
16787
16979
  ] })
16788
16980
  ] }) : null
16789
16981
  ] }),
16790
- error ? /* @__PURE__ */ jsx32("p", { id: errorId, role: "alert", className: "text-sm text-destructive", children: error }) : null,
16791
- isPickup ? /* @__PURE__ */ jsxs30("div", { role: "radiogroup", "aria-labelledby": `${uid}-points`, className: "space-y-2", children: [
16792
- /* @__PURE__ */ jsx32("p", { id: `${uid}-points`, className: "text-sm font-medium", children: t.pickupPointsLegend }),
16982
+ error ? /* @__PURE__ */ jsx35("p", { id: errorId, role: "alert", className: "text-sm text-destructive", children: error }) : null,
16983
+ isPickup ? /* @__PURE__ */ jsxs33("div", { role: "radiogroup", "aria-labelledby": `${uid}-points`, className: "space-y-2", children: [
16984
+ /* @__PURE__ */ jsx35("p", { id: `${uid}-points`, className: "text-sm font-medium", children: t.pickupPointsLegend }),
16793
16985
  delivery.pickupLocations.map((location2) => {
16794
16986
  const descId = `${uid}-point-${location2.id}`;
16795
- return /* @__PURE__ */ jsxs30(
16987
+ return /* @__PURE__ */ jsxs33(
16796
16988
  "label",
16797
16989
  {
16798
16990
  className: "flex cursor-pointer items-start gap-3 rounded-lg border border-border p-3 has-[:checked]:border-primary",
16799
16991
  children: [
16800
- /* @__PURE__ */ jsx32(
16992
+ /* @__PURE__ */ jsx35(
16801
16993
  "input",
16802
16994
  {
16803
16995
  type: "radio",
@@ -16808,9 +17000,9 @@ function CheckoutDeliveryChoice({
16808
17000
  className: "mt-0.5 size-4 accent-primary"
16809
17001
  }
16810
17002
  ),
16811
- /* @__PURE__ */ jsxs30("span", { className: "space-y-0.5 text-sm", children: [
16812
- /* @__PURE__ */ jsx32("span", { className: "block font-medium", children: location2.name }),
16813
- /* @__PURE__ */ jsx32("span", { id: descId, className: "block text-muted-foreground", children: pickupDescription(location2) })
17003
+ /* @__PURE__ */ jsxs33("span", { className: "space-y-0.5 text-sm", children: [
17004
+ /* @__PURE__ */ jsx35("span", { className: "block font-medium", children: location2.name }),
17005
+ /* @__PURE__ */ jsx35("span", { id: descId, className: "block text-muted-foreground", children: pickupDescription(location2) })
16814
17006
  ] })
16815
17007
  ]
16816
17008
  },
@@ -16818,14 +17010,14 @@ function CheckoutDeliveryChoice({
16818
17010
  );
16819
17011
  })
16820
17012
  ] }) : null,
16821
- isShipping ? /* @__PURE__ */ jsxs30("fieldset", { className: "space-y-3", children: [
16822
- /* @__PURE__ */ jsx32("legend", { className: "mb-2 text-sm font-medium", children: t.addressLegend }),
16823
- /* @__PURE__ */ jsx32("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: ADDRESS_FIELDS.map(({ key: key2, autoComplete, required, wide }) => {
17013
+ isShipping ? /* @__PURE__ */ jsxs33("fieldset", { className: "space-y-3", children: [
17014
+ /* @__PURE__ */ jsx35("legend", { className: "mb-2 text-sm font-medium", children: t.addressLegend }),
17015
+ /* @__PURE__ */ jsx35("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: ADDRESS_FIELDS.map(({ key: key2, autoComplete, required, wide }) => {
16824
17016
  const fieldId = `${uid}-${key2}`;
16825
17017
  const fieldError = addressErrors?.[key2];
16826
- return /* @__PURE__ */ jsxs30("div", { className: cn26("space-y-1", wide && "sm:col-span-2"), children: [
16827
- /* @__PURE__ */ jsx32("label", { htmlFor: fieldId, className: "text-sm font-medium", children: t[key2] }),
16828
- /* @__PURE__ */ jsx32(
17018
+ return /* @__PURE__ */ jsxs33("div", { className: cn28("space-y-1", wide && "sm:col-span-2"), children: [
17019
+ /* @__PURE__ */ jsx35("label", { htmlFor: fieldId, className: "text-sm font-medium", children: t[key2] }),
17020
+ /* @__PURE__ */ jsx35(
16829
17021
  "input",
16830
17022
  {
16831
17023
  id: fieldId,
@@ -16836,13 +17028,13 @@ function CheckoutDeliveryChoice({
16836
17028
  onChange: (e) => onAddressChange({ ...address, [key2]: e.target.value }),
16837
17029
  "aria-invalid": fieldError ? true : void 0,
16838
17030
  "aria-describedby": fieldError ? `${fieldId}-error` : void 0,
16839
- className: cn26(
17031
+ className: cn28(
16840
17032
  INPUT_CLASS,
16841
17033
  fieldError ? "border-destructive" : "border-border focus:border-primary"
16842
17034
  )
16843
17035
  }
16844
17036
  ),
16845
- fieldError ? /* @__PURE__ */ jsx32("p", { id: `${fieldId}-error`, className: "text-sm text-destructive", children: fieldError }) : null
17037
+ fieldError ? /* @__PURE__ */ jsx35("p", { id: `${fieldId}-error`, className: "text-sm text-destructive", children: fieldError }) : null
16846
17038
  ] }, key2);
16847
17039
  }) })
16848
17040
  ] }) : null
@@ -16884,8 +17076,8 @@ function toCheckoutFulfillmentFields(value, address, requiresDelivery = true) {
16884
17076
  }
16885
17077
 
16886
17078
  // src/components/checkout-quote-summary.tsx
16887
- import { cn as cn27 } from "@reblu/site-ui/utils";
16888
- import { Fragment as Fragment7, jsx as jsx33, jsxs as jsxs31 } from "react/jsx-runtime";
17079
+ import { cn as cn29 } from "@reblu/site-ui/utils";
17080
+ import { Fragment as Fragment7, jsx as jsx36, jsxs as jsxs34 } from "react/jsx-runtime";
16889
17081
  var DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS = {
16890
17082
  subtotal: "Subtotal",
16891
17083
  discount: (codeOrLabel, isAutomatic) => isAutomatic ? codeOrLabel : `Descuento (${codeOrLabel})`,
@@ -16902,9 +17094,9 @@ function Row({
16902
17094
  value,
16903
17095
  className
16904
17096
  }) {
16905
- return /* @__PURE__ */ jsxs31("div", { "data-slot": "checkout-quote-row", className: cn27("flex justify-between gap-4", className), children: [
16906
- /* @__PURE__ */ jsx33("dt", { children: name }),
16907
- /* @__PURE__ */ jsx33("dd", { className: "shrink-0 tabular-nums", children: value })
17097
+ return /* @__PURE__ */ jsxs34("div", { "data-slot": "checkout-quote-row", className: cn29("flex justify-between gap-4", className), children: [
17098
+ /* @__PURE__ */ jsx36("dt", { children: name }),
17099
+ /* @__PURE__ */ jsx36("dd", { className: "shrink-0 tabular-nums", children: value })
16908
17100
  ] });
16909
17101
  }
16910
17102
  function CheckoutQuoteSummary({
@@ -16920,22 +17112,22 @@ function CheckoutQuoteSummary({
16920
17112
  const price = (cents) => formatPrice(cents, currencyCode, locale);
16921
17113
  const { fulfillment, shipping, tax, discount } = quote;
16922
17114
  const Tag = `h${headingLevel}`;
16923
- return /* @__PURE__ */ jsxs31("section", { "data-slot": "checkout-quote-summary", className: slotClassName("space-y-4", "", className), children: [
16924
- heading ? /* @__PURE__ */ jsx33(Tag, { className: "text-lg font-semibold", children: heading }) : null,
16925
- /* @__PURE__ */ jsx33("ul", { className: "space-y-3 text-sm", children: quote.lines.map((line) => /* @__PURE__ */ jsxs31("li", { className: "flex justify-between gap-4", children: [
16926
- /* @__PURE__ */ jsxs31("div", { className: "min-w-0 space-y-0.5", children: [
16927
- /* @__PURE__ */ jsx33("p", { className: "font-medium", children: line.name }),
16928
- line.variantName ? /* @__PURE__ */ jsx33("p", { className: "text-muted-foreground", children: line.variantName }) : null,
16929
- /* @__PURE__ */ jsxs31("p", { className: "flex flex-wrap items-center gap-2 text-muted-foreground", children: [
16930
- line.kindLabel ? /* @__PURE__ */ jsx33("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,
16931
- /* @__PURE__ */ jsx33("span", { children: t.quantityTimesUnit(line.quantity, price(line.unitPrice)) })
17115
+ return /* @__PURE__ */ jsxs34("section", { "data-slot": "checkout-quote-summary", className: slotClassName("space-y-4", "", className), children: [
17116
+ heading ? /* @__PURE__ */ jsx36(Tag, { className: "text-lg font-semibold", children: heading }) : null,
17117
+ /* @__PURE__ */ jsx36("ul", { className: "space-y-3 text-sm", children: quote.lines.map((line) => /* @__PURE__ */ jsxs34("li", { className: "flex justify-between gap-4", children: [
17118
+ /* @__PURE__ */ jsxs34("div", { className: "min-w-0 space-y-0.5", children: [
17119
+ /* @__PURE__ */ jsx36("p", { className: "font-medium", children: line.name }),
17120
+ line.variantName ? /* @__PURE__ */ jsx36("p", { className: "text-muted-foreground", children: line.variantName }) : null,
17121
+ /* @__PURE__ */ jsxs34("p", { className: "flex flex-wrap items-center gap-2 text-muted-foreground", children: [
17122
+ line.kindLabel ? /* @__PURE__ */ jsx36("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,
17123
+ /* @__PURE__ */ jsx36("span", { children: t.quantityTimesUnit(line.quantity, price(line.unitPrice)) })
16932
17124
  ] })
16933
17125
  ] }),
16934
- /* @__PURE__ */ jsx33("span", { className: "shrink-0 tabular-nums", children: price(line.total) })
17126
+ /* @__PURE__ */ jsx36("span", { className: "shrink-0 tabular-nums", children: price(line.total) })
16935
17127
  ] }, `${line.productId}-${line.variantId ?? ""}`)) }),
16936
- /* @__PURE__ */ jsxs31("dl", { className: "space-y-2 border-t border-border pt-3 text-sm", children: [
16937
- /* @__PURE__ */ jsx33(Row, { name: t.subtotal, value: price(quote.subtotal) }),
16938
- discount && discount.amount > 0 ? /* @__PURE__ */ jsx33(
17128
+ /* @__PURE__ */ jsxs34("dl", { className: "space-y-2 border-t border-border pt-3 text-sm", children: [
17129
+ /* @__PURE__ */ jsx36(Row, { name: t.subtotal, value: price(quote.subtotal) }),
17130
+ discount && discount.amount > 0 ? /* @__PURE__ */ jsx36(
16939
17131
  Row,
16940
17132
  {
16941
17133
  className: "text-green-700 dark:text-green-400",
@@ -16943,17 +17135,17 @@ function CheckoutQuoteSummary({
16943
17135
  value: `\u2212${price(discount.amount)}`
16944
17136
  }
16945
17137
  ) : null,
16946
- fulfillment.type ? /* @__PURE__ */ jsx33(
17138
+ fulfillment.type ? /* @__PURE__ */ jsx36(
16947
17139
  Row,
16948
17140
  {
16949
- name: /* @__PURE__ */ jsxs31(Fragment7, { children: [
17141
+ name: /* @__PURE__ */ jsxs34(Fragment7, { children: [
16950
17142
  fulfillment.label ?? t.delivery,
16951
- fulfillment.type === "PICKUP" && fulfillment.pickupLocation ? /* @__PURE__ */ jsx33("span", { className: "block text-muted-foreground", children: fulfillment.pickupLocation.name }) : null
17143
+ fulfillment.type === "PICKUP" && fulfillment.pickupLocation ? /* @__PURE__ */ jsx36("span", { className: "block text-muted-foreground", children: fulfillment.pickupLocation.name }) : null
16952
17144
  ] }),
16953
17145
  value: fulfillment.type === "PICKUP" || shipping.isFree ? t.free : price(shipping.cost)
16954
17146
  }
16955
17147
  ) : null,
16956
- tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ jsx33(
17148
+ tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ jsx36(
16957
17149
  Row,
16958
17150
  {
16959
17151
  className: tax.isIncluded ? "text-muted-foreground" : void 0,
@@ -16962,13 +17154,13 @@ function CheckoutQuoteSummary({
16962
17154
  },
16963
17155
  entry.label
16964
17156
  )) : null,
16965
- /* @__PURE__ */ jsx33(Row, { className: "border-t border-border pt-2 text-base font-bold", name: t.total, value: price(quote.total) })
17157
+ /* @__PURE__ */ jsx36(Row, { className: "border-t border-border pt-2 text-base font-bold", name: t.total, value: price(quote.total) })
16966
17158
  ] }),
16967
- tax.isIncluded ? /* @__PURE__ */ jsx33("p", { className: "text-sm text-muted-foreground", children: t.taxesIncludedNote }) : null,
16968
- fulfillment.type === "SHIPPING" && !shipping.isFree && shipping.remainingForFree ? /* @__PURE__ */ jsx33("p", { className: "text-sm text-muted-foreground", children: t.remainingForFree(price(shipping.remainingForFree)) }) : null,
16969
- fulfillment.type && quote.deliveryEstimateText ? /* @__PURE__ */ jsx33("p", { "data-slot": "checkout-quote-estimate", className: "text-sm text-muted-foreground", children: quote.deliveryEstimateText }) : null,
16970
- quote.discountError ? /* @__PURE__ */ jsx33("p", { role: "status", className: "text-sm text-destructive", children: quote.discountError.message }) : null,
16971
- quote.blockingReason ? /* @__PURE__ */ jsx33("p", { role: "alert", className: "rounded-lg border border-destructive/50 bg-destructive/10 p-3 text-sm text-destructive", children: quote.blockingReason.message }) : null
17159
+ tax.isIncluded ? /* @__PURE__ */ jsx36("p", { className: "text-sm text-muted-foreground", children: t.taxesIncludedNote }) : null,
17160
+ fulfillment.type === "SHIPPING" && !shipping.isFree && shipping.remainingForFree ? /* @__PURE__ */ jsx36("p", { className: "text-sm text-muted-foreground", children: t.remainingForFree(price(shipping.remainingForFree)) }) : null,
17161
+ fulfillment.type && quote.deliveryEstimateText ? /* @__PURE__ */ jsx36("p", { "data-slot": "checkout-quote-estimate", className: "text-sm text-muted-foreground", children: quote.deliveryEstimateText }) : null,
17162
+ quote.discountError ? /* @__PURE__ */ jsx36("p", { role: "status", className: "text-sm text-destructive", children: quote.discountError.message }) : null,
17163
+ quote.blockingReason ? /* @__PURE__ */ jsx36("p", { role: "alert", className: "rounded-lg border border-destructive/50 bg-destructive/10 p-3 text-sm text-destructive", children: quote.blockingReason.message }) : null
16972
17164
  ] });
16973
17165
  }
16974
17166
  var DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS = {
@@ -16986,7 +17178,7 @@ function checkoutQuoteNotice({
16986
17178
  function CheckoutQuoteNotice({ reason, labels, className }) {
16987
17179
  if (!reason) return null;
16988
17180
  const t = { ...DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS, ...labels };
16989
- return /* @__PURE__ */ jsx33(
17181
+ return /* @__PURE__ */ jsx36(
16990
17182
  "p",
16991
17183
  {
16992
17184
  role: "status",
@@ -16998,8 +17190,8 @@ function CheckoutQuoteNotice({ reason, labels, className }) {
16998
17190
  }
16999
17191
 
17000
17192
  // src/components/checkout-terms-acceptance.tsx
17001
- import { cn as cn28 } from "@reblu/site-ui/utils";
17002
- import { Fragment as Fragment8, jsx as jsx34, jsxs as jsxs32 } from "react/jsx-runtime";
17193
+ import { cn as cn30 } from "@reblu/site-ui/utils";
17194
+ import { Fragment as Fragment8, jsx as jsx37, jsxs as jsxs35 } from "react/jsx-runtime";
17003
17195
  function splitTermsLabel(label) {
17004
17196
  const at = label.indexOf("{terms}");
17005
17197
  return at === -1 ? [`${label} `, ""] : [label.slice(0, at), label.slice(at + "{terms}".length)];
@@ -17021,9 +17213,9 @@ function CheckoutTermsAcceptance({
17021
17213
  (part) => part.replaceAll("{tenant}", copy.tenantName)
17022
17214
  );
17023
17215
  const newTab = copy.isTermsLinkNewTab;
17024
- return /* @__PURE__ */ jsxs32("div", { "data-slot": "checkout-terms", className: cn28("space-y-1", className), children: [
17025
- /* @__PURE__ */ jsxs32("div", { className: "flex items-start gap-3", children: [
17026
- /* @__PURE__ */ jsx34(
17216
+ return /* @__PURE__ */ jsxs35("div", { "data-slot": "checkout-terms", className: cn30("space-y-1", className), children: [
17217
+ /* @__PURE__ */ jsxs35("div", { className: "flex items-start gap-3", children: [
17218
+ /* @__PURE__ */ jsx37(
17027
17219
  "input",
17028
17220
  {
17029
17221
  id: boxId,
@@ -17036,9 +17228,9 @@ function CheckoutTermsAcceptance({
17036
17228
  className: "mt-0.5 size-5 shrink-0 cursor-pointer accent-primary"
17037
17229
  }
17038
17230
  ),
17039
- /* @__PURE__ */ jsxs32("label", { htmlFor: boxId, className: "text-sm leading-relaxed", children: [
17231
+ /* @__PURE__ */ jsxs35("label", { htmlFor: boxId, className: "text-sm leading-relaxed", children: [
17040
17232
  before,
17041
- /* @__PURE__ */ jsxs32(
17233
+ /* @__PURE__ */ jsxs35(
17042
17234
  "a",
17043
17235
  {
17044
17236
  href: copy.termsLinkUrl ?? termsHref,
@@ -17046,9 +17238,9 @@ function CheckoutTermsAcceptance({
17046
17238
  className: "font-medium underline underline-offset-2 hover:text-primary",
17047
17239
  children: [
17048
17240
  copy.termsLinkText,
17049
- newTab ? /* @__PURE__ */ jsxs32(Fragment8, { children: [
17241
+ newTab ? /* @__PURE__ */ jsxs35(Fragment8, { children: [
17050
17242
  " ",
17051
- /* @__PURE__ */ jsx34("span", { className: "sr-only", children: newTabHint })
17243
+ /* @__PURE__ */ jsx37("span", { className: "sr-only", children: newTabHint })
17052
17244
  ] }) : null
17053
17245
  ]
17054
17246
  }
@@ -17056,7 +17248,7 @@ function CheckoutTermsAcceptance({
17056
17248
  after
17057
17249
  ] })
17058
17250
  ] }),
17059
- error ? /* @__PURE__ */ jsx34("p", { id: errorId, className: "pl-8 text-sm text-destructive", children: error }) : null
17251
+ error ? /* @__PURE__ */ jsx37("p", { id: errorId, className: "pl-8 text-sm text-destructive", children: error }) : null
17060
17252
  ] });
17061
17253
  }
17062
17254
  function toCheckoutTermsFields(copy, accepted) {
@@ -17065,8 +17257,8 @@ function toCheckoutTermsFields(copy, accepted) {
17065
17257
  }
17066
17258
 
17067
17259
  // src/components/checkout-pay-action.tsx
17068
- import { cn as cn29 } from "@reblu/site-ui/utils";
17069
- import { jsx as jsx35, jsxs as jsxs33 } from "react/jsx-runtime";
17260
+ import { cn as cn31 } from "@reblu/site-ui/utils";
17261
+ import { jsx as jsx38, jsxs as jsxs36 } from "react/jsx-runtime";
17070
17262
  function CheckoutPayAction({
17071
17263
  label,
17072
17264
  notice,
@@ -17080,22 +17272,22 @@ function CheckoutPayAction({
17080
17272
  }) {
17081
17273
  const noticeId = `${id}-notice`;
17082
17274
  const isDisabled = submitting || disabled;
17083
- return /* @__PURE__ */ jsxs33("div", { "data-slot": "checkout-pay-action", className: cn29("space-y-3", className), children: [
17084
- /* @__PURE__ */ jsx35(
17275
+ return /* @__PURE__ */ jsxs36("div", { "data-slot": "checkout-pay-action", className: cn31("space-y-3", className), children: [
17276
+ /* @__PURE__ */ jsx38(
17085
17277
  "button",
17086
17278
  {
17087
17279
  type: "submit",
17088
17280
  disabled: isDisabled,
17089
17281
  "aria-busy": submitting || void 0,
17090
17282
  "aria-describedby": notice ? noticeId : void 0,
17091
- className: buttonClassName ?? cn29(
17283
+ className: buttonClassName ?? cn31(
17092
17284
  "flex w-full items-center justify-center gap-2 rounded-xl px-4 py-3 text-base font-semibold transition-all",
17093
17285
  isDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "cursor-pointer bg-primary text-primary-foreground hover:bg-primary/90"
17094
17286
  ),
17095
17287
  children: submitting ? submittingLabel : label
17096
17288
  }
17097
17289
  ),
17098
- notice ? /* @__PURE__ */ jsx35("p", { id: noticeId, "data-slot": "checkout-pay-notice", className: noticeClassName ?? "text-sm text-muted-foreground", children: notice }) : null
17290
+ notice ? /* @__PURE__ */ jsx38("p", { id: noticeId, "data-slot": "checkout-pay-notice", className: noticeClassName ?? "text-sm text-muted-foreground", children: notice }) : null
17099
17291
  ] });
17100
17292
  }
17101
17293
 
@@ -17122,8 +17314,8 @@ function toAcademyCheckoutInvoiceFields(value, overCap, issuesInvoices = true) {
17122
17314
  }
17123
17315
 
17124
17316
  // src/components/contact-interest-field.tsx
17125
- import { cn as cn30 } from "@reblu/site-ui/utils";
17126
- import { jsx as jsx36, jsxs as jsxs34 } from "react/jsx-runtime";
17317
+ import { cn as cn32 } from "@reblu/site-ui/utils";
17318
+ import { jsx as jsx39, jsxs as jsxs37 } from "react/jsx-runtime";
17127
17319
  function ContactInterestField({
17128
17320
  interest,
17129
17321
  value,
@@ -17140,18 +17332,18 @@ function ContactInterestField({
17140
17332
  else next2.delete(option2);
17141
17333
  onChange(interest.options.filter((candidate) => next2.has(candidate)));
17142
17334
  };
17143
- return /* @__PURE__ */ jsxs34("fieldset", { "data-slot": "contact-interest", className: cn30("space-y-2", className), children: [
17144
- /* @__PURE__ */ jsx36("legend", { className: "text-sm font-medium", children: interest.label }),
17145
- /* @__PURE__ */ jsx36("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
17335
+ return /* @__PURE__ */ jsxs37("fieldset", { "data-slot": "contact-interest", className: cn32("space-y-2", className), children: [
17336
+ /* @__PURE__ */ jsx39("legend", { className: "text-sm font-medium", children: interest.label }),
17337
+ /* @__PURE__ */ jsx39("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
17146
17338
  const id = `${idPrefix}-${index}`;
17147
- return /* @__PURE__ */ jsxs34(
17339
+ return /* @__PURE__ */ jsxs37(
17148
17340
  "label",
17149
17341
  {
17150
17342
  htmlFor: id,
17151
17343
  "data-slot": "contact-interest-option",
17152
17344
  className: "flex items-center gap-2 text-sm",
17153
17345
  children: [
17154
- /* @__PURE__ */ jsx36(
17346
+ /* @__PURE__ */ jsx39(
17155
17347
  "input",
17156
17348
  {
17157
17349
  id,
@@ -17195,6 +17387,7 @@ export {
17195
17387
  CourseCatalogFilters,
17196
17388
  CourseDescription,
17197
17389
  CoursePurchaseTerms,
17390
+ CourseSchedule,
17198
17391
  DATA_REQUEST_TYPES,
17199
17392
  DEFAULT_BEFORE_AFTER_LABELS,
17200
17393
  DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS,
@@ -17203,6 +17396,7 @@ export {
17203
17396
  DEFAULT_COURSE_CATALOG_FILTERS_LABELS,
17204
17397
  DEFAULT_COURSE_PRICE_BANDS,
17205
17398
  DEFAULT_COURSE_PURCHASE_TERMS_LABELS,
17399
+ DEFAULT_COURSE_SCHEDULE_LABELS,
17206
17400
  DEFAULT_INVOICE_COUNTRIES,
17207
17401
  DEFAULT_LESSON_PREVIEW_LABELS,
17208
17402
  DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,
@@ -17219,6 +17413,7 @@ export {
17219
17413
  ImageTextSplit,
17220
17414
  LegalDocument,
17221
17415
  LessonPreview,
17416
+ LinkedPagesGrid,
17222
17417
  MarkdownRenderer,
17223
17418
  OrderConfirmation,
17224
17419
  OrderInvoiceLink,
@@ -17233,6 +17428,7 @@ export {
17233
17428
  SafeHtml,
17234
17429
  ShopFilters,
17235
17430
  Specialty,
17431
+ TeamGrid,
17236
17432
  Treatment,
17237
17433
  TrustBadges,
17238
17434
  buildFaqPageJsonLd,
@@ -17242,11 +17438,14 @@ export {
17242
17438
  collectFaqItems,
17243
17439
  courseSellsAsGuest,
17244
17440
  defaultCheckoutFulfillment,
17441
+ filterByLink,
17245
17442
  formatPrice,
17246
17443
  getShopErrorMessage,
17247
17444
  isAllowedYouTubeHost,
17248
17445
  isCheckoutDeliveryComplete,
17249
17446
  isOverSimplifiedInvoiceCap,
17447
+ linkFilterOptions,
17448
+ linkKey,
17250
17449
  markdownToPlainText,
17251
17450
  markdownToSafeHtml,
17252
17451
  quoteRequiresDelivery,