@reblu/site-blocks 0.20.0 → 0.22.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
@@ -50,7 +50,9 @@ var DEFAULT_SHOP_ERROR_MESSAGES = {
50
50
  // REB-73 — checkout refusals before any payment.
51
51
  BILLING_DATA_REQUIRED: "Para emitir tu factura necesitamos tu NIF/NIE o un documento de identificaci\xF3n, tu nombre y tu direcci\xF3n de facturaci\xF3n.",
52
52
  INVOICING_NOT_READY: "No se puede completar la compra en este momento. Int\xE9ntalo m\xE1s tarde.",
53
- FULL_INVOICE_UNAVAILABLE: "Esta tienda no emite facturas completas: contin\xFAa sin solicitarla."
53
+ FULL_INVOICE_UNAVAILABLE: "Esta tienda no emite facturas completas: contin\xFAa sin solicitarla.",
54
+ // REB-912 — the code used up its total uses; refused before any payment.
55
+ DISCOUNT_LIMIT_REACHED: "Este c\xF3digo ya ha alcanzado su l\xEDmite de usos"
54
56
  };
55
57
  var DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE = "No se ha podido completar la operaci\xF3n. Int\xE9ntalo de nuevo.";
56
58
  function getShopErrorMessage(code, overrides, fallback = DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE) {
@@ -13460,13 +13462,129 @@ function CourseDescription({
13460
13462
  );
13461
13463
  }
13462
13464
 
13465
+ // src/components/lesson-preview.tsx
13466
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
13467
+ var DEFAULT_LESSON_PREVIEW_LABELS = {
13468
+ badge: "Vista previa gratuita",
13469
+ player: "V\xEDdeo",
13470
+ duration: "Duraci\xF3n"
13471
+ };
13472
+ function isEmbeddable(url) {
13473
+ try {
13474
+ return new URL(url).protocol === "https:";
13475
+ } catch {
13476
+ return false;
13477
+ }
13478
+ }
13479
+ function clock(seconds) {
13480
+ const whole = Math.round(seconds);
13481
+ const h2 = Math.floor(whole / 3600);
13482
+ const m2 = Math.floor(whole % 3600 / 60);
13483
+ const s2 = whole % 60;
13484
+ const ss = String(s2).padStart(2, "0");
13485
+ return {
13486
+ text: h2 > 0 ? `${h2}:${String(m2).padStart(2, "0")}:${ss}` : `${m2}:${ss}`,
13487
+ iso: `PT${h2 > 0 ? `${h2}H` : ""}${m2}M${s2}S`
13488
+ };
13489
+ }
13490
+ function isVisiblyEmpty2(html5) {
13491
+ if (/<(img|iframe|hr)\b/i.test(html5)) return false;
13492
+ return html5.replace(/<[^>]*>/g, "").trim() === "";
13493
+ }
13494
+ function LessonPreview({
13495
+ lesson,
13496
+ labels: labelOverrides,
13497
+ headingLevel = 2,
13498
+ headingId = "lesson-preview-heading",
13499
+ headingClassName,
13500
+ contentClassName,
13501
+ className
13502
+ }) {
13503
+ const labels = { ...DEFAULT_LESSON_PREVIEW_LABELS, ...labelOverrides };
13504
+ const Tag = `h${headingLevel}`;
13505
+ const video = lesson.video && isEmbeddable(lesson.video.embedUrl) ? lesson.video : null;
13506
+ const html5 = markdownToSafeHtml(lesson.content);
13507
+ const hasBody = html5 !== null && html5 !== "" && !isVisiblyEmpty2(html5);
13508
+ const duration = typeof lesson.durationSeconds === "number" && lesson.durationSeconds > 0 ? clock(lesson.durationSeconds) : null;
13509
+ return /* @__PURE__ */ jsxs3(
13510
+ "article",
13511
+ {
13512
+ "data-slot": "lesson-preview",
13513
+ "aria-labelledby": headingId,
13514
+ className: slotClassName("space-y-6", "", className),
13515
+ children: [
13516
+ /* @__PURE__ */ jsxs3("header", { className: "space-y-2", children: [
13517
+ /* @__PURE__ */ jsx3(
13518
+ "span",
13519
+ {
13520
+ "data-slot": "lesson-preview-badge",
13521
+ className: "inline-flex items-center rounded-full bg-primary/10 px-3 py-1 text-xs font-semibold text-primary",
13522
+ children: labels.badge
13523
+ }
13524
+ ),
13525
+ /* @__PURE__ */ jsx3(
13526
+ Tag,
13527
+ {
13528
+ id: headingId,
13529
+ className: slotClassName("", "text-2xl font-semibold leading-tight", headingClassName),
13530
+ children: lesson.title
13531
+ }
13532
+ ),
13533
+ duration && /* @__PURE__ */ jsxs3("p", { className: "text-sm text-muted-foreground", children: [
13534
+ /* @__PURE__ */ jsxs3("span", { className: "sr-only", children: [
13535
+ labels.duration,
13536
+ ": "
13537
+ ] }),
13538
+ /* @__PURE__ */ jsx3(
13539
+ "time",
13540
+ {
13541
+ "data-slot": "lesson-preview-duration",
13542
+ dateTime: duration.iso,
13543
+ className: "tabular-nums",
13544
+ children: duration.text
13545
+ }
13546
+ )
13547
+ ] })
13548
+ ] }),
13549
+ video && /* @__PURE__ */ jsx3(
13550
+ "div",
13551
+ {
13552
+ "data-slot": "lesson-preview-player",
13553
+ className: "aspect-video w-full overflow-hidden rounded-xl border border-border bg-black",
13554
+ children: /* @__PURE__ */ jsx3(
13555
+ "iframe",
13556
+ {
13557
+ src: video.embedUrl,
13558
+ title: `${labels.player}: ${lesson.title}`,
13559
+ allow: "accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture; fullscreen",
13560
+ allowFullScreen: true,
13561
+ loading: "lazy",
13562
+ referrerPolicy: "strict-origin-when-cross-origin",
13563
+ className: "size-full border-0"
13564
+ }
13565
+ )
13566
+ }
13567
+ ),
13568
+ hasBody && /* @__PURE__ */ jsx3("div", { "data-slot": "lesson-preview-content", children: /* @__PURE__ */ jsx3(
13569
+ SafeHtml,
13570
+ {
13571
+ html: html5,
13572
+ headingOffset: headingLevel,
13573
+ className: slotClassName("", "text-muted-foreground", contentClassName)
13574
+ }
13575
+ ) })
13576
+ ]
13577
+ }
13578
+ );
13579
+ }
13580
+
13463
13581
  // src/components/treatment.tsx
13464
13582
  import { cn as cn3 } from "@reblu/site-ui/utils";
13465
13583
 
13466
13584
  // src/components/_page-parts.tsx
13467
13585
  import { cn as cn2 } from "@reblu/site-ui/utils";
13468
13586
  import { buttonVariants } from "@reblu/site-ui/button-variants";
13469
- import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
13587
+ import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
13470
13588
  var KNOWN_BUTTON_VARIANTS = /* @__PURE__ */ new Set([
13471
13589
  "default",
13472
13590
  "destructive",
@@ -13479,11 +13597,11 @@ function toButtonVariant(variant) {
13479
13597
  return variant && KNOWN_BUTTON_VARIANTS.has(variant) ? variant : "default";
13480
13598
  }
13481
13599
  function PageHero({ page }) {
13482
- return /* @__PURE__ */ jsxs3("header", { className: "space-y-4", children: [
13483
- page.category && /* @__PURE__ */ jsx3("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 }),
13484
- /* @__PURE__ */ jsx3("h1", { className: "text-4xl font-bold tracking-tight", children: page.title }),
13485
- page.subtitle && /* @__PURE__ */ jsx3("p", { className: "text-lg text-muted-foreground", children: page.subtitle }),
13486
- page.coverImageUrl && /* @__PURE__ */ jsx3("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx3(
13600
+ return /* @__PURE__ */ jsxs4("header", { className: "space-y-4", children: [
13601
+ 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 }),
13602
+ /* @__PURE__ */ jsx4("h1", { className: "text-4xl font-bold tracking-tight", children: page.title }),
13603
+ page.subtitle && /* @__PURE__ */ jsx4("p", { className: "text-lg text-muted-foreground", children: page.subtitle }),
13604
+ page.coverImageUrl && /* @__PURE__ */ jsx4("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx4(
13487
13605
  "img",
13488
13606
  {
13489
13607
  src: page.coverImageUrl,
@@ -13497,7 +13615,7 @@ function PageHero({ page }) {
13497
13615
  function SectionCta({ section }) {
13498
13616
  if (!section.ctaLabel || !section.ctaUrl) return null;
13499
13617
  const variant = toButtonVariant(section.ctaVariant);
13500
- return /* @__PURE__ */ jsx3("div", { className: "pt-2", children: /* @__PURE__ */ jsx3(
13618
+ return /* @__PURE__ */ jsx4("div", { className: "pt-2", children: /* @__PURE__ */ jsx4(
13501
13619
  "a",
13502
13620
  {
13503
13621
  href: section.ctaUrl,
@@ -13512,46 +13630,46 @@ function SectionCta({ section }) {
13512
13630
  }
13513
13631
  function SectionImages({ section }) {
13514
13632
  if (section.images.length === 0) return null;
13515
- return /* @__PURE__ */ jsx3("div", { className: cn2("grid gap-4", section.images.length > 1 ? "sm:grid-cols-2" : "grid-cols-1"), children: section.images.map((img) => /* @__PURE__ */ jsxs3("figure", { className: "space-y-1", children: [
13516
- /* @__PURE__ */ jsx3("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx3("img", { src: img.url, alt: img.alt, loading: "lazy", className: "h-full w-full object-cover" }) }),
13517
- img.caption && /* @__PURE__ */ jsx3("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
13633
+ 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: [
13634
+ /* @__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" }) }),
13635
+ img.caption && /* @__PURE__ */ jsx4("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
13518
13636
  ] }, `${img.url}-${img.order}`)) });
13519
13637
  }
13520
13638
  function PageSectionBlock({ section }) {
13521
13639
  const imageFirst = section.layout === "IMAGE_TEXT";
13522
13640
  const sideBySide = section.layout === "TEXT_IMAGE" || section.layout === "IMAGE_TEXT";
13523
13641
  const hasImages = section.images.length > 0;
13524
- const body3 = /* @__PURE__ */ jsxs3("div", { className: "space-y-4", children: [
13525
- section.heading && /* @__PURE__ */ jsx3("h2", { className: "text-2xl font-bold", children: section.heading }),
13526
- /* @__PURE__ */ jsx3(SafeHtml, { html: sanitizeHtml(section.contentHtml), headingOffset: 2 }),
13527
- /* @__PURE__ */ jsx3(SectionCta, { section })
13642
+ const body3 = /* @__PURE__ */ jsxs4("div", { className: "space-y-4", children: [
13643
+ section.heading && /* @__PURE__ */ jsx4("h2", { className: "text-2xl font-bold", children: section.heading }),
13644
+ /* @__PURE__ */ jsx4(SafeHtml, { html: sanitizeHtml(section.contentHtml), headingOffset: 2 }),
13645
+ /* @__PURE__ */ jsx4(SectionCta, { section })
13528
13646
  ] });
13529
13647
  if (sideBySide && hasImages) {
13530
- return /* @__PURE__ */ jsx3("section", { className: "grid items-center gap-8 md:grid-cols-2", children: imageFirst ? /* @__PURE__ */ jsxs3(Fragment2, { children: [
13531
- /* @__PURE__ */ jsx3(SectionImages, { section }),
13648
+ return /* @__PURE__ */ jsx4("section", { className: "grid items-center gap-8 md:grid-cols-2", children: imageFirst ? /* @__PURE__ */ jsxs4(Fragment2, { children: [
13649
+ /* @__PURE__ */ jsx4(SectionImages, { section }),
13532
13650
  body3
13533
- ] }) : /* @__PURE__ */ jsxs3(Fragment2, { children: [
13651
+ ] }) : /* @__PURE__ */ jsxs4(Fragment2, { children: [
13534
13652
  body3,
13535
- /* @__PURE__ */ jsx3(SectionImages, { section })
13653
+ /* @__PURE__ */ jsx4(SectionImages, { section })
13536
13654
  ] }) });
13537
13655
  }
13538
- return /* @__PURE__ */ jsxs3("section", { className: "space-y-4", children: [
13656
+ return /* @__PURE__ */ jsxs4("section", { className: "space-y-4", children: [
13539
13657
  body3,
13540
- /* @__PURE__ */ jsx3(SectionImages, { section })
13658
+ /* @__PURE__ */ jsx4(SectionImages, { section })
13541
13659
  ] });
13542
13660
  }
13543
13661
  function PageSectionList({ sections }) {
13544
13662
  if (sections.length === 0) return null;
13545
13663
  const ordered = sections.slice().sort((a, b2) => a.order - b2.order);
13546
- return /* @__PURE__ */ jsx3("div", { className: "space-y-12", children: ordered.map((section) => /* @__PURE__ */ jsx3(PageSectionBlock, { section }, section.id)) });
13664
+ return /* @__PURE__ */ jsx4("div", { className: "space-y-12", children: ordered.map((section) => /* @__PURE__ */ jsx4(PageSectionBlock, { section }, section.id)) });
13547
13665
  }
13548
13666
 
13549
13667
  // src/components/treatment.tsx
13550
- import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
13668
+ import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
13551
13669
  function Treatment({ page, className }) {
13552
- return /* @__PURE__ */ jsxs4("article", { className: cn3("space-y-12", className), "data-slot": "treatment", children: [
13553
- /* @__PURE__ */ jsx4(PageHero, { page }),
13554
- /* @__PURE__ */ jsx4(PageSectionList, { sections: page.sections })
13670
+ return /* @__PURE__ */ jsxs5("article", { className: cn3("space-y-12", className), "data-slot": "treatment", children: [
13671
+ /* @__PURE__ */ jsx5(PageHero, { page }),
13672
+ /* @__PURE__ */ jsx5(PageSectionList, { sections: page.sections })
13555
13673
  ] });
13556
13674
  }
13557
13675
 
@@ -13560,11 +13678,11 @@ import { cn as cn5 } from "@reblu/site-ui/utils";
13560
13678
 
13561
13679
  // src/components/page-card-grid.tsx
13562
13680
  import { cn as cn4 } from "@reblu/site-ui/utils";
13563
- import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
13681
+ import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
13564
13682
  var defaultPageHref = (page) => `/${page.slug}`;
13565
13683
  var pageKey = (page) => `${page.category?.slug ?? ""}/${page.slug}`;
13566
13684
  function PageCardGrid(props) {
13567
- return /* @__PURE__ */ jsx5(PageCardGridSection, { ...props });
13685
+ return /* @__PURE__ */ jsx6(PageCardGridSection, { ...props });
13568
13686
  }
13569
13687
  function PageCardGridSection({
13570
13688
  pages,
@@ -13575,15 +13693,15 @@ function PageCardGridSection({
13575
13693
  }) {
13576
13694
  if (pages.length === 0) return null;
13577
13695
  const showHeading = keepEmptyHeading ? heading !== void 0 : !!heading;
13578
- return /* @__PURE__ */ jsxs5("section", { className: cn4("space-y-6", className), children: [
13579
- showHeading && /* @__PURE__ */ jsx5("h2", { className: "text-2xl font-bold", children: heading }),
13580
- /* @__PURE__ */ jsx5("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__ */ jsx5("li", { children: /* @__PURE__ */ jsxs5(
13696
+ return /* @__PURE__ */ jsxs6("section", { className: cn4("space-y-6", className), children: [
13697
+ showHeading && /* @__PURE__ */ jsx6("h2", { className: "text-2xl font-bold", children: heading }),
13698
+ /* @__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(
13581
13699
  "a",
13582
13700
  {
13583
13701
  href: pageHref(page),
13584
13702
  className: "group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
13585
13703
  children: [
13586
- page.coverImageUrl && /* @__PURE__ */ jsx5("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ jsx5(
13704
+ page.coverImageUrl && /* @__PURE__ */ jsx6("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ jsx6(
13587
13705
  "img",
13588
13706
  {
13589
13707
  src: page.coverImageUrl,
@@ -13592,9 +13710,9 @@ function PageCardGridSection({
13592
13710
  className: "h-full w-full object-cover transition-transform group-hover:scale-105"
13593
13711
  }
13594
13712
  ) }),
13595
- /* @__PURE__ */ jsxs5("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13596
- /* @__PURE__ */ jsx5("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
13597
- page.excerpt && /* @__PURE__ */ jsx5("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
13713
+ /* @__PURE__ */ jsxs6("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13714
+ /* @__PURE__ */ jsx6("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
13715
+ page.excerpt && /* @__PURE__ */ jsx6("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
13598
13716
  ] })
13599
13717
  ]
13600
13718
  }
@@ -13603,7 +13721,7 @@ function PageCardGridSection({
13603
13721
  }
13604
13722
 
13605
13723
  // src/components/parent-page.tsx
13606
- import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
13724
+ import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
13607
13725
  var defaultChildPageHref = (slug) => `/${slug}`;
13608
13726
  function ParentPage({
13609
13727
  page,
@@ -13618,10 +13736,10 @@ function ParentPage({
13618
13736
  const pages = childPages ?? treatments ?? [];
13619
13737
  const hrefFor = childPageHref ?? treatmentHref ?? defaultChildPageHref;
13620
13738
  const label = childPagesLabel ?? treatmentsLabel ?? "Treatments";
13621
- return /* @__PURE__ */ jsxs6("article", { className: cn5("space-y-12", className), "data-slot": "specialty", children: [
13622
- /* @__PURE__ */ jsx6(PageHero, { page }),
13623
- /* @__PURE__ */ jsx6(PageSectionList, { sections: page.sections }),
13624
- /* @__PURE__ */ jsx6(
13739
+ return /* @__PURE__ */ jsxs7("article", { className: cn5("space-y-12", className), "data-slot": "specialty", children: [
13740
+ /* @__PURE__ */ jsx7(PageHero, { page }),
13741
+ /* @__PURE__ */ jsx7(PageSectionList, { sections: page.sections }),
13742
+ /* @__PURE__ */ jsx7(
13625
13743
  PageCardGridSection,
13626
13744
  {
13627
13745
  pages,
@@ -13641,7 +13759,7 @@ import { cn as cn7 } from "@reblu/site-ui/utils";
13641
13759
 
13642
13760
  // src/components/professional-fields.tsx
13643
13761
  import { cn as cn6 } from "@reblu/site-ui/utils";
13644
- import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
13762
+ import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
13645
13763
  function ProfessionalFields({
13646
13764
  fields,
13647
13765
  variant = "profile",
@@ -13649,7 +13767,7 @@ function ProfessionalFields({
13649
13767
  }) {
13650
13768
  const shown = (fields ?? []).filter((f) => variant !== "card" || f.showOnCard);
13651
13769
  if (shown.length === 0) return null;
13652
- return /* @__PURE__ */ jsx7(
13770
+ return /* @__PURE__ */ jsx8(
13653
13771
  "dl",
13654
13772
  {
13655
13773
  className: cn6(
@@ -13659,13 +13777,13 @@ function ProfessionalFields({
13659
13777
  ),
13660
13778
  "data-slot": "professional-fields",
13661
13779
  "data-variant": variant,
13662
- children: shown.map((field, index) => /* @__PURE__ */ jsxs7(
13780
+ children: shown.map((field, index) => /* @__PURE__ */ jsxs8(
13663
13781
  "div",
13664
13782
  {
13665
13783
  className: variant === "card" ? "flex justify-center gap-1" : "contents",
13666
13784
  children: [
13667
- /* @__PURE__ */ jsx7("dt", { className: "text-muted-foreground", children: field.label }),
13668
- /* @__PURE__ */ jsx7("dd", { className: "m-0 font-medium", children: field.value })
13785
+ /* @__PURE__ */ jsx8("dt", { className: "text-muted-foreground", children: field.label }),
13786
+ /* @__PURE__ */ jsx8("dd", { className: "m-0 font-medium", children: field.value })
13669
13787
  ]
13670
13788
  },
13671
13789
  `${field.label}-${index}`
@@ -13675,7 +13793,7 @@ function ProfessionalFields({
13675
13793
  }
13676
13794
 
13677
13795
  // src/components/profile-card.tsx
13678
- import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
13796
+ import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
13679
13797
  function initials(name) {
13680
13798
  return name.split(/\s+/).filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
13681
13799
  }
@@ -13690,7 +13808,7 @@ function ProfileCard({
13690
13808
  className
13691
13809
  }) {
13692
13810
  const NameTag = href ? "a" : "span";
13693
- return /* @__PURE__ */ jsxs8(
13811
+ return /* @__PURE__ */ jsxs9(
13694
13812
  "article",
13695
13813
  {
13696
13814
  className: cn7(
@@ -13699,7 +13817,7 @@ function ProfileCard({
13699
13817
  ),
13700
13818
  "data-slot": "profile-card",
13701
13819
  children: [
13702
- /* @__PURE__ */ jsx8("div", { className: "relative h-24 w-24 overflow-hidden rounded-full bg-muted", children: imageUrl ? /* @__PURE__ */ jsx8("img", { src: imageUrl, alt: name, loading: "lazy", className: "h-full w-full object-cover" }) : /* @__PURE__ */ jsx8(
13820
+ /* @__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(
13703
13821
  "span",
13704
13822
  {
13705
13823
  className: "flex h-full w-full items-center justify-center text-2xl font-semibold text-muted-foreground",
@@ -13707,12 +13825,12 @@ function ProfileCard({
13707
13825
  children: initials(name)
13708
13826
  }
13709
13827
  ) }),
13710
- /* @__PURE__ */ jsxs8("div", { className: "space-y-1", children: [
13711
- /* @__PURE__ */ jsx8("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ jsx8(NameTag, { ...href ? { href, className: "transition-colors hover:text-primary" } : {}, children: name }) }),
13712
- role && /* @__PURE__ */ jsx8("p", { className: "text-sm text-muted-foreground", children: role })
13828
+ /* @__PURE__ */ jsxs9("div", { className: "space-y-1", children: [
13829
+ /* @__PURE__ */ jsx9("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ jsx9(NameTag, { ...href ? { href, className: "transition-colors hover:text-primary" } : {}, children: name }) }),
13830
+ role && /* @__PURE__ */ jsx9("p", { className: "text-sm text-muted-foreground", children: role })
13713
13831
  ] }),
13714
- /* @__PURE__ */ jsx8(ProfessionalFields, { fields, variant: "card" }),
13715
- specialties.length > 0 && /* @__PURE__ */ jsx8("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ jsx8(
13832
+ /* @__PURE__ */ jsx9(ProfessionalFields, { fields, variant: "card" }),
13833
+ specialties.length > 0 && /* @__PURE__ */ jsx9("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ jsx9(
13716
13834
  "li",
13717
13835
  {
13718
13836
  className: "inline-flex items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground",
@@ -13720,7 +13838,7 @@ function ProfileCard({
13720
13838
  },
13721
13839
  s2
13722
13840
  )) }),
13723
- bio && /* @__PURE__ */ jsx8("p", { className: "text-sm text-muted-foreground", children: bio })
13841
+ bio && /* @__PURE__ */ jsx9("p", { className: "text-sm text-muted-foreground", children: bio })
13724
13842
  ]
13725
13843
  }
13726
13844
  );
@@ -13728,11 +13846,11 @@ function ProfileCard({
13728
13846
 
13729
13847
  // src/components/product-card.tsx
13730
13848
  import { cn as cn8 } from "@reblu/site-ui/utils";
13731
- import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
13849
+ import { jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
13732
13850
  function ProductCard({ product, href, currencyCode = "EUR", locale, className }) {
13733
13851
  const image = product.images.find((i) => i.isPrimary) ?? product.images[0];
13734
13852
  const hasDiscount = product.comparePrice != null && product.comparePrice > product.price;
13735
- return /* @__PURE__ */ jsxs9(
13853
+ return /* @__PURE__ */ jsxs10(
13736
13854
  "article",
13737
13855
  {
13738
13856
  className: cn8(
@@ -13741,7 +13859,7 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
13741
13859
  ),
13742
13860
  "data-slot": "product-card",
13743
13861
  children: [
13744
- /* @__PURE__ */ jsx9("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ jsx9(
13862
+ /* @__PURE__ */ jsx10("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ jsx10(
13745
13863
  "img",
13746
13864
  {
13747
13865
  src: image.url,
@@ -13749,14 +13867,14 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
13749
13867
  loading: "lazy",
13750
13868
  className: "h-full w-full object-cover transition-transform group-hover:scale-105"
13751
13869
  }
13752
- ) : /* @__PURE__ */ jsx9("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
13753
- /* @__PURE__ */ jsxs9("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13754
- product.category && /* @__PURE__ */ jsx9("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 }),
13755
- /* @__PURE__ */ jsx9("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ jsx9("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
13756
- product.shortDescription && /* @__PURE__ */ jsx9("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
13757
- /* @__PURE__ */ jsxs9("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
13758
- /* @__PURE__ */ jsx9("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
13759
- hasDiscount && /* @__PURE__ */ jsx9("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
13870
+ ) : /* @__PURE__ */ jsx10("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
13871
+ /* @__PURE__ */ jsxs10("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13872
+ 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 }),
13873
+ /* @__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 }),
13874
+ product.shortDescription && /* @__PURE__ */ jsx10("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
13875
+ /* @__PURE__ */ jsxs10("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
13876
+ /* @__PURE__ */ jsx10("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
13877
+ hasDiscount && /* @__PURE__ */ jsx10("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
13760
13878
  ] })
13761
13879
  ] })
13762
13880
  ]
@@ -13958,7 +14076,7 @@ var __iconNode8 = [
13958
14076
  var Truck = createLucideIcon("truck", __iconNode8);
13959
14077
 
13960
14078
  // src/components/product-trust-items.tsx
13961
- import { jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
14079
+ import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
13962
14080
  var DEFAULT_TRUST_ICONS = Object.freeze({
13963
14081
  shipping: Truck,
13964
14082
  returns: RotateCcw,
@@ -13992,9 +14110,9 @@ function ProductTrustItems({
13992
14110
  return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
13993
14111
  });
13994
14112
  if (rows.length === 0) return null;
13995
- return /* @__PURE__ */ jsx10(List, { "data-slot": "product-trust-items", className: slotClassName("space-y-2.5", "", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ jsxs10("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
13996
- /* @__PURE__ */ jsx10(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
13997
- /* @__PURE__ */ jsx10("span", { children: text3 })
14113
+ 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: [
14114
+ /* @__PURE__ */ jsx11(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
14115
+ /* @__PURE__ */ jsx11("span", { children: text3 })
13998
14116
  ] }, key2)) });
13999
14117
  }
14000
14118
 
@@ -14002,7 +14120,7 @@ function ProductTrustItems({
14002
14120
  import { cn as cn9 } from "@reblu/site-ui/utils";
14003
14121
 
14004
14122
  // src/components/_heading.tsx
14005
- import { jsx as jsx11 } from "react/jsx-runtime";
14123
+ import { jsx as jsx12 } from "react/jsx-runtime";
14006
14124
  function nextHeadingLevel(level) {
14007
14125
  return Math.min(level + 1, 6);
14008
14126
  }
@@ -14012,11 +14130,11 @@ function Heading({
14012
14130
  children: children2
14013
14131
  }) {
14014
14132
  const Tag = `h${level}`;
14015
- return /* @__PURE__ */ jsx11(Tag, { className, children: children2 });
14133
+ return /* @__PURE__ */ jsx12(Tag, { className, children: children2 });
14016
14134
  }
14017
14135
 
14018
14136
  // src/components/faq-accordion.tsx
14019
- import { jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
14137
+ import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
14020
14138
  function FaqAccordion({
14021
14139
  items,
14022
14140
  heading,
@@ -14027,18 +14145,18 @@ function FaqAccordion({
14027
14145
  }) {
14028
14146
  const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
14029
14147
  if (visible.length === 0) return null;
14030
- return /* @__PURE__ */ jsxs11("div", { className: cn9("space-y-4", className), "data-slot": "faq-accordion", children: [
14031
- heading && /* @__PURE__ */ jsx12(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
14032
- /* @__PURE__ */ jsx12("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ jsxs11(
14148
+ return /* @__PURE__ */ jsxs12("div", { className: cn9("space-y-4", className), "data-slot": "faq-accordion", children: [
14149
+ heading && /* @__PURE__ */ jsx13(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
14150
+ /* @__PURE__ */ jsx13("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ jsxs12(
14033
14151
  "details",
14034
14152
  {
14035
14153
  className: "group px-4",
14036
14154
  "data-slot": "faq-item",
14037
14155
  ...defaultOpen.includes(index) ? { open: true } : {},
14038
14156
  children: [
14039
- /* @__PURE__ */ jsxs11("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: [
14040
- questionHeadingLevel ? /* @__PURE__ */ jsx12(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ jsx12("span", { children: item.q }),
14041
- /* @__PURE__ */ jsx12(
14157
+ /* @__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: [
14158
+ questionHeadingLevel ? /* @__PURE__ */ jsx13(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ jsx13("span", { children: item.q }),
14159
+ /* @__PURE__ */ jsx13(
14042
14160
  "span",
14043
14161
  {
14044
14162
  "aria-hidden": "true",
@@ -14047,7 +14165,7 @@ function FaqAccordion({
14047
14165
  }
14048
14166
  )
14049
14167
  ] }),
14050
- /* @__PURE__ */ jsx12("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
14168
+ /* @__PURE__ */ jsx13("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
14051
14169
  ]
14052
14170
  },
14053
14171
  index
@@ -14057,7 +14175,7 @@ function FaqAccordion({
14057
14175
 
14058
14176
  // src/components/trust-badges.tsx
14059
14177
  import { cn as cn10 } from "@reblu/site-ui/utils";
14060
- import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
14178
+ import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
14061
14179
  var DEFAULT_TRUST_BADGE_HEADINGS = Object.freeze(
14062
14180
  {
14063
14181
  PARTNER: "Colaboradores",
@@ -14099,7 +14217,7 @@ function BadgeContent({ badge, logoClassName }) {
14099
14217
  if (src) {
14100
14218
  return (
14101
14219
  // eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
14102
- /* @__PURE__ */ jsx13(
14220
+ /* @__PURE__ */ jsx14(
14103
14221
  "img",
14104
14222
  {
14105
14223
  src,
@@ -14110,7 +14228,7 @@ function BadgeContent({ badge, logoClassName }) {
14110
14228
  )
14111
14229
  );
14112
14230
  }
14113
- return /* @__PURE__ */ jsx13("span", { className: "text-sm font-medium", children: badge.name });
14231
+ return /* @__PURE__ */ jsx14("span", { className: "text-sm font-medium", children: badge.name });
14114
14232
  }
14115
14233
  function TrustBadges({
14116
14234
  badges,
@@ -14138,14 +14256,14 @@ function TrustBadges({
14138
14256
  if (groups.length === 0) return null;
14139
14257
  const hasHeading = heading !== void 0 && heading !== null && heading !== "";
14140
14258
  const groupHeadingLevel = hasHeading ? nextHeadingLevel(headingLevel) : headingLevel;
14141
- const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ jsxs12(
14259
+ const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ jsxs13(
14142
14260
  "div",
14143
14261
  {
14144
14262
  "data-slot": "trust-badge-group",
14145
14263
  "data-type": type,
14146
14264
  className: cn10("space-y-3", groupClassName),
14147
14265
  children: [
14148
- groupHeading ? /* @__PURE__ */ jsx13(
14266
+ groupHeading ? /* @__PURE__ */ jsx14(
14149
14267
  Heading,
14150
14268
  {
14151
14269
  level: groupHeadingLevel,
@@ -14157,30 +14275,30 @@ function TrustBadges({
14157
14275
  children: groupHeading
14158
14276
  }
14159
14277
  ) : null,
14160
- /* @__PURE__ */ jsx13("ul", { className: cn10("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
14278
+ /* @__PURE__ */ jsx14("ul", { className: cn10("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
14161
14279
  const href = safeHref(badge.url);
14162
- return /* @__PURE__ */ jsx13("li", { children: href ? /* @__PURE__ */ jsxs12("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14163
- /* @__PURE__ */ jsx13(BadgeContent, { badge, logoClassName }),
14280
+ return /* @__PURE__ */ jsx14("li", { children: href ? /* @__PURE__ */ jsxs13("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14281
+ /* @__PURE__ */ jsx14(BadgeContent, { badge, logoClassName }),
14164
14282
  " ",
14165
- /* @__PURE__ */ jsx13("span", { className: "sr-only", children: newWindowLabel })
14166
- ] }) : /* @__PURE__ */ jsx13(BadgeContent, { badge, logoClassName }) }, badge.id);
14283
+ /* @__PURE__ */ jsx14("span", { className: "sr-only", children: newWindowLabel })
14284
+ ] }) : /* @__PURE__ */ jsx14(BadgeContent, { badge, logoClassName }) }, badge.id);
14167
14285
  }) })
14168
14286
  ]
14169
14287
  },
14170
14288
  type
14171
14289
  ));
14172
14290
  if (!hasHeading) {
14173
- return /* @__PURE__ */ jsx13("div", { "data-slot": "trust-badges", className: cn10("space-y-6", className), children: content });
14291
+ return /* @__PURE__ */ jsx14("div", { "data-slot": "trust-badges", className: cn10("space-y-6", className), children: content });
14174
14292
  }
14175
14293
  const Tag = `h${headingLevel}`;
14176
- return /* @__PURE__ */ jsxs12(
14294
+ return /* @__PURE__ */ jsxs13(
14177
14295
  "section",
14178
14296
  {
14179
14297
  "data-slot": "trust-badges",
14180
14298
  "aria-labelledby": headingId,
14181
14299
  className: cn10("space-y-6", className),
14182
14300
  children: [
14183
- /* @__PURE__ */ jsx13(
14301
+ /* @__PURE__ */ jsx14(
14184
14302
  Tag,
14185
14303
  {
14186
14304
  id: headingId,
@@ -14197,38 +14315,38 @@ function TrustBadges({
14197
14315
  // src/components/page-blocks.tsx
14198
14316
  import { cn as cn11 } from "@reblu/site-ui/utils";
14199
14317
  import { buttonVariants as buttonVariants2 } from "@reblu/site-ui/button-variants";
14200
- import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
14318
+ import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
14201
14319
  var ALIASES = {
14202
14320
  doctor_embed: "profile_embed",
14203
14321
  specialty_embed: "page_embed"
14204
14322
  };
14205
14323
  function HeroBlock({ block, headingLevel }) {
14206
14324
  const { title, subtitle, imageUrl } = block.data;
14207
- return /* @__PURE__ */ jsxs13("div", { className: "space-y-4", children: [
14208
- /* @__PURE__ */ jsx14(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
14209
- subtitle && /* @__PURE__ */ jsx14("p", { className: "text-lg opacity-80", children: subtitle }),
14210
- imageUrl && /* @__PURE__ */ jsx14("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx14("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
14325
+ return /* @__PURE__ */ jsxs14("div", { className: "space-y-4", children: [
14326
+ /* @__PURE__ */ jsx15(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
14327
+ subtitle && /* @__PURE__ */ jsx15("p", { className: "text-lg opacity-80", children: subtitle }),
14328
+ 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" }) })
14211
14329
  ] });
14212
14330
  }
14213
14331
  function RichtextBlock({ block, headingLevel }) {
14214
- return /* @__PURE__ */ jsx14(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
14332
+ return /* @__PURE__ */ jsx15(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
14215
14333
  }
14216
14334
  function FaqBlock({ block }) {
14217
- return /* @__PURE__ */ jsx14(FaqAccordion, { items: block.data.items });
14335
+ return /* @__PURE__ */ jsx15(FaqAccordion, { items: block.data.items });
14218
14336
  }
14219
14337
  function StatsBlock({ block }) {
14220
- return /* @__PURE__ */ jsx14("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ jsxs13("div", { className: "flex flex-col-reverse gap-1", children: [
14221
- /* @__PURE__ */ jsx14("dt", { className: "text-sm opacity-80", children: item.label }),
14222
- /* @__PURE__ */ jsx14("dd", { className: "text-3xl font-bold", children: item.value })
14338
+ 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: [
14339
+ /* @__PURE__ */ jsx15("dt", { className: "text-sm opacity-80", children: item.label }),
14340
+ /* @__PURE__ */ jsx15("dd", { className: "text-3xl font-bold", children: item.value })
14223
14341
  ] }, i)) });
14224
14342
  }
14225
14343
  function TestimonialBlock({ block }) {
14226
14344
  const { quote, author, role, avatarUrl } = block.data;
14227
- return /* @__PURE__ */ jsxs13("figure", { className: "space-y-4", children: [
14228
- /* @__PURE__ */ jsx14("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ jsx14("p", { children: quote }) }),
14229
- /* @__PURE__ */ jsxs13("figcaption", { className: "flex items-center gap-3", children: [
14345
+ return /* @__PURE__ */ jsxs14("figure", { className: "space-y-4", children: [
14346
+ /* @__PURE__ */ jsx15("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ jsx15("p", { children: quote }) }),
14347
+ /* @__PURE__ */ jsxs14("figcaption", { className: "flex items-center gap-3", children: [
14230
14348
  avatarUrl && // eslint-disable-next-line @next/next/no-img-element
14231
- /* @__PURE__ */ jsx14(
14349
+ /* @__PURE__ */ jsx15(
14232
14350
  "img",
14233
14351
  {
14234
14352
  src: avatarUrl,
@@ -14237,9 +14355,9 @@ function TestimonialBlock({ block }) {
14237
14355
  className: "h-10 w-10 rounded-full object-cover"
14238
14356
  }
14239
14357
  ),
14240
- /* @__PURE__ */ jsxs13("span", { children: [
14241
- /* @__PURE__ */ jsx14("span", { className: "font-semibold", children: author }),
14242
- role && /* @__PURE__ */ jsx14("span", { className: "block text-sm opacity-80", children: role })
14358
+ /* @__PURE__ */ jsxs14("span", { children: [
14359
+ /* @__PURE__ */ jsx15("span", { className: "font-semibold", children: author }),
14360
+ role && /* @__PURE__ */ jsx15("span", { className: "block text-sm opacity-80", children: role })
14243
14361
  ] })
14244
14362
  ] })
14245
14363
  ] });
@@ -14248,19 +14366,19 @@ function CtaSlotBlock(_props) {
14248
14366
  return null;
14249
14367
  }
14250
14368
  function FeatureListBlock({ block }) {
14251
- return /* @__PURE__ */ jsx14("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ jsx14("li", { children: item.text }, i)) });
14369
+ 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)) });
14252
14370
  }
14253
14371
  function GalleryBlock({ block }) {
14254
14372
  const { images } = block.data;
14255
- return /* @__PURE__ */ jsx14(
14373
+ return /* @__PURE__ */ jsx15(
14256
14374
  "div",
14257
14375
  {
14258
14376
  className: cn11(
14259
14377
  "grid gap-4",
14260
14378
  images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
14261
14379
  ),
14262
- children: images.map((img, i) => /* @__PURE__ */ jsxs13("figure", { className: "space-y-1", children: [
14263
- /* @__PURE__ */ jsx14("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx14(
14380
+ children: images.map((img, i) => /* @__PURE__ */ jsxs14("figure", { className: "space-y-1", children: [
14381
+ /* @__PURE__ */ jsx15("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx15(
14264
14382
  "img",
14265
14383
  {
14266
14384
  src: img.url,
@@ -14269,7 +14387,7 @@ function GalleryBlock({ block }) {
14269
14387
  className: "h-full w-full object-cover"
14270
14388
  }
14271
14389
  ) }),
14272
- img.caption && /* @__PURE__ */ jsx14("figcaption", { className: "text-sm opacity-80", children: img.caption })
14390
+ img.caption && /* @__PURE__ */ jsx15("figcaption", { className: "text-sm opacity-80", children: img.caption })
14273
14391
  ] }, `${img.url}-${i}`))
14274
14392
  }
14275
14393
  );
@@ -14279,13 +14397,13 @@ function EmbedCard({
14279
14397
  headingLevel,
14280
14398
  embedHref
14281
14399
  }) {
14282
- return /* @__PURE__ */ jsxs13(
14400
+ return /* @__PURE__ */ jsxs14(
14283
14401
  "a",
14284
14402
  {
14285
14403
  href: embedHref(resolved),
14286
14404
  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",
14287
14405
  children: [
14288
- resolved.coverImageUrl && /* @__PURE__ */ jsx14("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ jsx14(
14406
+ resolved.coverImageUrl && /* @__PURE__ */ jsx15("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ jsx15(
14289
14407
  "img",
14290
14408
  {
14291
14409
  src: resolved.coverImageUrl,
@@ -14294,24 +14412,24 @@ function EmbedCard({
14294
14412
  className: "h-full w-full object-cover"
14295
14413
  }
14296
14414
  ) }),
14297
- /* @__PURE__ */ jsxs13("div", { className: "space-y-1 p-4", children: [
14298
- /* @__PURE__ */ jsx14(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
14299
- resolved.role && /* @__PURE__ */ jsx14("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
14300
- resolved.excerpt && /* @__PURE__ */ jsx14("p", { className: "text-muted-foreground", children: resolved.excerpt })
14415
+ /* @__PURE__ */ jsxs14("div", { className: "space-y-1 p-4", children: [
14416
+ /* @__PURE__ */ jsx15(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
14417
+ resolved.role && /* @__PURE__ */ jsx15("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
14418
+ resolved.excerpt && /* @__PURE__ */ jsx15("p", { className: "text-muted-foreground", children: resolved.excerpt })
14301
14419
  ] })
14302
14420
  ]
14303
14421
  }
14304
14422
  );
14305
14423
  }
14306
14424
  function PageEmbedBlock({ block, headingLevel, embedHref }) {
14307
- return /* @__PURE__ */ jsx14(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14425
+ return /* @__PURE__ */ jsx15(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14308
14426
  }
14309
14427
  function ProfileEmbedBlock({
14310
14428
  block,
14311
14429
  headingLevel,
14312
14430
  embedHref
14313
14431
  }) {
14314
- return /* @__PURE__ */ jsx14(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14432
+ return /* @__PURE__ */ jsx15(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14315
14433
  }
14316
14434
  var DEFAULT_RENDERERS = {
14317
14435
  hero: HeroBlock,
@@ -14368,7 +14486,7 @@ function toIdFragment(value) {
14368
14486
  function SectionCta2({ cta }) {
14369
14487
  if (!hasUsableCta(cta)) return null;
14370
14488
  const variant = toButtonVariant(cta.variant);
14371
- return /* @__PURE__ */ jsx14("div", { className: "pt-2", children: /* @__PURE__ */ jsx14(
14489
+ return /* @__PURE__ */ jsx15("div", { className: "pt-2", children: /* @__PURE__ */ jsx15(
14372
14490
  "a",
14373
14491
  {
14374
14492
  href: cta.url,
@@ -14401,7 +14519,7 @@ function PageBlocks({
14401
14519
  const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
14402
14520
  const background = block.backgroundColor;
14403
14521
  return [
14404
- /* @__PURE__ */ jsxs13(
14522
+ /* @__PURE__ */ jsxs14(
14405
14523
  "section",
14406
14524
  {
14407
14525
  "data-slot": "page-block",
@@ -14410,8 +14528,8 @@ function PageBlocks({
14410
14528
  style: surfaceStyle(background),
14411
14529
  className: cn11("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
14412
14530
  children: [
14413
- block.heading && /* @__PURE__ */ jsx14(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx14("span", { id: headingId, children: block.heading }) }),
14414
- /* @__PURE__ */ jsx14(
14531
+ block.heading && /* @__PURE__ */ jsx15(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx15("span", { id: headingId, children: block.heading }) }),
14532
+ /* @__PURE__ */ jsx15(
14415
14533
  Renderer,
14416
14534
  {
14417
14535
  block,
@@ -14419,7 +14537,7 @@ function PageBlocks({
14419
14537
  embedHref
14420
14538
  }
14421
14539
  ),
14422
- /* @__PURE__ */ jsx14(SectionCta2, { cta: block.cta })
14540
+ /* @__PURE__ */ jsx15(SectionCta2, { cta: block.cta })
14423
14541
  ]
14424
14542
  },
14425
14543
  block.id
@@ -14427,12 +14545,12 @@ function PageBlocks({
14427
14545
  ];
14428
14546
  });
14429
14547
  if (sections.length === 0) return null;
14430
- return /* @__PURE__ */ jsx14("div", { className: cn11("space-y-12", className), "data-slot": "page-blocks", children: sections });
14548
+ return /* @__PURE__ */ jsx15("div", { className: cn11("space-y-12", className), "data-slot": "page-blocks", children: sections });
14431
14549
  }
14432
14550
 
14433
14551
  // src/components/shop-filters.tsx
14434
14552
  import { cn as cn12 } from "@reblu/site-ui/utils";
14435
- import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
14553
+ import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
14436
14554
  var DEFAULT_SHOP_PRICE_BANDS = [
14437
14555
  { max: 2500 },
14438
14556
  { min: 2500, max: 5e3 },
@@ -14476,7 +14594,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
14476
14594
  return "";
14477
14595
  }
14478
14596
  function OptionLink({ href, active, label, onActivate }) {
14479
- return /* @__PURE__ */ jsx15(
14597
+ return /* @__PURE__ */ jsx16(
14480
14598
  "a",
14481
14599
  {
14482
14600
  href,
@@ -14494,9 +14612,9 @@ function OptionLink({ href, active, label, onActivate }) {
14494
14612
  );
14495
14613
  }
14496
14614
  function FilterFieldset({ legend, children: children2 }) {
14497
- return /* @__PURE__ */ jsxs14("fieldset", { className: "space-y-2", children: [
14498
- /* @__PURE__ */ jsx15("legend", { className: "text-sm font-medium text-foreground", children: legend }),
14499
- /* @__PURE__ */ jsx15("div", { className: "flex flex-wrap gap-2", children: children2 })
14615
+ return /* @__PURE__ */ jsxs15("fieldset", { className: "space-y-2", children: [
14616
+ /* @__PURE__ */ jsx16("legend", { className: "text-sm font-medium text-foreground", children: legend }),
14617
+ /* @__PURE__ */ jsx16("div", { className: "flex flex-wrap gap-2", children: children2 })
14500
14618
  ] });
14501
14619
  }
14502
14620
  function ShopFilters({
@@ -14519,11 +14637,11 @@ function ShopFilters({
14519
14637
  if (!shouldRenderShopFilters(facets, active)) {
14520
14638
  return null;
14521
14639
  }
14522
- return /* @__PURE__ */ jsxs14("div", { className: cn12("space-y-6", className), "data-slot": "shop-filters", children: [
14640
+ return /* @__PURE__ */ jsxs15("div", { className: cn12("space-y-6", className), "data-slot": "shop-filters", children: [
14523
14641
  visibleTaxonomies.map((axis) => {
14524
14642
  const activeSlug = active.taxonomy?.[axis.key];
14525
- return /* @__PURE__ */ jsxs14(FilterFieldset, { legend: axis.label, children: [
14526
- /* @__PURE__ */ jsx15(
14643
+ return /* @__PURE__ */ jsxs15(FilterFieldset, { legend: axis.label, children: [
14644
+ /* @__PURE__ */ jsx16(
14527
14645
  OptionLink,
14528
14646
  {
14529
14647
  href: hrefs.taxonomy(axis.key, void 0),
@@ -14538,7 +14656,7 @@ function ShopFilters({
14538
14656
  ),
14539
14657
  axis.terms.map((term) => {
14540
14658
  const isActive = activeSlug === term.slug;
14541
- return /* @__PURE__ */ jsx15(
14659
+ return /* @__PURE__ */ jsx16(
14542
14660
  OptionLink,
14543
14661
  {
14544
14662
  href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
@@ -14558,9 +14676,9 @@ function ShopFilters({
14558
14676
  }),
14559
14677
  visibleAttributes.map((attr) => {
14560
14678
  const activeValues = toValueArray(active.attr?.[attr.key]);
14561
- return /* @__PURE__ */ jsx15(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
14679
+ return /* @__PURE__ */ jsx16(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
14562
14680
  const isActive = activeValues.includes(opt.value);
14563
- return /* @__PURE__ */ jsx15(
14681
+ return /* @__PURE__ */ jsx16(
14564
14682
  OptionLink,
14565
14683
  {
14566
14684
  href: hrefs.attr(attr.key, opt.value),
@@ -14578,11 +14696,11 @@ function ShopFilters({
14578
14696
  );
14579
14697
  }) }, attr.key);
14580
14698
  }),
14581
- showPriceGroup && /* @__PURE__ */ jsx15(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
14699
+ showPriceGroup && /* @__PURE__ */ jsx16(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
14582
14700
  const isActive = active.priceMin === band.min && active.priceMax === band.max;
14583
14701
  const nextMin = isActive ? void 0 : band.min;
14584
14702
  const nextMax = isActive ? void 0 : band.max;
14585
- return /* @__PURE__ */ jsx15(
14703
+ return /* @__PURE__ */ jsx16(
14586
14704
  OptionLink,
14587
14705
  {
14588
14706
  href: hrefs.price(nextMin, nextMax),
@@ -14593,7 +14711,7 @@ function ShopFilters({
14593
14711
  i
14594
14712
  );
14595
14713
  }) }),
14596
- hasOnSale && /* @__PURE__ */ jsx15(
14714
+ hasOnSale && /* @__PURE__ */ jsx16(
14597
14715
  OptionLink,
14598
14716
  {
14599
14717
  href: hrefs.onSale(!active.onSale),
@@ -14602,7 +14720,7 @@ function ShopFilters({
14602
14720
  onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
14603
14721
  }
14604
14722
  ),
14605
- /* @__PURE__ */ jsx15(
14723
+ /* @__PURE__ */ jsx16(
14606
14724
  "a",
14607
14725
  {
14608
14726
  href: hrefs.clearAll(),
@@ -14617,9 +14735,129 @@ function ShopFilters({
14617
14735
  ] });
14618
14736
  }
14619
14737
 
14620
- // src/components/cart-line-list.tsx
14738
+ // src/components/course-catalog-filters.tsx
14621
14739
  import { cn as cn13 } from "@reblu/site-ui/utils";
14622
- import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
14740
+ import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
14741
+ var DEFAULT_COURSE_PRICE_BANDS = [
14742
+ { max: 5e3 },
14743
+ { min: 5e3, max: 15e3 },
14744
+ { min: 15e3, max: 3e4 },
14745
+ { min: 3e4 }
14746
+ ];
14747
+ var DEFAULT_COURSE_CATALOG_FILTERS_LABELS = {
14748
+ instructor: "Docente",
14749
+ allInstructors: "Todos",
14750
+ price: "Precio",
14751
+ free: "Gratis",
14752
+ clearAll: "Quitar filtros",
14753
+ priceUnder: (formattedMax) => `Hasta ${formattedMax}`,
14754
+ priceOver: (formattedMin) => `Desde ${formattedMin}`,
14755
+ priceRange: (formattedMin, formattedMax) => `${formattedMin} \u2013 ${formattedMax}`
14756
+ };
14757
+ function instructorName(instructor) {
14758
+ return [instructor.firstName, instructor.lastName].filter(Boolean).join(" ");
14759
+ }
14760
+ function bandLabel(band, t, currencyCode, locale) {
14761
+ if (band.label) return band.label;
14762
+ const fmt = (cents) => formatPrice(cents, currencyCode, locale);
14763
+ if (band.min !== void 0 && band.max !== void 0)
14764
+ return t.priceRange(fmt(band.min), fmt(band.max));
14765
+ if (band.max !== void 0) return t.priceUnder(fmt(band.max));
14766
+ if (band.min !== void 0) return t.priceOver(fmt(band.min));
14767
+ return "";
14768
+ }
14769
+ function CourseCatalogFilters({
14770
+ instructors,
14771
+ hrefs,
14772
+ active = {},
14773
+ onChange,
14774
+ priceBands = DEFAULT_COURSE_PRICE_BANDS,
14775
+ labels,
14776
+ currencyCode,
14777
+ locale,
14778
+ className
14779
+ }) {
14780
+ const t = { ...DEFAULT_COURSE_CATALOG_FILTERS_LABELS, ...labels };
14781
+ const named = instructors.filter((i) => instructorName(i) !== "");
14782
+ const showInstructors = named.length > 0 || active.instructor !== void 0;
14783
+ const isFree = Boolean(active.free);
14784
+ return /* @__PURE__ */ jsxs16("div", { className: cn13("space-y-6", className), "data-slot": "course-catalog-filters", children: [
14785
+ showInstructors && /* @__PURE__ */ jsxs16(FilterFieldset, { legend: t.instructor, children: [
14786
+ /* @__PURE__ */ jsx17(
14787
+ OptionLink,
14788
+ {
14789
+ href: hrefs.instructor(void 0),
14790
+ active: active.instructor === void 0,
14791
+ label: t.allInstructors,
14792
+ onActivate: onChange ? () => onChange({ instructor: void 0 }) : void 0
14793
+ }
14794
+ ),
14795
+ named.map((instructor) => {
14796
+ const isActive = active.instructor === instructor.id;
14797
+ const next2 = isActive ? void 0 : instructor.id;
14798
+ return /* @__PURE__ */ jsx17(
14799
+ OptionLink,
14800
+ {
14801
+ href: hrefs.instructor(next2),
14802
+ active: isActive,
14803
+ label: instructorName(instructor),
14804
+ onActivate: onChange ? () => onChange({ instructor: next2 }) : void 0
14805
+ },
14806
+ instructor.id
14807
+ );
14808
+ })
14809
+ ] }),
14810
+ /* @__PURE__ */ jsxs16(FilterFieldset, { legend: t.price, children: [
14811
+ /* @__PURE__ */ jsx17(
14812
+ OptionLink,
14813
+ {
14814
+ href: hrefs.free(!isFree),
14815
+ active: isFree,
14816
+ label: t.free,
14817
+ onActivate: onChange ? () => onChange(
14818
+ isFree ? { free: false } : { free: true, priceMin: void 0, priceMax: void 0 }
14819
+ ) : void 0
14820
+ }
14821
+ ),
14822
+ priceBands.map((band, i) => {
14823
+ const isActive = !isFree && active.priceMin === band.min && active.priceMax === band.max;
14824
+ const nextMin = isActive ? void 0 : band.min;
14825
+ const nextMax = isActive ? void 0 : band.max;
14826
+ return /* @__PURE__ */ jsx17(
14827
+ OptionLink,
14828
+ {
14829
+ href: hrefs.price(nextMin, nextMax),
14830
+ active: isActive,
14831
+ label: bandLabel(band, t, currencyCode, locale),
14832
+ onActivate: onChange ? () => onChange({ priceMin: nextMin, priceMax: nextMax, free: false }) : void 0
14833
+ },
14834
+ i
14835
+ );
14836
+ })
14837
+ ] }),
14838
+ /* @__PURE__ */ jsx17(
14839
+ "a",
14840
+ {
14841
+ href: hrefs.clearAll(),
14842
+ onClick: onChange ? (event) => {
14843
+ event.preventDefault();
14844
+ onChange({
14845
+ instructor: void 0,
14846
+ priceMin: void 0,
14847
+ priceMax: void 0,
14848
+ free: false
14849
+ });
14850
+ } : void 0,
14851
+ className: "text-sm font-medium text-muted-foreground underline-offset-4 hover:text-foreground hover:underline",
14852
+ children: t.clearAll
14853
+ }
14854
+ )
14855
+ ] });
14856
+ }
14857
+
14858
+ // src/components/cart-line-list.tsx
14859
+ import { cn as cn14 } from "@reblu/site-ui/utils";
14860
+ import { jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
14623
14861
  var DEFAULT_LABELS2 = {
14624
14862
  quantityLabel: "Cantidad",
14625
14863
  decrease: "Reducir cantidad",
@@ -14645,9 +14883,9 @@ function CartLineList({
14645
14883
  }) {
14646
14884
  const t = { ...DEFAULT_LABELS2, ...labels };
14647
14885
  const noticeContent = notice === true ? t.cancelledNotice : notice;
14648
- return /* @__PURE__ */ jsxs15("div", { className: cn13("space-y-4", className), "data-slot": "cart-line-list", children: [
14649
- /* @__PURE__ */ jsx16("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
14650
- noticeContent != null && noticeContent !== false && /* @__PURE__ */ jsx16(
14886
+ return /* @__PURE__ */ jsxs17("div", { className: cn14("space-y-4", className), "data-slot": "cart-line-list", children: [
14887
+ /* @__PURE__ */ jsx18("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
14888
+ noticeContent != null && noticeContent !== false && /* @__PURE__ */ jsx18(
14651
14889
  "div",
14652
14890
  {
14653
14891
  role: "status",
@@ -14656,33 +14894,33 @@ function CartLineList({
14656
14894
  children: noticeContent
14657
14895
  }
14658
14896
  ),
14659
- /* @__PURE__ */ jsx16("ul", { className: "space-y-4", children: items.map((item) => {
14897
+ /* @__PURE__ */ jsx18("ul", { className: "space-y-4", children: items.map((item) => {
14660
14898
  const maxQty = item.maxStock ?? Infinity;
14661
14899
  const atMax = item.quantity >= maxQty;
14662
14900
  const atMin = item.quantity <= 1;
14663
14901
  const message = lineMessage?.(item);
14664
- return /* @__PURE__ */ jsxs15(
14902
+ return /* @__PURE__ */ jsxs17(
14665
14903
  "li",
14666
14904
  {
14667
14905
  className: "flex gap-4 rounded-xl border border-border bg-card p-4",
14668
14906
  children: [
14669
- /* @__PURE__ */ jsx16("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ jsx16("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
14670
- /* @__PURE__ */ jsxs15("div", { className: "min-w-0 flex-1", children: [
14671
- /* @__PURE__ */ jsx16("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
14672
- item.variantName && /* @__PURE__ */ jsx16("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
14673
- /* @__PURE__ */ jsxs15("p", { className: "mt-1 text-sm text-muted-foreground", children: [
14907
+ /* @__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 }),
14908
+ /* @__PURE__ */ jsxs17("div", { className: "min-w-0 flex-1", children: [
14909
+ /* @__PURE__ */ jsx18("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
14910
+ item.variantName && /* @__PURE__ */ jsx18("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
14911
+ /* @__PURE__ */ jsxs17("p", { className: "mt-1 text-sm text-muted-foreground", children: [
14674
14912
  formatPrice(item.unitPrice, currencyCode, locale),
14675
14913
  " ",
14676
14914
  t.unitPriceSuffix
14677
14915
  ] }),
14678
- /* @__PURE__ */ jsxs15(
14916
+ /* @__PURE__ */ jsxs17(
14679
14917
  "div",
14680
14918
  {
14681
14919
  role: "group",
14682
14920
  "aria-label": t.quantityLabel,
14683
14921
  className: "mt-3 flex items-center gap-3",
14684
14922
  children: [
14685
- /* @__PURE__ */ jsx16(
14923
+ /* @__PURE__ */ jsx18(
14686
14924
  "button",
14687
14925
  {
14688
14926
  type: "button",
@@ -14693,8 +14931,8 @@ function CartLineList({
14693
14931
  children: "\u2212"
14694
14932
  }
14695
14933
  ),
14696
- /* @__PURE__ */ jsx16("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
14697
- /* @__PURE__ */ jsx16(
14934
+ /* @__PURE__ */ jsx18("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
14935
+ /* @__PURE__ */ jsx18(
14698
14936
  "button",
14699
14937
  {
14700
14938
  type: "button",
@@ -14705,7 +14943,7 @@ function CartLineList({
14705
14943
  children: "+"
14706
14944
  }
14707
14945
  ),
14708
- onRemove && /* @__PURE__ */ jsx16(
14946
+ onRemove && /* @__PURE__ */ jsx18(
14709
14947
  "button",
14710
14948
  {
14711
14949
  type: "button",
@@ -14718,7 +14956,7 @@ function CartLineList({
14718
14956
  ]
14719
14957
  }
14720
14958
  ),
14721
- message != null && message !== false && /* @__PURE__ */ jsx16(
14959
+ message != null && message !== false && /* @__PURE__ */ jsx18(
14722
14960
  "p",
14723
14961
  {
14724
14962
  className: "mt-2 text-sm text-destructive",
@@ -14727,7 +14965,7 @@ function CartLineList({
14727
14965
  }
14728
14966
  )
14729
14967
  ] }),
14730
- /* @__PURE__ */ jsx16("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ jsx16("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
14968
+ /* @__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) }) })
14731
14969
  ]
14732
14970
  },
14733
14971
  lineKey(item.productId, item.variantId)
@@ -14737,8 +14975,8 @@ function CartLineList({
14737
14975
  }
14738
14976
 
14739
14977
  // src/components/cart-summary.tsx
14740
- import { cn as cn14 } from "@reblu/site-ui/utils";
14741
- import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
14978
+ import { cn as cn15 } from "@reblu/site-ui/utils";
14979
+ import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
14742
14980
  var DEFAULT_LABELS3 = {
14743
14981
  subtotal: "Subtotal",
14744
14982
  discountPrefix: "Descuento",
@@ -14768,37 +15006,37 @@ function CartSummary({
14768
15006
  const hasDiscount = Boolean(discountAmount && discountAmount > 0);
14769
15007
  const noticeContent = notice === true ? t.cancelledNotice : notice;
14770
15008
  const hasNotice = noticeContent != null && noticeContent !== false;
14771
- const breakdown = /* @__PURE__ */ jsxs16(
15009
+ const breakdown = /* @__PURE__ */ jsxs18(
14772
15010
  "dl",
14773
15011
  {
14774
- className: cn14("space-y-2 text-sm", !hasNotice && className),
15012
+ className: cn15("space-y-2 text-sm", !hasNotice && className),
14775
15013
  "data-slot": "cart-summary",
14776
15014
  children: [
14777
- /* @__PURE__ */ jsxs16("div", { className: "flex justify-between text-muted-foreground", children: [
14778
- /* @__PURE__ */ jsx17("dt", { children: t.subtotal }),
14779
- /* @__PURE__ */ jsx17("dd", { children: formatPrice(subtotal, currencyCode, locale) })
15015
+ /* @__PURE__ */ jsxs18("div", { className: "flex justify-between text-muted-foreground", children: [
15016
+ /* @__PURE__ */ jsx19("dt", { children: t.subtotal }),
15017
+ /* @__PURE__ */ jsx19("dd", { children: formatPrice(subtotal, currencyCode, locale) })
14780
15018
  ] }),
14781
- hasDiscount && /* @__PURE__ */ jsxs16("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
14782
- /* @__PURE__ */ jsx17("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
14783
- /* @__PURE__ */ jsxs16("dd", { children: [
15019
+ hasDiscount && /* @__PURE__ */ jsxs18("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
15020
+ /* @__PURE__ */ jsx19("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
15021
+ /* @__PURE__ */ jsxs18("dd", { children: [
14784
15022
  "-",
14785
15023
  formatPrice(discountAmount, currencyCode, locale)
14786
15024
  ] })
14787
15025
  ] }),
14788
- shippingEnabled && /* @__PURE__ */ jsxs16("div", { className: "flex justify-between text-muted-foreground", children: [
14789
- /* @__PURE__ */ jsx17("dt", { children: t.shipping }),
14790
- /* @__PURE__ */ jsx17("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
15026
+ shippingEnabled && /* @__PURE__ */ jsxs18("div", { className: "flex justify-between text-muted-foreground", children: [
15027
+ /* @__PURE__ */ jsx19("dt", { children: t.shipping }),
15028
+ /* @__PURE__ */ jsx19("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
14791
15029
  ] }),
14792
- /* @__PURE__ */ jsxs16("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
14793
- /* @__PURE__ */ jsx17("dt", { children: t.total }),
14794
- /* @__PURE__ */ jsx17("dd", { children: formatPrice(total, currencyCode, locale) })
15030
+ /* @__PURE__ */ jsxs18("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
15031
+ /* @__PURE__ */ jsx19("dt", { children: t.total }),
15032
+ /* @__PURE__ */ jsx19("dd", { children: formatPrice(total, currencyCode, locale) })
14795
15033
  ] })
14796
15034
  ]
14797
15035
  }
14798
15036
  );
14799
15037
  if (!hasNotice) return breakdown;
14800
- return /* @__PURE__ */ jsxs16("div", { className: cn14("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
14801
- /* @__PURE__ */ jsx17(
15038
+ return /* @__PURE__ */ jsxs18("div", { className: cn15("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
15039
+ /* @__PURE__ */ jsx19(
14802
15040
  "div",
14803
15041
  {
14804
15042
  role: "status",
@@ -14812,8 +15050,8 @@ function CartSummary({
14812
15050
  }
14813
15051
 
14814
15052
  // src/components/cart-adjustments-notice.tsx
14815
- import { cn as cn15 } from "@reblu/site-ui/utils";
14816
- import { jsx as jsx18 } from "react/jsx-runtime";
15053
+ import { cn as cn16 } from "@reblu/site-ui/utils";
15054
+ import { jsx as jsx20 } from "react/jsx-runtime";
14817
15055
  var DEFAULT_LABELS4 = {
14818
15056
  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.`,
14819
15057
  quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
@@ -14847,20 +15085,20 @@ function CartAdjustmentsNotice({
14847
15085
  );
14848
15086
  }
14849
15087
  if (messages.length === 0) return null;
14850
- return /* @__PURE__ */ jsx18(
15088
+ return /* @__PURE__ */ jsx20(
14851
15089
  "div",
14852
15090
  {
14853
15091
  role: "status",
14854
- className: cn15("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
15092
+ className: cn16("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
14855
15093
  "data-slot": "cart-adjustments-notice",
14856
- children: messages.length === 1 ? /* @__PURE__ */ jsx18("p", { children: messages[0] }) : /* @__PURE__ */ jsx18("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ jsx18("li", { children: message }, index)) })
15094
+ 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)) })
14857
15095
  }
14858
15096
  );
14859
15097
  }
14860
15098
 
14861
15099
  // src/components/added-to-cart-toast.tsx
14862
- import { cn as cn16 } from "@reblu/site-ui/utils";
14863
- import { jsx as jsx19, jsxs as jsxs17 } from "react/jsx-runtime";
15100
+ import { cn as cn17 } from "@reblu/site-ui/utils";
15101
+ import { jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
14864
15102
  var DEFAULT_LABELS5 = {
14865
15103
  success: "A\xF1adido al carrito",
14866
15104
  error: "No se pudo a\xF1adir al carrito",
@@ -14880,12 +15118,12 @@ function AddedToCartToast({
14880
15118
  const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
14881
15119
  const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
14882
15120
  const variant = status === "success" ? "success" : "error";
14883
- return /* @__PURE__ */ jsxs17(
15121
+ return /* @__PURE__ */ jsxs19(
14884
15122
  "div",
14885
15123
  {
14886
15124
  "data-slot": "added-to-cart-toast",
14887
15125
  "data-variant": variant,
14888
- className: cn16(
15126
+ className: cn17(
14889
15127
  "flex items-center gap-3 rounded-xl border border-border bg-card p-3 text-sm shadow-lg",
14890
15128
  variant === "success" && "border-green-600/30 dark:border-green-400/30",
14891
15129
  variant === "error" && "border-destructive/30",
@@ -14893,20 +15131,20 @@ function AddedToCartToast({
14893
15131
  ),
14894
15132
  children: [
14895
15133
  hasThumbnail && // eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
14896
- /* @__PURE__ */ jsx19("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
14897
- /* @__PURE__ */ jsxs17("div", { className: "min-w-0 flex-1", children: [
14898
- /* @__PURE__ */ jsx19("p", { className: "truncate font-semibold text-foreground", children: productName }),
14899
- /* @__PURE__ */ jsx19("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
15134
+ /* @__PURE__ */ jsx21("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
15135
+ /* @__PURE__ */ jsxs19("div", { className: "min-w-0 flex-1", children: [
15136
+ /* @__PURE__ */ jsx21("p", { className: "truncate font-semibold text-foreground", children: productName }),
15137
+ /* @__PURE__ */ jsx21("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
14900
15138
  ] }),
14901
- /* @__PURE__ */ jsx19("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsx19("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
15139
+ /* @__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 }) })
14902
15140
  ]
14903
15141
  }
14904
15142
  );
14905
15143
  }
14906
15144
 
14907
15145
  // src/components/checkout-login-prompt.tsx
14908
- import { cn as cn17 } from "@reblu/site-ui/utils";
14909
- import { Fragment as Fragment3, jsx as jsx20, jsxs as jsxs18 } from "react/jsx-runtime";
15146
+ import { cn as cn18 } from "@reblu/site-ui/utils";
15147
+ import { Fragment as Fragment3, jsx as jsx22, jsxs as jsxs20 } from "react/jsx-runtime";
14910
15148
  var DEFAULT_LABELS6 = {
14911
15149
  title: "Identificaci\xF3n",
14912
15150
  description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
@@ -14933,26 +15171,26 @@ function CheckoutLoginPrompt({
14933
15171
  if (!open) return null;
14934
15172
  const t = { ...DEFAULT_LABELS6, ...labels };
14935
15173
  const isValidEmail = EMAIL_PATTERN.test(email.trim());
14936
- return /* @__PURE__ */ jsxs18(Fragment3, { children: [
14937
- /* @__PURE__ */ jsx20("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
14938
- /* @__PURE__ */ jsxs18(
15174
+ return /* @__PURE__ */ jsxs20(Fragment3, { children: [
15175
+ /* @__PURE__ */ jsx22("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
15176
+ /* @__PURE__ */ jsxs20(
14939
15177
  "div",
14940
15178
  {
14941
15179
  role: "dialog",
14942
15180
  "aria-modal": "true",
14943
15181
  "aria-labelledby": "checkout-login-prompt-title",
14944
15182
  "data-slot": "checkout-login-prompt",
14945
- className: cn17(
15183
+ className: cn18(
14946
15184
  "fixed left-1/2 top-1/2 z-50 w-full max-w-md -translate-x-1/2 -translate-y-1/2 space-y-5 rounded-2xl border border-border bg-background p-6 shadow-2xl",
14947
15185
  className
14948
15186
  ),
14949
15187
  children: [
14950
- /* @__PURE__ */ jsxs18("div", { className: "flex items-start justify-between gap-3", children: [
14951
- /* @__PURE__ */ jsxs18("div", { children: [
14952
- /* @__PURE__ */ jsx20("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
14953
- /* @__PURE__ */ jsx20("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
15188
+ /* @__PURE__ */ jsxs20("div", { className: "flex items-start justify-between gap-3", children: [
15189
+ /* @__PURE__ */ jsxs20("div", { children: [
15190
+ /* @__PURE__ */ jsx22("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
15191
+ /* @__PURE__ */ jsx22("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
14954
15192
  ] }),
14955
- /* @__PURE__ */ jsx20(
15193
+ /* @__PURE__ */ jsx22(
14956
15194
  "button",
14957
15195
  {
14958
15196
  type: "button",
@@ -14963,9 +15201,9 @@ function CheckoutLoginPrompt({
14963
15201
  }
14964
15202
  )
14965
15203
  ] }),
14966
- /* @__PURE__ */ jsxs18("div", { className: "space-y-2", children: [
14967
- /* @__PURE__ */ jsx20("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
14968
- /* @__PURE__ */ jsx20(
15204
+ /* @__PURE__ */ jsxs20("div", { className: "space-y-2", children: [
15205
+ /* @__PURE__ */ jsx22("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
15206
+ /* @__PURE__ */ jsx22(
14969
15207
  "input",
14970
15208
  {
14971
15209
  id: "checkout-login-prompt-email",
@@ -14974,29 +15212,29 @@ function CheckoutLoginPrompt({
14974
15212
  value: email,
14975
15213
  onChange: (e) => onEmailChange(e.target.value),
14976
15214
  placeholder: t.emailPlaceholder,
14977
- className: cn17(
15215
+ className: cn18(
14978
15216
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
14979
15217
  error ? "border-destructive" : "border-border focus:border-primary"
14980
15218
  )
14981
15219
  }
14982
15220
  ),
14983
- error && /* @__PURE__ */ jsx20("p", { className: "text-xs text-destructive", children: error })
15221
+ error && /* @__PURE__ */ jsx22("p", { className: "text-xs text-destructive", children: error })
14984
15222
  ] }),
14985
- /* @__PURE__ */ jsxs18("div", { className: "space-y-2", children: [
14986
- /* @__PURE__ */ jsx20(
15223
+ /* @__PURE__ */ jsxs20("div", { className: "space-y-2", children: [
15224
+ /* @__PURE__ */ jsx22(
14987
15225
  "button",
14988
15226
  {
14989
15227
  type: "button",
14990
15228
  onClick: onSubmitEmail,
14991
15229
  disabled: checking || !isValidEmail,
14992
- className: cn17(
15230
+ className: cn18(
14993
15231
  "flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-2.5 text-sm font-semibold transition-all",
14994
15232
  checking || !isValidEmail ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
14995
15233
  ),
14996
15234
  children: checking ? t.checking : t.continueWithEmail
14997
15235
  }
14998
15236
  ),
14999
- /* @__PURE__ */ jsx20(
15237
+ /* @__PURE__ */ jsx22(
15000
15238
  "button",
15001
15239
  {
15002
15240
  type: "button",
@@ -15013,9 +15251,9 @@ function CheckoutLoginPrompt({
15013
15251
  }
15014
15252
 
15015
15253
  // src/components/checkout-form.tsx
15016
- import { cn as cn18 } from "@reblu/site-ui/utils";
15254
+ import { cn as cn19 } from "@reblu/site-ui/utils";
15017
15255
  import { PhoneInput } from "@reblu/site-ui/phone-input";
15018
- import { Fragment as Fragment4, jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
15256
+ import { Fragment as Fragment4, jsx as jsx23, jsxs as jsxs21 } from "react/jsx-runtime";
15019
15257
  var DEFAULT_LABELS7 = {
15020
15258
  contactTitle: "Datos de contacto",
15021
15259
  nameLabel: "Nombre completo",
@@ -15071,22 +15309,22 @@ function CheckoutForm({
15071
15309
  event.preventDefault();
15072
15310
  if (discountCode.trim() && !discountApplying) onApplyDiscount();
15073
15311
  }
15074
- return /* @__PURE__ */ jsxs19(Fragment4, { children: [
15312
+ return /* @__PURE__ */ jsxs21(Fragment4, { children: [
15075
15313
  loginPrompt,
15076
- /* @__PURE__ */ jsxs19(
15314
+ /* @__PURE__ */ jsxs21(
15077
15315
  "form",
15078
15316
  {
15079
15317
  "data-testid": "checkout-form",
15080
15318
  onSubmit,
15081
- className: cn18("space-y-8", className),
15319
+ className: cn19("space-y-8", className),
15082
15320
  "data-slot": "checkout-form",
15083
15321
  children: [
15084
- /* @__PURE__ */ jsxs19("section", { className: "space-y-4", children: [
15085
- /* @__PURE__ */ jsx21("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
15086
- /* @__PURE__ */ jsxs19("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15087
- /* @__PURE__ */ jsxs19("div", { className: "space-y-1", children: [
15088
- /* @__PURE__ */ jsx21("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
15089
- /* @__PURE__ */ jsx21(
15322
+ /* @__PURE__ */ jsxs21("section", { className: "space-y-4", children: [
15323
+ /* @__PURE__ */ jsx23("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
15324
+ /* @__PURE__ */ jsxs21("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15325
+ /* @__PURE__ */ jsxs21("div", { className: "space-y-1", children: [
15326
+ /* @__PURE__ */ jsx23("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
15327
+ /* @__PURE__ */ jsx23(
15090
15328
  "input",
15091
15329
  {
15092
15330
  id: "checkout-form-name",
@@ -15095,17 +15333,17 @@ function CheckoutForm({
15095
15333
  value: contact.name,
15096
15334
  onChange: (e) => patchContact({ name: e.target.value }),
15097
15335
  placeholder: t.namePlaceholder,
15098
- className: cn18(
15336
+ className: cn19(
15099
15337
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
15100
15338
  contactErrors?.name ? "border-destructive" : "border-border focus:border-primary"
15101
15339
  )
15102
15340
  }
15103
15341
  ),
15104
- contactErrors?.name && /* @__PURE__ */ jsx21("p", { className: "text-xs text-destructive", children: contactErrors.name })
15342
+ contactErrors?.name && /* @__PURE__ */ jsx23("p", { className: "text-xs text-destructive", children: contactErrors.name })
15105
15343
  ] }),
15106
- /* @__PURE__ */ jsxs19("div", { className: "space-y-1", children: [
15107
- /* @__PURE__ */ jsx21("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
15108
- /* @__PURE__ */ jsx21(
15344
+ /* @__PURE__ */ jsxs21("div", { className: "space-y-1", children: [
15345
+ /* @__PURE__ */ jsx23("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
15346
+ /* @__PURE__ */ jsx23(
15109
15347
  "input",
15110
15348
  {
15111
15349
  id: "checkout-form-email",
@@ -15114,15 +15352,15 @@ function CheckoutForm({
15114
15352
  value: contact.email,
15115
15353
  onChange: (e) => patchContact({ email: e.target.value }),
15116
15354
  placeholder: t.emailPlaceholder,
15117
- className: cn18(
15355
+ className: cn19(
15118
15356
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
15119
15357
  contactErrors?.email ? "border-destructive" : "border-border focus:border-primary"
15120
15358
  )
15121
15359
  }
15122
15360
  ),
15123
- contactErrors?.email && /* @__PURE__ */ jsx21("p", { className: "text-xs text-destructive", children: contactErrors.email })
15361
+ contactErrors?.email && /* @__PURE__ */ jsx23("p", { className: "text-xs text-destructive", children: contactErrors.email })
15124
15362
  ] }),
15125
- /* @__PURE__ */ jsx21("div", { className: "space-y-1", children: /* @__PURE__ */ jsx21(
15363
+ /* @__PURE__ */ jsx23("div", { className: "space-y-1", children: /* @__PURE__ */ jsx23(
15126
15364
  PhoneInput,
15127
15365
  {
15128
15366
  id: "checkout-form-phone",
@@ -15136,26 +15374,26 @@ function CheckoutForm({
15136
15374
  ] })
15137
15375
  ] }),
15138
15376
  children2,
15139
- generalError ? /* @__PURE__ */ jsx21("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
15140
- /* @__PURE__ */ jsxs19("section", { className: "space-y-3", children: [
15141
- /* @__PURE__ */ jsx21("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
15142
- autoDiscount ? /* @__PURE__ */ jsxs19(
15377
+ generalError ? /* @__PURE__ */ jsx23("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
15378
+ /* @__PURE__ */ jsxs21("section", { className: "space-y-3", children: [
15379
+ /* @__PURE__ */ jsx23("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
15380
+ autoDiscount ? /* @__PURE__ */ jsxs21(
15143
15381
  "div",
15144
15382
  {
15145
15383
  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",
15146
15384
  "data-slot": "checkout-staff-discount",
15147
15385
  children: [
15148
- /* @__PURE__ */ jsx21("span", { className: "font-semibold", children: t.staffDiscountApplied }),
15149
- /* @__PURE__ */ jsx21("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
15386
+ /* @__PURE__ */ jsx23("span", { className: "font-semibold", children: t.staffDiscountApplied }),
15387
+ /* @__PURE__ */ jsx23("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
15150
15388
  ]
15151
15389
  }
15152
15390
  ) : null,
15153
- appliedDiscount && !autoDiscount ? /* @__PURE__ */ jsxs19("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: [
15154
- /* @__PURE__ */ jsxs19("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
15155
- /* @__PURE__ */ jsx21("span", { className: "font-semibold", children: appliedDiscount.code }),
15156
- /* @__PURE__ */ jsx21("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
15391
+ 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: [
15392
+ /* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
15393
+ /* @__PURE__ */ jsx23("span", { className: "font-semibold", children: appliedDiscount.code }),
15394
+ /* @__PURE__ */ jsx23("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
15157
15395
  ] }),
15158
- /* @__PURE__ */ jsx21(
15396
+ /* @__PURE__ */ jsx23(
15159
15397
  "button",
15160
15398
  {
15161
15399
  type: "button",
@@ -15165,9 +15403,9 @@ function CheckoutForm({
15165
15403
  children: t.removeDiscount
15166
15404
  }
15167
15405
  )
15168
- ] }) : /* @__PURE__ */ jsxs19("div", { className: "flex gap-2", children: [
15169
- /* @__PURE__ */ jsx21("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
15170
- /* @__PURE__ */ jsx21(
15406
+ ] }) : /* @__PURE__ */ jsxs21("div", { className: "flex gap-2", children: [
15407
+ /* @__PURE__ */ jsx23("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
15408
+ /* @__PURE__ */ jsx23(
15171
15409
  "input",
15172
15410
  {
15173
15411
  id: "checkout-form-discount-code",
@@ -15179,7 +15417,7 @@ function CheckoutForm({
15179
15417
  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"
15180
15418
  }
15181
15419
  ),
15182
- /* @__PURE__ */ jsx21(
15420
+ /* @__PURE__ */ jsx23(
15183
15421
  "button",
15184
15422
  {
15185
15423
  type: "button",
@@ -15190,14 +15428,14 @@ function CheckoutForm({
15190
15428
  }
15191
15429
  )
15192
15430
  ] }),
15193
- discountError && /* @__PURE__ */ jsx21("p", { className: "text-xs text-destructive", children: discountError })
15431
+ discountError && /* @__PURE__ */ jsx23("p", { className: "text-xs text-destructive", children: discountError })
15194
15432
  ] }),
15195
- /* @__PURE__ */ jsx21(
15433
+ /* @__PURE__ */ jsx23(
15196
15434
  "button",
15197
15435
  {
15198
15436
  type: "submit",
15199
15437
  disabled: submitting || submitDisabled,
15200
- className: cn18(
15438
+ className: cn19(
15201
15439
  "flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-3 font-semibold transition-all",
15202
15440
  submitting || submitDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
15203
15441
  ),
@@ -15211,11 +15449,11 @@ function CheckoutForm({
15211
15449
  }
15212
15450
 
15213
15451
  // src/components/order-confirmation.tsx
15214
- import { cn as cn20 } from "@reblu/site-ui/utils";
15452
+ import { cn as cn21 } from "@reblu/site-ui/utils";
15215
15453
 
15216
15454
  // src/components/order-invoice-link.tsx
15217
- import { cn as cn19 } from "@reblu/site-ui/utils";
15218
- import { jsx as jsx22, jsxs as jsxs20 } from "react/jsx-runtime";
15455
+ import { cn as cn20 } from "@reblu/site-ui/utils";
15456
+ import { jsx as jsx24, jsxs as jsxs22 } from "react/jsx-runtime";
15219
15457
  var DEFAULT_LABELS8 = {
15220
15458
  linkLabel: "Descargar la factura {number}",
15221
15459
  signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
@@ -15223,8 +15461,8 @@ var DEFAULT_LABELS8 = {
15223
15461
  function OrderInvoiceLink({ invoice, labels, className }) {
15224
15462
  if (!invoice) return null;
15225
15463
  const t = { ...DEFAULT_LABELS8, ...labels };
15226
- return /* @__PURE__ */ jsxs20("div", { className: cn19("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
15227
- /* @__PURE__ */ jsx22(
15464
+ return /* @__PURE__ */ jsxs22("div", { className: cn20("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
15465
+ /* @__PURE__ */ jsx24(
15228
15466
  "a",
15229
15467
  {
15230
15468
  href: invoice.url,
@@ -15232,12 +15470,12 @@ function OrderInvoiceLink({ invoice, labels, className }) {
15232
15470
  children: t.linkLabel.replace("{number}", invoice.number)
15233
15471
  }
15234
15472
  ),
15235
- /* @__PURE__ */ jsx22("p", { className: "text-muted-foreground", children: t.signInHint })
15473
+ /* @__PURE__ */ jsx24("p", { className: "text-muted-foreground", children: t.signInHint })
15236
15474
  ] });
15237
15475
  }
15238
15476
 
15239
15477
  // src/components/order-confirmation.tsx
15240
- import { jsx as jsx23, jsxs as jsxs21 } from "react/jsx-runtime";
15478
+ import { jsx as jsx25, jsxs as jsxs23 } from "react/jsx-runtime";
15241
15479
  var DEFAULT_LABELS9 = {
15242
15480
  pollingTitle: "Confirmando tu pedido\u2026",
15243
15481
  pollingDescription: "Estamos procesando el pago, un momento\u2026",
@@ -15303,43 +15541,43 @@ function OrderConfirmation({
15303
15541
  const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
15304
15542
  const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
15305
15543
  const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
15306
- return /* @__PURE__ */ jsxs21("div", { className: cn20("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
15307
- /* @__PURE__ */ jsx23("h1", { className: "text-3xl font-bold", children: title }),
15308
- /* @__PURE__ */ jsx23("p", { className: "text-lg text-muted-foreground", children: description }),
15309
- showFullOrderSummary && order && /* @__PURE__ */ jsxs21("div", { className: "space-y-6", children: [
15310
- /* @__PURE__ */ jsxs21("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15311
- /* @__PURE__ */ jsx23("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
15312
- /* @__PURE__ */ jsx23("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15544
+ return /* @__PURE__ */ jsxs23("div", { className: cn21("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
15545
+ /* @__PURE__ */ jsx25("h1", { className: "text-3xl font-bold", children: title }),
15546
+ /* @__PURE__ */ jsx25("p", { className: "text-lg text-muted-foreground", children: description }),
15547
+ showFullOrderSummary && order && /* @__PURE__ */ jsxs23("div", { className: "space-y-6", children: [
15548
+ /* @__PURE__ */ jsxs23("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15549
+ /* @__PURE__ */ jsx25("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
15550
+ /* @__PURE__ */ jsx25("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15313
15551
  ] }),
15314
- /* @__PURE__ */ jsxs21("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
15315
- order.items.map((item, idx) => /* @__PURE__ */ jsxs21(
15552
+ /* @__PURE__ */ jsxs23("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
15553
+ order.items.map((item, idx) => /* @__PURE__ */ jsxs23(
15316
15554
  "div",
15317
15555
  {
15318
15556
  className: "flex justify-between gap-4 text-sm",
15319
15557
  children: [
15320
- /* @__PURE__ */ jsxs21("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
15558
+ /* @__PURE__ */ jsxs23("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
15321
15559
  item.product.name,
15322
15560
  item.variant ? ` (${item.variant.name})` : "",
15323
15561
  " x",
15324
15562
  item.quantity
15325
15563
  ] }),
15326
- /* @__PURE__ */ jsx23("span", { children: formatPrice(item.total, currencyCode, locale) })
15564
+ /* @__PURE__ */ jsx25("span", { children: formatPrice(item.total, currencyCode, locale) })
15327
15565
  ]
15328
15566
  },
15329
15567
  idx
15330
15568
  )),
15331
- /* @__PURE__ */ jsx23("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ jsxs21("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
15332
- /* @__PURE__ */ jsx23("span", { children: t.totalLabel }),
15333
- /* @__PURE__ */ jsx23("span", { children: formatPrice(order.total, currencyCode, locale) })
15569
+ /* @__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: [
15570
+ /* @__PURE__ */ jsx25("span", { children: t.totalLabel }),
15571
+ /* @__PURE__ */ jsx25("span", { children: formatPrice(order.total, currencyCode, locale) })
15334
15572
  ] }) })
15335
15573
  ] }),
15336
- /* @__PURE__ */ jsxs21("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
15574
+ /* @__PURE__ */ jsxs23("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
15337
15575
  t.confirmationEmailPrefix,
15338
15576
  " ",
15339
- /* @__PURE__ */ jsx23("span", { className: "font-medium text-foreground", children: order.customerEmail }),
15577
+ /* @__PURE__ */ jsx25("span", { className: "font-medium text-foreground", children: order.customerEmail }),
15340
15578
  "."
15341
15579
  ] }),
15342
- /* @__PURE__ */ jsx23(
15580
+ /* @__PURE__ */ jsx25(
15343
15581
  OrderInvoiceLink,
15344
15582
  {
15345
15583
  invoice: order.invoice,
@@ -15347,11 +15585,11 @@ function OrderConfirmation({
15347
15585
  }
15348
15586
  )
15349
15587
  ] }),
15350
- showOrderReference && order && /* @__PURE__ */ jsxs21("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15351
- /* @__PURE__ */ jsx23("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
15352
- /* @__PURE__ */ jsx23("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15588
+ showOrderReference && order && /* @__PURE__ */ jsxs23("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15589
+ /* @__PURE__ */ jsx25("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
15590
+ /* @__PURE__ */ jsx25("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15353
15591
  ] }),
15354
- status === "failed" && cartHref && /* @__PURE__ */ jsx23(
15592
+ status === "failed" && cartHref && /* @__PURE__ */ jsx25(
15355
15593
  "a",
15356
15594
  {
15357
15595
  href: cartHref,
@@ -15359,7 +15597,7 @@ function OrderConfirmation({
15359
15597
  children: t.backToCartLabel
15360
15598
  }
15361
15599
  ),
15362
- showRecheck && /* @__PURE__ */ jsx23(
15600
+ showRecheck && /* @__PURE__ */ jsx25(
15363
15601
  "button",
15364
15602
  {
15365
15603
  type: "button",
@@ -15368,16 +15606,16 @@ function OrderConfirmation({
15368
15606
  children: t.recheckLabel
15369
15607
  }
15370
15608
  ),
15371
- showSessionReference && /* @__PURE__ */ jsxs21("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15372
- /* @__PURE__ */ jsx23("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
15373
- /* @__PURE__ */ jsx23("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
15609
+ showSessionReference && /* @__PURE__ */ jsxs23("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15610
+ /* @__PURE__ */ jsx25("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
15611
+ /* @__PURE__ */ jsx25("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
15374
15612
  ] })
15375
15613
  ] });
15376
15614
  }
15377
15615
 
15378
15616
  // src/components/full-invoice-fields.tsx
15379
- import { cn as cn21 } from "@reblu/site-ui/utils";
15380
- import { jsx as jsx24, jsxs as jsxs22 } from "react/jsx-runtime";
15617
+ import { cn as cn22 } from "@reblu/site-ui/utils";
15618
+ import { jsx as jsx26, jsxs as jsxs24 } from "react/jsx-runtime";
15381
15619
  var EMPTY_FULL_INVOICE_VALUE = {
15382
15620
  wantsFullInvoice: false,
15383
15621
  billingIdType: "NIF",
@@ -15494,12 +15732,12 @@ function FullInvoiceFields({
15494
15732
  const showFields = value.wantsFullInvoice || overCap;
15495
15733
  const isSpanishNif = value.billingIdType === "NIF";
15496
15734
  const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
15497
- const error = (key2) => errors[key2] ? /* @__PURE__ */ jsx24("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
15735
+ const error = (key2) => errors[key2] ? /* @__PURE__ */ jsx26("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
15498
15736
  const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
15499
- return /* @__PURE__ */ jsxs22("section", { className: cn21("space-y-4", className), "data-slot": "full-invoice-fields", children: [
15500
- overCap ? /* @__PURE__ */ jsx24("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ jsxs22("div", { className: "space-y-1", children: [
15501
- /* @__PURE__ */ jsxs22("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
15502
- /* @__PURE__ */ jsx24(
15737
+ return /* @__PURE__ */ jsxs24("section", { className: cn22("space-y-4", className), "data-slot": "full-invoice-fields", children: [
15738
+ 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: [
15739
+ /* @__PURE__ */ jsxs24("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
15740
+ /* @__PURE__ */ jsx26(
15503
15741
  "input",
15504
15742
  {
15505
15743
  type: "checkbox",
@@ -15509,12 +15747,12 @@ function FullInvoiceFields({
15509
15747
  ),
15510
15748
  t.toggle
15511
15749
  ] }),
15512
- /* @__PURE__ */ jsx24("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
15750
+ /* @__PURE__ */ jsx26("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
15513
15751
  ] }),
15514
- showFields && /* @__PURE__ */ jsxs22("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15515
- /* @__PURE__ */ jsxs22("div", { className: "space-y-1", children: [
15516
- /* @__PURE__ */ jsx24("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
15517
- /* @__PURE__ */ jsx24(
15752
+ showFields && /* @__PURE__ */ jsxs24("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15753
+ /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15754
+ /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
15755
+ /* @__PURE__ */ jsx26(
15518
15756
  "select",
15519
15757
  {
15520
15758
  id: "full-invoice-id-type",
@@ -15523,14 +15761,14 @@ function FullInvoiceFields({
15523
15761
  value: value.billingIdType,
15524
15762
  onChange: (e) => set("billingIdType", e.target.value),
15525
15763
  ...invalid2("billingIdType"),
15526
- children: ID_TYPES.map((type) => /* @__PURE__ */ jsx24("option", { value: type, children: t.idTypeOptions[type] }, type))
15764
+ children: ID_TYPES.map((type) => /* @__PURE__ */ jsx26("option", { value: type, children: t.idTypeOptions[type] }, type))
15527
15765
  }
15528
15766
  ),
15529
15767
  error("billingIdType")
15530
15768
  ] }),
15531
- !isSpanishNif && /* @__PURE__ */ jsxs22("div", { className: "space-y-1", children: [
15532
- /* @__PURE__ */ jsx24("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
15533
- /* @__PURE__ */ jsxs22(
15769
+ !isSpanishNif && /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15770
+ /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
15771
+ /* @__PURE__ */ jsxs24(
15534
15772
  "select",
15535
15773
  {
15536
15774
  id: "full-invoice-id-country",
@@ -15540,16 +15778,16 @@ function FullInvoiceFields({
15540
15778
  onChange: (e) => set("billingIdCountry", e.target.value),
15541
15779
  ...invalid2("billingIdCountry"),
15542
15780
  children: [
15543
- /* @__PURE__ */ jsx24("option", { value: "", disabled: true, children: t.chooseCountry }),
15544
- countries.map((c) => /* @__PURE__ */ jsx24("option", { value: c.code, children: c.name }, c.code))
15781
+ /* @__PURE__ */ jsx26("option", { value: "", disabled: true, children: t.chooseCountry }),
15782
+ countries.map((c) => /* @__PURE__ */ jsx26("option", { value: c.code, children: c.name }, c.code))
15545
15783
  ]
15546
15784
  }
15547
15785
  ),
15548
15786
  error("billingIdCountry")
15549
15787
  ] }),
15550
- /* @__PURE__ */ jsxs22("div", { className: "space-y-1", children: [
15551
- /* @__PURE__ */ jsx24("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
15552
- /* @__PURE__ */ jsx24(
15788
+ /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15789
+ /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
15790
+ /* @__PURE__ */ jsx26(
15553
15791
  "input",
15554
15792
  {
15555
15793
  id: "full-invoice-nif",
@@ -15562,9 +15800,9 @@ function FullInvoiceFields({
15562
15800
  ),
15563
15801
  error("billingNif")
15564
15802
  ] }),
15565
- /* @__PURE__ */ jsxs22("div", { className: "space-y-1", children: [
15566
- /* @__PURE__ */ jsx24("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
15567
- /* @__PURE__ */ jsx24(
15803
+ /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15804
+ /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
15805
+ /* @__PURE__ */ jsx26(
15568
15806
  "input",
15569
15807
  {
15570
15808
  id: "full-invoice-name",
@@ -15577,9 +15815,9 @@ function FullInvoiceFields({
15577
15815
  ),
15578
15816
  error("billingName")
15579
15817
  ] }),
15580
- /* @__PURE__ */ jsxs22("div", { className: "space-y-1 sm:col-span-2", children: [
15581
- /* @__PURE__ */ jsx24("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
15582
- /* @__PURE__ */ jsx24(
15818
+ /* @__PURE__ */ jsxs24("div", { className: "space-y-1 sm:col-span-2", children: [
15819
+ /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
15820
+ /* @__PURE__ */ jsx26(
15583
15821
  "input",
15584
15822
  {
15585
15823
  id: "full-invoice-street",
@@ -15591,9 +15829,9 @@ function FullInvoiceFields({
15591
15829
  }
15592
15830
  )
15593
15831
  ] }),
15594
- /* @__PURE__ */ jsxs22("div", { className: "space-y-1", children: [
15595
- /* @__PURE__ */ jsx24("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
15596
- /* @__PURE__ */ jsx24(
15832
+ /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15833
+ /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
15834
+ /* @__PURE__ */ jsx26(
15597
15835
  "input",
15598
15836
  {
15599
15837
  id: "full-invoice-postal-code",
@@ -15604,9 +15842,9 @@ function FullInvoiceFields({
15604
15842
  }
15605
15843
  )
15606
15844
  ] }),
15607
- /* @__PURE__ */ jsxs22("div", { className: "space-y-1", children: [
15608
- /* @__PURE__ */ jsx24("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
15609
- /* @__PURE__ */ jsx24(
15845
+ /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15846
+ /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
15847
+ /* @__PURE__ */ jsx26(
15610
15848
  "input",
15611
15849
  {
15612
15850
  id: "full-invoice-city",
@@ -15617,9 +15855,9 @@ function FullInvoiceFields({
15617
15855
  }
15618
15856
  )
15619
15857
  ] }),
15620
- /* @__PURE__ */ jsxs22("div", { className: "space-y-1", children: [
15621
- /* @__PURE__ */ jsx24("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
15622
- /* @__PURE__ */ jsx24(
15858
+ /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
15859
+ /* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
15860
+ /* @__PURE__ */ jsx26(
15623
15861
  "select",
15624
15862
  {
15625
15863
  id: "full-invoice-country",
@@ -15627,15 +15865,64 @@ function FullInvoiceFields({
15627
15865
  required: true,
15628
15866
  value: value.country,
15629
15867
  onChange: (e) => set("country", e.target.value),
15630
- children: countries.map((c) => /* @__PURE__ */ jsx24("option", { value: c.code, children: c.name }, c.code))
15868
+ children: countries.map((c) => /* @__PURE__ */ jsx26("option", { value: c.code, children: c.name }, c.code))
15631
15869
  }
15632
15870
  )
15633
15871
  ] }),
15634
- /* @__PURE__ */ jsx24("div", { className: "sm:col-span-2", children: error("address") })
15872
+ /* @__PURE__ */ jsx26("div", { className: "sm:col-span-2", children: error("address") })
15635
15873
  ] })
15636
15874
  ] });
15637
15875
  }
15638
15876
 
15877
+ // src/components/contact-interest-field.tsx
15878
+ import { cn as cn23 } from "@reblu/site-ui/utils";
15879
+ import { jsx as jsx27, jsxs as jsxs25 } from "react/jsx-runtime";
15880
+ function ContactInterestField({
15881
+ interest,
15882
+ value,
15883
+ onChange,
15884
+ idPrefix = "contact-interest",
15885
+ disabled,
15886
+ className
15887
+ }) {
15888
+ if (!interest || interest.options.length === 0) return null;
15889
+ const chosen = new Set(value);
15890
+ const toggle = (option2, checked) => {
15891
+ const next2 = new Set(chosen);
15892
+ if (checked) next2.add(option2);
15893
+ else next2.delete(option2);
15894
+ onChange(interest.options.filter((candidate) => next2.has(candidate)));
15895
+ };
15896
+ return /* @__PURE__ */ jsxs25("fieldset", { "data-slot": "contact-interest", className: cn23("space-y-2", className), children: [
15897
+ /* @__PURE__ */ jsx27("legend", { className: "text-sm font-medium", children: interest.label }),
15898
+ /* @__PURE__ */ jsx27("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
15899
+ const id = `${idPrefix}-${index}`;
15900
+ return /* @__PURE__ */ jsxs25(
15901
+ "label",
15902
+ {
15903
+ htmlFor: id,
15904
+ "data-slot": "contact-interest-option",
15905
+ className: "flex items-center gap-2 text-sm",
15906
+ children: [
15907
+ /* @__PURE__ */ jsx27(
15908
+ "input",
15909
+ {
15910
+ id,
15911
+ type: "checkbox",
15912
+ checked: chosen.has(option2),
15913
+ disabled,
15914
+ onChange: (event) => toggle(option2, event.target.checked)
15915
+ }
15916
+ ),
15917
+ option2
15918
+ ]
15919
+ },
15920
+ option2
15921
+ );
15922
+ }) })
15923
+ ] });
15924
+ }
15925
+
15639
15926
  // src/index.ts
15640
15927
  import { DATA_REQUEST_TYPES } from "@reblu/site-contracts";
15641
15928
  export {
@@ -15646,9 +15933,14 @@ export {
15646
15933
  CartSummary,
15647
15934
  CheckoutForm,
15648
15935
  CheckoutLoginPrompt,
15936
+ ContactInterestField,
15937
+ CourseCatalogFilters,
15649
15938
  CourseDescription,
15650
15939
  DATA_REQUEST_TYPES,
15940
+ DEFAULT_COURSE_CATALOG_FILTERS_LABELS,
15941
+ DEFAULT_COURSE_PRICE_BANDS,
15651
15942
  DEFAULT_INVOICE_COUNTRIES,
15943
+ DEFAULT_LESSON_PREVIEW_LABELS,
15652
15944
  DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,
15653
15945
  DEFAULT_SHOP_ERROR_MESSAGES,
15654
15946
  DEFAULT_SHOP_PRICE_BANDS,
@@ -15658,6 +15950,7 @@ export {
15658
15950
  EMPTY_FULL_INVOICE_VALUE,
15659
15951
  FaqAccordion,
15660
15952
  FullInvoiceFields,
15953
+ LessonPreview,
15661
15954
  MarkdownRenderer,
15662
15955
  OrderConfirmation,
15663
15956
  OrderInvoiceLink,