@reblu/site-blocks 0.23.0 → 0.25.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
@@ -13472,8 +13472,59 @@ function CourseDescription({
13472
13472
  );
13473
13473
  }
13474
13474
 
13475
- // src/components/lesson-preview.tsx
13475
+ // src/components/course-purchase-terms.tsx
13476
13476
  import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
13477
+ var DEFAULT_COURSE_PURCHASE_TERMS_LABELS = {
13478
+ withdrawalWaiver: "El acceso empieza al comprar: al pagar pides el acceso inmediato y renuncias al derecho de desistimiento de 14 d\xEDas.",
13479
+ accessDuration: (months) => `Acceso durante ${months} ${months === 1 ? "mes" : "meses"} desde la inscripci\xF3n.`,
13480
+ refundGuarantee: ({ basis, thresholdPercent, windowDays }) => {
13481
+ const period = windowDays != null ? ` durante ${windowDays} d\xEDas desde el pago` : "";
13482
+ const verb = basis === "LESSONS_COMPLETED" ? "completado" : "abierto";
13483
+ const usage = thresholdPercent != null ? ` si has ${verb} menos del ${thresholdPercent} % de las lecciones` : "";
13484
+ return `Garant\xEDa de reembolso${period}${usage}.`;
13485
+ }
13486
+ };
13487
+ function CoursePurchaseTerms({
13488
+ course,
13489
+ heading,
13490
+ headingLevel = 2,
13491
+ headingId = "course-purchase-terms-heading",
13492
+ labels,
13493
+ className,
13494
+ headingClassName,
13495
+ listClassName
13496
+ }) {
13497
+ const text3 = { ...DEFAULT_COURSE_PURCHASE_TERMS_LABELS, ...labels };
13498
+ const items = [];
13499
+ if (course.withdrawalWaiverRequired === true) {
13500
+ items.push({ key: "withdrawal-waiver", node: text3.withdrawalWaiver });
13501
+ }
13502
+ if (typeof course.accessDurationMonths === "number") {
13503
+ items.push({ key: "access-duration", node: text3.accessDuration(course.accessDurationMonths) });
13504
+ }
13505
+ if (course.refundGuarantee) {
13506
+ items.push({ key: "refund-guarantee", node: text3.refundGuarantee(course.refundGuarantee) });
13507
+ }
13508
+ if (items.length === 0) return null;
13509
+ const hasHeading = heading !== void 0 && heading !== null && heading !== "";
13510
+ const list = /* @__PURE__ */ jsx3("ul", { className: slotClassName("list-disc space-y-1 pl-5", "text-sm text-muted-foreground", listClassName), children: items.map((item) => /* @__PURE__ */ jsx3("li", { "data-slot": `course-purchase-terms-${item.key}`, children: item.node }, item.key)) });
13511
+ const Tag = `h${headingLevel}`;
13512
+ return /* @__PURE__ */ jsxs3(
13513
+ "section",
13514
+ {
13515
+ "data-slot": "course-purchase-terms",
13516
+ "aria-labelledby": hasHeading ? headingId : void 0,
13517
+ className: slotClassName("space-y-2", "", className),
13518
+ children: [
13519
+ hasHeading ? /* @__PURE__ */ jsx3(Tag, { id: headingId, className: slotClassName("", "text-lg font-semibold", headingClassName), children: heading }) : null,
13520
+ list
13521
+ ]
13522
+ }
13523
+ );
13524
+ }
13525
+
13526
+ // src/components/lesson-preview.tsx
13527
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
13477
13528
  var DEFAULT_LESSON_PREVIEW_LABELS = {
13478
13529
  badge: "Vista previa gratuita",
13479
13530
  player: "V\xEDdeo",
@@ -13516,15 +13567,15 @@ function LessonPreview({
13516
13567
  const html5 = markdownToSafeHtml(lesson.content);
13517
13568
  const hasBody = html5 !== null && html5 !== "" && !isVisiblyEmpty2(html5);
13518
13569
  const duration = typeof lesson.durationSeconds === "number" && lesson.durationSeconds > 0 ? clock(lesson.durationSeconds) : null;
13519
- return /* @__PURE__ */ jsxs3(
13570
+ return /* @__PURE__ */ jsxs4(
13520
13571
  "article",
13521
13572
  {
13522
13573
  "data-slot": "lesson-preview",
13523
13574
  "aria-labelledby": headingId,
13524
13575
  className: slotClassName("space-y-6", "", className),
13525
13576
  children: [
13526
- /* @__PURE__ */ jsxs3("header", { className: "space-y-2", children: [
13527
- /* @__PURE__ */ jsx3(
13577
+ /* @__PURE__ */ jsxs4("header", { className: "space-y-2", children: [
13578
+ /* @__PURE__ */ jsx4(
13528
13579
  "span",
13529
13580
  {
13530
13581
  "data-slot": "lesson-preview-badge",
@@ -13532,7 +13583,7 @@ function LessonPreview({
13532
13583
  children: labels.badge
13533
13584
  }
13534
13585
  ),
13535
- /* @__PURE__ */ jsx3(
13586
+ /* @__PURE__ */ jsx4(
13536
13587
  Tag,
13537
13588
  {
13538
13589
  id: headingId,
@@ -13540,12 +13591,12 @@ function LessonPreview({
13540
13591
  children: lesson.title
13541
13592
  }
13542
13593
  ),
13543
- duration && /* @__PURE__ */ jsxs3("p", { className: "text-sm text-muted-foreground", children: [
13544
- /* @__PURE__ */ jsxs3("span", { className: "sr-only", children: [
13594
+ duration && /* @__PURE__ */ jsxs4("p", { className: "text-sm text-muted-foreground", children: [
13595
+ /* @__PURE__ */ jsxs4("span", { className: "sr-only", children: [
13545
13596
  labels.duration,
13546
13597
  ": "
13547
13598
  ] }),
13548
- /* @__PURE__ */ jsx3(
13599
+ /* @__PURE__ */ jsx4(
13549
13600
  "time",
13550
13601
  {
13551
13602
  "data-slot": "lesson-preview-duration",
@@ -13556,12 +13607,12 @@ function LessonPreview({
13556
13607
  )
13557
13608
  ] })
13558
13609
  ] }),
13559
- video && /* @__PURE__ */ jsx3(
13610
+ video && /* @__PURE__ */ jsx4(
13560
13611
  "div",
13561
13612
  {
13562
13613
  "data-slot": "lesson-preview-player",
13563
13614
  className: "aspect-video w-full overflow-hidden rounded-xl border border-border bg-black",
13564
- children: /* @__PURE__ */ jsx3(
13615
+ children: /* @__PURE__ */ jsx4(
13565
13616
  "iframe",
13566
13617
  {
13567
13618
  src: video.embedUrl,
@@ -13575,7 +13626,7 @@ function LessonPreview({
13575
13626
  )
13576
13627
  }
13577
13628
  ),
13578
- hasBody && /* @__PURE__ */ jsx3("div", { "data-slot": "lesson-preview-content", children: /* @__PURE__ */ jsx3(
13629
+ hasBody && /* @__PURE__ */ jsx4("div", { "data-slot": "lesson-preview-content", children: /* @__PURE__ */ jsx4(
13579
13630
  SafeHtml,
13580
13631
  {
13581
13632
  html: html5,
@@ -13594,7 +13645,7 @@ import { cn as cn3 } from "@reblu/site-ui/utils";
13594
13645
  // src/components/_page-parts.tsx
13595
13646
  import { cn as cn2 } from "@reblu/site-ui/utils";
13596
13647
  import { buttonVariants } from "@reblu/site-ui/button-variants";
13597
- import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
13648
+ import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
13598
13649
  var KNOWN_BUTTON_VARIANTS = /* @__PURE__ */ new Set([
13599
13650
  "default",
13600
13651
  "destructive",
@@ -13607,11 +13658,11 @@ function toButtonVariant(variant) {
13607
13658
  return variant && KNOWN_BUTTON_VARIANTS.has(variant) ? variant : "default";
13608
13659
  }
13609
13660
  function PageHero({ page }) {
13610
- return /* @__PURE__ */ jsxs4("header", { className: "space-y-4", children: [
13611
- page.category && /* @__PURE__ */ jsx4("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 }),
13612
- /* @__PURE__ */ jsx4("h1", { className: "text-4xl font-bold tracking-tight", children: page.title }),
13613
- page.subtitle && /* @__PURE__ */ jsx4("p", { className: "text-lg text-muted-foreground", children: page.subtitle }),
13614
- page.coverImageUrl && /* @__PURE__ */ jsx4("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx4(
13661
+ return /* @__PURE__ */ jsxs5("header", { className: "space-y-4", children: [
13662
+ page.category && /* @__PURE__ */ jsx5("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 }),
13663
+ /* @__PURE__ */ jsx5("h1", { className: "text-4xl font-bold tracking-tight", children: page.title }),
13664
+ page.subtitle && /* @__PURE__ */ jsx5("p", { className: "text-lg text-muted-foreground", children: page.subtitle }),
13665
+ page.coverImageUrl && /* @__PURE__ */ jsx5("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx5(
13615
13666
  "img",
13616
13667
  {
13617
13668
  src: page.coverImageUrl,
@@ -13625,7 +13676,7 @@ function PageHero({ page }) {
13625
13676
  function SectionCta({ section }) {
13626
13677
  if (!section.ctaLabel || !section.ctaUrl) return null;
13627
13678
  const variant = toButtonVariant(section.ctaVariant);
13628
- return /* @__PURE__ */ jsx4("div", { className: "pt-2", children: /* @__PURE__ */ jsx4(
13679
+ return /* @__PURE__ */ jsx5("div", { className: "pt-2", children: /* @__PURE__ */ jsx5(
13629
13680
  "a",
13630
13681
  {
13631
13682
  href: section.ctaUrl,
@@ -13640,46 +13691,46 @@ function SectionCta({ section }) {
13640
13691
  }
13641
13692
  function SectionImages({ section }) {
13642
13693
  if (section.images.length === 0) return null;
13643
- return /* @__PURE__ */ jsx4("div", { className: cn2("grid gap-4", section.images.length > 1 ? "sm:grid-cols-2" : "grid-cols-1"), children: section.images.map((img) => /* @__PURE__ */ jsxs4("figure", { className: "space-y-1", children: [
13644
- /* @__PURE__ */ jsx4("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx4("img", { src: img.url, alt: img.alt, loading: "lazy", className: "h-full w-full object-cover" }) }),
13645
- img.caption && /* @__PURE__ */ jsx4("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
13694
+ return /* @__PURE__ */ jsx5("div", { className: cn2("grid gap-4", section.images.length > 1 ? "sm:grid-cols-2" : "grid-cols-1"), children: section.images.map((img) => /* @__PURE__ */ jsxs5("figure", { className: "space-y-1", children: [
13695
+ /* @__PURE__ */ jsx5("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx5("img", { src: img.url, alt: img.alt, loading: "lazy", className: "h-full w-full object-cover" }) }),
13696
+ img.caption && /* @__PURE__ */ jsx5("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
13646
13697
  ] }, `${img.url}-${img.order}`)) });
13647
13698
  }
13648
13699
  function PageSectionBlock({ section }) {
13649
13700
  const imageFirst = section.layout === "IMAGE_TEXT";
13650
13701
  const sideBySide = section.layout === "TEXT_IMAGE" || section.layout === "IMAGE_TEXT";
13651
13702
  const hasImages = section.images.length > 0;
13652
- const body3 = /* @__PURE__ */ jsxs4("div", { className: "space-y-4", children: [
13653
- section.heading && /* @__PURE__ */ jsx4("h2", { className: "text-2xl font-bold", children: section.heading }),
13654
- /* @__PURE__ */ jsx4(SafeHtml, { html: sanitizeHtml(section.contentHtml), headingOffset: 2 }),
13655
- /* @__PURE__ */ jsx4(SectionCta, { section })
13703
+ const body3 = /* @__PURE__ */ jsxs5("div", { className: "space-y-4", children: [
13704
+ section.heading && /* @__PURE__ */ jsx5("h2", { className: "text-2xl font-bold", children: section.heading }),
13705
+ /* @__PURE__ */ jsx5(SafeHtml, { html: sanitizeHtml(section.contentHtml), headingOffset: 2 }),
13706
+ /* @__PURE__ */ jsx5(SectionCta, { section })
13656
13707
  ] });
13657
13708
  if (sideBySide && hasImages) {
13658
- return /* @__PURE__ */ jsx4("section", { className: "grid items-center gap-8 md:grid-cols-2", children: imageFirst ? /* @__PURE__ */ jsxs4(Fragment2, { children: [
13659
- /* @__PURE__ */ jsx4(SectionImages, { section }),
13709
+ return /* @__PURE__ */ jsx5("section", { className: "grid items-center gap-8 md:grid-cols-2", children: imageFirst ? /* @__PURE__ */ jsxs5(Fragment2, { children: [
13710
+ /* @__PURE__ */ jsx5(SectionImages, { section }),
13660
13711
  body3
13661
- ] }) : /* @__PURE__ */ jsxs4(Fragment2, { children: [
13712
+ ] }) : /* @__PURE__ */ jsxs5(Fragment2, { children: [
13662
13713
  body3,
13663
- /* @__PURE__ */ jsx4(SectionImages, { section })
13714
+ /* @__PURE__ */ jsx5(SectionImages, { section })
13664
13715
  ] }) });
13665
13716
  }
13666
- return /* @__PURE__ */ jsxs4("section", { className: "space-y-4", children: [
13717
+ return /* @__PURE__ */ jsxs5("section", { className: "space-y-4", children: [
13667
13718
  body3,
13668
- /* @__PURE__ */ jsx4(SectionImages, { section })
13719
+ /* @__PURE__ */ jsx5(SectionImages, { section })
13669
13720
  ] });
13670
13721
  }
13671
13722
  function PageSectionList({ sections }) {
13672
13723
  if (sections.length === 0) return null;
13673
13724
  const ordered = sections.slice().sort((a, b2) => a.order - b2.order);
13674
- return /* @__PURE__ */ jsx4("div", { className: "space-y-12", children: ordered.map((section) => /* @__PURE__ */ jsx4(PageSectionBlock, { section }, section.id)) });
13725
+ return /* @__PURE__ */ jsx5("div", { className: "space-y-12", children: ordered.map((section) => /* @__PURE__ */ jsx5(PageSectionBlock, { section }, section.id)) });
13675
13726
  }
13676
13727
 
13677
13728
  // src/components/treatment.tsx
13678
- import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
13729
+ import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
13679
13730
  function Treatment({ page, className }) {
13680
- return /* @__PURE__ */ jsxs5("article", { className: cn3("space-y-12", className), "data-slot": "treatment", children: [
13681
- /* @__PURE__ */ jsx5(PageHero, { page }),
13682
- /* @__PURE__ */ jsx5(PageSectionList, { sections: page.sections })
13731
+ return /* @__PURE__ */ jsxs6("article", { className: cn3("space-y-12", className), "data-slot": "treatment", children: [
13732
+ /* @__PURE__ */ jsx6(PageHero, { page }),
13733
+ /* @__PURE__ */ jsx6(PageSectionList, { sections: page.sections })
13683
13734
  ] });
13684
13735
  }
13685
13736
 
@@ -13688,11 +13739,11 @@ import { cn as cn5 } from "@reblu/site-ui/utils";
13688
13739
 
13689
13740
  // src/components/page-card-grid.tsx
13690
13741
  import { cn as cn4 } from "@reblu/site-ui/utils";
13691
- import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
13742
+ import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
13692
13743
  var defaultPageHref = (page) => `/${page.slug}`;
13693
13744
  var pageKey = (page) => `${page.category?.slug ?? ""}/${page.slug}`;
13694
13745
  function PageCardGrid(props) {
13695
- return /* @__PURE__ */ jsx6(PageCardGridSection, { ...props });
13746
+ return /* @__PURE__ */ jsx7(PageCardGridSection, { ...props });
13696
13747
  }
13697
13748
  function PageCardGridSection({
13698
13749
  pages,
@@ -13703,15 +13754,15 @@ function PageCardGridSection({
13703
13754
  }) {
13704
13755
  if (pages.length === 0) return null;
13705
13756
  const showHeading = keepEmptyHeading ? heading !== void 0 : !!heading;
13706
- return /* @__PURE__ */ jsxs6("section", { className: cn4("space-y-6", className), children: [
13707
- showHeading && /* @__PURE__ */ jsx6("h2", { className: "text-2xl font-bold", children: heading }),
13708
- /* @__PURE__ */ jsx6("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__ */ jsx6("li", { children: /* @__PURE__ */ jsxs6(
13757
+ return /* @__PURE__ */ jsxs7("section", { className: cn4("space-y-6", className), children: [
13758
+ showHeading && /* @__PURE__ */ jsx7("h2", { className: "text-2xl font-bold", children: heading }),
13759
+ /* @__PURE__ */ jsx7("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__ */ jsx7("li", { children: /* @__PURE__ */ jsxs7(
13709
13760
  "a",
13710
13761
  {
13711
13762
  href: pageHref(page),
13712
13763
  className: "group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
13713
13764
  children: [
13714
- page.coverImageUrl && /* @__PURE__ */ jsx6("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ jsx6(
13765
+ page.coverImageUrl && /* @__PURE__ */ jsx7("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ jsx7(
13715
13766
  "img",
13716
13767
  {
13717
13768
  src: page.coverImageUrl,
@@ -13720,9 +13771,9 @@ function PageCardGridSection({
13720
13771
  className: "h-full w-full object-cover transition-transform group-hover:scale-105"
13721
13772
  }
13722
13773
  ) }),
13723
- /* @__PURE__ */ jsxs6("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13724
- /* @__PURE__ */ jsx6("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
13725
- page.excerpt && /* @__PURE__ */ jsx6("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
13774
+ /* @__PURE__ */ jsxs7("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13775
+ /* @__PURE__ */ jsx7("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
13776
+ page.excerpt && /* @__PURE__ */ jsx7("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
13726
13777
  ] })
13727
13778
  ]
13728
13779
  }
@@ -13731,7 +13782,7 @@ function PageCardGridSection({
13731
13782
  }
13732
13783
 
13733
13784
  // src/components/parent-page.tsx
13734
- import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
13785
+ import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
13735
13786
  var defaultChildPageHref = (slug) => `/${slug}`;
13736
13787
  function ParentPage({
13737
13788
  page,
@@ -13746,10 +13797,10 @@ function ParentPage({
13746
13797
  const pages = childPages ?? treatments ?? [];
13747
13798
  const hrefFor = childPageHref ?? treatmentHref ?? defaultChildPageHref;
13748
13799
  const label = childPagesLabel ?? treatmentsLabel ?? "Treatments";
13749
- return /* @__PURE__ */ jsxs7("article", { className: cn5("space-y-12", className), "data-slot": "specialty", children: [
13750
- /* @__PURE__ */ jsx7(PageHero, { page }),
13751
- /* @__PURE__ */ jsx7(PageSectionList, { sections: page.sections }),
13752
- /* @__PURE__ */ jsx7(
13800
+ return /* @__PURE__ */ jsxs8("article", { className: cn5("space-y-12", className), "data-slot": "specialty", children: [
13801
+ /* @__PURE__ */ jsx8(PageHero, { page }),
13802
+ /* @__PURE__ */ jsx8(PageSectionList, { sections: page.sections }),
13803
+ /* @__PURE__ */ jsx8(
13753
13804
  PageCardGridSection,
13754
13805
  {
13755
13806
  pages,
@@ -13769,7 +13820,7 @@ import { cn as cn7 } from "@reblu/site-ui/utils";
13769
13820
 
13770
13821
  // src/components/professional-fields.tsx
13771
13822
  import { cn as cn6 } from "@reblu/site-ui/utils";
13772
- import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
13823
+ import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
13773
13824
  function ProfessionalFields({
13774
13825
  fields,
13775
13826
  variant = "profile",
@@ -13777,7 +13828,7 @@ function ProfessionalFields({
13777
13828
  }) {
13778
13829
  const shown = (fields ?? []).filter((f) => variant !== "card" || f.showOnCard);
13779
13830
  if (shown.length === 0) return null;
13780
- return /* @__PURE__ */ jsx8(
13831
+ return /* @__PURE__ */ jsx9(
13781
13832
  "dl",
13782
13833
  {
13783
13834
  className: cn6(
@@ -13787,13 +13838,13 @@ function ProfessionalFields({
13787
13838
  ),
13788
13839
  "data-slot": "professional-fields",
13789
13840
  "data-variant": variant,
13790
- children: shown.map((field, index) => /* @__PURE__ */ jsxs8(
13841
+ children: shown.map((field, index) => /* @__PURE__ */ jsxs9(
13791
13842
  "div",
13792
13843
  {
13793
13844
  className: variant === "card" ? "flex justify-center gap-1" : "contents",
13794
13845
  children: [
13795
- /* @__PURE__ */ jsx8("dt", { className: "text-muted-foreground", children: field.label }),
13796
- /* @__PURE__ */ jsx8("dd", { className: "m-0 font-medium", children: field.value })
13846
+ /* @__PURE__ */ jsx9("dt", { className: "text-muted-foreground", children: field.label }),
13847
+ /* @__PURE__ */ jsx9("dd", { className: "m-0 font-medium", children: field.value })
13797
13848
  ]
13798
13849
  },
13799
13850
  `${field.label}-${index}`
@@ -13803,7 +13854,7 @@ function ProfessionalFields({
13803
13854
  }
13804
13855
 
13805
13856
  // src/components/profile-card.tsx
13806
- import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
13857
+ import { jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
13807
13858
  function initials(name) {
13808
13859
  return name.split(/\s+/).filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
13809
13860
  }
@@ -13818,7 +13869,7 @@ function ProfileCard({
13818
13869
  className
13819
13870
  }) {
13820
13871
  const NameTag = href ? "a" : "span";
13821
- return /* @__PURE__ */ jsxs9(
13872
+ return /* @__PURE__ */ jsxs10(
13822
13873
  "article",
13823
13874
  {
13824
13875
  className: cn7(
@@ -13827,7 +13878,7 @@ function ProfileCard({
13827
13878
  ),
13828
13879
  "data-slot": "profile-card",
13829
13880
  children: [
13830
- /* @__PURE__ */ jsx9("div", { className: "relative h-24 w-24 overflow-hidden rounded-full bg-muted", children: imageUrl ? /* @__PURE__ */ jsx9("img", { src: imageUrl, alt: name, loading: "lazy", className: "h-full w-full object-cover" }) : /* @__PURE__ */ jsx9(
13881
+ /* @__PURE__ */ jsx10("div", { className: "relative h-24 w-24 overflow-hidden rounded-full bg-muted", children: imageUrl ? /* @__PURE__ */ jsx10("img", { src: imageUrl, alt: name, loading: "lazy", className: "h-full w-full object-cover" }) : /* @__PURE__ */ jsx10(
13831
13882
  "span",
13832
13883
  {
13833
13884
  className: "flex h-full w-full items-center justify-center text-2xl font-semibold text-muted-foreground",
@@ -13835,12 +13886,12 @@ function ProfileCard({
13835
13886
  children: initials(name)
13836
13887
  }
13837
13888
  ) }),
13838
- /* @__PURE__ */ jsxs9("div", { className: "space-y-1", children: [
13839
- /* @__PURE__ */ jsx9("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ jsx9(NameTag, { ...href ? { href, className: "transition-colors hover:text-primary" } : {}, children: name }) }),
13840
- role && /* @__PURE__ */ jsx9("p", { className: "text-sm text-muted-foreground", children: role })
13889
+ /* @__PURE__ */ jsxs10("div", { className: "space-y-1", children: [
13890
+ /* @__PURE__ */ jsx10("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ jsx10(NameTag, { ...href ? { href, className: "transition-colors hover:text-primary" } : {}, children: name }) }),
13891
+ role && /* @__PURE__ */ jsx10("p", { className: "text-sm text-muted-foreground", children: role })
13841
13892
  ] }),
13842
- /* @__PURE__ */ jsx9(ProfessionalFields, { fields, variant: "card" }),
13843
- specialties.length > 0 && /* @__PURE__ */ jsx9("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ jsx9(
13893
+ /* @__PURE__ */ jsx10(ProfessionalFields, { fields, variant: "card" }),
13894
+ specialties.length > 0 && /* @__PURE__ */ jsx10("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ jsx10(
13844
13895
  "li",
13845
13896
  {
13846
13897
  className: "inline-flex items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground",
@@ -13848,7 +13899,7 @@ function ProfileCard({
13848
13899
  },
13849
13900
  s2
13850
13901
  )) }),
13851
- bio && /* @__PURE__ */ jsx9("p", { className: "text-sm text-muted-foreground", children: bio })
13902
+ bio && /* @__PURE__ */ jsx10("p", { className: "text-sm text-muted-foreground", children: bio })
13852
13903
  ]
13853
13904
  }
13854
13905
  );
@@ -13856,11 +13907,11 @@ function ProfileCard({
13856
13907
 
13857
13908
  // src/components/product-card.tsx
13858
13909
  import { cn as cn8 } from "@reblu/site-ui/utils";
13859
- import { jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
13910
+ import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
13860
13911
  function ProductCard({ product, href, currencyCode = "EUR", locale, className }) {
13861
13912
  const image = product.images.find((i) => i.isPrimary) ?? product.images[0];
13862
13913
  const hasDiscount = product.comparePrice != null && product.comparePrice > product.price;
13863
- return /* @__PURE__ */ jsxs10(
13914
+ return /* @__PURE__ */ jsxs11(
13864
13915
  "article",
13865
13916
  {
13866
13917
  className: cn8(
@@ -13869,7 +13920,7 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
13869
13920
  ),
13870
13921
  "data-slot": "product-card",
13871
13922
  children: [
13872
- /* @__PURE__ */ jsx10("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ jsx10(
13923
+ /* @__PURE__ */ jsx11("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ jsx11(
13873
13924
  "img",
13874
13925
  {
13875
13926
  src: image.url,
@@ -13877,14 +13928,14 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
13877
13928
  loading: "lazy",
13878
13929
  className: "h-full w-full object-cover transition-transform group-hover:scale-105"
13879
13930
  }
13880
- ) : /* @__PURE__ */ jsx10("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
13881
- /* @__PURE__ */ jsxs10("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13882
- product.category && /* @__PURE__ */ jsx10("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 }),
13883
- /* @__PURE__ */ jsx10("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ jsx10("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
13884
- product.shortDescription && /* @__PURE__ */ jsx10("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
13885
- /* @__PURE__ */ jsxs10("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
13886
- /* @__PURE__ */ jsx10("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
13887
- hasDiscount && /* @__PURE__ */ jsx10("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
13931
+ ) : /* @__PURE__ */ jsx11("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
13932
+ /* @__PURE__ */ jsxs11("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13933
+ product.category && /* @__PURE__ */ jsx11("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 }),
13934
+ /* @__PURE__ */ jsx11("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ jsx11("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
13935
+ product.shortDescription && /* @__PURE__ */ jsx11("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
13936
+ /* @__PURE__ */ jsxs11("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
13937
+ /* @__PURE__ */ jsx11("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
13938
+ hasDiscount && /* @__PURE__ */ jsx11("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
13888
13939
  ] })
13889
13940
  ] })
13890
13941
  ]
@@ -14086,7 +14137,7 @@ var __iconNode8 = [
14086
14137
  var Truck = createLucideIcon("truck", __iconNode8);
14087
14138
 
14088
14139
  // src/components/product-trust-items.tsx
14089
- import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
14140
+ import { jsx as jsx12, jsxs as jsxs12 } from "react/jsx-runtime";
14090
14141
  var DEFAULT_TRUST_ICONS = Object.freeze({
14091
14142
  shipping: Truck,
14092
14143
  returns: RotateCcw,
@@ -14120,9 +14171,9 @@ function ProductTrustItems({
14120
14171
  return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
14121
14172
  });
14122
14173
  if (rows.length === 0) return null;
14123
- return /* @__PURE__ */ jsx11(List, { "data-slot": "product-trust-items", className: slotClassName("space-y-2.5", "", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ jsxs11("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
14124
- /* @__PURE__ */ jsx11(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
14125
- /* @__PURE__ */ jsx11("span", { children: text3 })
14174
+ return /* @__PURE__ */ jsx12(List, { "data-slot": "product-trust-items", className: slotClassName("space-y-2.5", "", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ jsxs12("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
14175
+ /* @__PURE__ */ jsx12(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
14176
+ /* @__PURE__ */ jsx12("span", { children: text3 })
14126
14177
  ] }, key2)) });
14127
14178
  }
14128
14179
 
@@ -14130,7 +14181,7 @@ function ProductTrustItems({
14130
14181
  import { cn as cn9 } from "@reblu/site-ui/utils";
14131
14182
 
14132
14183
  // src/components/_heading.tsx
14133
- import { jsx as jsx12 } from "react/jsx-runtime";
14184
+ import { jsx as jsx13 } from "react/jsx-runtime";
14134
14185
  function nextHeadingLevel(level) {
14135
14186
  return Math.min(level + 1, 6);
14136
14187
  }
@@ -14140,11 +14191,11 @@ function Heading({
14140
14191
  children: children2
14141
14192
  }) {
14142
14193
  const Tag = `h${level}`;
14143
- return /* @__PURE__ */ jsx12(Tag, { className, children: children2 });
14194
+ return /* @__PURE__ */ jsx13(Tag, { className, children: children2 });
14144
14195
  }
14145
14196
 
14146
14197
  // src/components/faq-accordion.tsx
14147
- import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
14198
+ import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
14148
14199
  function FaqAccordion({
14149
14200
  items,
14150
14201
  heading,
@@ -14155,18 +14206,18 @@ function FaqAccordion({
14155
14206
  }) {
14156
14207
  const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
14157
14208
  if (visible.length === 0) return null;
14158
- return /* @__PURE__ */ jsxs12("div", { className: cn9("space-y-4", className), "data-slot": "faq-accordion", children: [
14159
- heading && /* @__PURE__ */ jsx13(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
14160
- /* @__PURE__ */ jsx13("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ jsxs12(
14209
+ return /* @__PURE__ */ jsxs13("div", { className: cn9("space-y-4", className), "data-slot": "faq-accordion", children: [
14210
+ heading && /* @__PURE__ */ jsx14(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
14211
+ /* @__PURE__ */ jsx14("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ jsxs13(
14161
14212
  "details",
14162
14213
  {
14163
14214
  className: "group px-4",
14164
14215
  "data-slot": "faq-item",
14165
14216
  ...defaultOpen.includes(index) ? { open: true } : {},
14166
14217
  children: [
14167
- /* @__PURE__ */ jsxs12("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: [
14168
- questionHeadingLevel ? /* @__PURE__ */ jsx13(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ jsx13("span", { children: item.q }),
14169
- /* @__PURE__ */ jsx13(
14218
+ /* @__PURE__ */ jsxs13("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: [
14219
+ questionHeadingLevel ? /* @__PURE__ */ jsx14(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ jsx14("span", { children: item.q }),
14220
+ /* @__PURE__ */ jsx14(
14170
14221
  "span",
14171
14222
  {
14172
14223
  "aria-hidden": "true",
@@ -14175,7 +14226,7 @@ function FaqAccordion({
14175
14226
  }
14176
14227
  )
14177
14228
  ] }),
14178
- /* @__PURE__ */ jsx13("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
14229
+ /* @__PURE__ */ jsx14("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
14179
14230
  ]
14180
14231
  },
14181
14232
  index
@@ -14185,7 +14236,7 @@ function FaqAccordion({
14185
14236
 
14186
14237
  // src/components/trust-badges.tsx
14187
14238
  import { cn as cn10 } from "@reblu/site-ui/utils";
14188
- import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
14239
+ import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
14189
14240
  var DEFAULT_TRUST_BADGE_HEADINGS = Object.freeze(
14190
14241
  {
14191
14242
  PARTNER: "Colaboradores",
@@ -14227,7 +14278,7 @@ function BadgeContent({ badge, logoClassName }) {
14227
14278
  if (src) {
14228
14279
  return (
14229
14280
  // eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
14230
- /* @__PURE__ */ jsx14(
14281
+ /* @__PURE__ */ jsx15(
14231
14282
  "img",
14232
14283
  {
14233
14284
  src,
@@ -14238,7 +14289,7 @@ function BadgeContent({ badge, logoClassName }) {
14238
14289
  )
14239
14290
  );
14240
14291
  }
14241
- return /* @__PURE__ */ jsx14("span", { className: "text-sm font-medium", children: badge.name });
14292
+ return /* @__PURE__ */ jsx15("span", { className: "text-sm font-medium", children: badge.name });
14242
14293
  }
14243
14294
  function TrustBadges({
14244
14295
  badges,
@@ -14266,14 +14317,14 @@ function TrustBadges({
14266
14317
  if (groups.length === 0) return null;
14267
14318
  const hasHeading = heading !== void 0 && heading !== null && heading !== "";
14268
14319
  const groupHeadingLevel = hasHeading ? nextHeadingLevel(headingLevel) : headingLevel;
14269
- const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ jsxs13(
14320
+ const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ jsxs14(
14270
14321
  "div",
14271
14322
  {
14272
14323
  "data-slot": "trust-badge-group",
14273
14324
  "data-type": type,
14274
14325
  className: cn10("space-y-3", groupClassName),
14275
14326
  children: [
14276
- groupHeading ? /* @__PURE__ */ jsx14(
14327
+ groupHeading ? /* @__PURE__ */ jsx15(
14277
14328
  Heading,
14278
14329
  {
14279
14330
  level: groupHeadingLevel,
@@ -14285,30 +14336,30 @@ function TrustBadges({
14285
14336
  children: groupHeading
14286
14337
  }
14287
14338
  ) : null,
14288
- /* @__PURE__ */ jsx14("ul", { className: cn10("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
14339
+ /* @__PURE__ */ jsx15("ul", { className: cn10("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
14289
14340
  const href = safeHref(badge.url);
14290
- return /* @__PURE__ */ jsx14("li", { children: href ? /* @__PURE__ */ jsxs13("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14291
- /* @__PURE__ */ jsx14(BadgeContent, { badge, logoClassName }),
14341
+ return /* @__PURE__ */ jsx15("li", { children: href ? /* @__PURE__ */ jsxs14("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14342
+ /* @__PURE__ */ jsx15(BadgeContent, { badge, logoClassName }),
14292
14343
  " ",
14293
- /* @__PURE__ */ jsx14("span", { className: "sr-only", children: newWindowLabel })
14294
- ] }) : /* @__PURE__ */ jsx14(BadgeContent, { badge, logoClassName }) }, badge.id);
14344
+ /* @__PURE__ */ jsx15("span", { className: "sr-only", children: newWindowLabel })
14345
+ ] }) : /* @__PURE__ */ jsx15(BadgeContent, { badge, logoClassName }) }, badge.id);
14295
14346
  }) })
14296
14347
  ]
14297
14348
  },
14298
14349
  type
14299
14350
  ));
14300
14351
  if (!hasHeading) {
14301
- return /* @__PURE__ */ jsx14("div", { "data-slot": "trust-badges", className: cn10("space-y-6", className), children: content });
14352
+ return /* @__PURE__ */ jsx15("div", { "data-slot": "trust-badges", className: cn10("space-y-6", className), children: content });
14302
14353
  }
14303
14354
  const Tag = `h${headingLevel}`;
14304
- return /* @__PURE__ */ jsxs13(
14355
+ return /* @__PURE__ */ jsxs14(
14305
14356
  "section",
14306
14357
  {
14307
14358
  "data-slot": "trust-badges",
14308
14359
  "aria-labelledby": headingId,
14309
14360
  className: cn10("space-y-6", className),
14310
14361
  children: [
14311
- /* @__PURE__ */ jsx14(
14362
+ /* @__PURE__ */ jsx15(
14312
14363
  Tag,
14313
14364
  {
14314
14365
  id: headingId,
@@ -14325,38 +14376,38 @@ function TrustBadges({
14325
14376
  // src/components/page-blocks.tsx
14326
14377
  import { cn as cn11 } from "@reblu/site-ui/utils";
14327
14378
  import { buttonVariants as buttonVariants2 } from "@reblu/site-ui/button-variants";
14328
- import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
14379
+ import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
14329
14380
  var ALIASES = {
14330
14381
  doctor_embed: "profile_embed",
14331
14382
  specialty_embed: "page_embed"
14332
14383
  };
14333
14384
  function HeroBlock({ block, headingLevel }) {
14334
14385
  const { title, subtitle, imageUrl } = block.data;
14335
- return /* @__PURE__ */ jsxs14("div", { className: "space-y-4", children: [
14336
- /* @__PURE__ */ jsx15(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
14337
- subtitle && /* @__PURE__ */ jsx15("p", { className: "text-lg opacity-80", children: subtitle }),
14338
- imageUrl && /* @__PURE__ */ jsx15("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx15("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
14386
+ return /* @__PURE__ */ jsxs15("div", { className: "space-y-4", children: [
14387
+ /* @__PURE__ */ jsx16(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
14388
+ subtitle && /* @__PURE__ */ jsx16("p", { className: "text-lg opacity-80", children: subtitle }),
14389
+ imageUrl && /* @__PURE__ */ jsx16("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx16("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
14339
14390
  ] });
14340
14391
  }
14341
14392
  function RichtextBlock({ block, headingLevel }) {
14342
- return /* @__PURE__ */ jsx15(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
14393
+ return /* @__PURE__ */ jsx16(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
14343
14394
  }
14344
14395
  function FaqBlock({ block }) {
14345
- return /* @__PURE__ */ jsx15(FaqAccordion, { items: block.data.items });
14396
+ return /* @__PURE__ */ jsx16(FaqAccordion, { items: block.data.items });
14346
14397
  }
14347
14398
  function StatsBlock({ block }) {
14348
- return /* @__PURE__ */ jsx15("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ jsxs14("div", { className: "flex flex-col-reverse gap-1", children: [
14349
- /* @__PURE__ */ jsx15("dt", { className: "text-sm opacity-80", children: item.label }),
14350
- /* @__PURE__ */ jsx15("dd", { className: "text-3xl font-bold", children: item.value })
14399
+ return /* @__PURE__ */ jsx16("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ jsxs15("div", { className: "flex flex-col-reverse gap-1", children: [
14400
+ /* @__PURE__ */ jsx16("dt", { className: "text-sm opacity-80", children: item.label }),
14401
+ /* @__PURE__ */ jsx16("dd", { className: "text-3xl font-bold", children: item.value })
14351
14402
  ] }, i)) });
14352
14403
  }
14353
14404
  function TestimonialBlock({ block }) {
14354
14405
  const { quote, author, role, avatarUrl } = block.data;
14355
- return /* @__PURE__ */ jsxs14("figure", { className: "space-y-4", children: [
14356
- /* @__PURE__ */ jsx15("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ jsx15("p", { children: quote }) }),
14357
- /* @__PURE__ */ jsxs14("figcaption", { className: "flex items-center gap-3", children: [
14406
+ return /* @__PURE__ */ jsxs15("figure", { className: "space-y-4", children: [
14407
+ /* @__PURE__ */ jsx16("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ jsx16("p", { children: quote }) }),
14408
+ /* @__PURE__ */ jsxs15("figcaption", { className: "flex items-center gap-3", children: [
14358
14409
  avatarUrl && // eslint-disable-next-line @next/next/no-img-element
14359
- /* @__PURE__ */ jsx15(
14410
+ /* @__PURE__ */ jsx16(
14360
14411
  "img",
14361
14412
  {
14362
14413
  src: avatarUrl,
@@ -14365,9 +14416,9 @@ function TestimonialBlock({ block }) {
14365
14416
  className: "h-10 w-10 rounded-full object-cover"
14366
14417
  }
14367
14418
  ),
14368
- /* @__PURE__ */ jsxs14("span", { children: [
14369
- /* @__PURE__ */ jsx15("span", { className: "font-semibold", children: author }),
14370
- role && /* @__PURE__ */ jsx15("span", { className: "block text-sm opacity-80", children: role })
14419
+ /* @__PURE__ */ jsxs15("span", { children: [
14420
+ /* @__PURE__ */ jsx16("span", { className: "font-semibold", children: author }),
14421
+ role && /* @__PURE__ */ jsx16("span", { className: "block text-sm opacity-80", children: role })
14371
14422
  ] })
14372
14423
  ] })
14373
14424
  ] });
@@ -14376,19 +14427,19 @@ function CtaSlotBlock(_props) {
14376
14427
  return null;
14377
14428
  }
14378
14429
  function FeatureListBlock({ block }) {
14379
- return /* @__PURE__ */ jsx15("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ jsx15("li", { children: item.text }, i)) });
14430
+ return /* @__PURE__ */ jsx16("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ jsx16("li", { children: item.text }, i)) });
14380
14431
  }
14381
14432
  function GalleryBlock({ block }) {
14382
14433
  const { images } = block.data;
14383
- return /* @__PURE__ */ jsx15(
14434
+ return /* @__PURE__ */ jsx16(
14384
14435
  "div",
14385
14436
  {
14386
14437
  className: cn11(
14387
14438
  "grid gap-4",
14388
14439
  images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
14389
14440
  ),
14390
- children: images.map((img, i) => /* @__PURE__ */ jsxs14("figure", { className: "space-y-1", children: [
14391
- /* @__PURE__ */ jsx15("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx15(
14441
+ children: images.map((img, i) => /* @__PURE__ */ jsxs15("figure", { className: "space-y-1", children: [
14442
+ /* @__PURE__ */ jsx16("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx16(
14392
14443
  "img",
14393
14444
  {
14394
14445
  src: img.url,
@@ -14397,7 +14448,7 @@ function GalleryBlock({ block }) {
14397
14448
  className: "h-full w-full object-cover"
14398
14449
  }
14399
14450
  ) }),
14400
- img.caption && /* @__PURE__ */ jsx15("figcaption", { className: "text-sm opacity-80", children: img.caption })
14451
+ img.caption && /* @__PURE__ */ jsx16("figcaption", { className: "text-sm opacity-80", children: img.caption })
14401
14452
  ] }, `${img.url}-${i}`))
14402
14453
  }
14403
14454
  );
@@ -14407,13 +14458,13 @@ function EmbedCard({
14407
14458
  headingLevel,
14408
14459
  embedHref
14409
14460
  }) {
14410
- return /* @__PURE__ */ jsxs14(
14461
+ return /* @__PURE__ */ jsxs15(
14411
14462
  "a",
14412
14463
  {
14413
14464
  href: embedHref(resolved),
14414
14465
  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",
14415
14466
  children: [
14416
- resolved.coverImageUrl && /* @__PURE__ */ jsx15("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ jsx15(
14467
+ resolved.coverImageUrl && /* @__PURE__ */ jsx16("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ jsx16(
14417
14468
  "img",
14418
14469
  {
14419
14470
  src: resolved.coverImageUrl,
@@ -14422,24 +14473,24 @@ function EmbedCard({
14422
14473
  className: "h-full w-full object-cover"
14423
14474
  }
14424
14475
  ) }),
14425
- /* @__PURE__ */ jsxs14("div", { className: "space-y-1 p-4", children: [
14426
- /* @__PURE__ */ jsx15(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
14427
- resolved.role && /* @__PURE__ */ jsx15("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
14428
- resolved.excerpt && /* @__PURE__ */ jsx15("p", { className: "text-muted-foreground", children: resolved.excerpt })
14476
+ /* @__PURE__ */ jsxs15("div", { className: "space-y-1 p-4", children: [
14477
+ /* @__PURE__ */ jsx16(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
14478
+ resolved.role && /* @__PURE__ */ jsx16("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
14479
+ resolved.excerpt && /* @__PURE__ */ jsx16("p", { className: "text-muted-foreground", children: resolved.excerpt })
14429
14480
  ] })
14430
14481
  ]
14431
14482
  }
14432
14483
  );
14433
14484
  }
14434
14485
  function PageEmbedBlock({ block, headingLevel, embedHref }) {
14435
- return /* @__PURE__ */ jsx15(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14486
+ return /* @__PURE__ */ jsx16(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14436
14487
  }
14437
14488
  function ProfileEmbedBlock({
14438
14489
  block,
14439
14490
  headingLevel,
14440
14491
  embedHref
14441
14492
  }) {
14442
- return /* @__PURE__ */ jsx15(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14493
+ return /* @__PURE__ */ jsx16(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14443
14494
  }
14444
14495
  var DEFAULT_RENDERERS = {
14445
14496
  hero: HeroBlock,
@@ -14496,7 +14547,7 @@ function toIdFragment(value) {
14496
14547
  function SectionCta2({ cta }) {
14497
14548
  if (!hasUsableCta(cta)) return null;
14498
14549
  const variant = toButtonVariant(cta.variant);
14499
- return /* @__PURE__ */ jsx15("div", { className: "pt-2", children: /* @__PURE__ */ jsx15(
14550
+ return /* @__PURE__ */ jsx16("div", { className: "pt-2", children: /* @__PURE__ */ jsx16(
14500
14551
  "a",
14501
14552
  {
14502
14553
  href: cta.url,
@@ -14529,7 +14580,7 @@ function PageBlocks({
14529
14580
  const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
14530
14581
  const background = block.backgroundColor;
14531
14582
  return [
14532
- /* @__PURE__ */ jsxs14(
14583
+ /* @__PURE__ */ jsxs15(
14533
14584
  "section",
14534
14585
  {
14535
14586
  "data-slot": "page-block",
@@ -14538,8 +14589,8 @@ function PageBlocks({
14538
14589
  style: surfaceStyle(background),
14539
14590
  className: cn11("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
14540
14591
  children: [
14541
- block.heading && /* @__PURE__ */ jsx15(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx15("span", { id: headingId, children: block.heading }) }),
14542
- /* @__PURE__ */ jsx15(
14592
+ block.heading && /* @__PURE__ */ jsx16(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx16("span", { id: headingId, children: block.heading }) }),
14593
+ /* @__PURE__ */ jsx16(
14543
14594
  Renderer,
14544
14595
  {
14545
14596
  block,
@@ -14547,7 +14598,7 @@ function PageBlocks({
14547
14598
  embedHref
14548
14599
  }
14549
14600
  ),
14550
- /* @__PURE__ */ jsx15(SectionCta2, { cta: block.cta })
14601
+ /* @__PURE__ */ jsx16(SectionCta2, { cta: block.cta })
14551
14602
  ]
14552
14603
  },
14553
14604
  block.id
@@ -14555,12 +14606,12 @@ function PageBlocks({
14555
14606
  ];
14556
14607
  });
14557
14608
  if (sections.length === 0) return null;
14558
- return /* @__PURE__ */ jsx15("div", { className: cn11("space-y-12", className), "data-slot": "page-blocks", children: sections });
14609
+ return /* @__PURE__ */ jsx16("div", { className: cn11("space-y-12", className), "data-slot": "page-blocks", children: sections });
14559
14610
  }
14560
14611
 
14561
14612
  // src/components/shop-filters.tsx
14562
14613
  import { cn as cn12 } from "@reblu/site-ui/utils";
14563
- import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
14614
+ import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
14564
14615
  var DEFAULT_SHOP_PRICE_BANDS = [
14565
14616
  { max: 2500 },
14566
14617
  { min: 2500, max: 5e3 },
@@ -14604,7 +14655,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
14604
14655
  return "";
14605
14656
  }
14606
14657
  function OptionLink({ href, active, label, onActivate }) {
14607
- return /* @__PURE__ */ jsx16(
14658
+ return /* @__PURE__ */ jsx17(
14608
14659
  "a",
14609
14660
  {
14610
14661
  href,
@@ -14622,9 +14673,9 @@ function OptionLink({ href, active, label, onActivate }) {
14622
14673
  );
14623
14674
  }
14624
14675
  function FilterFieldset({ legend, children: children2 }) {
14625
- return /* @__PURE__ */ jsxs15("fieldset", { className: "space-y-2", children: [
14626
- /* @__PURE__ */ jsx16("legend", { className: "text-sm font-medium text-foreground", children: legend }),
14627
- /* @__PURE__ */ jsx16("div", { className: "flex flex-wrap gap-2", children: children2 })
14676
+ return /* @__PURE__ */ jsxs16("fieldset", { className: "space-y-2", children: [
14677
+ /* @__PURE__ */ jsx17("legend", { className: "text-sm font-medium text-foreground", children: legend }),
14678
+ /* @__PURE__ */ jsx17("div", { className: "flex flex-wrap gap-2", children: children2 })
14628
14679
  ] });
14629
14680
  }
14630
14681
  function ShopFilters({
@@ -14647,11 +14698,11 @@ function ShopFilters({
14647
14698
  if (!shouldRenderShopFilters(facets, active)) {
14648
14699
  return null;
14649
14700
  }
14650
- return /* @__PURE__ */ jsxs15("div", { className: cn12("space-y-6", className), "data-slot": "shop-filters", children: [
14701
+ return /* @__PURE__ */ jsxs16("div", { className: cn12("space-y-6", className), "data-slot": "shop-filters", children: [
14651
14702
  visibleTaxonomies.map((axis) => {
14652
14703
  const activeSlug = active.taxonomy?.[axis.key];
14653
- return /* @__PURE__ */ jsxs15(FilterFieldset, { legend: axis.label, children: [
14654
- /* @__PURE__ */ jsx16(
14704
+ return /* @__PURE__ */ jsxs16(FilterFieldset, { legend: axis.label, children: [
14705
+ /* @__PURE__ */ jsx17(
14655
14706
  OptionLink,
14656
14707
  {
14657
14708
  href: hrefs.taxonomy(axis.key, void 0),
@@ -14666,7 +14717,7 @@ function ShopFilters({
14666
14717
  ),
14667
14718
  axis.terms.map((term) => {
14668
14719
  const isActive = activeSlug === term.slug;
14669
- return /* @__PURE__ */ jsx16(
14720
+ return /* @__PURE__ */ jsx17(
14670
14721
  OptionLink,
14671
14722
  {
14672
14723
  href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
@@ -14686,9 +14737,9 @@ function ShopFilters({
14686
14737
  }),
14687
14738
  visibleAttributes.map((attr) => {
14688
14739
  const activeValues = toValueArray(active.attr?.[attr.key]);
14689
- return /* @__PURE__ */ jsx16(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
14740
+ return /* @__PURE__ */ jsx17(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
14690
14741
  const isActive = activeValues.includes(opt.value);
14691
- return /* @__PURE__ */ jsx16(
14742
+ return /* @__PURE__ */ jsx17(
14692
14743
  OptionLink,
14693
14744
  {
14694
14745
  href: hrefs.attr(attr.key, opt.value),
@@ -14706,11 +14757,11 @@ function ShopFilters({
14706
14757
  );
14707
14758
  }) }, attr.key);
14708
14759
  }),
14709
- showPriceGroup && /* @__PURE__ */ jsx16(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
14760
+ showPriceGroup && /* @__PURE__ */ jsx17(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
14710
14761
  const isActive = active.priceMin === band.min && active.priceMax === band.max;
14711
14762
  const nextMin = isActive ? void 0 : band.min;
14712
14763
  const nextMax = isActive ? void 0 : band.max;
14713
- return /* @__PURE__ */ jsx16(
14764
+ return /* @__PURE__ */ jsx17(
14714
14765
  OptionLink,
14715
14766
  {
14716
14767
  href: hrefs.price(nextMin, nextMax),
@@ -14721,7 +14772,7 @@ function ShopFilters({
14721
14772
  i
14722
14773
  );
14723
14774
  }) }),
14724
- hasOnSale && /* @__PURE__ */ jsx16(
14775
+ hasOnSale && /* @__PURE__ */ jsx17(
14725
14776
  OptionLink,
14726
14777
  {
14727
14778
  href: hrefs.onSale(!active.onSale),
@@ -14730,7 +14781,7 @@ function ShopFilters({
14730
14781
  onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
14731
14782
  }
14732
14783
  ),
14733
- /* @__PURE__ */ jsx16(
14784
+ /* @__PURE__ */ jsx17(
14734
14785
  "a",
14735
14786
  {
14736
14787
  href: hrefs.clearAll(),
@@ -14747,7 +14798,7 @@ function ShopFilters({
14747
14798
 
14748
14799
  // src/components/course-catalog-filters.tsx
14749
14800
  import { cn as cn13 } from "@reblu/site-ui/utils";
14750
- import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
14801
+ import { jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
14751
14802
  var DEFAULT_COURSE_PRICE_BANDS = [
14752
14803
  { max: 5e3 },
14753
14804
  { min: 5e3, max: 15e3 },
@@ -14755,6 +14806,8 @@ var DEFAULT_COURSE_PRICE_BANDS = [
14755
14806
  { min: 3e4 }
14756
14807
  ];
14757
14808
  var DEFAULT_COURSE_CATALOG_FILTERS_LABELS = {
14809
+ category: "Categor\xEDa",
14810
+ allCategories: "Todas",
14758
14811
  instructor: "Docente",
14759
14812
  allInstructors: "Todos",
14760
14813
  price: "Precio",
@@ -14778,6 +14831,8 @@ function bandLabel(band, t, currencyCode, locale) {
14778
14831
  }
14779
14832
  function CourseCatalogFilters({
14780
14833
  instructors,
14834
+ categories = [],
14835
+ enabled = {},
14781
14836
  hrefs,
14782
14837
  active = {},
14783
14838
  onChange,
@@ -14789,11 +14844,41 @@ function CourseCatalogFilters({
14789
14844
  }) {
14790
14845
  const t = { ...DEFAULT_COURSE_CATALOG_FILTERS_LABELS, ...labels };
14791
14846
  const named = instructors.filter((i) => instructorName(i) !== "");
14792
- const showInstructors = named.length > 0 || active.instructor !== void 0;
14847
+ const sortedCategories = [...categories].sort((a, b2) => a.sortOrder - b2.sortOrder);
14848
+ const categoryHref = hrefs.category;
14849
+ const showCategories = enabled.category !== false && categoryHref !== void 0 && (sortedCategories.length > 0 || active.category !== void 0);
14850
+ const showInstructors = enabled.instructor !== false && (named.length > 0 || active.instructor !== void 0);
14851
+ const showPrice = enabled.price !== false;
14793
14852
  const isFree = Boolean(active.free);
14794
- return /* @__PURE__ */ jsxs16("div", { className: cn13("space-y-6", className), "data-slot": "course-catalog-filters", children: [
14795
- showInstructors && /* @__PURE__ */ jsxs16(FilterFieldset, { legend: t.instructor, children: [
14796
- /* @__PURE__ */ jsx17(
14853
+ if (!showCategories && !showInstructors && !showPrice) return null;
14854
+ return /* @__PURE__ */ jsxs17("div", { className: cn13("space-y-6", className), "data-slot": "course-catalog-filters", children: [
14855
+ showCategories && /* @__PURE__ */ jsxs17(FilterFieldset, { legend: t.category, children: [
14856
+ /* @__PURE__ */ jsx18(
14857
+ OptionLink,
14858
+ {
14859
+ href: categoryHref(void 0),
14860
+ active: active.category === void 0,
14861
+ label: t.allCategories,
14862
+ onActivate: onChange ? () => onChange({ category: void 0 }) : void 0
14863
+ }
14864
+ ),
14865
+ sortedCategories.map((category) => {
14866
+ const isActive = active.category === category.slug;
14867
+ const next2 = isActive ? void 0 : category.slug;
14868
+ return /* @__PURE__ */ jsx18(
14869
+ OptionLink,
14870
+ {
14871
+ href: categoryHref(next2),
14872
+ active: isActive,
14873
+ label: category.name,
14874
+ onActivate: onChange ? () => onChange({ category: next2 }) : void 0
14875
+ },
14876
+ category.id
14877
+ );
14878
+ })
14879
+ ] }),
14880
+ showInstructors && /* @__PURE__ */ jsxs17(FilterFieldset, { legend: t.instructor, children: [
14881
+ /* @__PURE__ */ jsx18(
14797
14882
  OptionLink,
14798
14883
  {
14799
14884
  href: hrefs.instructor(void 0),
@@ -14805,7 +14890,7 @@ function CourseCatalogFilters({
14805
14890
  named.map((instructor) => {
14806
14891
  const isActive = active.instructor === instructor.id;
14807
14892
  const next2 = isActive ? void 0 : instructor.id;
14808
- return /* @__PURE__ */ jsx17(
14893
+ return /* @__PURE__ */ jsx18(
14809
14894
  OptionLink,
14810
14895
  {
14811
14896
  href: hrefs.instructor(next2),
@@ -14817,8 +14902,8 @@ function CourseCatalogFilters({
14817
14902
  );
14818
14903
  })
14819
14904
  ] }),
14820
- /* @__PURE__ */ jsxs16(FilterFieldset, { legend: t.price, children: [
14821
- /* @__PURE__ */ jsx17(
14905
+ showPrice && /* @__PURE__ */ jsxs17(FilterFieldset, { legend: t.price, children: [
14906
+ /* @__PURE__ */ jsx18(
14822
14907
  OptionLink,
14823
14908
  {
14824
14909
  href: hrefs.free(!isFree),
@@ -14833,7 +14918,7 @@ function CourseCatalogFilters({
14833
14918
  const isActive = !isFree && active.priceMin === band.min && active.priceMax === band.max;
14834
14919
  const nextMin = isActive ? void 0 : band.min;
14835
14920
  const nextMax = isActive ? void 0 : band.max;
14836
- return /* @__PURE__ */ jsx17(
14921
+ return /* @__PURE__ */ jsx18(
14837
14922
  OptionLink,
14838
14923
  {
14839
14924
  href: hrefs.price(nextMin, nextMax),
@@ -14845,13 +14930,14 @@ function CourseCatalogFilters({
14845
14930
  );
14846
14931
  })
14847
14932
  ] }),
14848
- /* @__PURE__ */ jsx17(
14933
+ /* @__PURE__ */ jsx18(
14849
14934
  "a",
14850
14935
  {
14851
14936
  href: hrefs.clearAll(),
14852
14937
  onClick: onChange ? (event) => {
14853
14938
  event.preventDefault();
14854
14939
  onChange({
14940
+ category: void 0,
14855
14941
  instructor: void 0,
14856
14942
  priceMin: void 0,
14857
14943
  priceMax: void 0,
@@ -14867,7 +14953,7 @@ function CourseCatalogFilters({
14867
14953
 
14868
14954
  // src/components/cart-line-list.tsx
14869
14955
  import { cn as cn14 } from "@reblu/site-ui/utils";
14870
- import { jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
14956
+ import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
14871
14957
  var DEFAULT_LABELS2 = {
14872
14958
  quantityLabel: "Cantidad",
14873
14959
  decrease: "Reducir cantidad",
@@ -14893,9 +14979,9 @@ function CartLineList({
14893
14979
  }) {
14894
14980
  const t = { ...DEFAULT_LABELS2, ...labels };
14895
14981
  const noticeContent = notice === true ? t.cancelledNotice : notice;
14896
- return /* @__PURE__ */ jsxs17("div", { className: cn14("space-y-4", className), "data-slot": "cart-line-list", children: [
14897
- /* @__PURE__ */ jsx18("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
14898
- noticeContent != null && noticeContent !== false && /* @__PURE__ */ jsx18(
14982
+ return /* @__PURE__ */ jsxs18("div", { className: cn14("space-y-4", className), "data-slot": "cart-line-list", children: [
14983
+ /* @__PURE__ */ jsx19("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
14984
+ noticeContent != null && noticeContent !== false && /* @__PURE__ */ jsx19(
14899
14985
  "div",
14900
14986
  {
14901
14987
  role: "status",
@@ -14904,33 +14990,33 @@ function CartLineList({
14904
14990
  children: noticeContent
14905
14991
  }
14906
14992
  ),
14907
- /* @__PURE__ */ jsx18("ul", { className: "space-y-4", children: items.map((item) => {
14993
+ /* @__PURE__ */ jsx19("ul", { className: "space-y-4", children: items.map((item) => {
14908
14994
  const maxQty = item.maxStock ?? Infinity;
14909
14995
  const atMax = item.quantity >= maxQty;
14910
14996
  const atMin = item.quantity <= 1;
14911
14997
  const message = lineMessage?.(item);
14912
- return /* @__PURE__ */ jsxs17(
14998
+ return /* @__PURE__ */ jsxs18(
14913
14999
  "li",
14914
15000
  {
14915
15001
  className: "flex gap-4 rounded-xl border border-border bg-card p-4",
14916
15002
  children: [
14917
- /* @__PURE__ */ jsx18("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ jsx18("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
14918
- /* @__PURE__ */ jsxs17("div", { className: "min-w-0 flex-1", children: [
14919
- /* @__PURE__ */ jsx18("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
14920
- item.variantName && /* @__PURE__ */ jsx18("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
14921
- /* @__PURE__ */ jsxs17("p", { className: "mt-1 text-sm text-muted-foreground", children: [
15003
+ /* @__PURE__ */ jsx19("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ jsx19("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
15004
+ /* @__PURE__ */ jsxs18("div", { className: "min-w-0 flex-1", children: [
15005
+ /* @__PURE__ */ jsx19("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
15006
+ item.variantName && /* @__PURE__ */ jsx19("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
15007
+ /* @__PURE__ */ jsxs18("p", { className: "mt-1 text-sm text-muted-foreground", children: [
14922
15008
  formatPrice(item.unitPrice, currencyCode, locale),
14923
15009
  " ",
14924
15010
  t.unitPriceSuffix
14925
15011
  ] }),
14926
- /* @__PURE__ */ jsxs17(
15012
+ /* @__PURE__ */ jsxs18(
14927
15013
  "div",
14928
15014
  {
14929
15015
  role: "group",
14930
15016
  "aria-label": t.quantityLabel,
14931
15017
  className: "mt-3 flex items-center gap-3",
14932
15018
  children: [
14933
- /* @__PURE__ */ jsx18(
15019
+ /* @__PURE__ */ jsx19(
14934
15020
  "button",
14935
15021
  {
14936
15022
  type: "button",
@@ -14941,8 +15027,8 @@ function CartLineList({
14941
15027
  children: "\u2212"
14942
15028
  }
14943
15029
  ),
14944
- /* @__PURE__ */ jsx18("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
14945
- /* @__PURE__ */ jsx18(
15030
+ /* @__PURE__ */ jsx19("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
15031
+ /* @__PURE__ */ jsx19(
14946
15032
  "button",
14947
15033
  {
14948
15034
  type: "button",
@@ -14953,7 +15039,7 @@ function CartLineList({
14953
15039
  children: "+"
14954
15040
  }
14955
15041
  ),
14956
- onRemove && /* @__PURE__ */ jsx18(
15042
+ onRemove && /* @__PURE__ */ jsx19(
14957
15043
  "button",
14958
15044
  {
14959
15045
  type: "button",
@@ -14966,7 +15052,7 @@ function CartLineList({
14966
15052
  ]
14967
15053
  }
14968
15054
  ),
14969
- message != null && message !== false && /* @__PURE__ */ jsx18(
15055
+ message != null && message !== false && /* @__PURE__ */ jsx19(
14970
15056
  "p",
14971
15057
  {
14972
15058
  className: "mt-2 text-sm text-destructive",
@@ -14975,7 +15061,7 @@ function CartLineList({
14975
15061
  }
14976
15062
  )
14977
15063
  ] }),
14978
- /* @__PURE__ */ jsx18("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ jsx18("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
15064
+ /* @__PURE__ */ jsx19("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ jsx19("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
14979
15065
  ]
14980
15066
  },
14981
15067
  lineKey(item.productId, item.variantId)
@@ -14986,7 +15072,7 @@ function CartLineList({
14986
15072
 
14987
15073
  // src/components/cart-summary.tsx
14988
15074
  import { cn as cn15 } from "@reblu/site-ui/utils";
14989
- import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
15075
+ import { jsx as jsx20, jsxs as jsxs19 } from "react/jsx-runtime";
14990
15076
  var DEFAULT_LABELS3 = {
14991
15077
  subtotal: "Subtotal",
14992
15078
  discountPrefix: "Descuento",
@@ -15016,37 +15102,37 @@ function CartSummary({
15016
15102
  const hasDiscount = Boolean(discountAmount && discountAmount > 0);
15017
15103
  const noticeContent = notice === true ? t.cancelledNotice : notice;
15018
15104
  const hasNotice = noticeContent != null && noticeContent !== false;
15019
- const breakdown = /* @__PURE__ */ jsxs18(
15105
+ const breakdown = /* @__PURE__ */ jsxs19(
15020
15106
  "dl",
15021
15107
  {
15022
15108
  className: cn15("space-y-2 text-sm", !hasNotice && className),
15023
15109
  "data-slot": "cart-summary",
15024
15110
  children: [
15025
- /* @__PURE__ */ jsxs18("div", { className: "flex justify-between text-muted-foreground", children: [
15026
- /* @__PURE__ */ jsx19("dt", { children: t.subtotal }),
15027
- /* @__PURE__ */ jsx19("dd", { children: formatPrice(subtotal, currencyCode, locale) })
15111
+ /* @__PURE__ */ jsxs19("div", { className: "flex justify-between text-muted-foreground", children: [
15112
+ /* @__PURE__ */ jsx20("dt", { children: t.subtotal }),
15113
+ /* @__PURE__ */ jsx20("dd", { children: formatPrice(subtotal, currencyCode, locale) })
15028
15114
  ] }),
15029
- hasDiscount && /* @__PURE__ */ jsxs18("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
15030
- /* @__PURE__ */ jsx19("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
15031
- /* @__PURE__ */ jsxs18("dd", { children: [
15115
+ hasDiscount && /* @__PURE__ */ jsxs19("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
15116
+ /* @__PURE__ */ jsx20("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
15117
+ /* @__PURE__ */ jsxs19("dd", { children: [
15032
15118
  "-",
15033
15119
  formatPrice(discountAmount, currencyCode, locale)
15034
15120
  ] })
15035
15121
  ] }),
15036
- shippingEnabled && /* @__PURE__ */ jsxs18("div", { className: "flex justify-between text-muted-foreground", children: [
15037
- /* @__PURE__ */ jsx19("dt", { children: t.shipping }),
15038
- /* @__PURE__ */ jsx19("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
15122
+ shippingEnabled && /* @__PURE__ */ jsxs19("div", { className: "flex justify-between text-muted-foreground", children: [
15123
+ /* @__PURE__ */ jsx20("dt", { children: t.shipping }),
15124
+ /* @__PURE__ */ jsx20("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
15039
15125
  ] }),
15040
- /* @__PURE__ */ jsxs18("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
15041
- /* @__PURE__ */ jsx19("dt", { children: t.total }),
15042
- /* @__PURE__ */ jsx19("dd", { children: formatPrice(total, currencyCode, locale) })
15126
+ /* @__PURE__ */ jsxs19("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
15127
+ /* @__PURE__ */ jsx20("dt", { children: t.total }),
15128
+ /* @__PURE__ */ jsx20("dd", { children: formatPrice(total, currencyCode, locale) })
15043
15129
  ] })
15044
15130
  ]
15045
15131
  }
15046
15132
  );
15047
15133
  if (!hasNotice) return breakdown;
15048
- return /* @__PURE__ */ jsxs18("div", { className: cn15("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
15049
- /* @__PURE__ */ jsx19(
15134
+ return /* @__PURE__ */ jsxs19("div", { className: cn15("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
15135
+ /* @__PURE__ */ jsx20(
15050
15136
  "div",
15051
15137
  {
15052
15138
  role: "status",
@@ -15061,7 +15147,7 @@ function CartSummary({
15061
15147
 
15062
15148
  // src/components/cart-adjustments-notice.tsx
15063
15149
  import { cn as cn16 } from "@reblu/site-ui/utils";
15064
- import { jsx as jsx20 } from "react/jsx-runtime";
15150
+ import { jsx as jsx21 } from "react/jsx-runtime";
15065
15151
  var DEFAULT_LABELS4 = {
15066
15152
  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.`,
15067
15153
  quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
@@ -15095,20 +15181,20 @@ function CartAdjustmentsNotice({
15095
15181
  );
15096
15182
  }
15097
15183
  if (messages.length === 0) return null;
15098
- return /* @__PURE__ */ jsx20(
15184
+ return /* @__PURE__ */ jsx21(
15099
15185
  "div",
15100
15186
  {
15101
15187
  role: "status",
15102
15188
  className: cn16("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
15103
15189
  "data-slot": "cart-adjustments-notice",
15104
- children: messages.length === 1 ? /* @__PURE__ */ jsx20("p", { children: messages[0] }) : /* @__PURE__ */ jsx20("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ jsx20("li", { children: message }, index)) })
15190
+ children: messages.length === 1 ? /* @__PURE__ */ jsx21("p", { children: messages[0] }) : /* @__PURE__ */ jsx21("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ jsx21("li", { children: message }, index)) })
15105
15191
  }
15106
15192
  );
15107
15193
  }
15108
15194
 
15109
15195
  // src/components/added-to-cart-toast.tsx
15110
15196
  import { cn as cn17 } from "@reblu/site-ui/utils";
15111
- import { jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
15197
+ import { jsx as jsx22, jsxs as jsxs20 } from "react/jsx-runtime";
15112
15198
  var DEFAULT_LABELS5 = {
15113
15199
  success: "A\xF1adido al carrito",
15114
15200
  error: "No se pudo a\xF1adir al carrito",
@@ -15128,7 +15214,7 @@ function AddedToCartToast({
15128
15214
  const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
15129
15215
  const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
15130
15216
  const variant = status === "success" ? "success" : "error";
15131
- return /* @__PURE__ */ jsxs19(
15217
+ return /* @__PURE__ */ jsxs20(
15132
15218
  "div",
15133
15219
  {
15134
15220
  "data-slot": "added-to-cart-toast",
@@ -15141,12 +15227,12 @@ function AddedToCartToast({
15141
15227
  ),
15142
15228
  children: [
15143
15229
  hasThumbnail && // eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
15144
- /* @__PURE__ */ jsx21("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
15145
- /* @__PURE__ */ jsxs19("div", { className: "min-w-0 flex-1", children: [
15146
- /* @__PURE__ */ jsx21("p", { className: "truncate font-semibold text-foreground", children: productName }),
15147
- /* @__PURE__ */ jsx21("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
15230
+ /* @__PURE__ */ jsx22("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
15231
+ /* @__PURE__ */ jsxs20("div", { className: "min-w-0 flex-1", children: [
15232
+ /* @__PURE__ */ jsx22("p", { className: "truncate font-semibold text-foreground", children: productName }),
15233
+ /* @__PURE__ */ jsx22("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
15148
15234
  ] }),
15149
- /* @__PURE__ */ jsx21("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsx21("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
15235
+ /* @__PURE__ */ jsx22("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsx22("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
15150
15236
  ]
15151
15237
  }
15152
15238
  );
@@ -15154,7 +15240,7 @@ function AddedToCartToast({
15154
15240
 
15155
15241
  // src/components/checkout-login-prompt.tsx
15156
15242
  import { cn as cn18 } from "@reblu/site-ui/utils";
15157
- import { Fragment as Fragment3, jsx as jsx22, jsxs as jsxs20 } from "react/jsx-runtime";
15243
+ import { Fragment as Fragment3, jsx as jsx23, jsxs as jsxs21 } from "react/jsx-runtime";
15158
15244
  var DEFAULT_LABELS6 = {
15159
15245
  title: "Identificaci\xF3n",
15160
15246
  description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
@@ -15181,9 +15267,9 @@ function CheckoutLoginPrompt({
15181
15267
  if (!open) return null;
15182
15268
  const t = { ...DEFAULT_LABELS6, ...labels };
15183
15269
  const isValidEmail = EMAIL_PATTERN.test(email.trim());
15184
- return /* @__PURE__ */ jsxs20(Fragment3, { children: [
15185
- /* @__PURE__ */ jsx22("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
15186
- /* @__PURE__ */ jsxs20(
15270
+ return /* @__PURE__ */ jsxs21(Fragment3, { children: [
15271
+ /* @__PURE__ */ jsx23("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
15272
+ /* @__PURE__ */ jsxs21(
15187
15273
  "div",
15188
15274
  {
15189
15275
  role: "dialog",
@@ -15195,12 +15281,12 @@ function CheckoutLoginPrompt({
15195
15281
  className
15196
15282
  ),
15197
15283
  children: [
15198
- /* @__PURE__ */ jsxs20("div", { className: "flex items-start justify-between gap-3", children: [
15199
- /* @__PURE__ */ jsxs20("div", { children: [
15200
- /* @__PURE__ */ jsx22("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
15201
- /* @__PURE__ */ jsx22("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
15284
+ /* @__PURE__ */ jsxs21("div", { className: "flex items-start justify-between gap-3", children: [
15285
+ /* @__PURE__ */ jsxs21("div", { children: [
15286
+ /* @__PURE__ */ jsx23("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
15287
+ /* @__PURE__ */ jsx23("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
15202
15288
  ] }),
15203
- /* @__PURE__ */ jsx22(
15289
+ /* @__PURE__ */ jsx23(
15204
15290
  "button",
15205
15291
  {
15206
15292
  type: "button",
@@ -15211,9 +15297,9 @@ function CheckoutLoginPrompt({
15211
15297
  }
15212
15298
  )
15213
15299
  ] }),
15214
- /* @__PURE__ */ jsxs20("div", { className: "space-y-2", children: [
15215
- /* @__PURE__ */ jsx22("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
15216
- /* @__PURE__ */ jsx22(
15300
+ /* @__PURE__ */ jsxs21("div", { className: "space-y-2", children: [
15301
+ /* @__PURE__ */ jsx23("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
15302
+ /* @__PURE__ */ jsx23(
15217
15303
  "input",
15218
15304
  {
15219
15305
  id: "checkout-login-prompt-email",
@@ -15228,10 +15314,10 @@ function CheckoutLoginPrompt({
15228
15314
  )
15229
15315
  }
15230
15316
  ),
15231
- error && /* @__PURE__ */ jsx22("p", { className: "text-xs text-destructive", children: error })
15317
+ error && /* @__PURE__ */ jsx23("p", { className: "text-xs text-destructive", children: error })
15232
15318
  ] }),
15233
- /* @__PURE__ */ jsxs20("div", { className: "space-y-2", children: [
15234
- /* @__PURE__ */ jsx22(
15319
+ /* @__PURE__ */ jsxs21("div", { className: "space-y-2", children: [
15320
+ /* @__PURE__ */ jsx23(
15235
15321
  "button",
15236
15322
  {
15237
15323
  type: "button",
@@ -15244,7 +15330,7 @@ function CheckoutLoginPrompt({
15244
15330
  children: checking ? t.checking : t.continueWithEmail
15245
15331
  }
15246
15332
  ),
15247
- /* @__PURE__ */ jsx22(
15333
+ /* @__PURE__ */ jsx23(
15248
15334
  "button",
15249
15335
  {
15250
15336
  type: "button",
@@ -15263,7 +15349,7 @@ function CheckoutLoginPrompt({
15263
15349
  // src/components/checkout-form.tsx
15264
15350
  import { cn as cn19 } from "@reblu/site-ui/utils";
15265
15351
  import { PhoneInput } from "@reblu/site-ui/phone-input";
15266
- import { Fragment as Fragment4, jsx as jsx23, jsxs as jsxs21 } from "react/jsx-runtime";
15352
+ import { Fragment as Fragment4, jsx as jsx24, jsxs as jsxs22 } from "react/jsx-runtime";
15267
15353
  var DEFAULT_LABELS7 = {
15268
15354
  contactTitle: "Datos de contacto",
15269
15355
  nameLabel: "Nombre completo",
@@ -15319,9 +15405,9 @@ function CheckoutForm({
15319
15405
  event.preventDefault();
15320
15406
  if (discountCode.trim() && !discountApplying) onApplyDiscount();
15321
15407
  }
15322
- return /* @__PURE__ */ jsxs21(Fragment4, { children: [
15408
+ return /* @__PURE__ */ jsxs22(Fragment4, { children: [
15323
15409
  loginPrompt,
15324
- /* @__PURE__ */ jsxs21(
15410
+ /* @__PURE__ */ jsxs22(
15325
15411
  "form",
15326
15412
  {
15327
15413
  "data-testid": "checkout-form",
@@ -15329,12 +15415,12 @@ function CheckoutForm({
15329
15415
  className: cn19("space-y-8", className),
15330
15416
  "data-slot": "checkout-form",
15331
15417
  children: [
15332
- /* @__PURE__ */ jsxs21("section", { className: "space-y-4", children: [
15333
- /* @__PURE__ */ jsx23("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
15334
- /* @__PURE__ */ jsxs21("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15335
- /* @__PURE__ */ jsxs21("div", { className: "space-y-1", children: [
15336
- /* @__PURE__ */ jsx23("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
15337
- /* @__PURE__ */ jsx23(
15418
+ /* @__PURE__ */ jsxs22("section", { className: "space-y-4", children: [
15419
+ /* @__PURE__ */ jsx24("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
15420
+ /* @__PURE__ */ jsxs22("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15421
+ /* @__PURE__ */ jsxs22("div", { className: "space-y-1", children: [
15422
+ /* @__PURE__ */ jsx24("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
15423
+ /* @__PURE__ */ jsx24(
15338
15424
  "input",
15339
15425
  {
15340
15426
  id: "checkout-form-name",
@@ -15349,11 +15435,11 @@ function CheckoutForm({
15349
15435
  )
15350
15436
  }
15351
15437
  ),
15352
- contactErrors?.name && /* @__PURE__ */ jsx23("p", { className: "text-xs text-destructive", children: contactErrors.name })
15438
+ contactErrors?.name && /* @__PURE__ */ jsx24("p", { className: "text-xs text-destructive", children: contactErrors.name })
15353
15439
  ] }),
15354
- /* @__PURE__ */ jsxs21("div", { className: "space-y-1", children: [
15355
- /* @__PURE__ */ jsx23("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
15356
- /* @__PURE__ */ jsx23(
15440
+ /* @__PURE__ */ jsxs22("div", { className: "space-y-1", children: [
15441
+ /* @__PURE__ */ jsx24("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
15442
+ /* @__PURE__ */ jsx24(
15357
15443
  "input",
15358
15444
  {
15359
15445
  id: "checkout-form-email",
@@ -15368,9 +15454,9 @@ function CheckoutForm({
15368
15454
  )
15369
15455
  }
15370
15456
  ),
15371
- contactErrors?.email && /* @__PURE__ */ jsx23("p", { className: "text-xs text-destructive", children: contactErrors.email })
15457
+ contactErrors?.email && /* @__PURE__ */ jsx24("p", { className: "text-xs text-destructive", children: contactErrors.email })
15372
15458
  ] }),
15373
- /* @__PURE__ */ jsx23("div", { className: "space-y-1", children: /* @__PURE__ */ jsx23(
15459
+ /* @__PURE__ */ jsx24("div", { className: "space-y-1", children: /* @__PURE__ */ jsx24(
15374
15460
  PhoneInput,
15375
15461
  {
15376
15462
  id: "checkout-form-phone",
@@ -15384,26 +15470,26 @@ function CheckoutForm({
15384
15470
  ] })
15385
15471
  ] }),
15386
15472
  children2,
15387
- generalError ? /* @__PURE__ */ jsx23("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
15388
- /* @__PURE__ */ jsxs21("section", { className: "space-y-3", children: [
15389
- /* @__PURE__ */ jsx23("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
15390
- autoDiscount ? /* @__PURE__ */ jsxs21(
15473
+ generalError ? /* @__PURE__ */ jsx24("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
15474
+ /* @__PURE__ */ jsxs22("section", { className: "space-y-3", children: [
15475
+ /* @__PURE__ */ jsx24("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
15476
+ autoDiscount ? /* @__PURE__ */ jsxs22(
15391
15477
  "div",
15392
15478
  {
15393
15479
  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",
15394
15480
  "data-slot": "checkout-staff-discount",
15395
15481
  children: [
15396
- /* @__PURE__ */ jsx23("span", { className: "font-semibold", children: t.staffDiscountApplied }),
15397
- /* @__PURE__ */ jsx23("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
15482
+ /* @__PURE__ */ jsx24("span", { className: "font-semibold", children: t.staffDiscountApplied }),
15483
+ /* @__PURE__ */ jsx24("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
15398
15484
  ]
15399
15485
  }
15400
15486
  ) : null,
15401
- appliedDiscount && !autoDiscount ? /* @__PURE__ */ jsxs21("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: [
15402
- /* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
15403
- /* @__PURE__ */ jsx23("span", { className: "font-semibold", children: appliedDiscount.code }),
15404
- /* @__PURE__ */ jsx23("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
15487
+ appliedDiscount && !autoDiscount ? /* @__PURE__ */ jsxs22("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: [
15488
+ /* @__PURE__ */ jsxs22("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
15489
+ /* @__PURE__ */ jsx24("span", { className: "font-semibold", children: appliedDiscount.code }),
15490
+ /* @__PURE__ */ jsx24("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
15405
15491
  ] }),
15406
- /* @__PURE__ */ jsx23(
15492
+ /* @__PURE__ */ jsx24(
15407
15493
  "button",
15408
15494
  {
15409
15495
  type: "button",
@@ -15413,9 +15499,9 @@ function CheckoutForm({
15413
15499
  children: t.removeDiscount
15414
15500
  }
15415
15501
  )
15416
- ] }) : /* @__PURE__ */ jsxs21("div", { className: "flex gap-2", children: [
15417
- /* @__PURE__ */ jsx23("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
15418
- /* @__PURE__ */ jsx23(
15502
+ ] }) : /* @__PURE__ */ jsxs22("div", { className: "flex gap-2", children: [
15503
+ /* @__PURE__ */ jsx24("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
15504
+ /* @__PURE__ */ jsx24(
15419
15505
  "input",
15420
15506
  {
15421
15507
  id: "checkout-form-discount-code",
@@ -15427,7 +15513,7 @@ function CheckoutForm({
15427
15513
  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"
15428
15514
  }
15429
15515
  ),
15430
- /* @__PURE__ */ jsx23(
15516
+ /* @__PURE__ */ jsx24(
15431
15517
  "button",
15432
15518
  {
15433
15519
  type: "button",
@@ -15438,9 +15524,9 @@ function CheckoutForm({
15438
15524
  }
15439
15525
  )
15440
15526
  ] }),
15441
- discountError && /* @__PURE__ */ jsx23("p", { className: "text-xs text-destructive", children: discountError })
15527
+ discountError && /* @__PURE__ */ jsx24("p", { className: "text-xs text-destructive", children: discountError })
15442
15528
  ] }),
15443
- /* @__PURE__ */ jsx23(
15529
+ /* @__PURE__ */ jsx24(
15444
15530
  "button",
15445
15531
  {
15446
15532
  type: "submit",
@@ -15463,7 +15549,7 @@ import { cn as cn21 } from "@reblu/site-ui/utils";
15463
15549
 
15464
15550
  // src/components/order-invoice-link.tsx
15465
15551
  import { cn as cn20 } from "@reblu/site-ui/utils";
15466
- import { jsx as jsx24, jsxs as jsxs22 } from "react/jsx-runtime";
15552
+ import { jsx as jsx25, jsxs as jsxs23 } from "react/jsx-runtime";
15467
15553
  var DEFAULT_LABELS8 = {
15468
15554
  linkLabel: "Descargar la factura {number}",
15469
15555
  signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
@@ -15471,8 +15557,8 @@ var DEFAULT_LABELS8 = {
15471
15557
  function OrderInvoiceLink({ invoice, labels, className }) {
15472
15558
  if (!invoice) return null;
15473
15559
  const t = { ...DEFAULT_LABELS8, ...labels };
15474
- return /* @__PURE__ */ jsxs22("div", { className: cn20("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
15475
- /* @__PURE__ */ jsx24(
15560
+ return /* @__PURE__ */ jsxs23("div", { className: cn20("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
15561
+ /* @__PURE__ */ jsx25(
15476
15562
  "a",
15477
15563
  {
15478
15564
  href: invoice.url,
@@ -15480,12 +15566,12 @@ function OrderInvoiceLink({ invoice, labels, className }) {
15480
15566
  children: t.linkLabel.replace("{number}", invoice.number)
15481
15567
  }
15482
15568
  ),
15483
- /* @__PURE__ */ jsx24("p", { className: "text-muted-foreground", children: t.signInHint })
15569
+ /* @__PURE__ */ jsx25("p", { className: "text-muted-foreground", children: t.signInHint })
15484
15570
  ] });
15485
15571
  }
15486
15572
 
15487
15573
  // src/components/order-confirmation.tsx
15488
- import { jsx as jsx25, jsxs as jsxs23 } from "react/jsx-runtime";
15574
+ import { jsx as jsx26, jsxs as jsxs24 } from "react/jsx-runtime";
15489
15575
  var DEFAULT_LABELS9 = {
15490
15576
  pollingTitle: "Confirmando tu pedido\u2026",
15491
15577
  pollingDescription: "Estamos procesando el pago, un momento\u2026",
@@ -15551,43 +15637,43 @@ function OrderConfirmation({
15551
15637
  const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
15552
15638
  const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
15553
15639
  const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
15554
- return /* @__PURE__ */ jsxs23("div", { className: cn21("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
15555
- /* @__PURE__ */ jsx25("h1", { className: "text-3xl font-bold", children: title }),
15556
- /* @__PURE__ */ jsx25("p", { className: "text-lg text-muted-foreground", children: description }),
15557
- showFullOrderSummary && order && /* @__PURE__ */ jsxs23("div", { className: "space-y-6", children: [
15558
- /* @__PURE__ */ jsxs23("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15559
- /* @__PURE__ */ jsx25("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
15560
- /* @__PURE__ */ jsx25("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15640
+ return /* @__PURE__ */ jsxs24("div", { className: cn21("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
15641
+ /* @__PURE__ */ jsx26("h1", { className: "text-3xl font-bold", children: title }),
15642
+ /* @__PURE__ */ jsx26("p", { className: "text-lg text-muted-foreground", children: description }),
15643
+ showFullOrderSummary && order && /* @__PURE__ */ jsxs24("div", { className: "space-y-6", children: [
15644
+ /* @__PURE__ */ jsxs24("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15645
+ /* @__PURE__ */ jsx26("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
15646
+ /* @__PURE__ */ jsx26("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15561
15647
  ] }),
15562
- /* @__PURE__ */ jsxs23("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
15563
- order.items.map((item, idx) => /* @__PURE__ */ jsxs23(
15648
+ /* @__PURE__ */ jsxs24("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
15649
+ order.items.map((item, idx) => /* @__PURE__ */ jsxs24(
15564
15650
  "div",
15565
15651
  {
15566
15652
  className: "flex justify-between gap-4 text-sm",
15567
15653
  children: [
15568
- /* @__PURE__ */ jsxs23("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
15654
+ /* @__PURE__ */ jsxs24("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
15569
15655
  item.product.name,
15570
15656
  item.variant ? ` (${item.variant.name})` : "",
15571
15657
  " x",
15572
15658
  item.quantity
15573
15659
  ] }),
15574
- /* @__PURE__ */ jsx25("span", { children: formatPrice(item.total, currencyCode, locale) })
15660
+ /* @__PURE__ */ jsx26("span", { children: formatPrice(item.total, currencyCode, locale) })
15575
15661
  ]
15576
15662
  },
15577
15663
  idx
15578
15664
  )),
15579
- /* @__PURE__ */ jsx25("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ jsxs23("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
15580
- /* @__PURE__ */ jsx25("span", { children: t.totalLabel }),
15581
- /* @__PURE__ */ jsx25("span", { children: formatPrice(order.total, currencyCode, locale) })
15665
+ /* @__PURE__ */ jsx26("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ jsxs24("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
15666
+ /* @__PURE__ */ jsx26("span", { children: t.totalLabel }),
15667
+ /* @__PURE__ */ jsx26("span", { children: formatPrice(order.total, currencyCode, locale) })
15582
15668
  ] }) })
15583
15669
  ] }),
15584
- /* @__PURE__ */ jsxs23("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
15670
+ /* @__PURE__ */ jsxs24("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
15585
15671
  t.confirmationEmailPrefix,
15586
15672
  " ",
15587
- /* @__PURE__ */ jsx25("span", { className: "font-medium text-foreground", children: order.customerEmail }),
15673
+ /* @__PURE__ */ jsx26("span", { className: "font-medium text-foreground", children: order.customerEmail }),
15588
15674
  "."
15589
15675
  ] }),
15590
- /* @__PURE__ */ jsx25(
15676
+ /* @__PURE__ */ jsx26(
15591
15677
  OrderInvoiceLink,
15592
15678
  {
15593
15679
  invoice: order.invoice,
@@ -15595,11 +15681,11 @@ function OrderConfirmation({
15595
15681
  }
15596
15682
  )
15597
15683
  ] }),
15598
- showOrderReference && order && /* @__PURE__ */ jsxs23("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15599
- /* @__PURE__ */ jsx25("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
15600
- /* @__PURE__ */ jsx25("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15684
+ showOrderReference && order && /* @__PURE__ */ jsxs24("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15685
+ /* @__PURE__ */ jsx26("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
15686
+ /* @__PURE__ */ jsx26("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15601
15687
  ] }),
15602
- status === "failed" && cartHref && /* @__PURE__ */ jsx25(
15688
+ status === "failed" && cartHref && /* @__PURE__ */ jsx26(
15603
15689
  "a",
15604
15690
  {
15605
15691
  href: cartHref,
@@ -15607,7 +15693,7 @@ function OrderConfirmation({
15607
15693
  children: t.backToCartLabel
15608
15694
  }
15609
15695
  ),
15610
- showRecheck && /* @__PURE__ */ jsx25(
15696
+ showRecheck && /* @__PURE__ */ jsx26(
15611
15697
  "button",
15612
15698
  {
15613
15699
  type: "button",
@@ -15616,16 +15702,16 @@ function OrderConfirmation({
15616
15702
  children: t.recheckLabel
15617
15703
  }
15618
15704
  ),
15619
- showSessionReference && /* @__PURE__ */ jsxs23("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15620
- /* @__PURE__ */ jsx25("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
15621
- /* @__PURE__ */ jsx25("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
15705
+ showSessionReference && /* @__PURE__ */ jsxs24("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15706
+ /* @__PURE__ */ jsx26("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
15707
+ /* @__PURE__ */ jsx26("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
15622
15708
  ] })
15623
15709
  ] });
15624
15710
  }
15625
15711
 
15626
15712
  // src/components/full-invoice-fields.tsx
15627
15713
  import { cn as cn22 } from "@reblu/site-ui/utils";
15628
- import { jsx as jsx26, jsxs as jsxs24 } from "react/jsx-runtime";
15714
+ import { jsx as jsx27, jsxs as jsxs25 } from "react/jsx-runtime";
15629
15715
  var EMPTY_FULL_INVOICE_VALUE = {
15630
15716
  wantsFullInvoice: false,
15631
15717
  billingIdType: "NIF",
@@ -15742,12 +15828,12 @@ function FullInvoiceFields({
15742
15828
  const showFields = value.wantsFullInvoice || overCap;
15743
15829
  const isSpanishNif = value.billingIdType === "NIF";
15744
15830
  const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
15745
- const error = (key2) => errors[key2] ? /* @__PURE__ */ jsx26("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
15831
+ const error = (key2) => errors[key2] ? /* @__PURE__ */ jsx27("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
15746
15832
  const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
15747
- return /* @__PURE__ */ jsxs24("section", { className: cn22("space-y-4", className), "data-slot": "full-invoice-fields", children: [
15748
- overCap ? /* @__PURE__ */ jsx26("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15749
- /* @__PURE__ */ jsxs24("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
15750
- /* @__PURE__ */ jsx26(
15833
+ return /* @__PURE__ */ jsxs25("section", { className: cn22("space-y-4", className), "data-slot": "full-invoice-fields", children: [
15834
+ overCap ? /* @__PURE__ */ jsx27("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ jsxs25("div", { className: "space-y-1", children: [
15835
+ /* @__PURE__ */ jsxs25("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
15836
+ /* @__PURE__ */ jsx27(
15751
15837
  "input",
15752
15838
  {
15753
15839
  type: "checkbox",
@@ -15757,12 +15843,12 @@ function FullInvoiceFields({
15757
15843
  ),
15758
15844
  t.toggle
15759
15845
  ] }),
15760
- /* @__PURE__ */ jsx26("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
15846
+ /* @__PURE__ */ jsx27("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
15761
15847
  ] }),
15762
- showFields && /* @__PURE__ */ jsxs24("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15763
- /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15764
- /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
15765
- /* @__PURE__ */ jsx26(
15848
+ showFields && /* @__PURE__ */ jsxs25("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15849
+ /* @__PURE__ */ jsxs25("div", { className: "space-y-1", children: [
15850
+ /* @__PURE__ */ jsx27("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
15851
+ /* @__PURE__ */ jsx27(
15766
15852
  "select",
15767
15853
  {
15768
15854
  id: "full-invoice-id-type",
@@ -15771,14 +15857,14 @@ function FullInvoiceFields({
15771
15857
  value: value.billingIdType,
15772
15858
  onChange: (e) => set("billingIdType", e.target.value),
15773
15859
  ...invalid2("billingIdType"),
15774
- children: ID_TYPES.map((type) => /* @__PURE__ */ jsx26("option", { value: type, children: t.idTypeOptions[type] }, type))
15860
+ children: ID_TYPES.map((type) => /* @__PURE__ */ jsx27("option", { value: type, children: t.idTypeOptions[type] }, type))
15775
15861
  }
15776
15862
  ),
15777
15863
  error("billingIdType")
15778
15864
  ] }),
15779
- !isSpanishNif && /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15780
- /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
15781
- /* @__PURE__ */ jsxs24(
15865
+ !isSpanishNif && /* @__PURE__ */ jsxs25("div", { className: "space-y-1", children: [
15866
+ /* @__PURE__ */ jsx27("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
15867
+ /* @__PURE__ */ jsxs25(
15782
15868
  "select",
15783
15869
  {
15784
15870
  id: "full-invoice-id-country",
@@ -15788,16 +15874,16 @@ function FullInvoiceFields({
15788
15874
  onChange: (e) => set("billingIdCountry", e.target.value),
15789
15875
  ...invalid2("billingIdCountry"),
15790
15876
  children: [
15791
- /* @__PURE__ */ jsx26("option", { value: "", disabled: true, children: t.chooseCountry }),
15792
- countries.map((c) => /* @__PURE__ */ jsx26("option", { value: c.code, children: c.name }, c.code))
15877
+ /* @__PURE__ */ jsx27("option", { value: "", disabled: true, children: t.chooseCountry }),
15878
+ countries.map((c) => /* @__PURE__ */ jsx27("option", { value: c.code, children: c.name }, c.code))
15793
15879
  ]
15794
15880
  }
15795
15881
  ),
15796
15882
  error("billingIdCountry")
15797
15883
  ] }),
15798
- /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15799
- /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
15800
- /* @__PURE__ */ jsx26(
15884
+ /* @__PURE__ */ jsxs25("div", { className: "space-y-1", children: [
15885
+ /* @__PURE__ */ jsx27("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
15886
+ /* @__PURE__ */ jsx27(
15801
15887
  "input",
15802
15888
  {
15803
15889
  id: "full-invoice-nif",
@@ -15810,9 +15896,9 @@ function FullInvoiceFields({
15810
15896
  ),
15811
15897
  error("billingNif")
15812
15898
  ] }),
15813
- /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15814
- /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
15815
- /* @__PURE__ */ jsx26(
15899
+ /* @__PURE__ */ jsxs25("div", { className: "space-y-1", children: [
15900
+ /* @__PURE__ */ jsx27("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
15901
+ /* @__PURE__ */ jsx27(
15816
15902
  "input",
15817
15903
  {
15818
15904
  id: "full-invoice-name",
@@ -15825,9 +15911,9 @@ function FullInvoiceFields({
15825
15911
  ),
15826
15912
  error("billingName")
15827
15913
  ] }),
15828
- /* @__PURE__ */ jsxs24("div", { className: "space-y-1 sm:col-span-2", children: [
15829
- /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
15830
- /* @__PURE__ */ jsx26(
15914
+ /* @__PURE__ */ jsxs25("div", { className: "space-y-1 sm:col-span-2", children: [
15915
+ /* @__PURE__ */ jsx27("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
15916
+ /* @__PURE__ */ jsx27(
15831
15917
  "input",
15832
15918
  {
15833
15919
  id: "full-invoice-street",
@@ -15839,9 +15925,9 @@ function FullInvoiceFields({
15839
15925
  }
15840
15926
  )
15841
15927
  ] }),
15842
- /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15843
- /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
15844
- /* @__PURE__ */ jsx26(
15928
+ /* @__PURE__ */ jsxs25("div", { className: "space-y-1", children: [
15929
+ /* @__PURE__ */ jsx27("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
15930
+ /* @__PURE__ */ jsx27(
15845
15931
  "input",
15846
15932
  {
15847
15933
  id: "full-invoice-postal-code",
@@ -15852,9 +15938,9 @@ function FullInvoiceFields({
15852
15938
  }
15853
15939
  )
15854
15940
  ] }),
15855
- /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15856
- /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
15857
- /* @__PURE__ */ jsx26(
15941
+ /* @__PURE__ */ jsxs25("div", { className: "space-y-1", children: [
15942
+ /* @__PURE__ */ jsx27("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
15943
+ /* @__PURE__ */ jsx27(
15858
15944
  "input",
15859
15945
  {
15860
15946
  id: "full-invoice-city",
@@ -15865,9 +15951,9 @@ function FullInvoiceFields({
15865
15951
  }
15866
15952
  )
15867
15953
  ] }),
15868
- /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15869
- /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
15870
- /* @__PURE__ */ jsx26(
15954
+ /* @__PURE__ */ jsxs25("div", { className: "space-y-1", children: [
15955
+ /* @__PURE__ */ jsx27("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
15956
+ /* @__PURE__ */ jsx27(
15871
15957
  "select",
15872
15958
  {
15873
15959
  id: "full-invoice-country",
@@ -15875,18 +15961,18 @@ function FullInvoiceFields({
15875
15961
  required: true,
15876
15962
  value: value.country,
15877
15963
  onChange: (e) => set("country", e.target.value),
15878
- children: countries.map((c) => /* @__PURE__ */ jsx26("option", { value: c.code, children: c.name }, c.code))
15964
+ children: countries.map((c) => /* @__PURE__ */ jsx27("option", { value: c.code, children: c.name }, c.code))
15879
15965
  }
15880
15966
  )
15881
15967
  ] }),
15882
- /* @__PURE__ */ jsx26("div", { className: "sm:col-span-2", children: error("address") })
15968
+ /* @__PURE__ */ jsx27("div", { className: "sm:col-span-2", children: error("address") })
15883
15969
  ] })
15884
15970
  ] });
15885
15971
  }
15886
15972
 
15887
15973
  // src/components/contact-interest-field.tsx
15888
15974
  import { cn as cn23 } from "@reblu/site-ui/utils";
15889
- import { jsx as jsx27, jsxs as jsxs25 } from "react/jsx-runtime";
15975
+ import { jsx as jsx28, jsxs as jsxs26 } from "react/jsx-runtime";
15890
15976
  function ContactInterestField({
15891
15977
  interest,
15892
15978
  value,
@@ -15903,18 +15989,18 @@ function ContactInterestField({
15903
15989
  else next2.delete(option2);
15904
15990
  onChange(interest.options.filter((candidate) => next2.has(candidate)));
15905
15991
  };
15906
- return /* @__PURE__ */ jsxs25("fieldset", { "data-slot": "contact-interest", className: cn23("space-y-2", className), children: [
15907
- /* @__PURE__ */ jsx27("legend", { className: "text-sm font-medium", children: interest.label }),
15908
- /* @__PURE__ */ jsx27("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
15992
+ return /* @__PURE__ */ jsxs26("fieldset", { "data-slot": "contact-interest", className: cn23("space-y-2", className), children: [
15993
+ /* @__PURE__ */ jsx28("legend", { className: "text-sm font-medium", children: interest.label }),
15994
+ /* @__PURE__ */ jsx28("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
15909
15995
  const id = `${idPrefix}-${index}`;
15910
- return /* @__PURE__ */ jsxs25(
15996
+ return /* @__PURE__ */ jsxs26(
15911
15997
  "label",
15912
15998
  {
15913
15999
  htmlFor: id,
15914
16000
  "data-slot": "contact-interest-option",
15915
16001
  className: "flex items-center gap-2 text-sm",
15916
16002
  children: [
15917
- /* @__PURE__ */ jsx27(
16003
+ /* @__PURE__ */ jsx28(
15918
16004
  "input",
15919
16005
  {
15920
16006
  id,
@@ -15946,9 +16032,11 @@ export {
15946
16032
  ContactInterestField,
15947
16033
  CourseCatalogFilters,
15948
16034
  CourseDescription,
16035
+ CoursePurchaseTerms,
15949
16036
  DATA_REQUEST_TYPES,
15950
16037
  DEFAULT_COURSE_CATALOG_FILTERS_LABELS,
15951
16038
  DEFAULT_COURSE_PRICE_BANDS,
16039
+ DEFAULT_COURSE_PURCHASE_TERMS_LABELS,
15952
16040
  DEFAULT_INVOICE_COUNTRIES,
15953
16041
  DEFAULT_LESSON_PREVIEW_LABELS,
15954
16042
  DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,