@reblu/site-blocks 0.14.0 → 0.16.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
@@ -13107,12 +13107,28 @@ function markdownToPlainText(markdown, { maxLength } = {}) {
13107
13107
  }
13108
13108
 
13109
13109
  // src/components/markdown-renderer.tsx
13110
- import { cn } from "@reblu/site-ui/utils";
13111
13110
  import {
13112
13111
  domToReact,
13113
13112
  Element,
13114
13113
  htmlToDOM
13115
13114
  } from "html-react-parser";
13115
+
13116
+ // src/lib/slot-class-name.ts
13117
+ import { cn } from "@reblu/site-ui/utils";
13118
+ var MERGE_SAFE_TEXT = /(?:^|:)!?text-(?:left|center|right|justify|start|end|wrap|nowrap|balance|pretty|ellipsis|clip)$/;
13119
+ var TEXT_UTILITY = /(?:^|:)!?-?text-/;
13120
+ function bypassesMerge(token) {
13121
+ return TEXT_UTILITY.test(token) && !MERGE_SAFE_TEXT.test(token);
13122
+ }
13123
+ function slotClassName(structural, defaults, consumer) {
13124
+ if (consumer === void 0 || consumer.trim() === "") return cn(structural, defaults);
13125
+ const tokens = consumer.split(/\s+/).filter(Boolean);
13126
+ const verbatim = tokens.filter(bypassesMerge);
13127
+ const merged = cn(structural, tokens.filter((token) => !bypassesMerge(token)));
13128
+ return [merged, ...verbatim].filter(Boolean).join(" ");
13129
+ }
13130
+
13131
+ // src/components/markdown-renderer.tsx
13116
13132
  import { Fragment, jsx } from "react/jsx-runtime";
13117
13133
  var HTML_TO_DOM_OPTIONS = { lowerCaseAttributeNames: false };
13118
13134
  function parse3(html5, options) {
@@ -13275,15 +13291,14 @@ function buildOptions(headingOffset) {
13275
13291
  function MarkdownRenderer({ content, className, headingOffset = 0 }) {
13276
13292
  const html5 = markdownToSafeHtml(content);
13277
13293
  if (!html5) return null;
13278
- return /* @__PURE__ */ jsx("div", { className: cn("max-w-none", className), "data-slot": "markdown", children: parse3(html5, buildOptions(headingOffset)) });
13294
+ return /* @__PURE__ */ jsx("div", { className: slotClassName("max-w-none", "", className), "data-slot": "markdown", children: parse3(html5, buildOptions(headingOffset)) });
13279
13295
  }
13280
13296
  function SafeHtml({ html: html5, className, headingOffset = 0 }) {
13281
13297
  if (!html5) return null;
13282
- return /* @__PURE__ */ jsx("div", { className: cn("max-w-none", className), "data-slot": "safe-html", children: parse3(html5, buildOptions(headingOffset)) });
13298
+ return /* @__PURE__ */ jsx("div", { className: slotClassName("max-w-none", "", className), "data-slot": "safe-html", children: parse3(html5, buildOptions(headingOffset)) });
13283
13299
  }
13284
13300
 
13285
13301
  // src/components/course-description.tsx
13286
- import { cn as cn2 } from "@reblu/site-ui/utils";
13287
13302
  import { jsx as jsx2, jsxs } from "react/jsx-runtime";
13288
13303
  function isVisiblyEmpty(html5) {
13289
13304
  if (/<(img|iframe|hr)\b/i.test(html5)) return false;
@@ -13308,7 +13323,7 @@ function CourseDescription({
13308
13323
  {
13309
13324
  html: html5,
13310
13325
  headingOffset: offset,
13311
- className: cn2("text-muted-foreground", contentClassName)
13326
+ className: slotClassName("", "text-muted-foreground", contentClassName)
13312
13327
  }
13313
13328
  );
13314
13329
  if (!hasHeading) {
@@ -13320,9 +13335,9 @@ function CourseDescription({
13320
13335
  {
13321
13336
  "data-slot": "course-description",
13322
13337
  "aria-labelledby": headingId,
13323
- className: cn2("space-y-3", className),
13338
+ className: slotClassName("space-y-3", "", className),
13324
13339
  children: [
13325
- /* @__PURE__ */ jsx2(Tag, { id: headingId, className: cn2("text-xl font-semibold", headingClassName), children: heading }),
13340
+ /* @__PURE__ */ jsx2(Tag, { id: headingId, className: slotClassName("", "text-xl font-semibold", headingClassName), children: heading }),
13326
13341
  body3
13327
13342
  ]
13328
13343
  }
@@ -13330,10 +13345,10 @@ function CourseDescription({
13330
13345
  }
13331
13346
 
13332
13347
  // src/components/treatment.tsx
13333
- import { cn as cn4 } from "@reblu/site-ui/utils";
13348
+ import { cn as cn3 } from "@reblu/site-ui/utils";
13334
13349
 
13335
13350
  // src/components/_page-parts.tsx
13336
- import { cn as cn3 } from "@reblu/site-ui/utils";
13351
+ import { cn as cn2 } from "@reblu/site-ui/utils";
13337
13352
  import { buttonVariants } from "@reblu/site-ui/button-variants";
13338
13353
  import { Fragment as Fragment2, jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
13339
13354
  var KNOWN_BUTTON_VARIANTS = /* @__PURE__ */ new Set([
@@ -13373,7 +13388,7 @@ function SectionCta({ section }) {
13373
13388
  "data-slot": "button",
13374
13389
  "data-variant": variant,
13375
13390
  "data-size": "default",
13376
- className: cn3(buttonVariants({ variant, size: "default" })),
13391
+ className: cn2(buttonVariants({ variant, size: "default" })),
13377
13392
  ...section.ctaIsExternal ? { target: "_blank", rel: "noopener noreferrer" } : {},
13378
13393
  children: section.ctaLabel
13379
13394
  }
@@ -13381,7 +13396,7 @@ function SectionCta({ section }) {
13381
13396
  }
13382
13397
  function SectionImages({ section }) {
13383
13398
  if (section.images.length === 0) return null;
13384
- return /* @__PURE__ */ jsx3("div", { className: cn3("grid gap-4", section.images.length > 1 ? "sm:grid-cols-2" : "grid-cols-1"), children: section.images.map((img) => /* @__PURE__ */ jsxs2("figure", { className: "space-y-1", children: [
13399
+ 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__ */ jsxs2("figure", { className: "space-y-1", children: [
13385
13400
  /* @__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" }) }),
13386
13401
  img.caption && /* @__PURE__ */ jsx3("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
13387
13402
  ] }, `${img.url}-${img.order}`)) });
@@ -13418,17 +13433,17 @@ function PageSectionList({ sections }) {
13418
13433
  // src/components/treatment.tsx
13419
13434
  import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
13420
13435
  function Treatment({ page, className }) {
13421
- return /* @__PURE__ */ jsxs3("article", { className: cn4("space-y-12", className), "data-slot": "treatment", children: [
13436
+ return /* @__PURE__ */ jsxs3("article", { className: cn3("space-y-12", className), "data-slot": "treatment", children: [
13422
13437
  /* @__PURE__ */ jsx4(PageHero, { page }),
13423
13438
  /* @__PURE__ */ jsx4(PageSectionList, { sections: page.sections })
13424
13439
  ] });
13425
13440
  }
13426
13441
 
13427
13442
  // src/components/parent-page.tsx
13428
- import { cn as cn6 } from "@reblu/site-ui/utils";
13443
+ import { cn as cn5 } from "@reblu/site-ui/utils";
13429
13444
 
13430
13445
  // src/components/page-card-grid.tsx
13431
- import { cn as cn5 } from "@reblu/site-ui/utils";
13446
+ import { cn as cn4 } from "@reblu/site-ui/utils";
13432
13447
  import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
13433
13448
  var defaultPageHref = (page) => `/${page.slug}`;
13434
13449
  var pageKey = (page) => `${page.category?.slug ?? ""}/${page.slug}`;
@@ -13444,7 +13459,7 @@ function PageCardGridSection({
13444
13459
  }) {
13445
13460
  if (pages.length === 0) return null;
13446
13461
  const showHeading = keepEmptyHeading ? heading !== void 0 : !!heading;
13447
- return /* @__PURE__ */ jsxs4("section", { className: cn5("space-y-6", className), children: [
13462
+ return /* @__PURE__ */ jsxs4("section", { className: cn4("space-y-6", className), children: [
13448
13463
  showHeading && /* @__PURE__ */ jsx5("h2", { className: "text-2xl font-bold", children: heading }),
13449
13464
  /* @__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__ */ jsxs4(
13450
13465
  "a",
@@ -13487,7 +13502,7 @@ function ParentPage({
13487
13502
  const pages = childPages ?? treatments ?? [];
13488
13503
  const hrefFor = childPageHref ?? treatmentHref ?? defaultChildPageHref;
13489
13504
  const label = childPagesLabel ?? treatmentsLabel ?? "Treatments";
13490
- return /* @__PURE__ */ jsxs5("article", { className: cn6("space-y-12", className), "data-slot": "specialty", children: [
13505
+ return /* @__PURE__ */ jsxs5("article", { className: cn5("space-y-12", className), "data-slot": "specialty", children: [
13491
13506
  /* @__PURE__ */ jsx6(PageHero, { page }),
13492
13507
  /* @__PURE__ */ jsx6(PageSectionList, { sections: page.sections }),
13493
13508
  /* @__PURE__ */ jsx6(
@@ -13506,7 +13521,7 @@ function ParentPage({
13506
13521
  var Specialty = ParentPage;
13507
13522
 
13508
13523
  // src/components/profile-card.tsx
13509
- import { cn as cn7 } from "@reblu/site-ui/utils";
13524
+ import { cn as cn6 } from "@reblu/site-ui/utils";
13510
13525
  import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
13511
13526
  function initials(name) {
13512
13527
  return name.split(/\s+/).filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
@@ -13516,7 +13531,7 @@ function ProfileCard({ name, role, imageUrl, specialties = [], bio, href, classN
13516
13531
  return /* @__PURE__ */ jsxs6(
13517
13532
  "article",
13518
13533
  {
13519
- className: cn7(
13534
+ className: cn6(
13520
13535
  "flex flex-col items-center gap-3 rounded-lg border bg-card p-6 text-center",
13521
13536
  className
13522
13537
  ),
@@ -13548,7 +13563,7 @@ function ProfileCard({ name, role, imageUrl, specialties = [], bio, href, classN
13548
13563
  }
13549
13564
 
13550
13565
  // src/components/product-card.tsx
13551
- import { cn as cn8 } from "@reblu/site-ui/utils";
13566
+ import { cn as cn7 } from "@reblu/site-ui/utils";
13552
13567
  import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
13553
13568
  function ProductCard({ product, href, currencyCode = "EUR", locale, className }) {
13554
13569
  const image = product.images.find((i) => i.isPrimary) ?? product.images[0];
@@ -13556,7 +13571,7 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
13556
13571
  return /* @__PURE__ */ jsxs7(
13557
13572
  "article",
13558
13573
  {
13559
- className: cn8(
13574
+ className: cn7(
13560
13575
  "group flex flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
13561
13576
  className
13562
13577
  ),
@@ -13779,7 +13794,6 @@ var __iconNode8 = [
13779
13794
  var Truck = createLucideIcon("truck", __iconNode8);
13780
13795
 
13781
13796
  // src/components/product-trust-items.tsx
13782
- import { cn as cn9 } from "@reblu/site-ui/utils";
13783
13797
  import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
13784
13798
  var DEFAULT_TRUST_ICONS = Object.freeze({
13785
13799
  shipping: Truck,
@@ -13814,14 +13828,14 @@ function ProductTrustItems({
13814
13828
  return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
13815
13829
  });
13816
13830
  if (rows.length === 0) return null;
13817
- return /* @__PURE__ */ jsx9(List, { "data-slot": "product-trust-items", className: cn9("space-y-2.5", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ jsxs8("li", { className: cn9("flex items-center gap-3 text-sm text-muted-foreground", itemClassName), children: [
13831
+ return /* @__PURE__ */ jsx9(List, { "data-slot": "product-trust-items", className: slotClassName("space-y-2.5", "", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ jsxs8("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
13818
13832
  /* @__PURE__ */ jsx9(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
13819
13833
  /* @__PURE__ */ jsx9("span", { children: text3 })
13820
13834
  ] }, key2)) });
13821
13835
  }
13822
13836
 
13823
13837
  // src/components/faq-accordion.tsx
13824
- import { cn as cn10 } from "@reblu/site-ui/utils";
13838
+ import { cn as cn8 } from "@reblu/site-ui/utils";
13825
13839
 
13826
13840
  // src/components/_heading.tsx
13827
13841
  import { jsx as jsx10 } from "react/jsx-runtime";
@@ -13849,7 +13863,7 @@ function FaqAccordion({
13849
13863
  }) {
13850
13864
  const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
13851
13865
  if (visible.length === 0) return null;
13852
- return /* @__PURE__ */ jsxs9("div", { className: cn10("space-y-4", className), "data-slot": "faq-accordion", children: [
13866
+ return /* @__PURE__ */ jsxs9("div", { className: cn8("space-y-4", className), "data-slot": "faq-accordion", children: [
13853
13867
  heading && /* @__PURE__ */ jsx11(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
13854
13868
  /* @__PURE__ */ jsx11("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ jsxs9(
13855
13869
  "details",
@@ -13877,41 +13891,180 @@ function FaqAccordion({
13877
13891
  ] });
13878
13892
  }
13879
13893
 
13894
+ // src/components/trust-badges.tsx
13895
+ import { cn as cn9 } from "@reblu/site-ui/utils";
13896
+ import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
13897
+ var DEFAULT_TRUST_BADGE_HEADINGS = Object.freeze(
13898
+ {
13899
+ PARTNER: "Colaboradores",
13900
+ INSURANCE: "Aseguradoras",
13901
+ SUBVENTION: "Financiaci\xF3n",
13902
+ CERTIFICATION: "Certificaciones",
13903
+ AWARD: "Premios"
13904
+ }
13905
+ );
13906
+ var DEFAULT_TRUST_BADGE_TYPE_ORDER = Object.freeze([
13907
+ "SUBVENTION",
13908
+ "CERTIFICATION",
13909
+ "AWARD",
13910
+ "PARTNER",
13911
+ "INSURANCE"
13912
+ ]);
13913
+ var KNOWN_TYPES = new Set(DEFAULT_TRUST_BADGE_TYPE_ORDER);
13914
+ function isUsable(value) {
13915
+ if (typeof value !== "object" || value === null) return false;
13916
+ const entry = value;
13917
+ return typeof entry.type === "string" && KNOWN_TYPES.has(entry.type) && typeof entry.name === "string" && entry.name.trim() !== "";
13918
+ }
13919
+ function safeHref(url) {
13920
+ if (typeof url !== "string") return null;
13921
+ try {
13922
+ const parsed = new URL(url);
13923
+ return parsed.protocol === "https:" || parsed.protocol === "http:" ? url : null;
13924
+ } catch {
13925
+ return null;
13926
+ }
13927
+ }
13928
+ function safeLogoSrc(url) {
13929
+ if (typeof url !== "string" || url === "") return null;
13930
+ if (url.startsWith("/")) return url.startsWith("//") || url.startsWith("/\\") ? null : url;
13931
+ return safeHref(url);
13932
+ }
13933
+ function BadgeContent({ badge, logoClassName }) {
13934
+ const src = safeLogoSrc(badge.logoUrl);
13935
+ if (src) {
13936
+ return (
13937
+ // eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
13938
+ /* @__PURE__ */ jsx12(
13939
+ "img",
13940
+ {
13941
+ src,
13942
+ alt: badge.name,
13943
+ loading: "lazy",
13944
+ className: cn9("h-12 w-auto object-contain", logoClassName)
13945
+ }
13946
+ )
13947
+ );
13948
+ }
13949
+ return /* @__PURE__ */ jsx12("span", { className: "text-sm font-medium", children: badge.name });
13950
+ }
13951
+ function TrustBadges({
13952
+ badges,
13953
+ headings,
13954
+ types = DEFAULT_TRUST_BADGE_TYPE_ORDER,
13955
+ heading,
13956
+ headingId = "trust-badges-heading",
13957
+ headingLevel = 2,
13958
+ newWindowLabel = "(se abre en una ventana nueva)",
13959
+ className,
13960
+ groupClassName,
13961
+ headingClassName,
13962
+ sectionHeadingClassName,
13963
+ listClassName,
13964
+ logoClassName
13965
+ }) {
13966
+ if (!Array.isArray(badges) || badges.length === 0) return null;
13967
+ const usable = badges.filter(isUsable);
13968
+ const groups = types.flatMap((type) => {
13969
+ const items = usable.filter((b2) => b2.type === type).map((b2, index) => ({ b: b2, index })).sort((x2, y2) => (x2.b.sortOrder ?? 0) - (y2.b.sortOrder ?? 0) || x2.index - y2.index).map(({ b: b2 }) => b2);
13970
+ if (items.length === 0) return [];
13971
+ const groupHeading = headings && Object.prototype.hasOwnProperty.call(headings, type) ? headings[type] : DEFAULT_TRUST_BADGE_HEADINGS[type];
13972
+ return [{ type, groupHeading, items }];
13973
+ });
13974
+ if (groups.length === 0) return null;
13975
+ const hasHeading = heading !== void 0 && heading !== null && heading !== "";
13976
+ const groupHeadingLevel = hasHeading ? nextHeadingLevel(headingLevel) : headingLevel;
13977
+ const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ jsxs10(
13978
+ "div",
13979
+ {
13980
+ "data-slot": "trust-badge-group",
13981
+ "data-type": type,
13982
+ className: cn9("space-y-3", groupClassName),
13983
+ children: [
13984
+ groupHeading ? /* @__PURE__ */ jsx12(
13985
+ Heading,
13986
+ {
13987
+ level: groupHeadingLevel,
13988
+ className: slotClassName(
13989
+ "",
13990
+ "text-sm font-semibold uppercase tracking-widest",
13991
+ headingClassName
13992
+ ),
13993
+ children: groupHeading
13994
+ }
13995
+ ) : null,
13996
+ /* @__PURE__ */ jsx12("ul", { className: cn9("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
13997
+ const href = safeHref(badge.url);
13998
+ return /* @__PURE__ */ jsx12("li", { children: href ? /* @__PURE__ */ jsxs10("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
13999
+ /* @__PURE__ */ jsx12(BadgeContent, { badge, logoClassName }),
14000
+ " ",
14001
+ /* @__PURE__ */ jsx12("span", { className: "sr-only", children: newWindowLabel })
14002
+ ] }) : /* @__PURE__ */ jsx12(BadgeContent, { badge, logoClassName }) }, badge.id);
14003
+ }) })
14004
+ ]
14005
+ },
14006
+ type
14007
+ ));
14008
+ if (!hasHeading) {
14009
+ return /* @__PURE__ */ jsx12("div", { "data-slot": "trust-badges", className: cn9("space-y-6", className), children: content });
14010
+ }
14011
+ const Tag = `h${headingLevel}`;
14012
+ return /* @__PURE__ */ jsxs10(
14013
+ "section",
14014
+ {
14015
+ "data-slot": "trust-badges",
14016
+ "aria-labelledby": headingId,
14017
+ className: cn9("space-y-6", className),
14018
+ children: [
14019
+ /* @__PURE__ */ jsx12(
14020
+ Tag,
14021
+ {
14022
+ id: headingId,
14023
+ className: slotClassName("", "text-xl font-semibold", sectionHeadingClassName),
14024
+ children: heading
14025
+ }
14026
+ ),
14027
+ content
14028
+ ]
14029
+ }
14030
+ );
14031
+ }
14032
+
13880
14033
  // src/components/page-blocks.tsx
13881
- import { cn as cn11 } from "@reblu/site-ui/utils";
14034
+ import { cn as cn10 } from "@reblu/site-ui/utils";
13882
14035
  import { buttonVariants as buttonVariants2 } from "@reblu/site-ui/button-variants";
13883
- import { jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
14036
+ import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
13884
14037
  var ALIASES = {
13885
14038
  doctor_embed: "profile_embed",
13886
14039
  specialty_embed: "page_embed"
13887
14040
  };
13888
14041
  function HeroBlock({ block, headingLevel }) {
13889
14042
  const { title, subtitle, imageUrl } = block.data;
13890
- return /* @__PURE__ */ jsxs10("div", { className: "space-y-4", children: [
13891
- /* @__PURE__ */ jsx12(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
13892
- subtitle && /* @__PURE__ */ jsx12("p", { className: "text-lg opacity-80", children: subtitle }),
13893
- imageUrl && /* @__PURE__ */ jsx12("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx12("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
14043
+ return /* @__PURE__ */ jsxs11("div", { className: "space-y-4", children: [
14044
+ /* @__PURE__ */ jsx13(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
14045
+ subtitle && /* @__PURE__ */ jsx13("p", { className: "text-lg opacity-80", children: subtitle }),
14046
+ imageUrl && /* @__PURE__ */ jsx13("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx13("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
13894
14047
  ] });
13895
14048
  }
13896
14049
  function RichtextBlock({ block, headingLevel }) {
13897
- return /* @__PURE__ */ jsx12(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
14050
+ return /* @__PURE__ */ jsx13(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
13898
14051
  }
13899
14052
  function FaqBlock({ block }) {
13900
- return /* @__PURE__ */ jsx12(FaqAccordion, { items: block.data.items });
14053
+ return /* @__PURE__ */ jsx13(FaqAccordion, { items: block.data.items });
13901
14054
  }
13902
14055
  function StatsBlock({ block }) {
13903
- return /* @__PURE__ */ jsx12("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ jsxs10("div", { className: "flex flex-col-reverse gap-1", children: [
13904
- /* @__PURE__ */ jsx12("dt", { className: "text-sm opacity-80", children: item.label }),
13905
- /* @__PURE__ */ jsx12("dd", { className: "text-3xl font-bold", children: item.value })
14056
+ return /* @__PURE__ */ jsx13("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ jsxs11("div", { className: "flex flex-col-reverse gap-1", children: [
14057
+ /* @__PURE__ */ jsx13("dt", { className: "text-sm opacity-80", children: item.label }),
14058
+ /* @__PURE__ */ jsx13("dd", { className: "text-3xl font-bold", children: item.value })
13906
14059
  ] }, i)) });
13907
14060
  }
13908
14061
  function TestimonialBlock({ block }) {
13909
14062
  const { quote, author, role, avatarUrl } = block.data;
13910
- return /* @__PURE__ */ jsxs10("figure", { className: "space-y-4", children: [
13911
- /* @__PURE__ */ jsx12("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ jsx12("p", { children: quote }) }),
13912
- /* @__PURE__ */ jsxs10("figcaption", { className: "flex items-center gap-3", children: [
14063
+ return /* @__PURE__ */ jsxs11("figure", { className: "space-y-4", children: [
14064
+ /* @__PURE__ */ jsx13("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ jsx13("p", { children: quote }) }),
14065
+ /* @__PURE__ */ jsxs11("figcaption", { className: "flex items-center gap-3", children: [
13913
14066
  avatarUrl && // eslint-disable-next-line @next/next/no-img-element
13914
- /* @__PURE__ */ jsx12(
14067
+ /* @__PURE__ */ jsx13(
13915
14068
  "img",
13916
14069
  {
13917
14070
  src: avatarUrl,
@@ -13920,9 +14073,9 @@ function TestimonialBlock({ block }) {
13920
14073
  className: "h-10 w-10 rounded-full object-cover"
13921
14074
  }
13922
14075
  ),
13923
- /* @__PURE__ */ jsxs10("span", { children: [
13924
- /* @__PURE__ */ jsx12("span", { className: "font-semibold", children: author }),
13925
- role && /* @__PURE__ */ jsx12("span", { className: "block text-sm opacity-80", children: role })
14076
+ /* @__PURE__ */ jsxs11("span", { children: [
14077
+ /* @__PURE__ */ jsx13("span", { className: "font-semibold", children: author }),
14078
+ role && /* @__PURE__ */ jsx13("span", { className: "block text-sm opacity-80", children: role })
13926
14079
  ] })
13927
14080
  ] })
13928
14081
  ] });
@@ -13931,19 +14084,19 @@ function CtaSlotBlock(_props) {
13931
14084
  return null;
13932
14085
  }
13933
14086
  function FeatureListBlock({ block }) {
13934
- return /* @__PURE__ */ jsx12("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ jsx12("li", { children: item.text }, i)) });
14087
+ return /* @__PURE__ */ jsx13("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ jsx13("li", { children: item.text }, i)) });
13935
14088
  }
13936
14089
  function GalleryBlock({ block }) {
13937
14090
  const { images } = block.data;
13938
- return /* @__PURE__ */ jsx12(
14091
+ return /* @__PURE__ */ jsx13(
13939
14092
  "div",
13940
14093
  {
13941
- className: cn11(
14094
+ className: cn10(
13942
14095
  "grid gap-4",
13943
14096
  images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
13944
14097
  ),
13945
- children: images.map((img, i) => /* @__PURE__ */ jsxs10("figure", { className: "space-y-1", children: [
13946
- /* @__PURE__ */ jsx12("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx12(
14098
+ children: images.map((img, i) => /* @__PURE__ */ jsxs11("figure", { className: "space-y-1", children: [
14099
+ /* @__PURE__ */ jsx13("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx13(
13947
14100
  "img",
13948
14101
  {
13949
14102
  src: img.url,
@@ -13952,7 +14105,7 @@ function GalleryBlock({ block }) {
13952
14105
  className: "h-full w-full object-cover"
13953
14106
  }
13954
14107
  ) }),
13955
- img.caption && /* @__PURE__ */ jsx12("figcaption", { className: "text-sm opacity-80", children: img.caption })
14108
+ img.caption && /* @__PURE__ */ jsx13("figcaption", { className: "text-sm opacity-80", children: img.caption })
13956
14109
  ] }, `${img.url}-${i}`))
13957
14110
  }
13958
14111
  );
@@ -13962,13 +14115,13 @@ function EmbedCard({
13962
14115
  headingLevel,
13963
14116
  embedHref
13964
14117
  }) {
13965
- return /* @__PURE__ */ jsxs10(
14118
+ return /* @__PURE__ */ jsxs11(
13966
14119
  "a",
13967
14120
  {
13968
14121
  href: embedHref(resolved),
13969
14122
  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",
13970
14123
  children: [
13971
- resolved.coverImageUrl && /* @__PURE__ */ jsx12("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ jsx12(
14124
+ resolved.coverImageUrl && /* @__PURE__ */ jsx13("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ jsx13(
13972
14125
  "img",
13973
14126
  {
13974
14127
  src: resolved.coverImageUrl,
@@ -13977,24 +14130,24 @@ function EmbedCard({
13977
14130
  className: "h-full w-full object-cover"
13978
14131
  }
13979
14132
  ) }),
13980
- /* @__PURE__ */ jsxs10("div", { className: "space-y-1 p-4", children: [
13981
- /* @__PURE__ */ jsx12(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
13982
- resolved.role && /* @__PURE__ */ jsx12("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
13983
- resolved.excerpt && /* @__PURE__ */ jsx12("p", { className: "text-muted-foreground", children: resolved.excerpt })
14133
+ /* @__PURE__ */ jsxs11("div", { className: "space-y-1 p-4", children: [
14134
+ /* @__PURE__ */ jsx13(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
14135
+ resolved.role && /* @__PURE__ */ jsx13("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
14136
+ resolved.excerpt && /* @__PURE__ */ jsx13("p", { className: "text-muted-foreground", children: resolved.excerpt })
13984
14137
  ] })
13985
14138
  ]
13986
14139
  }
13987
14140
  );
13988
14141
  }
13989
14142
  function PageEmbedBlock({ block, headingLevel, embedHref }) {
13990
- return /* @__PURE__ */ jsx12(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14143
+ return /* @__PURE__ */ jsx13(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
13991
14144
  }
13992
14145
  function ProfileEmbedBlock({
13993
14146
  block,
13994
14147
  headingLevel,
13995
14148
  embedHref
13996
14149
  }) {
13997
- return /* @__PURE__ */ jsx12(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14150
+ return /* @__PURE__ */ jsx13(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
13998
14151
  }
13999
14152
  var DEFAULT_RENDERERS = {
14000
14153
  hero: HeroBlock,
@@ -14051,14 +14204,14 @@ function toIdFragment(value) {
14051
14204
  function SectionCta2({ cta }) {
14052
14205
  if (!hasUsableCta(cta)) return null;
14053
14206
  const variant = toButtonVariant(cta.variant);
14054
- return /* @__PURE__ */ jsx12("div", { className: "pt-2", children: /* @__PURE__ */ jsx12(
14207
+ return /* @__PURE__ */ jsx13("div", { className: "pt-2", children: /* @__PURE__ */ jsx13(
14055
14208
  "a",
14056
14209
  {
14057
14210
  href: cta.url,
14058
14211
  "data-slot": "button",
14059
14212
  "data-variant": variant,
14060
14213
  "data-size": "default",
14061
- className: cn11(buttonVariants2({ variant, size: "default" })),
14214
+ className: cn10(buttonVariants2({ variant, size: "default" })),
14062
14215
  ...cta.isExternal ? { target: "_blank", rel: "noopener noreferrer" } : {},
14063
14216
  children: cta.label
14064
14217
  }
@@ -14084,17 +14237,17 @@ function PageBlocks({
14084
14237
  const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
14085
14238
  const background = block.backgroundColor;
14086
14239
  return [
14087
- /* @__PURE__ */ jsxs10(
14240
+ /* @__PURE__ */ jsxs11(
14088
14241
  "section",
14089
14242
  {
14090
14243
  "data-slot": "page-block",
14091
14244
  "data-block-type": type,
14092
14245
  "aria-labelledby": headingId,
14093
14246
  style: surfaceStyle(background),
14094
- className: cn11("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
14247
+ className: cn10("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
14095
14248
  children: [
14096
- block.heading && /* @__PURE__ */ jsx12(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx12("span", { id: headingId, children: block.heading }) }),
14097
- /* @__PURE__ */ jsx12(
14249
+ block.heading && /* @__PURE__ */ jsx13(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx13("span", { id: headingId, children: block.heading }) }),
14250
+ /* @__PURE__ */ jsx13(
14098
14251
  Renderer,
14099
14252
  {
14100
14253
  block,
@@ -14102,7 +14255,7 @@ function PageBlocks({
14102
14255
  embedHref
14103
14256
  }
14104
14257
  ),
14105
- /* @__PURE__ */ jsx12(SectionCta2, { cta: block.cta })
14258
+ /* @__PURE__ */ jsx13(SectionCta2, { cta: block.cta })
14106
14259
  ]
14107
14260
  },
14108
14261
  block.id
@@ -14110,12 +14263,12 @@ function PageBlocks({
14110
14263
  ];
14111
14264
  });
14112
14265
  if (sections.length === 0) return null;
14113
- return /* @__PURE__ */ jsx12("div", { className: cn11("space-y-12", className), "data-slot": "page-blocks", children: sections });
14266
+ return /* @__PURE__ */ jsx13("div", { className: cn10("space-y-12", className), "data-slot": "page-blocks", children: sections });
14114
14267
  }
14115
14268
 
14116
14269
  // src/components/shop-filters.tsx
14117
- import { cn as cn12 } from "@reblu/site-ui/utils";
14118
- import { jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
14270
+ import { cn as cn11 } from "@reblu/site-ui/utils";
14271
+ import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
14119
14272
  var DEFAULT_SHOP_PRICE_BANDS = [
14120
14273
  { max: 2500 },
14121
14274
  { min: 2500, max: 5e3 },
@@ -14159,7 +14312,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
14159
14312
  return "";
14160
14313
  }
14161
14314
  function OptionLink({ href, active, label, onActivate }) {
14162
- return /* @__PURE__ */ jsx13(
14315
+ return /* @__PURE__ */ jsx14(
14163
14316
  "a",
14164
14317
  {
14165
14318
  href,
@@ -14168,7 +14321,7 @@ function OptionLink({ href, active, label, onActivate }) {
14168
14321
  event.preventDefault();
14169
14322
  onActivate();
14170
14323
  } : void 0,
14171
- className: cn12(
14324
+ className: cn11(
14172
14325
  "inline-flex items-center rounded-full border px-3 py-1 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
14173
14326
  active ? "border-transparent bg-primary text-primary-foreground" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground"
14174
14327
  ),
@@ -14177,9 +14330,9 @@ function OptionLink({ href, active, label, onActivate }) {
14177
14330
  );
14178
14331
  }
14179
14332
  function FilterFieldset({ legend, children: children2 }) {
14180
- return /* @__PURE__ */ jsxs11("fieldset", { className: "space-y-2", children: [
14181
- /* @__PURE__ */ jsx13("legend", { className: "text-sm font-medium text-foreground", children: legend }),
14182
- /* @__PURE__ */ jsx13("div", { className: "flex flex-wrap gap-2", children: children2 })
14333
+ return /* @__PURE__ */ jsxs12("fieldset", { className: "space-y-2", children: [
14334
+ /* @__PURE__ */ jsx14("legend", { className: "text-sm font-medium text-foreground", children: legend }),
14335
+ /* @__PURE__ */ jsx14("div", { className: "flex flex-wrap gap-2", children: children2 })
14183
14336
  ] });
14184
14337
  }
14185
14338
  function ShopFilters({
@@ -14202,11 +14355,11 @@ function ShopFilters({
14202
14355
  if (!shouldRenderShopFilters(facets, active)) {
14203
14356
  return null;
14204
14357
  }
14205
- return /* @__PURE__ */ jsxs11("div", { className: cn12("space-y-6", className), "data-slot": "shop-filters", children: [
14358
+ return /* @__PURE__ */ jsxs12("div", { className: cn11("space-y-6", className), "data-slot": "shop-filters", children: [
14206
14359
  visibleTaxonomies.map((axis) => {
14207
14360
  const activeSlug = active.taxonomy?.[axis.key];
14208
- return /* @__PURE__ */ jsxs11(FilterFieldset, { legend: axis.label, children: [
14209
- /* @__PURE__ */ jsx13(
14361
+ return /* @__PURE__ */ jsxs12(FilterFieldset, { legend: axis.label, children: [
14362
+ /* @__PURE__ */ jsx14(
14210
14363
  OptionLink,
14211
14364
  {
14212
14365
  href: hrefs.taxonomy(axis.key, void 0),
@@ -14221,7 +14374,7 @@ function ShopFilters({
14221
14374
  ),
14222
14375
  axis.terms.map((term) => {
14223
14376
  const isActive = activeSlug === term.slug;
14224
- return /* @__PURE__ */ jsx13(
14377
+ return /* @__PURE__ */ jsx14(
14225
14378
  OptionLink,
14226
14379
  {
14227
14380
  href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
@@ -14241,9 +14394,9 @@ function ShopFilters({
14241
14394
  }),
14242
14395
  visibleAttributes.map((attr) => {
14243
14396
  const activeValues = toValueArray(active.attr?.[attr.key]);
14244
- return /* @__PURE__ */ jsx13(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
14397
+ return /* @__PURE__ */ jsx14(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
14245
14398
  const isActive = activeValues.includes(opt.value);
14246
- return /* @__PURE__ */ jsx13(
14399
+ return /* @__PURE__ */ jsx14(
14247
14400
  OptionLink,
14248
14401
  {
14249
14402
  href: hrefs.attr(attr.key, opt.value),
@@ -14261,11 +14414,11 @@ function ShopFilters({
14261
14414
  );
14262
14415
  }) }, attr.key);
14263
14416
  }),
14264
- showPriceGroup && /* @__PURE__ */ jsx13(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
14417
+ showPriceGroup && /* @__PURE__ */ jsx14(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
14265
14418
  const isActive = active.priceMin === band.min && active.priceMax === band.max;
14266
14419
  const nextMin = isActive ? void 0 : band.min;
14267
14420
  const nextMax = isActive ? void 0 : band.max;
14268
- return /* @__PURE__ */ jsx13(
14421
+ return /* @__PURE__ */ jsx14(
14269
14422
  OptionLink,
14270
14423
  {
14271
14424
  href: hrefs.price(nextMin, nextMax),
@@ -14276,7 +14429,7 @@ function ShopFilters({
14276
14429
  i
14277
14430
  );
14278
14431
  }) }),
14279
- hasOnSale && /* @__PURE__ */ jsx13(
14432
+ hasOnSale && /* @__PURE__ */ jsx14(
14280
14433
  OptionLink,
14281
14434
  {
14282
14435
  href: hrefs.onSale(!active.onSale),
@@ -14285,7 +14438,7 @@ function ShopFilters({
14285
14438
  onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
14286
14439
  }
14287
14440
  ),
14288
- /* @__PURE__ */ jsx13(
14441
+ /* @__PURE__ */ jsx14(
14289
14442
  "a",
14290
14443
  {
14291
14444
  href: hrefs.clearAll(),
@@ -14301,8 +14454,8 @@ function ShopFilters({
14301
14454
  }
14302
14455
 
14303
14456
  // src/components/cart-line-list.tsx
14304
- import { cn as cn13 } from "@reblu/site-ui/utils";
14305
- import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
14457
+ import { cn as cn12 } from "@reblu/site-ui/utils";
14458
+ import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
14306
14459
  var DEFAULT_LABELS2 = {
14307
14460
  quantityLabel: "Cantidad",
14308
14461
  decrease: "Reducir cantidad",
@@ -14328,9 +14481,9 @@ function CartLineList({
14328
14481
  }) {
14329
14482
  const t = { ...DEFAULT_LABELS2, ...labels };
14330
14483
  const noticeContent = notice === true ? t.cancelledNotice : notice;
14331
- return /* @__PURE__ */ jsxs12("div", { className: cn13("space-y-4", className), "data-slot": "cart-line-list", children: [
14332
- /* @__PURE__ */ jsx14("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
14333
- noticeContent != null && noticeContent !== false && /* @__PURE__ */ jsx14(
14484
+ return /* @__PURE__ */ jsxs13("div", { className: cn12("space-y-4", className), "data-slot": "cart-line-list", children: [
14485
+ /* @__PURE__ */ jsx15("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
14486
+ noticeContent != null && noticeContent !== false && /* @__PURE__ */ jsx15(
14334
14487
  "div",
14335
14488
  {
14336
14489
  role: "status",
@@ -14339,33 +14492,33 @@ function CartLineList({
14339
14492
  children: noticeContent
14340
14493
  }
14341
14494
  ),
14342
- /* @__PURE__ */ jsx14("ul", { className: "space-y-4", children: items.map((item) => {
14495
+ /* @__PURE__ */ jsx15("ul", { className: "space-y-4", children: items.map((item) => {
14343
14496
  const maxQty = item.maxStock ?? Infinity;
14344
14497
  const atMax = item.quantity >= maxQty;
14345
14498
  const atMin = item.quantity <= 1;
14346
14499
  const message = lineMessage?.(item);
14347
- return /* @__PURE__ */ jsxs12(
14500
+ return /* @__PURE__ */ jsxs13(
14348
14501
  "li",
14349
14502
  {
14350
14503
  className: "flex gap-4 rounded-xl border border-border bg-card p-4",
14351
14504
  children: [
14352
- /* @__PURE__ */ jsx14("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ jsx14("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
14353
- /* @__PURE__ */ jsxs12("div", { className: "min-w-0 flex-1", children: [
14354
- /* @__PURE__ */ jsx14("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
14355
- item.variantName && /* @__PURE__ */ jsx14("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
14356
- /* @__PURE__ */ jsxs12("p", { className: "mt-1 text-sm text-muted-foreground", children: [
14505
+ /* @__PURE__ */ jsx15("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ jsx15("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
14506
+ /* @__PURE__ */ jsxs13("div", { className: "min-w-0 flex-1", children: [
14507
+ /* @__PURE__ */ jsx15("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
14508
+ item.variantName && /* @__PURE__ */ jsx15("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
14509
+ /* @__PURE__ */ jsxs13("p", { className: "mt-1 text-sm text-muted-foreground", children: [
14357
14510
  formatPrice(item.unitPrice, currencyCode, locale),
14358
14511
  " ",
14359
14512
  t.unitPriceSuffix
14360
14513
  ] }),
14361
- /* @__PURE__ */ jsxs12(
14514
+ /* @__PURE__ */ jsxs13(
14362
14515
  "div",
14363
14516
  {
14364
14517
  role: "group",
14365
14518
  "aria-label": t.quantityLabel,
14366
14519
  className: "mt-3 flex items-center gap-3",
14367
14520
  children: [
14368
- /* @__PURE__ */ jsx14(
14521
+ /* @__PURE__ */ jsx15(
14369
14522
  "button",
14370
14523
  {
14371
14524
  type: "button",
@@ -14376,8 +14529,8 @@ function CartLineList({
14376
14529
  children: "\u2212"
14377
14530
  }
14378
14531
  ),
14379
- /* @__PURE__ */ jsx14("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
14380
- /* @__PURE__ */ jsx14(
14532
+ /* @__PURE__ */ jsx15("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
14533
+ /* @__PURE__ */ jsx15(
14381
14534
  "button",
14382
14535
  {
14383
14536
  type: "button",
@@ -14388,7 +14541,7 @@ function CartLineList({
14388
14541
  children: "+"
14389
14542
  }
14390
14543
  ),
14391
- onRemove && /* @__PURE__ */ jsx14(
14544
+ onRemove && /* @__PURE__ */ jsx15(
14392
14545
  "button",
14393
14546
  {
14394
14547
  type: "button",
@@ -14401,7 +14554,7 @@ function CartLineList({
14401
14554
  ]
14402
14555
  }
14403
14556
  ),
14404
- message != null && message !== false && /* @__PURE__ */ jsx14(
14557
+ message != null && message !== false && /* @__PURE__ */ jsx15(
14405
14558
  "p",
14406
14559
  {
14407
14560
  className: "mt-2 text-sm text-destructive",
@@ -14410,7 +14563,7 @@ function CartLineList({
14410
14563
  }
14411
14564
  )
14412
14565
  ] }),
14413
- /* @__PURE__ */ jsx14("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ jsx14("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
14566
+ /* @__PURE__ */ jsx15("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ jsx15("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
14414
14567
  ]
14415
14568
  },
14416
14569
  lineKey(item.productId, item.variantId)
@@ -14420,8 +14573,8 @@ function CartLineList({
14420
14573
  }
14421
14574
 
14422
14575
  // src/components/cart-summary.tsx
14423
- import { cn as cn14 } from "@reblu/site-ui/utils";
14424
- import { jsx as jsx15, jsxs as jsxs13 } from "react/jsx-runtime";
14576
+ import { cn as cn13 } from "@reblu/site-ui/utils";
14577
+ import { jsx as jsx16, jsxs as jsxs14 } from "react/jsx-runtime";
14425
14578
  var DEFAULT_LABELS3 = {
14426
14579
  subtotal: "Subtotal",
14427
14580
  discountPrefix: "Descuento",
@@ -14448,40 +14601,40 @@ function CartSummary({
14448
14601
  const hasDiscount = Boolean(discount && discount > 0);
14449
14602
  const noticeContent = notice === true ? t.cancelledNotice : notice;
14450
14603
  const hasNotice = noticeContent != null && noticeContent !== false;
14451
- const breakdown = /* @__PURE__ */ jsxs13(
14604
+ const breakdown = /* @__PURE__ */ jsxs14(
14452
14605
  "dl",
14453
14606
  {
14454
- className: cn14("space-y-2 text-sm", !hasNotice && className),
14607
+ className: cn13("space-y-2 text-sm", !hasNotice && className),
14455
14608
  "data-slot": "cart-summary",
14456
14609
  children: [
14457
- /* @__PURE__ */ jsxs13("div", { className: "flex justify-between text-muted-foreground", children: [
14458
- /* @__PURE__ */ jsx15("dt", { children: t.subtotal }),
14459
- /* @__PURE__ */ jsx15("dd", { children: formatPrice(subtotal, currencyCode, locale) })
14610
+ /* @__PURE__ */ jsxs14("div", { className: "flex justify-between text-muted-foreground", children: [
14611
+ /* @__PURE__ */ jsx16("dt", { children: t.subtotal }),
14612
+ /* @__PURE__ */ jsx16("dd", { children: formatPrice(subtotal, currencyCode, locale) })
14460
14613
  ] }),
14461
- hasDiscount && /* @__PURE__ */ jsxs13("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
14462
- /* @__PURE__ */ jsxs13("dt", { children: [
14614
+ hasDiscount && /* @__PURE__ */ jsxs14("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
14615
+ /* @__PURE__ */ jsxs14("dt", { children: [
14463
14616
  t.discountPrefix,
14464
14617
  discountCode ? ` (${discountCode})` : ""
14465
14618
  ] }),
14466
- /* @__PURE__ */ jsxs13("dd", { children: [
14619
+ /* @__PURE__ */ jsxs14("dd", { children: [
14467
14620
  "-",
14468
14621
  formatPrice(discount, currencyCode, locale)
14469
14622
  ] })
14470
14623
  ] }),
14471
- shippingEnabled && /* @__PURE__ */ jsxs13("div", { className: "flex justify-between text-muted-foreground", children: [
14472
- /* @__PURE__ */ jsx15("dt", { children: t.shipping }),
14473
- /* @__PURE__ */ jsx15("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
14624
+ shippingEnabled && /* @__PURE__ */ jsxs14("div", { className: "flex justify-between text-muted-foreground", children: [
14625
+ /* @__PURE__ */ jsx16("dt", { children: t.shipping }),
14626
+ /* @__PURE__ */ jsx16("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
14474
14627
  ] }),
14475
- /* @__PURE__ */ jsxs13("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
14476
- /* @__PURE__ */ jsx15("dt", { children: t.total }),
14477
- /* @__PURE__ */ jsx15("dd", { children: formatPrice(total, currencyCode, locale) })
14628
+ /* @__PURE__ */ jsxs14("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
14629
+ /* @__PURE__ */ jsx16("dt", { children: t.total }),
14630
+ /* @__PURE__ */ jsx16("dd", { children: formatPrice(total, currencyCode, locale) })
14478
14631
  ] })
14479
14632
  ]
14480
14633
  }
14481
14634
  );
14482
14635
  if (!hasNotice) return breakdown;
14483
- return /* @__PURE__ */ jsxs13("div", { className: cn14("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
14484
- /* @__PURE__ */ jsx15(
14636
+ return /* @__PURE__ */ jsxs14("div", { className: cn13("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
14637
+ /* @__PURE__ */ jsx16(
14485
14638
  "div",
14486
14639
  {
14487
14640
  role: "status",
@@ -14495,8 +14648,8 @@ function CartSummary({
14495
14648
  }
14496
14649
 
14497
14650
  // src/components/cart-adjustments-notice.tsx
14498
- import { cn as cn15 } from "@reblu/site-ui/utils";
14499
- import { jsx as jsx16 } from "react/jsx-runtime";
14651
+ import { cn as cn14 } from "@reblu/site-ui/utils";
14652
+ import { jsx as jsx17 } from "react/jsx-runtime";
14500
14653
  var DEFAULT_LABELS4 = {
14501
14654
  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.`,
14502
14655
  quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
@@ -14530,20 +14683,20 @@ function CartAdjustmentsNotice({
14530
14683
  );
14531
14684
  }
14532
14685
  if (messages.length === 0) return null;
14533
- return /* @__PURE__ */ jsx16(
14686
+ return /* @__PURE__ */ jsx17(
14534
14687
  "div",
14535
14688
  {
14536
14689
  role: "status",
14537
- className: cn15("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
14690
+ className: cn14("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
14538
14691
  "data-slot": "cart-adjustments-notice",
14539
- children: messages.length === 1 ? /* @__PURE__ */ jsx16("p", { children: messages[0] }) : /* @__PURE__ */ jsx16("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ jsx16("li", { children: message }, index)) })
14692
+ children: messages.length === 1 ? /* @__PURE__ */ jsx17("p", { children: messages[0] }) : /* @__PURE__ */ jsx17("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ jsx17("li", { children: message }, index)) })
14540
14693
  }
14541
14694
  );
14542
14695
  }
14543
14696
 
14544
14697
  // src/components/added-to-cart-toast.tsx
14545
- import { cn as cn16 } from "@reblu/site-ui/utils";
14546
- import { jsx as jsx17, jsxs as jsxs14 } from "react/jsx-runtime";
14698
+ import { cn as cn15 } from "@reblu/site-ui/utils";
14699
+ import { jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
14547
14700
  var DEFAULT_LABELS5 = {
14548
14701
  success: "A\xF1adido al carrito",
14549
14702
  error: "No se pudo a\xF1adir al carrito",
@@ -14563,12 +14716,12 @@ function AddedToCartToast({
14563
14716
  const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
14564
14717
  const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
14565
14718
  const variant = status === "success" ? "success" : "error";
14566
- return /* @__PURE__ */ jsxs14(
14719
+ return /* @__PURE__ */ jsxs15(
14567
14720
  "div",
14568
14721
  {
14569
14722
  "data-slot": "added-to-cart-toast",
14570
14723
  "data-variant": variant,
14571
- className: cn16(
14724
+ className: cn15(
14572
14725
  "flex items-center gap-3 rounded-xl border border-border bg-card p-3 text-sm shadow-lg",
14573
14726
  variant === "success" && "border-green-600/30 dark:border-green-400/30",
14574
14727
  variant === "error" && "border-destructive/30",
@@ -14576,20 +14729,20 @@ function AddedToCartToast({
14576
14729
  ),
14577
14730
  children: [
14578
14731
  hasThumbnail && // eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
14579
- /* @__PURE__ */ jsx17("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
14580
- /* @__PURE__ */ jsxs14("div", { className: "min-w-0 flex-1", children: [
14581
- /* @__PURE__ */ jsx17("p", { className: "truncate font-semibold text-foreground", children: productName }),
14582
- /* @__PURE__ */ jsx17("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
14732
+ /* @__PURE__ */ jsx18("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
14733
+ /* @__PURE__ */ jsxs15("div", { className: "min-w-0 flex-1", children: [
14734
+ /* @__PURE__ */ jsx18("p", { className: "truncate font-semibold text-foreground", children: productName }),
14735
+ /* @__PURE__ */ jsx18("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
14583
14736
  ] }),
14584
- /* @__PURE__ */ jsx17("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsx17("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
14737
+ /* @__PURE__ */ jsx18("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsx18("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
14585
14738
  ]
14586
14739
  }
14587
14740
  );
14588
14741
  }
14589
14742
 
14590
14743
  // src/components/checkout-login-prompt.tsx
14591
- import { cn as cn17 } from "@reblu/site-ui/utils";
14592
- import { Fragment as Fragment3, jsx as jsx18, jsxs as jsxs15 } from "react/jsx-runtime";
14744
+ import { cn as cn16 } from "@reblu/site-ui/utils";
14745
+ import { Fragment as Fragment3, jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
14593
14746
  var DEFAULT_LABELS6 = {
14594
14747
  title: "Identificaci\xF3n",
14595
14748
  description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
@@ -14616,26 +14769,26 @@ function CheckoutLoginPrompt({
14616
14769
  if (!open) return null;
14617
14770
  const t = { ...DEFAULT_LABELS6, ...labels };
14618
14771
  const isValidEmail = EMAIL_PATTERN.test(email.trim());
14619
- return /* @__PURE__ */ jsxs15(Fragment3, { children: [
14620
- /* @__PURE__ */ jsx18("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
14621
- /* @__PURE__ */ jsxs15(
14772
+ return /* @__PURE__ */ jsxs16(Fragment3, { children: [
14773
+ /* @__PURE__ */ jsx19("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
14774
+ /* @__PURE__ */ jsxs16(
14622
14775
  "div",
14623
14776
  {
14624
14777
  role: "dialog",
14625
14778
  "aria-modal": "true",
14626
14779
  "aria-labelledby": "checkout-login-prompt-title",
14627
14780
  "data-slot": "checkout-login-prompt",
14628
- className: cn17(
14781
+ className: cn16(
14629
14782
  "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",
14630
14783
  className
14631
14784
  ),
14632
14785
  children: [
14633
- /* @__PURE__ */ jsxs15("div", { className: "flex items-start justify-between gap-3", children: [
14634
- /* @__PURE__ */ jsxs15("div", { children: [
14635
- /* @__PURE__ */ jsx18("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
14636
- /* @__PURE__ */ jsx18("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
14786
+ /* @__PURE__ */ jsxs16("div", { className: "flex items-start justify-between gap-3", children: [
14787
+ /* @__PURE__ */ jsxs16("div", { children: [
14788
+ /* @__PURE__ */ jsx19("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
14789
+ /* @__PURE__ */ jsx19("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
14637
14790
  ] }),
14638
- /* @__PURE__ */ jsx18(
14791
+ /* @__PURE__ */ jsx19(
14639
14792
  "button",
14640
14793
  {
14641
14794
  type: "button",
@@ -14646,9 +14799,9 @@ function CheckoutLoginPrompt({
14646
14799
  }
14647
14800
  )
14648
14801
  ] }),
14649
- /* @__PURE__ */ jsxs15("div", { className: "space-y-2", children: [
14650
- /* @__PURE__ */ jsx18("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
14651
- /* @__PURE__ */ jsx18(
14802
+ /* @__PURE__ */ jsxs16("div", { className: "space-y-2", children: [
14803
+ /* @__PURE__ */ jsx19("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
14804
+ /* @__PURE__ */ jsx19(
14652
14805
  "input",
14653
14806
  {
14654
14807
  id: "checkout-login-prompt-email",
@@ -14657,29 +14810,29 @@ function CheckoutLoginPrompt({
14657
14810
  value: email,
14658
14811
  onChange: (e) => onEmailChange(e.target.value),
14659
14812
  placeholder: t.emailPlaceholder,
14660
- className: cn17(
14813
+ className: cn16(
14661
14814
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
14662
14815
  error ? "border-destructive" : "border-border focus:border-primary"
14663
14816
  )
14664
14817
  }
14665
14818
  ),
14666
- error && /* @__PURE__ */ jsx18("p", { className: "text-xs text-destructive", children: error })
14819
+ error && /* @__PURE__ */ jsx19("p", { className: "text-xs text-destructive", children: error })
14667
14820
  ] }),
14668
- /* @__PURE__ */ jsxs15("div", { className: "space-y-2", children: [
14669
- /* @__PURE__ */ jsx18(
14821
+ /* @__PURE__ */ jsxs16("div", { className: "space-y-2", children: [
14822
+ /* @__PURE__ */ jsx19(
14670
14823
  "button",
14671
14824
  {
14672
14825
  type: "button",
14673
14826
  onClick: onSubmitEmail,
14674
14827
  disabled: checking || !isValidEmail,
14675
- className: cn17(
14828
+ className: cn16(
14676
14829
  "flex w-full items-center justify-center gap-2 rounded-xl px-4 py-2.5 text-sm font-semibold transition-all",
14677
14830
  checking || !isValidEmail ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
14678
14831
  ),
14679
14832
  children: checking ? t.checking : t.continueWithEmail
14680
14833
  }
14681
14834
  ),
14682
- /* @__PURE__ */ jsx18(
14835
+ /* @__PURE__ */ jsx19(
14683
14836
  "button",
14684
14837
  {
14685
14838
  type: "button",
@@ -14696,9 +14849,9 @@ function CheckoutLoginPrompt({
14696
14849
  }
14697
14850
 
14698
14851
  // src/components/checkout-form.tsx
14699
- import { cn as cn18 } from "@reblu/site-ui/utils";
14852
+ import { cn as cn17 } from "@reblu/site-ui/utils";
14700
14853
  import { PhoneInput } from "@reblu/site-ui/phone-input";
14701
- import { Fragment as Fragment4, jsx as jsx19, jsxs as jsxs16 } from "react/jsx-runtime";
14854
+ import { Fragment as Fragment4, jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
14702
14855
  var DEFAULT_LABELS7 = {
14703
14856
  contactTitle: "Datos de contacto",
14704
14857
  nameLabel: "Nombre completo",
@@ -14752,22 +14905,22 @@ function CheckoutForm({
14752
14905
  event.preventDefault();
14753
14906
  if (discountCode.trim() && !discountApplying) onApplyDiscount();
14754
14907
  }
14755
- return /* @__PURE__ */ jsxs16(Fragment4, { children: [
14908
+ return /* @__PURE__ */ jsxs17(Fragment4, { children: [
14756
14909
  loginPrompt,
14757
- /* @__PURE__ */ jsxs16(
14910
+ /* @__PURE__ */ jsxs17(
14758
14911
  "form",
14759
14912
  {
14760
14913
  "data-testid": "checkout-form",
14761
14914
  onSubmit,
14762
- className: cn18("space-y-8", className),
14915
+ className: cn17("space-y-8", className),
14763
14916
  "data-slot": "checkout-form",
14764
14917
  children: [
14765
- /* @__PURE__ */ jsxs16("section", { className: "space-y-4", children: [
14766
- /* @__PURE__ */ jsx19("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
14767
- /* @__PURE__ */ jsxs16("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
14768
- /* @__PURE__ */ jsxs16("div", { className: "space-y-1", children: [
14769
- /* @__PURE__ */ jsx19("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
14770
- /* @__PURE__ */ jsx19(
14918
+ /* @__PURE__ */ jsxs17("section", { className: "space-y-4", children: [
14919
+ /* @__PURE__ */ jsx20("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
14920
+ /* @__PURE__ */ jsxs17("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
14921
+ /* @__PURE__ */ jsxs17("div", { className: "space-y-1", children: [
14922
+ /* @__PURE__ */ jsx20("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
14923
+ /* @__PURE__ */ jsx20(
14771
14924
  "input",
14772
14925
  {
14773
14926
  id: "checkout-form-name",
@@ -14776,17 +14929,17 @@ function CheckoutForm({
14776
14929
  value: contact.name,
14777
14930
  onChange: (e) => patchContact({ name: e.target.value }),
14778
14931
  placeholder: t.namePlaceholder,
14779
- className: cn18(
14932
+ className: cn17(
14780
14933
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
14781
14934
  contactErrors?.name ? "border-destructive" : "border-border focus:border-primary"
14782
14935
  )
14783
14936
  }
14784
14937
  ),
14785
- contactErrors?.name && /* @__PURE__ */ jsx19("p", { className: "text-xs text-destructive", children: contactErrors.name })
14938
+ contactErrors?.name && /* @__PURE__ */ jsx20("p", { className: "text-xs text-destructive", children: contactErrors.name })
14786
14939
  ] }),
14787
- /* @__PURE__ */ jsxs16("div", { className: "space-y-1", children: [
14788
- /* @__PURE__ */ jsx19("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
14789
- /* @__PURE__ */ jsx19(
14940
+ /* @__PURE__ */ jsxs17("div", { className: "space-y-1", children: [
14941
+ /* @__PURE__ */ jsx20("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
14942
+ /* @__PURE__ */ jsx20(
14790
14943
  "input",
14791
14944
  {
14792
14945
  id: "checkout-form-email",
@@ -14795,15 +14948,15 @@ function CheckoutForm({
14795
14948
  value: contact.email,
14796
14949
  onChange: (e) => patchContact({ email: e.target.value }),
14797
14950
  placeholder: t.emailPlaceholder,
14798
- className: cn18(
14951
+ className: cn17(
14799
14952
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
14800
14953
  contactErrors?.email ? "border-destructive" : "border-border focus:border-primary"
14801
14954
  )
14802
14955
  }
14803
14956
  ),
14804
- contactErrors?.email && /* @__PURE__ */ jsx19("p", { className: "text-xs text-destructive", children: contactErrors.email })
14957
+ contactErrors?.email && /* @__PURE__ */ jsx20("p", { className: "text-xs text-destructive", children: contactErrors.email })
14805
14958
  ] }),
14806
- /* @__PURE__ */ jsx19("div", { className: "space-y-1", children: /* @__PURE__ */ jsx19(
14959
+ /* @__PURE__ */ jsx20("div", { className: "space-y-1", children: /* @__PURE__ */ jsx20(
14807
14960
  PhoneInput,
14808
14961
  {
14809
14962
  id: "checkout-form-phone",
@@ -14817,15 +14970,15 @@ function CheckoutForm({
14817
14970
  ] })
14818
14971
  ] }),
14819
14972
  children2,
14820
- generalError ? /* @__PURE__ */ jsx19("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
14821
- /* @__PURE__ */ jsxs16("section", { className: "space-y-3", children: [
14822
- /* @__PURE__ */ jsx19("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
14823
- appliedDiscount ? /* @__PURE__ */ jsxs16("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: [
14824
- /* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
14825
- /* @__PURE__ */ jsx19("span", { className: "font-semibold", children: appliedDiscount.code }),
14826
- /* @__PURE__ */ jsx19("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
14973
+ generalError ? /* @__PURE__ */ jsx20("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
14974
+ /* @__PURE__ */ jsxs17("section", { className: "space-y-3", children: [
14975
+ /* @__PURE__ */ jsx20("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
14976
+ appliedDiscount ? /* @__PURE__ */ jsxs17("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: [
14977
+ /* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
14978
+ /* @__PURE__ */ jsx20("span", { className: "font-semibold", children: appliedDiscount.code }),
14979
+ /* @__PURE__ */ jsx20("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
14827
14980
  ] }),
14828
- /* @__PURE__ */ jsx19(
14981
+ /* @__PURE__ */ jsx20(
14829
14982
  "button",
14830
14983
  {
14831
14984
  type: "button",
@@ -14835,9 +14988,9 @@ function CheckoutForm({
14835
14988
  children: t.removeDiscount
14836
14989
  }
14837
14990
  )
14838
- ] }) : /* @__PURE__ */ jsxs16("div", { className: "flex gap-2", children: [
14839
- /* @__PURE__ */ jsx19("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
14840
- /* @__PURE__ */ jsx19(
14991
+ ] }) : /* @__PURE__ */ jsxs17("div", { className: "flex gap-2", children: [
14992
+ /* @__PURE__ */ jsx20("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
14993
+ /* @__PURE__ */ jsx20(
14841
14994
  "input",
14842
14995
  {
14843
14996
  id: "checkout-form-discount-code",
@@ -14849,7 +15002,7 @@ function CheckoutForm({
14849
15002
  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"
14850
15003
  }
14851
15004
  ),
14852
- /* @__PURE__ */ jsx19(
15005
+ /* @__PURE__ */ jsx20(
14853
15006
  "button",
14854
15007
  {
14855
15008
  type: "button",
@@ -14860,14 +15013,14 @@ function CheckoutForm({
14860
15013
  }
14861
15014
  )
14862
15015
  ] }),
14863
- discountError && /* @__PURE__ */ jsx19("p", { className: "text-xs text-destructive", children: discountError })
15016
+ discountError && /* @__PURE__ */ jsx20("p", { className: "text-xs text-destructive", children: discountError })
14864
15017
  ] }),
14865
- /* @__PURE__ */ jsx19(
15018
+ /* @__PURE__ */ jsx20(
14866
15019
  "button",
14867
15020
  {
14868
15021
  type: "submit",
14869
15022
  disabled: submitting || submitDisabled,
14870
- className: cn18(
15023
+ className: cn17(
14871
15024
  "flex w-full items-center justify-center gap-2 rounded-xl px-4 py-3 font-semibold transition-all",
14872
15025
  submitting || submitDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
14873
15026
  ),
@@ -14881,11 +15034,11 @@ function CheckoutForm({
14881
15034
  }
14882
15035
 
14883
15036
  // src/components/order-confirmation.tsx
14884
- import { cn as cn20 } from "@reblu/site-ui/utils";
15037
+ import { cn as cn19 } from "@reblu/site-ui/utils";
14885
15038
 
14886
15039
  // src/components/order-invoice-link.tsx
14887
- import { cn as cn19 } from "@reblu/site-ui/utils";
14888
- import { jsx as jsx20, jsxs as jsxs17 } from "react/jsx-runtime";
15040
+ import { cn as cn18 } from "@reblu/site-ui/utils";
15041
+ import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
14889
15042
  var DEFAULT_LABELS8 = {
14890
15043
  linkLabel: "Descargar la factura {number}",
14891
15044
  signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
@@ -14893,8 +15046,8 @@ var DEFAULT_LABELS8 = {
14893
15046
  function OrderInvoiceLink({ invoice, labels, className }) {
14894
15047
  if (!invoice) return null;
14895
15048
  const t = { ...DEFAULT_LABELS8, ...labels };
14896
- return /* @__PURE__ */ jsxs17("div", { className: cn19("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
14897
- /* @__PURE__ */ jsx20(
15049
+ return /* @__PURE__ */ jsxs18("div", { className: cn18("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
15050
+ /* @__PURE__ */ jsx21(
14898
15051
  "a",
14899
15052
  {
14900
15053
  href: invoice.url,
@@ -14902,12 +15055,12 @@ function OrderInvoiceLink({ invoice, labels, className }) {
14902
15055
  children: t.linkLabel.replace("{number}", invoice.number)
14903
15056
  }
14904
15057
  ),
14905
- /* @__PURE__ */ jsx20("p", { className: "text-muted-foreground", children: t.signInHint })
15058
+ /* @__PURE__ */ jsx21("p", { className: "text-muted-foreground", children: t.signInHint })
14906
15059
  ] });
14907
15060
  }
14908
15061
 
14909
15062
  // src/components/order-confirmation.tsx
14910
- import { jsx as jsx21, jsxs as jsxs18 } from "react/jsx-runtime";
15063
+ import { jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
14911
15064
  var DEFAULT_LABELS9 = {
14912
15065
  pollingTitle: "Confirmando tu pedido\u2026",
14913
15066
  pollingDescription: "Estamos procesando el pago, un momento\u2026",
@@ -14971,43 +15124,43 @@ function OrderConfirmation({
14971
15124
  const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
14972
15125
  const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
14973
15126
  const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
14974
- return /* @__PURE__ */ jsxs18("div", { className: cn20("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
14975
- /* @__PURE__ */ jsx21("h1", { className: "text-3xl font-bold", children: title }),
14976
- /* @__PURE__ */ jsx21("p", { className: "text-lg text-muted-foreground", children: description }),
14977
- showFullOrderSummary && order && /* @__PURE__ */ jsxs18("div", { className: "space-y-6", children: [
14978
- /* @__PURE__ */ jsxs18("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
14979
- /* @__PURE__ */ jsx21("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
14980
- /* @__PURE__ */ jsx21("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15127
+ return /* @__PURE__ */ jsxs19("div", { className: cn19("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
15128
+ /* @__PURE__ */ jsx22("h1", { className: "text-3xl font-bold", children: title }),
15129
+ /* @__PURE__ */ jsx22("p", { className: "text-lg text-muted-foreground", children: description }),
15130
+ showFullOrderSummary && order && /* @__PURE__ */ jsxs19("div", { className: "space-y-6", children: [
15131
+ /* @__PURE__ */ jsxs19("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15132
+ /* @__PURE__ */ jsx22("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
15133
+ /* @__PURE__ */ jsx22("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
14981
15134
  ] }),
14982
- /* @__PURE__ */ jsxs18("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
14983
- order.items.map((item, idx) => /* @__PURE__ */ jsxs18(
15135
+ /* @__PURE__ */ jsxs19("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
15136
+ order.items.map((item, idx) => /* @__PURE__ */ jsxs19(
14984
15137
  "div",
14985
15138
  {
14986
15139
  className: "flex justify-between gap-4 text-sm",
14987
15140
  children: [
14988
- /* @__PURE__ */ jsxs18("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
15141
+ /* @__PURE__ */ jsxs19("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
14989
15142
  item.product.name,
14990
15143
  item.variant ? ` (${item.variant.name})` : "",
14991
15144
  " x",
14992
15145
  item.quantity
14993
15146
  ] }),
14994
- /* @__PURE__ */ jsx21("span", { children: formatPrice(item.total, currencyCode, locale) })
15147
+ /* @__PURE__ */ jsx22("span", { children: formatPrice(item.total, currencyCode, locale) })
14995
15148
  ]
14996
15149
  },
14997
15150
  idx
14998
15151
  )),
14999
- /* @__PURE__ */ jsx21("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ jsxs18("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
15000
- /* @__PURE__ */ jsx21("span", { children: t.totalLabel }),
15001
- /* @__PURE__ */ jsx21("span", { children: formatPrice(order.total, currencyCode, locale) })
15152
+ /* @__PURE__ */ jsx22("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ jsxs19("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
15153
+ /* @__PURE__ */ jsx22("span", { children: t.totalLabel }),
15154
+ /* @__PURE__ */ jsx22("span", { children: formatPrice(order.total, currencyCode, locale) })
15002
15155
  ] }) })
15003
15156
  ] }),
15004
- /* @__PURE__ */ jsxs18("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
15157
+ /* @__PURE__ */ jsxs19("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
15005
15158
  t.confirmationEmailPrefix,
15006
15159
  " ",
15007
- /* @__PURE__ */ jsx21("span", { className: "font-medium text-foreground", children: order.customerEmail }),
15160
+ /* @__PURE__ */ jsx22("span", { className: "font-medium text-foreground", children: order.customerEmail }),
15008
15161
  "."
15009
15162
  ] }),
15010
- /* @__PURE__ */ jsx21(
15163
+ /* @__PURE__ */ jsx22(
15011
15164
  OrderInvoiceLink,
15012
15165
  {
15013
15166
  invoice: order.invoice,
@@ -15015,11 +15168,11 @@ function OrderConfirmation({
15015
15168
  }
15016
15169
  )
15017
15170
  ] }),
15018
- showOrderReference && order && /* @__PURE__ */ jsxs18("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15019
- /* @__PURE__ */ jsx21("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
15020
- /* @__PURE__ */ jsx21("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15171
+ showOrderReference && order && /* @__PURE__ */ jsxs19("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15172
+ /* @__PURE__ */ jsx22("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
15173
+ /* @__PURE__ */ jsx22("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15021
15174
  ] }),
15022
- status === "failed" && cartHref && /* @__PURE__ */ jsx21(
15175
+ status === "failed" && cartHref && /* @__PURE__ */ jsx22(
15023
15176
  "a",
15024
15177
  {
15025
15178
  href: cartHref,
@@ -15027,7 +15180,7 @@ function OrderConfirmation({
15027
15180
  children: t.backToCartLabel
15028
15181
  }
15029
15182
  ),
15030
- showRecheck && /* @__PURE__ */ jsx21(
15183
+ showRecheck && /* @__PURE__ */ jsx22(
15031
15184
  "button",
15032
15185
  {
15033
15186
  type: "button",
@@ -15036,16 +15189,16 @@ function OrderConfirmation({
15036
15189
  children: t.recheckLabel
15037
15190
  }
15038
15191
  ),
15039
- showSessionReference && /* @__PURE__ */ jsxs18("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15040
- /* @__PURE__ */ jsx21("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
15041
- /* @__PURE__ */ jsx21("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
15192
+ showSessionReference && /* @__PURE__ */ jsxs19("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15193
+ /* @__PURE__ */ jsx22("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
15194
+ /* @__PURE__ */ jsx22("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
15042
15195
  ] })
15043
15196
  ] });
15044
15197
  }
15045
15198
 
15046
15199
  // src/components/full-invoice-fields.tsx
15047
- import { cn as cn21 } from "@reblu/site-ui/utils";
15048
- import { jsx as jsx22, jsxs as jsxs19 } from "react/jsx-runtime";
15200
+ import { cn as cn20 } from "@reblu/site-ui/utils";
15201
+ import { jsx as jsx23, jsxs as jsxs20 } from "react/jsx-runtime";
15049
15202
  var EMPTY_FULL_INVOICE_VALUE = {
15050
15203
  wantsFullInvoice: false,
15051
15204
  billingIdType: "NIF",
@@ -15162,12 +15315,12 @@ function FullInvoiceFields({
15162
15315
  const showFields = value.wantsFullInvoice || overCap;
15163
15316
  const isSpanishNif = value.billingIdType === "NIF";
15164
15317
  const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
15165
- const error = (key2) => errors[key2] ? /* @__PURE__ */ jsx22("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
15318
+ const error = (key2) => errors[key2] ? /* @__PURE__ */ jsx23("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
15166
15319
  const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
15167
- return /* @__PURE__ */ jsxs19("section", { className: cn21("space-y-4", className), "data-slot": "full-invoice-fields", children: [
15168
- overCap ? /* @__PURE__ */ jsx22("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ jsxs19("div", { className: "space-y-1", children: [
15169
- /* @__PURE__ */ jsxs19("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
15170
- /* @__PURE__ */ jsx22(
15320
+ return /* @__PURE__ */ jsxs20("section", { className: cn20("space-y-4", className), "data-slot": "full-invoice-fields", children: [
15321
+ overCap ? /* @__PURE__ */ jsx23("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ jsxs20("div", { className: "space-y-1", children: [
15322
+ /* @__PURE__ */ jsxs20("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
15323
+ /* @__PURE__ */ jsx23(
15171
15324
  "input",
15172
15325
  {
15173
15326
  type: "checkbox",
@@ -15177,12 +15330,12 @@ function FullInvoiceFields({
15177
15330
  ),
15178
15331
  t.toggle
15179
15332
  ] }),
15180
- /* @__PURE__ */ jsx22("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
15333
+ /* @__PURE__ */ jsx23("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
15181
15334
  ] }),
15182
- showFields && /* @__PURE__ */ jsxs19("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15183
- /* @__PURE__ */ jsxs19("div", { className: "space-y-1", children: [
15184
- /* @__PURE__ */ jsx22("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
15185
- /* @__PURE__ */ jsx22(
15335
+ showFields && /* @__PURE__ */ jsxs20("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15336
+ /* @__PURE__ */ jsxs20("div", { className: "space-y-1", children: [
15337
+ /* @__PURE__ */ jsx23("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
15338
+ /* @__PURE__ */ jsx23(
15186
15339
  "select",
15187
15340
  {
15188
15341
  id: "full-invoice-id-type",
@@ -15191,14 +15344,14 @@ function FullInvoiceFields({
15191
15344
  value: value.billingIdType,
15192
15345
  onChange: (e) => set("billingIdType", e.target.value),
15193
15346
  ...invalid2("billingIdType"),
15194
- children: ID_TYPES.map((type) => /* @__PURE__ */ jsx22("option", { value: type, children: t.idTypeOptions[type] }, type))
15347
+ children: ID_TYPES.map((type) => /* @__PURE__ */ jsx23("option", { value: type, children: t.idTypeOptions[type] }, type))
15195
15348
  }
15196
15349
  ),
15197
15350
  error("billingIdType")
15198
15351
  ] }),
15199
- !isSpanishNif && /* @__PURE__ */ jsxs19("div", { className: "space-y-1", children: [
15200
- /* @__PURE__ */ jsx22("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
15201
- /* @__PURE__ */ jsxs19(
15352
+ !isSpanishNif && /* @__PURE__ */ jsxs20("div", { className: "space-y-1", children: [
15353
+ /* @__PURE__ */ jsx23("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
15354
+ /* @__PURE__ */ jsxs20(
15202
15355
  "select",
15203
15356
  {
15204
15357
  id: "full-invoice-id-country",
@@ -15208,16 +15361,16 @@ function FullInvoiceFields({
15208
15361
  onChange: (e) => set("billingIdCountry", e.target.value),
15209
15362
  ...invalid2("billingIdCountry"),
15210
15363
  children: [
15211
- /* @__PURE__ */ jsx22("option", { value: "", disabled: true, children: t.chooseCountry }),
15212
- countries.map((c) => /* @__PURE__ */ jsx22("option", { value: c.code, children: c.name }, c.code))
15364
+ /* @__PURE__ */ jsx23("option", { value: "", disabled: true, children: t.chooseCountry }),
15365
+ countries.map((c) => /* @__PURE__ */ jsx23("option", { value: c.code, children: c.name }, c.code))
15213
15366
  ]
15214
15367
  }
15215
15368
  ),
15216
15369
  error("billingIdCountry")
15217
15370
  ] }),
15218
- /* @__PURE__ */ jsxs19("div", { className: "space-y-1", children: [
15219
- /* @__PURE__ */ jsx22("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
15220
- /* @__PURE__ */ jsx22(
15371
+ /* @__PURE__ */ jsxs20("div", { className: "space-y-1", children: [
15372
+ /* @__PURE__ */ jsx23("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
15373
+ /* @__PURE__ */ jsx23(
15221
15374
  "input",
15222
15375
  {
15223
15376
  id: "full-invoice-nif",
@@ -15230,9 +15383,9 @@ function FullInvoiceFields({
15230
15383
  ),
15231
15384
  error("billingNif")
15232
15385
  ] }),
15233
- /* @__PURE__ */ jsxs19("div", { className: "space-y-1", children: [
15234
- /* @__PURE__ */ jsx22("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
15235
- /* @__PURE__ */ jsx22(
15386
+ /* @__PURE__ */ jsxs20("div", { className: "space-y-1", children: [
15387
+ /* @__PURE__ */ jsx23("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
15388
+ /* @__PURE__ */ jsx23(
15236
15389
  "input",
15237
15390
  {
15238
15391
  id: "full-invoice-name",
@@ -15245,9 +15398,9 @@ function FullInvoiceFields({
15245
15398
  ),
15246
15399
  error("billingName")
15247
15400
  ] }),
15248
- /* @__PURE__ */ jsxs19("div", { className: "space-y-1 sm:col-span-2", children: [
15249
- /* @__PURE__ */ jsx22("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
15250
- /* @__PURE__ */ jsx22(
15401
+ /* @__PURE__ */ jsxs20("div", { className: "space-y-1 sm:col-span-2", children: [
15402
+ /* @__PURE__ */ jsx23("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
15403
+ /* @__PURE__ */ jsx23(
15251
15404
  "input",
15252
15405
  {
15253
15406
  id: "full-invoice-street",
@@ -15259,9 +15412,9 @@ function FullInvoiceFields({
15259
15412
  }
15260
15413
  )
15261
15414
  ] }),
15262
- /* @__PURE__ */ jsxs19("div", { className: "space-y-1", children: [
15263
- /* @__PURE__ */ jsx22("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
15264
- /* @__PURE__ */ jsx22(
15415
+ /* @__PURE__ */ jsxs20("div", { className: "space-y-1", children: [
15416
+ /* @__PURE__ */ jsx23("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
15417
+ /* @__PURE__ */ jsx23(
15265
15418
  "input",
15266
15419
  {
15267
15420
  id: "full-invoice-postal-code",
@@ -15272,9 +15425,9 @@ function FullInvoiceFields({
15272
15425
  }
15273
15426
  )
15274
15427
  ] }),
15275
- /* @__PURE__ */ jsxs19("div", { className: "space-y-1", children: [
15276
- /* @__PURE__ */ jsx22("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
15277
- /* @__PURE__ */ jsx22(
15428
+ /* @__PURE__ */ jsxs20("div", { className: "space-y-1", children: [
15429
+ /* @__PURE__ */ jsx23("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
15430
+ /* @__PURE__ */ jsx23(
15278
15431
  "input",
15279
15432
  {
15280
15433
  id: "full-invoice-city",
@@ -15285,9 +15438,9 @@ function FullInvoiceFields({
15285
15438
  }
15286
15439
  )
15287
15440
  ] }),
15288
- /* @__PURE__ */ jsxs19("div", { className: "space-y-1", children: [
15289
- /* @__PURE__ */ jsx22("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
15290
- /* @__PURE__ */ jsx22(
15441
+ /* @__PURE__ */ jsxs20("div", { className: "space-y-1", children: [
15442
+ /* @__PURE__ */ jsx23("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
15443
+ /* @__PURE__ */ jsx23(
15291
15444
  "select",
15292
15445
  {
15293
15446
  id: "full-invoice-country",
@@ -15295,14 +15448,17 @@ function FullInvoiceFields({
15295
15448
  required: true,
15296
15449
  value: value.country,
15297
15450
  onChange: (e) => set("country", e.target.value),
15298
- children: countries.map((c) => /* @__PURE__ */ jsx22("option", { value: c.code, children: c.name }, c.code))
15451
+ children: countries.map((c) => /* @__PURE__ */ jsx23("option", { value: c.code, children: c.name }, c.code))
15299
15452
  }
15300
15453
  )
15301
15454
  ] }),
15302
- /* @__PURE__ */ jsx22("div", { className: "sm:col-span-2", children: error("address") })
15455
+ /* @__PURE__ */ jsx23("div", { className: "sm:col-span-2", children: error("address") })
15303
15456
  ] })
15304
15457
  ] });
15305
15458
  }
15459
+
15460
+ // src/index.ts
15461
+ import { DATA_REQUEST_TYPES } from "@reblu/site-contracts";
15306
15462
  export {
15307
15463
  ALLOWED_YOUTUBE_HOSTS,
15308
15464
  AddedToCartToast,
@@ -15312,10 +15468,13 @@ export {
15312
15468
  CheckoutForm,
15313
15469
  CheckoutLoginPrompt,
15314
15470
  CourseDescription,
15471
+ DATA_REQUEST_TYPES,
15315
15472
  DEFAULT_INVOICE_COUNTRIES,
15316
15473
  DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,
15317
15474
  DEFAULT_SHOP_ERROR_MESSAGES,
15318
15475
  DEFAULT_SHOP_PRICE_BANDS,
15476
+ DEFAULT_TRUST_BADGE_HEADINGS,
15477
+ DEFAULT_TRUST_BADGE_TYPE_ORDER,
15319
15478
  DEFAULT_TRUST_ICONS,
15320
15479
  EMPTY_FULL_INVOICE_VALUE,
15321
15480
  FaqAccordion,
@@ -15333,6 +15492,7 @@ export {
15333
15492
  ShopFilters,
15334
15493
  Specialty,
15335
15494
  Treatment,
15495
+ TrustBadges,
15336
15496
  buildFaqPageJsonLd,
15337
15497
  buildShareUrls,
15338
15498
  collectFaqItems,