@reblu/site-blocks 0.33.0 → 0.34.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
@@ -13966,22 +13966,101 @@ function ProfileCard({
13966
13966
  );
13967
13967
  }
13968
13968
 
13969
- // src/components/product-card.tsx
13969
+ // src/components/linked-pages.tsx
13970
13970
  import { cn as cn8 } from "@reblu/site-ui/utils";
13971
+
13972
+ // src/lib/page-links.ts
13973
+ function linkKey(link) {
13974
+ return `${link.category?.slug ?? ""}/${link.slug}`;
13975
+ }
13976
+ function linkFilterOptions(items) {
13977
+ const seen = /* @__PURE__ */ new Map();
13978
+ for (const item of items) {
13979
+ for (const link of item.links ?? []) {
13980
+ const key2 = linkKey(link);
13981
+ if (!seen.has(key2)) seen.set(key2, { key: key2, label: link.title });
13982
+ }
13983
+ }
13984
+ return [...seen.values()];
13985
+ }
13986
+ function filterByLink(items, key2) {
13987
+ if (key2 === null) return items;
13988
+ return items.filter((item) => (item.links ?? []).some((link) => linkKey(link) === key2));
13989
+ }
13990
+
13991
+ // src/components/linked-pages.tsx
13971
13992
  import { jsx as jsx12, jsxs as jsxs12 } from "react/jsx-runtime";
13993
+ function LinkedPagesGrid({
13994
+ pages,
13995
+ pageHref = (page) => `/${page.slug}`,
13996
+ heading,
13997
+ className
13998
+ }) {
13999
+ if (!pages || pages.length === 0) return null;
14000
+ return /* @__PURE__ */ jsxs12("section", { className: cn8("space-y-6", className), "data-slot": "linked-pages", children: [
14001
+ heading && /* @__PURE__ */ jsx12("h2", { className: "text-2xl font-bold", children: heading }),
14002
+ /* @__PURE__ */ jsx12("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__ */ jsx12("li", { children: /* @__PURE__ */ jsxs12(
14003
+ "a",
14004
+ {
14005
+ href: pageHref(page),
14006
+ className: "group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
14007
+ children: [
14008
+ page.coverImageUrl && /* @__PURE__ */ jsx12("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ jsx12(
14009
+ "img",
14010
+ {
14011
+ src: page.coverImageUrl,
14012
+ alt: "",
14013
+ loading: "lazy",
14014
+ className: "h-full w-full object-cover transition-transform group-hover:scale-105"
14015
+ }
14016
+ ) }),
14017
+ /* @__PURE__ */ jsxs12("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
14018
+ /* @__PURE__ */ jsx12("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
14019
+ page.excerpt && /* @__PURE__ */ jsx12("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
14020
+ ] })
14021
+ ]
14022
+ }
14023
+ ) }, linkKey(page))) })
14024
+ ] });
14025
+ }
14026
+ function TeamGrid({
14027
+ members,
14028
+ memberHref,
14029
+ heading,
14030
+ className
14031
+ }) {
14032
+ if (!members || members.length === 0) return null;
14033
+ return /* @__PURE__ */ jsxs12("section", { className: cn8("space-y-6", className), "data-slot": "team-grid", children: [
14034
+ heading && /* @__PURE__ */ jsx12("h2", { className: "text-2xl font-bold", children: heading }),
14035
+ /* @__PURE__ */ jsx12("ul", { className: "grid list-none grid-cols-1 gap-6 p-0 sm:grid-cols-2 lg:grid-cols-3", children: members.map((member) => /* @__PURE__ */ jsx12("li", { children: /* @__PURE__ */ jsx12(
14036
+ ProfileCard,
14037
+ {
14038
+ name: member.title,
14039
+ role: member.role ?? void 0,
14040
+ imageUrl: member.coverImageUrl ?? void 0,
14041
+ href: memberHref?.(member),
14042
+ className: "h-full"
14043
+ }
14044
+ ) }, linkKey(member))) })
14045
+ ] });
14046
+ }
14047
+
14048
+ // src/components/product-card.tsx
14049
+ import { cn as cn9 } from "@reblu/site-ui/utils";
14050
+ import { jsx as jsx13, jsxs as jsxs13 } from "react/jsx-runtime";
13972
14051
  function ProductCard({ product, href, currencyCode = "EUR", locale, className }) {
13973
14052
  const image = product.images.find((i) => i.isPrimary) ?? product.images[0];
13974
14053
  const hasDiscount = product.comparePrice != null && product.comparePrice > product.price;
13975
- return /* @__PURE__ */ jsxs12(
14054
+ return /* @__PURE__ */ jsxs13(
13976
14055
  "article",
13977
14056
  {
13978
- className: cn8(
14057
+ className: cn9(
13979
14058
  "group flex flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
13980
14059
  className
13981
14060
  ),
13982
14061
  "data-slot": "product-card",
13983
14062
  children: [
13984
- /* @__PURE__ */ jsx12("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ jsx12(
14063
+ /* @__PURE__ */ jsx13("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ jsx13(
13985
14064
  "img",
13986
14065
  {
13987
14066
  src: image.url,
@@ -13989,14 +14068,14 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
13989
14068
  loading: "lazy",
13990
14069
  className: "h-full w-full object-cover transition-transform group-hover:scale-105"
13991
14070
  }
13992
- ) : /* @__PURE__ */ jsx12("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
13993
- /* @__PURE__ */ jsxs12("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13994
- product.category && /* @__PURE__ */ jsx12("span", { className: "inline-flex w-fit items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground", children: product.category.name }),
13995
- /* @__PURE__ */ jsx12("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ jsx12("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
13996
- product.shortDescription && /* @__PURE__ */ jsx12("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
13997
- /* @__PURE__ */ jsxs12("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
13998
- /* @__PURE__ */ jsx12("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
13999
- hasDiscount && /* @__PURE__ */ jsx12("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
14071
+ ) : /* @__PURE__ */ jsx13("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
14072
+ /* @__PURE__ */ jsxs13("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
14073
+ product.category && /* @__PURE__ */ jsx13("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 }),
14074
+ /* @__PURE__ */ jsx13("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ jsx13("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
14075
+ product.shortDescription && /* @__PURE__ */ jsx13("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
14076
+ /* @__PURE__ */ jsxs13("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
14077
+ /* @__PURE__ */ jsx13("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
14078
+ hasDiscount && /* @__PURE__ */ jsx13("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
14000
14079
  ] })
14001
14080
  ] })
14002
14081
  ]
@@ -14198,7 +14277,7 @@ var __iconNode8 = [
14198
14277
  var Truck = createLucideIcon("truck", __iconNode8);
14199
14278
 
14200
14279
  // src/components/product-trust-items.tsx
14201
- import { jsx as jsx13, jsxs as jsxs13 } from "react/jsx-runtime";
14280
+ import { jsx as jsx14, jsxs as jsxs14 } from "react/jsx-runtime";
14202
14281
  var DEFAULT_TRUST_ICONS = Object.freeze({
14203
14282
  shipping: Truck,
14204
14283
  returns: RotateCcw,
@@ -14232,17 +14311,17 @@ function ProductTrustItems({
14232
14311
  return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
14233
14312
  });
14234
14313
  if (rows.length === 0) return null;
14235
- return /* @__PURE__ */ jsx13(List, { "data-slot": "product-trust-items", className: slotClassName("space-y-2.5", "", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ jsxs13("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
14236
- /* @__PURE__ */ jsx13(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
14237
- /* @__PURE__ */ jsx13("span", { children: text3 })
14314
+ return /* @__PURE__ */ jsx14(List, { "data-slot": "product-trust-items", className: slotClassName("space-y-2.5", "", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ jsxs14("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
14315
+ /* @__PURE__ */ jsx14(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
14316
+ /* @__PURE__ */ jsx14("span", { children: text3 })
14238
14317
  ] }, key2)) });
14239
14318
  }
14240
14319
 
14241
14320
  // src/components/faq-accordion.tsx
14242
- import { cn as cn9 } from "@reblu/site-ui/utils";
14321
+ import { cn as cn10 } from "@reblu/site-ui/utils";
14243
14322
 
14244
14323
  // src/components/_heading.tsx
14245
- import { jsx as jsx14 } from "react/jsx-runtime";
14324
+ import { jsx as jsx15 } from "react/jsx-runtime";
14246
14325
  function nextHeadingLevel(level) {
14247
14326
  return Math.min(level + 1, 6);
14248
14327
  }
@@ -14252,11 +14331,11 @@ function Heading({
14252
14331
  children: children2
14253
14332
  }) {
14254
14333
  const Tag = `h${level}`;
14255
- return /* @__PURE__ */ jsx14(Tag, { className, children: children2 });
14334
+ return /* @__PURE__ */ jsx15(Tag, { className, children: children2 });
14256
14335
  }
14257
14336
 
14258
14337
  // src/components/faq-accordion.tsx
14259
- import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
14338
+ import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
14260
14339
  function FaqAccordion({
14261
14340
  items,
14262
14341
  heading,
@@ -14267,18 +14346,18 @@ function FaqAccordion({
14267
14346
  }) {
14268
14347
  const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
14269
14348
  if (visible.length === 0) return null;
14270
- return /* @__PURE__ */ jsxs14("div", { className: cn9("space-y-4", className), "data-slot": "faq-accordion", children: [
14271
- heading && /* @__PURE__ */ jsx15(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
14272
- /* @__PURE__ */ jsx15("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ jsxs14(
14349
+ return /* @__PURE__ */ jsxs15("div", { className: cn10("space-y-4", className), "data-slot": "faq-accordion", children: [
14350
+ heading && /* @__PURE__ */ jsx16(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
14351
+ /* @__PURE__ */ jsx16("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ jsxs15(
14273
14352
  "details",
14274
14353
  {
14275
14354
  className: "group px-4",
14276
14355
  "data-slot": "faq-item",
14277
14356
  ...defaultOpen.includes(index) ? { open: true } : {},
14278
14357
  children: [
14279
- /* @__PURE__ */ jsxs14("summary", { className: "flex cursor-pointer list-none items-center justify-between gap-4 py-4 font-medium focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring [&::-webkit-details-marker]:hidden", children: [
14280
- questionHeadingLevel ? /* @__PURE__ */ jsx15(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ jsx15("span", { children: item.q }),
14281
- /* @__PURE__ */ jsx15(
14358
+ /* @__PURE__ */ jsxs15("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: [
14359
+ questionHeadingLevel ? /* @__PURE__ */ jsx16(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ jsx16("span", { children: item.q }),
14360
+ /* @__PURE__ */ jsx16(
14282
14361
  "span",
14283
14362
  {
14284
14363
  "aria-hidden": "true",
@@ -14287,7 +14366,7 @@ function FaqAccordion({
14287
14366
  }
14288
14367
  )
14289
14368
  ] }),
14290
- /* @__PURE__ */ jsx15("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
14369
+ /* @__PURE__ */ jsx16("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
14291
14370
  ]
14292
14371
  },
14293
14372
  index
@@ -14296,7 +14375,7 @@ function FaqAccordion({
14296
14375
  }
14297
14376
 
14298
14377
  // src/components/trust-badges.tsx
14299
- import { cn as cn10 } from "@reblu/site-ui/utils";
14378
+ import { cn as cn11 } from "@reblu/site-ui/utils";
14300
14379
 
14301
14380
  // src/lib/trust-badge-media.ts
14302
14381
  var DEFAULT_ADHESION_NUMBER_LABEL = "N.\xBA de adhesi\xF3n";
@@ -14324,7 +14403,7 @@ function trustBadgeAlt(badge, numberLabel = DEFAULT_ADHESION_NUMBER_LABEL) {
14324
14403
  }
14325
14404
 
14326
14405
  // src/components/trust-badges.tsx
14327
- import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
14406
+ import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
14328
14407
  var DEFAULT_TRUST_BADGE_HEADINGS = Object.freeze(
14329
14408
  {
14330
14409
  PARTNER: "Colaboradores",
@@ -14353,18 +14432,18 @@ function BadgeContent({ badge, logoClassName }) {
14353
14432
  if (src) {
14354
14433
  return (
14355
14434
  // eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
14356
- /* @__PURE__ */ jsx16(
14435
+ /* @__PURE__ */ jsx17(
14357
14436
  "img",
14358
14437
  {
14359
14438
  src,
14360
14439
  alt: trustBadgeAlt(badge),
14361
14440
  loading: "lazy",
14362
- className: cn10("h-12 w-auto object-contain", logoClassName)
14441
+ className: cn11("h-12 w-auto object-contain", logoClassName)
14363
14442
  }
14364
14443
  )
14365
14444
  );
14366
14445
  }
14367
- return /* @__PURE__ */ jsx16("span", { className: "text-sm font-medium", children: badge.name });
14446
+ return /* @__PURE__ */ jsx17("span", { className: "text-sm font-medium", children: badge.name });
14368
14447
  }
14369
14448
  function TrustBadges({
14370
14449
  badges,
@@ -14392,14 +14471,14 @@ function TrustBadges({
14392
14471
  if (groups.length === 0) return null;
14393
14472
  const hasHeading = heading !== void 0 && heading !== null && heading !== "";
14394
14473
  const groupHeadingLevel = hasHeading ? nextHeadingLevel(headingLevel) : headingLevel;
14395
- const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ jsxs15(
14474
+ const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ jsxs16(
14396
14475
  "div",
14397
14476
  {
14398
14477
  "data-slot": "trust-badge-group",
14399
14478
  "data-type": type,
14400
- className: cn10("space-y-3", groupClassName),
14479
+ className: cn11("space-y-3", groupClassName),
14401
14480
  children: [
14402
- groupHeading ? /* @__PURE__ */ jsx16(
14481
+ groupHeading ? /* @__PURE__ */ jsx17(
14403
14482
  Heading,
14404
14483
  {
14405
14484
  level: groupHeadingLevel,
@@ -14411,30 +14490,30 @@ function TrustBadges({
14411
14490
  children: groupHeading
14412
14491
  }
14413
14492
  ) : null,
14414
- /* @__PURE__ */ jsx16("ul", { className: cn10("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
14493
+ /* @__PURE__ */ jsx17("ul", { className: cn11("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
14415
14494
  const href = safeHref(badge.url);
14416
- return /* @__PURE__ */ jsx16("li", { children: href ? /* @__PURE__ */ jsxs15("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14417
- /* @__PURE__ */ jsx16(BadgeContent, { badge, logoClassName }),
14495
+ return /* @__PURE__ */ jsx17("li", { children: href ? /* @__PURE__ */ jsxs16("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14496
+ /* @__PURE__ */ jsx17(BadgeContent, { badge, logoClassName }),
14418
14497
  " ",
14419
- /* @__PURE__ */ jsx16("span", { className: "sr-only", children: newWindowLabel })
14420
- ] }) : /* @__PURE__ */ jsx16(BadgeContent, { badge, logoClassName }) }, badge.id);
14498
+ /* @__PURE__ */ jsx17("span", { className: "sr-only", children: newWindowLabel })
14499
+ ] }) : /* @__PURE__ */ jsx17(BadgeContent, { badge, logoClassName }) }, badge.id);
14421
14500
  }) })
14422
14501
  ]
14423
14502
  },
14424
14503
  type
14425
14504
  ));
14426
14505
  if (!hasHeading) {
14427
- return /* @__PURE__ */ jsx16("div", { "data-slot": "trust-badges", className: cn10("space-y-6", className), children: content });
14506
+ return /* @__PURE__ */ jsx17("div", { "data-slot": "trust-badges", className: cn11("space-y-6", className), children: content });
14428
14507
  }
14429
14508
  const Tag = `h${headingLevel}`;
14430
- return /* @__PURE__ */ jsxs15(
14509
+ return /* @__PURE__ */ jsxs16(
14431
14510
  "section",
14432
14511
  {
14433
14512
  "data-slot": "trust-badges",
14434
14513
  "aria-labelledby": headingId,
14435
- className: cn10("space-y-6", className),
14514
+ className: cn11("space-y-6", className),
14436
14515
  children: [
14437
- /* @__PURE__ */ jsx16(
14516
+ /* @__PURE__ */ jsx17(
14438
14517
  Tag,
14439
14518
  {
14440
14519
  id: headingId,
@@ -14449,8 +14528,8 @@ function TrustBadges({
14449
14528
  }
14450
14529
 
14451
14530
  // src/components/arbitration-badge.tsx
14452
- import { cn as cn11 } from "@reblu/site-ui/utils";
14453
- import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
14531
+ import { cn as cn12 } from "@reblu/site-ui/utils";
14532
+ import { jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
14454
14533
  function isArbitrationBadge(value) {
14455
14534
  if (typeof value !== "object" || value === null) return false;
14456
14535
  const entry = value;
@@ -14468,35 +14547,35 @@ function ArbitrationBadge({
14468
14547
  if (!Array.isArray(badges)) return null;
14469
14548
  const items = badges.filter(isArbitrationBadge);
14470
14549
  if (items.length === 0) return null;
14471
- return /* @__PURE__ */ jsx17(
14550
+ return /* @__PURE__ */ jsx18(
14472
14551
  "ul",
14473
14552
  {
14474
14553
  "data-slot": "arbitration-badges",
14475
- className: cn11("flex flex-wrap items-start gap-6", className),
14554
+ className: cn12("flex flex-wrap items-start gap-6", className),
14476
14555
  children: items.map((badge) => {
14477
14556
  const src = safeLogoSrc(badge.logoUrl);
14478
14557
  const href = safeHref(badge.url);
14479
14558
  const number2 = adhesionNumberOf(badge);
14480
- const caption = number2 && (showNumber || !src) ? /* @__PURE__ */ jsx17("span", { className: cn11("text-xs", numberClassName), "aria-hidden": src ? "true" : void 0, children: `${numberLabel} ${number2}` }) : null;
14481
- const content = /* @__PURE__ */ jsxs16("span", { className: "inline-flex flex-col items-center gap-1 text-center", children: [
14559
+ const caption = number2 && (showNumber || !src) ? /* @__PURE__ */ jsx18("span", { className: cn12("text-xs", numberClassName), "aria-hidden": src ? "true" : void 0, children: `${numberLabel} ${number2}` }) : null;
14560
+ const content = /* @__PURE__ */ jsxs17("span", { className: "inline-flex flex-col items-center gap-1 text-center", children: [
14482
14561
  src ? (
14483
14562
  // eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
14484
- /* @__PURE__ */ jsx17(
14563
+ /* @__PURE__ */ jsx18(
14485
14564
  "img",
14486
14565
  {
14487
14566
  src,
14488
14567
  alt: trustBadgeAlt(badge, numberLabel),
14489
14568
  loading: "lazy",
14490
- className: cn11("h-16 w-auto object-contain", logoClassName)
14569
+ className: cn12("h-16 w-auto object-contain", logoClassName)
14491
14570
  }
14492
14571
  )
14493
- ) : /* @__PURE__ */ jsx17("span", { className: "text-sm font-medium", children: badge.name }),
14572
+ ) : /* @__PURE__ */ jsx18("span", { className: "text-sm font-medium", children: badge.name }),
14494
14573
  caption
14495
14574
  ] });
14496
- return /* @__PURE__ */ jsx17("li", { "data-slot": "arbitration-badge", children: href ? /* @__PURE__ */ jsxs16("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14575
+ return /* @__PURE__ */ jsx18("li", { "data-slot": "arbitration-badge", children: href ? /* @__PURE__ */ jsxs17("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14497
14576
  content,
14498
14577
  " ",
14499
- /* @__PURE__ */ jsx17("span", { className: "sr-only", children: newWindowLabel })
14578
+ /* @__PURE__ */ jsx18("span", { className: "sr-only", children: newWindowLabel })
14500
14579
  ] }) : content }, badge.id);
14501
14580
  })
14502
14581
  }
@@ -14504,8 +14583,11 @@ function ArbitrationBadge({
14504
14583
  }
14505
14584
 
14506
14585
  // src/components/reviews.tsx
14507
- import { cn as cn12 } from "@reblu/site-ui/utils";
14508
- import { Fragment as Fragment4, jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
14586
+ import { cn as cn14 } from "@reblu/site-ui/utils";
14587
+
14588
+ // src/components/_review-card.tsx
14589
+ import { cn as cn13 } from "@reblu/site-ui/utils";
14590
+ import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
14509
14591
  function isHttps(value) {
14510
14592
  if (typeof value !== "string") return false;
14511
14593
  try {
@@ -14515,7 +14597,7 @@ function isHttps(value) {
14515
14597
  return false;
14516
14598
  }
14517
14599
  }
14518
- function isUsable2(value) {
14600
+ function isUsableReview(value) {
14519
14601
  if (typeof value !== "object" || value === null) return false;
14520
14602
  const review = value;
14521
14603
  return typeof review.id === "string" && typeof review.authorName === "string" && review.authorName.trim() !== "" && typeof review.rating === "number" && Number.isInteger(review.rating) && review.rating >= 1 && review.rating <= 5 && typeof review.sourceName === "string" && isHttps(review.sourceUrl);
@@ -14528,7 +14610,7 @@ function formatDay(day, locale) {
14528
14610
  }
14529
14611
  var STAR_PATH = "M12 2.5l2.9 5.9 6.5.9-4.7 4.6 1.1 6.5L12 17.3l-5.8 3.1 1.1-6.5L2.6 9.3l6.5-.9z";
14530
14612
  function Stars({ rating }) {
14531
- return /* @__PURE__ */ jsx18("div", { role: "img", "aria-label": `${rating} de 5 estrellas`, className: "flex gap-0.5", children: [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ jsx18(
14613
+ return /* @__PURE__ */ jsx19("div", { role: "img", "aria-label": `${rating} de 5 estrellas`, className: "flex gap-0.5", children: [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ jsx19(
14532
14614
  "svg",
14533
14615
  {
14534
14616
  "aria-hidden": "true",
@@ -14540,11 +14622,56 @@ function Stars({ rating }) {
14540
14622
  stroke: "currentColor",
14541
14623
  strokeWidth: "1.5",
14542
14624
  strokeLinejoin: "round",
14543
- children: /* @__PURE__ */ jsx18("path", { d: STAR_PATH })
14625
+ children: /* @__PURE__ */ jsx19("path", { d: STAR_PATH })
14544
14626
  },
14545
14627
  n
14546
14628
  )) });
14547
14629
  }
14630
+ function usableReviews(reviews) {
14631
+ return Array.isArray(reviews) ? reviews.filter(isUsableReview) : [];
14632
+ }
14633
+ function ReviewCard({
14634
+ review,
14635
+ linkLabel,
14636
+ newWindowLabel,
14637
+ locale,
14638
+ className
14639
+ }) {
14640
+ const date = formatDay(review.reviewDate, locale);
14641
+ return /* @__PURE__ */ jsxs18(
14642
+ "article",
14643
+ {
14644
+ "data-slot": "review",
14645
+ "data-source": review.source,
14646
+ className: cn13("flex h-full flex-col gap-3 rounded-lg border p-5", className),
14647
+ children: [
14648
+ /* @__PURE__ */ jsx19(Stars, { rating: review.rating }),
14649
+ review.text && review.text.trim() !== "" ? /* @__PURE__ */ jsx19("blockquote", { className: "flex-1", children: /* @__PURE__ */ jsx19("p", { children: review.text }) }) : null,
14650
+ /* @__PURE__ */ jsxs18("footer", { className: "mt-auto space-y-1 text-sm", children: [
14651
+ /* @__PURE__ */ jsx19("p", { className: "font-semibold", children: review.authorName }),
14652
+ date ? /* @__PURE__ */ jsx19("time", { dateTime: review.reviewDate, className: "block text-muted-foreground", children: date }) : null,
14653
+ /* @__PURE__ */ jsxs18(
14654
+ "a",
14655
+ {
14656
+ href: review.sourceUrl,
14657
+ target: "_blank",
14658
+ rel: "noopener nofollow",
14659
+ className: "inline-flex underline underline-offset-4",
14660
+ children: [
14661
+ linkLabel(review.sourceName),
14662
+ " ",
14663
+ /* @__PURE__ */ jsx19("span", { className: "sr-only", children: newWindowLabel })
14664
+ ]
14665
+ }
14666
+ )
14667
+ ] })
14668
+ ]
14669
+ }
14670
+ );
14671
+ }
14672
+
14673
+ // src/components/reviews.tsx
14674
+ import { Fragment as Fragment4, jsx as jsx20, jsxs as jsxs19 } from "react/jsx-runtime";
14548
14675
  function Reviews({
14549
14676
  reviews,
14550
14677
  heading,
@@ -14561,11 +14688,10 @@ function Reviews({
14561
14688
  cardClassName,
14562
14689
  noticeClassName
14563
14690
  }) {
14564
- if (!Array.isArray(reviews) || reviews.length === 0) return null;
14565
- const usable = reviews.filter(isUsable2);
14691
+ const usable = usableReviews(reviews);
14566
14692
  if (usable.length === 0) return null;
14567
14693
  const hasNotice = notice !== void 0 && notice !== null && notice !== "";
14568
- const noticeNode = hasNotice ? /* @__PURE__ */ jsx18(
14694
+ const noticeNode = hasNotice ? /* @__PURE__ */ jsx20(
14569
14695
  "p",
14570
14696
  {
14571
14697
  "data-slot": "reviews-notice",
@@ -14573,68 +14699,47 @@ function Reviews({
14573
14699
  children: notice
14574
14700
  }
14575
14701
  ) : null;
14576
- const grid = /* @__PURE__ */ jsx18(
14702
+ const grid = /* @__PURE__ */ jsx20(
14577
14703
  "ul",
14578
14704
  {
14579
14705
  "data-slot": "reviews-grid",
14580
14706
  className: slotClassName("grid gap-6", "sm:grid-cols-2 lg:grid-cols-3", gridClassName),
14581
14707
  children: usable.map((review) => {
14582
- const date = formatDay(review.reviewDate, locale);
14583
- return /* @__PURE__ */ jsx18("li", { children: /* @__PURE__ */ jsxs17(
14584
- "article",
14708
+ return /* @__PURE__ */ jsx20("li", { children: /* @__PURE__ */ jsx20(
14709
+ ReviewCard,
14585
14710
  {
14586
- "data-slot": "review",
14587
- "data-source": review.source,
14588
- className: cn12("flex h-full flex-col gap-3 rounded-lg border p-5", cardClassName),
14589
- children: [
14590
- /* @__PURE__ */ jsx18(Stars, { rating: review.rating }),
14591
- review.text && review.text.trim() !== "" ? /* @__PURE__ */ jsx18("blockquote", { className: "flex-1", children: /* @__PURE__ */ jsx18("p", { children: review.text }) }) : null,
14592
- /* @__PURE__ */ jsxs17("footer", { className: "mt-auto space-y-1 text-sm", children: [
14593
- /* @__PURE__ */ jsx18("p", { className: "font-semibold", children: review.authorName }),
14594
- date ? /* @__PURE__ */ jsx18("time", { dateTime: review.reviewDate, className: "block text-muted-foreground", children: date }) : null,
14595
- /* @__PURE__ */ jsxs17(
14596
- "a",
14597
- {
14598
- href: review.sourceUrl,
14599
- target: "_blank",
14600
- rel: "noopener nofollow",
14601
- className: "inline-flex underline underline-offset-4",
14602
- children: [
14603
- linkLabel(review.sourceName),
14604
- " ",
14605
- /* @__PURE__ */ jsx18("span", { className: "sr-only", children: newWindowLabel })
14606
- ]
14607
- }
14608
- )
14609
- ] })
14610
- ]
14711
+ review,
14712
+ linkLabel,
14713
+ newWindowLabel,
14714
+ locale,
14715
+ className: cardClassName
14611
14716
  }
14612
14717
  ) }, review.id);
14613
14718
  })
14614
14719
  }
14615
14720
  );
14616
- const body3 = /* @__PURE__ */ jsxs17(Fragment4, { children: [
14721
+ const body3 = /* @__PURE__ */ jsxs19(Fragment4, { children: [
14617
14722
  noticePosition === "above" ? noticeNode : null,
14618
14723
  grid,
14619
14724
  noticePosition === "below" ? noticeNode : null
14620
14725
  ] });
14621
14726
  const hasHeading = heading !== void 0 && heading !== null && heading !== "";
14622
14727
  if (!hasHeading) {
14623
- return /* @__PURE__ */ jsx18("div", { "data-slot": "reviews", className: cn12("space-y-4", className), children: body3 });
14728
+ return /* @__PURE__ */ jsx20("div", { "data-slot": "reviews", className: cn14("space-y-4", className), children: body3 });
14624
14729
  }
14625
14730
  const Tag = `h${headingLevel}`;
14626
- return /* @__PURE__ */ jsxs17("section", { "data-slot": "reviews", "aria-labelledby": headingId, className: cn12("space-y-4", className), children: [
14627
- /* @__PURE__ */ jsx18(Tag, { id: headingId, className: slotClassName("", "text-xl font-semibold", headingClassName), children: heading }),
14731
+ return /* @__PURE__ */ jsxs19("section", { "data-slot": "reviews", "aria-labelledby": headingId, className: cn14("space-y-4", className), children: [
14732
+ /* @__PURE__ */ jsx20(Tag, { id: headingId, className: slotClassName("", "text-xl font-semibold", headingClassName), children: heading }),
14628
14733
  body3
14629
14734
  ] });
14630
14735
  }
14631
14736
 
14632
14737
  // src/components/page-blocks.tsx
14633
- import { cn as cn14 } from "@reblu/site-ui/utils";
14738
+ import { cn as cn16 } from "@reblu/site-ui/utils";
14634
14739
  import { buttonVariants as buttonVariants2 } from "@reblu/site-ui/button-variants";
14635
14740
 
14636
14741
  // src/components/content-blocks.tsx
14637
- import { cn as cn13 } from "@reblu/site-ui/utils";
14742
+ import { cn as cn15 } from "@reblu/site-ui/utils";
14638
14743
 
14639
14744
  // src/components/_card-icons.ts
14640
14745
  var CARD_ICON_NODES = {
@@ -14797,11 +14902,11 @@ var CARD_ICON_NODES = {
14797
14902
  };
14798
14903
 
14799
14904
  // src/components/content-blocks.tsx
14800
- import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
14905
+ import { jsx as jsx21, jsxs as jsxs20 } from "react/jsx-runtime";
14801
14906
  var DEFAULT_BEFORE_AFTER_LABELS = Object.freeze({ before: "Antes", after: "Despu\xE9s" });
14802
14907
  function PairImage({ url, alt, label }) {
14803
- return /* @__PURE__ */ jsxs18("figure", { className: "space-y-2", children: [
14804
- /* @__PURE__ */ jsx19("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx19(
14908
+ return /* @__PURE__ */ jsxs20("figure", { className: "space-y-2", children: [
14909
+ /* @__PURE__ */ jsx21("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx21(
14805
14910
  "img",
14806
14911
  {
14807
14912
  src: url,
@@ -14811,7 +14916,7 @@ function PairImage({ url, alt, label }) {
14811
14916
  className: "h-full w-full object-cover"
14812
14917
  }
14813
14918
  ) }),
14814
- /* @__PURE__ */ jsx19("figcaption", { className: "text-sm font-semibold", children: label })
14919
+ /* @__PURE__ */ jsx21("figcaption", { className: "text-sm font-semibold", children: label })
14815
14920
  ] });
14816
14921
  }
14817
14922
  function BeforeAfterPairs({
@@ -14823,26 +14928,26 @@ function BeforeAfterPairs({
14823
14928
  }) {
14824
14929
  const visibleCaption = showCaption && caption && caption.trim() !== "" ? caption : null;
14825
14930
  if (pairs.length === 0 && !visibleCaption) return null;
14826
- return /* @__PURE__ */ jsxs18("div", { "data-slot": "before-after", className: cn13("space-y-4", className), children: [
14827
- pairs.length > 0 && /* @__PURE__ */ jsx19("ul", { className: "grid gap-6 lg:grid-cols-2", children: pairs.map((pair, i) => /* @__PURE__ */ jsxs18(
14931
+ return /* @__PURE__ */ jsxs20("div", { "data-slot": "before-after", className: cn15("space-y-4", className), children: [
14932
+ pairs.length > 0 && /* @__PURE__ */ jsx21("ul", { className: "grid gap-6 lg:grid-cols-2", children: pairs.map((pair, i) => /* @__PURE__ */ jsxs20(
14828
14933
  "li",
14829
14934
  {
14830
14935
  "data-slot": "before-after-pair",
14831
14936
  className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
14832
14937
  children: [
14833
- /* @__PURE__ */ jsx19(PairImage, { url: pair.beforeUrl, alt: pair.alt ?? "", label: labels.before }),
14834
- /* @__PURE__ */ jsx19(PairImage, { url: pair.afterUrl, alt: pair.alt ?? "", label: labels.after })
14938
+ /* @__PURE__ */ jsx21(PairImage, { url: pair.beforeUrl, alt: pair.alt ?? "", label: labels.before }),
14939
+ /* @__PURE__ */ jsx21(PairImage, { url: pair.afterUrl, alt: pair.alt ?? "", label: labels.after })
14835
14940
  ]
14836
14941
  },
14837
14942
  `${pair.beforeUrl}-${pair.afterUrl}-${i}`
14838
14943
  )) }),
14839
- visibleCaption && /* @__PURE__ */ jsx19("p", { "data-slot": "before-after-caption", className: "whitespace-pre-line text-sm opacity-80", children: visibleCaption })
14944
+ visibleCaption && /* @__PURE__ */ jsx21("p", { "data-slot": "before-after-caption", className: "whitespace-pre-line text-sm opacity-80", children: visibleCaption })
14840
14945
  ] });
14841
14946
  }
14842
14947
  function ChipList({ items, className }) {
14843
14948
  const visible = items.filter((item) => item.trim() !== "");
14844
14949
  if (visible.length === 0) return null;
14845
- return /* @__PURE__ */ jsx19("ul", { "data-slot": "chip-list", className: cn13("flex flex-wrap gap-3", className), children: visible.map((item, i) => /* @__PURE__ */ jsx19(
14950
+ return /* @__PURE__ */ jsx21("ul", { "data-slot": "chip-list", className: cn15("flex flex-wrap gap-3", className), children: visible.map((item, i) => /* @__PURE__ */ jsx21(
14846
14951
  "li",
14847
14952
  {
14848
14953
  "data-slot": "chip",
@@ -14858,7 +14963,7 @@ function hasCardIcon(icon) {
14858
14963
  }
14859
14964
  function CardIconSvg({ icon, className }) {
14860
14965
  if (!hasCardIcon(icon)) return null;
14861
- return /* @__PURE__ */ jsx19(
14966
+ return /* @__PURE__ */ jsx21(
14862
14967
  "svg",
14863
14968
  {
14864
14969
  xmlns: "http://www.w3.org/2000/svg",
@@ -14871,30 +14976,30 @@ function CardIconSvg({ icon, className }) {
14871
14976
  "aria-hidden": "true",
14872
14977
  focusable: "false",
14873
14978
  "data-icon": icon,
14874
- className: cn13("h-5 w-5", className),
14875
- children: CARD_ICON_NODES[icon].map(([Tag, attrs], i) => /* @__PURE__ */ jsx19(Tag, { ...attrs }, i))
14979
+ className: cn15("h-5 w-5", className),
14980
+ children: CARD_ICON_NODES[icon].map(([Tag, attrs], i) => /* @__PURE__ */ jsx21(Tag, { ...attrs }, i))
14876
14981
  }
14877
14982
  );
14878
14983
  }
14879
14984
  function IconCardGrid({ items, intro, headingLevel = 3, className }) {
14880
14985
  const hasIntro = !!intro && intro.trim() !== "";
14881
14986
  if (items.length === 0 && !hasIntro) return null;
14882
- return /* @__PURE__ */ jsxs18("div", { "data-slot": "icon-cards", className: cn13("space-y-6", className), children: [
14883
- hasIntro && /* @__PURE__ */ jsx19("p", { className: "max-w-prose text-lg opacity-80", children: intro }),
14884
- items.length > 0 && /* @__PURE__ */ jsx19(
14987
+ return /* @__PURE__ */ jsxs20("div", { "data-slot": "icon-cards", className: cn15("space-y-6", className), children: [
14988
+ hasIntro && /* @__PURE__ */ jsx21("p", { className: "max-w-prose text-lg opacity-80", children: intro }),
14989
+ items.length > 0 && /* @__PURE__ */ jsx21(
14885
14990
  "ul",
14886
14991
  {
14887
14992
  "data-slot": "icon-card-grid",
14888
14993
  className: "grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3",
14889
- children: items.map((item, i) => /* @__PURE__ */ jsxs18(
14994
+ children: items.map((item, i) => /* @__PURE__ */ jsxs20(
14890
14995
  "li",
14891
14996
  {
14892
14997
  "data-slot": "icon-card",
14893
14998
  className: "space-y-3 rounded-xl border border-border bg-card p-6 text-card-foreground",
14894
14999
  children: [
14895
- hasCardIcon(item.icon) && /* @__PURE__ */ jsx19("span", { className: "inline-flex h-12 w-12 items-center justify-center rounded-xl bg-primary/10 text-primary", children: /* @__PURE__ */ jsx19(CardIconSvg, { icon: item.icon }) }),
14896
- /* @__PURE__ */ jsx19(Heading, { level: headingLevel, className: "text-lg font-semibold", children: item.title }),
14897
- item.text && /* @__PURE__ */ jsx19("p", { className: "text-muted-foreground", children: item.text })
15000
+ hasCardIcon(item.icon) && /* @__PURE__ */ jsx21("span", { className: "inline-flex h-12 w-12 items-center justify-center rounded-xl bg-primary/10 text-primary", children: /* @__PURE__ */ jsx21(CardIconSvg, { icon: item.icon }) }),
15001
+ /* @__PURE__ */ jsx21(Heading, { level: headingLevel, className: "text-lg font-semibold", children: item.title }),
15002
+ item.text && /* @__PURE__ */ jsx21("p", { className: "text-muted-foreground", children: item.text })
14898
15003
  ]
14899
15004
  },
14900
15005
  `${item.title}-${i}`
@@ -14920,19 +15025,19 @@ function ImageTextSplit({
14920
15025
  const imageRight = imageSide === "right";
14921
15026
  const hasKicker = !!kicker && kicker.trim() !== "";
14922
15027
  const bodyOffset = heading ? headingLevel : headingLevel - 1;
14923
- return /* @__PURE__ */ jsxs18(
15028
+ return /* @__PURE__ */ jsxs20(
14924
15029
  "div",
14925
15030
  {
14926
15031
  "data-slot": "image-text",
14927
15032
  "data-image-side": imageRight ? "right" : "left",
14928
- className: cn13("grid grid-cols-1 items-center gap-8 md:grid-cols-2", className),
15033
+ className: cn15("grid grid-cols-1 items-center gap-8 md:grid-cols-2", className),
14929
15034
  children: [
14930
- /* @__PURE__ */ jsx19(
15035
+ /* @__PURE__ */ jsx21(
14931
15036
  "div",
14932
15037
  {
14933
15038
  "data-slot": "image-text-media",
14934
- className: cn13(textFirst ? "order-2" : "order-1", imageRight ? "md:order-2" : "md:order-1"),
14935
- children: /* @__PURE__ */ jsx19("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx19(
15039
+ className: cn15(textFirst ? "order-2" : "order-1", imageRight ? "md:order-2" : "md:order-1"),
15040
+ children: /* @__PURE__ */ jsx21("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx21(
14936
15041
  "img",
14937
15042
  {
14938
15043
  src: imageUrl,
@@ -14944,21 +15049,21 @@ function ImageTextSplit({
14944
15049
  ) })
14945
15050
  }
14946
15051
  ),
14947
- /* @__PURE__ */ jsxs18(
15052
+ /* @__PURE__ */ jsxs20(
14948
15053
  "div",
14949
15054
  {
14950
15055
  "data-slot": "image-text-body",
14951
- className: cn13(
15056
+ className: cn15(
14952
15057
  "space-y-4",
14953
15058
  textFirst ? "order-1" : "order-2",
14954
15059
  imageRight ? "md:order-1" : "md:order-2"
14955
15060
  ),
14956
15061
  children: [
14957
- (hasKicker || heading) && /* @__PURE__ */ jsxs18("div", { className: "space-y-2", children: [
14958
- hasKicker && /* @__PURE__ */ jsx19("p", { "data-slot": "page-block-kicker", className: KICKER_CLASS_NAME, children: kicker }),
14959
- heading && /* @__PURE__ */ jsx19(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx19("span", { id: headingId, children: heading }) })
15062
+ (hasKicker || heading) && /* @__PURE__ */ jsxs20("div", { className: "space-y-2", children: [
15063
+ hasKicker && /* @__PURE__ */ jsx21("p", { "data-slot": "page-block-kicker", className: KICKER_CLASS_NAME, children: kicker }),
15064
+ heading && /* @__PURE__ */ jsx21(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx21("span", { id: headingId, children: heading }) })
14960
15065
  ] }),
14961
- html5 && /* @__PURE__ */ jsx19(SafeHtml, { html: sanitizeHtml(html5), headingOffset: bodyOffset })
15066
+ html5 && /* @__PURE__ */ jsx21(SafeHtml, { html: sanitizeHtml(html5), headingOffset: bodyOffset })
14962
15067
  ]
14963
15068
  }
14964
15069
  )
@@ -14968,38 +15073,38 @@ function ImageTextSplit({
14968
15073
  }
14969
15074
 
14970
15075
  // src/components/page-blocks.tsx
14971
- import { jsx as jsx20, jsxs as jsxs19 } from "react/jsx-runtime";
15076
+ import { jsx as jsx22, jsxs as jsxs21 } from "react/jsx-runtime";
14972
15077
  var ALIASES = {
14973
15078
  doctor_embed: "profile_embed",
14974
15079
  specialty_embed: "page_embed"
14975
15080
  };
14976
15081
  function HeroBlock({ block, headingLevel }) {
14977
15082
  const { title, subtitle, imageUrl } = block.data;
14978
- return /* @__PURE__ */ jsxs19("div", { className: "space-y-4", children: [
14979
- /* @__PURE__ */ jsx20(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
14980
- subtitle && /* @__PURE__ */ jsx20("p", { className: "text-lg opacity-80", children: subtitle }),
14981
- imageUrl && /* @__PURE__ */ jsx20("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx20("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
15083
+ return /* @__PURE__ */ jsxs21("div", { className: "space-y-4", children: [
15084
+ /* @__PURE__ */ jsx22(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
15085
+ subtitle && /* @__PURE__ */ jsx22("p", { className: "text-lg opacity-80", children: subtitle }),
15086
+ imageUrl && /* @__PURE__ */ jsx22("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx22("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
14982
15087
  ] });
14983
15088
  }
14984
15089
  function RichtextBlock({ block, headingLevel }) {
14985
- return /* @__PURE__ */ jsx20(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
15090
+ return /* @__PURE__ */ jsx22(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
14986
15091
  }
14987
15092
  function FaqBlock({ block }) {
14988
- return /* @__PURE__ */ jsx20(FaqAccordion, { items: block.data.items });
15093
+ return /* @__PURE__ */ jsx22(FaqAccordion, { items: block.data.items });
14989
15094
  }
14990
15095
  function StatsBlock({ block }) {
14991
- return /* @__PURE__ */ jsx20("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ jsxs19("div", { className: "flex flex-col-reverse gap-1", children: [
14992
- /* @__PURE__ */ jsx20("dt", { className: "text-sm opacity-80", children: item.label }),
14993
- /* @__PURE__ */ jsx20("dd", { className: "text-3xl font-bold", children: item.value })
15096
+ return /* @__PURE__ */ jsx22("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ jsxs21("div", { className: "flex flex-col-reverse gap-1", children: [
15097
+ /* @__PURE__ */ jsx22("dt", { className: "text-sm opacity-80", children: item.label }),
15098
+ /* @__PURE__ */ jsx22("dd", { className: "text-3xl font-bold", children: item.value })
14994
15099
  ] }, i)) });
14995
15100
  }
14996
15101
  function TestimonialBlock({ block }) {
14997
15102
  const { quote, author, role, avatarUrl } = block.data;
14998
- return /* @__PURE__ */ jsxs19("figure", { className: "space-y-4", children: [
14999
- /* @__PURE__ */ jsx20("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ jsx20("p", { children: quote }) }),
15000
- /* @__PURE__ */ jsxs19("figcaption", { className: "flex items-center gap-3", children: [
15103
+ return /* @__PURE__ */ jsxs21("figure", { className: "space-y-4", children: [
15104
+ /* @__PURE__ */ jsx22("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ jsx22("p", { children: quote }) }),
15105
+ /* @__PURE__ */ jsxs21("figcaption", { className: "flex items-center gap-3", children: [
15001
15106
  avatarUrl && // eslint-disable-next-line @next/next/no-img-element
15002
- /* @__PURE__ */ jsx20(
15107
+ /* @__PURE__ */ jsx22(
15003
15108
  "img",
15004
15109
  {
15005
15110
  src: avatarUrl,
@@ -15008,9 +15113,9 @@ function TestimonialBlock({ block }) {
15008
15113
  className: "h-10 w-10 rounded-full object-cover"
15009
15114
  }
15010
15115
  ),
15011
- /* @__PURE__ */ jsxs19("span", { children: [
15012
- /* @__PURE__ */ jsx20("span", { className: "font-semibold", children: author }),
15013
- role && /* @__PURE__ */ jsx20("span", { className: "block text-sm opacity-80", children: role })
15116
+ /* @__PURE__ */ jsxs21("span", { children: [
15117
+ /* @__PURE__ */ jsx22("span", { className: "font-semibold", children: author }),
15118
+ role && /* @__PURE__ */ jsx22("span", { className: "block text-sm opacity-80", children: role })
15014
15119
  ] })
15015
15120
  ] })
15016
15121
  ] });
@@ -15019,19 +15124,19 @@ function CtaSlotBlock(_props) {
15019
15124
  return null;
15020
15125
  }
15021
15126
  function FeatureListBlock({ block }) {
15022
- return /* @__PURE__ */ jsx20("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ jsx20("li", { children: item.text }, i)) });
15127
+ return /* @__PURE__ */ jsx22("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ jsx22("li", { children: item.text }, i)) });
15023
15128
  }
15024
15129
  function GalleryBlock({ block }) {
15025
15130
  const { images } = block.data;
15026
- return /* @__PURE__ */ jsx20(
15131
+ return /* @__PURE__ */ jsx22(
15027
15132
  "div",
15028
15133
  {
15029
- className: cn14(
15134
+ className: cn16(
15030
15135
  "grid gap-4",
15031
15136
  images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
15032
15137
  ),
15033
- children: images.map((img, i) => /* @__PURE__ */ jsxs19("figure", { className: "space-y-1", children: [
15034
- /* @__PURE__ */ jsx20("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx20(
15138
+ children: images.map((img, i) => /* @__PURE__ */ jsxs21("figure", { className: "space-y-1", children: [
15139
+ /* @__PURE__ */ jsx22("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx22(
15035
15140
  "img",
15036
15141
  {
15037
15142
  src: img.url,
@@ -15040,7 +15145,7 @@ function GalleryBlock({ block }) {
15040
15145
  className: "h-full w-full object-cover"
15041
15146
  }
15042
15147
  ) }),
15043
- img.caption && /* @__PURE__ */ jsx20("figcaption", { className: "text-sm opacity-80", children: img.caption })
15148
+ img.caption && /* @__PURE__ */ jsx22("figcaption", { className: "text-sm opacity-80", children: img.caption })
15044
15149
  ] }, `${img.url}-${i}`))
15045
15150
  }
15046
15151
  );
@@ -15050,13 +15155,13 @@ function EmbedCard({
15050
15155
  headingLevel,
15051
15156
  embedHref
15052
15157
  }) {
15053
- return /* @__PURE__ */ jsxs19(
15158
+ return /* @__PURE__ */ jsxs21(
15054
15159
  "a",
15055
15160
  {
15056
15161
  href: embedHref(resolved),
15057
15162
  className: "group block overflow-hidden rounded-xl border border-border bg-card text-card-foreground transition-shadow hover:shadow-md focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring",
15058
15163
  children: [
15059
- resolved.coverImageUrl && /* @__PURE__ */ jsx20("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ jsx20(
15164
+ resolved.coverImageUrl && /* @__PURE__ */ jsx22("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ jsx22(
15060
15165
  "img",
15061
15166
  {
15062
15167
  src: resolved.coverImageUrl,
@@ -15065,35 +15170,35 @@ function EmbedCard({
15065
15170
  className: "h-full w-full object-cover"
15066
15171
  }
15067
15172
  ) }),
15068
- /* @__PURE__ */ jsxs19("div", { className: "space-y-1 p-4", children: [
15069
- /* @__PURE__ */ jsx20(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
15070
- resolved.role && /* @__PURE__ */ jsx20("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
15071
- resolved.excerpt && /* @__PURE__ */ jsx20("p", { className: "text-muted-foreground", children: resolved.excerpt })
15173
+ /* @__PURE__ */ jsxs21("div", { className: "space-y-1 p-4", children: [
15174
+ /* @__PURE__ */ jsx22(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
15175
+ resolved.role && /* @__PURE__ */ jsx22("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
15176
+ resolved.excerpt && /* @__PURE__ */ jsx22("p", { className: "text-muted-foreground", children: resolved.excerpt })
15072
15177
  ] })
15073
15178
  ]
15074
15179
  }
15075
15180
  );
15076
15181
  }
15077
15182
  function PageEmbedBlock({ block, headingLevel, embedHref }) {
15078
- return /* @__PURE__ */ jsx20(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
15183
+ return /* @__PURE__ */ jsx22(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
15079
15184
  }
15080
15185
  function ProfileEmbedBlock({
15081
15186
  block,
15082
15187
  headingLevel,
15083
15188
  embedHref
15084
15189
  }) {
15085
- return /* @__PURE__ */ jsx20(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
15190
+ return /* @__PURE__ */ jsx22(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
15086
15191
  }
15087
15192
  function BeforeAfterBlock({ block }) {
15088
15193
  const { pairs, showCaption, caption } = block.data;
15089
- return /* @__PURE__ */ jsx20(BeforeAfterPairs, { pairs, showCaption, caption });
15194
+ return /* @__PURE__ */ jsx22(BeforeAfterPairs, { pairs, showCaption, caption });
15090
15195
  }
15091
15196
  function ChipsBlock({ block }) {
15092
- return /* @__PURE__ */ jsx20(ChipList, { items: block.data.items });
15197
+ return /* @__PURE__ */ jsx22(ChipList, { items: block.data.items });
15093
15198
  }
15094
15199
  function ImageTextBlock({ block, headingLevel, headingId }) {
15095
15200
  const { kicker, imageUrl, alt, imageSide, mobileOrder, html: html5 } = block.data;
15096
- return /* @__PURE__ */ jsx20(
15201
+ return /* @__PURE__ */ jsx22(
15097
15202
  ImageTextSplit,
15098
15203
  {
15099
15204
  imageUrl,
@@ -15109,7 +15214,17 @@ function ImageTextBlock({ block, headingLevel, headingId }) {
15109
15214
  );
15110
15215
  }
15111
15216
  function IconCardsBlock({ block, headingLevel }) {
15112
- return /* @__PURE__ */ jsx20(IconCardGrid, { items: block.data.items, intro: block.data.intro, headingLevel });
15217
+ return /* @__PURE__ */ jsx22(IconCardGrid, { items: block.data.items, intro: block.data.intro, headingLevel });
15218
+ }
15219
+ function ReviewsBlock({ block }) {
15220
+ const { layout, notice } = block.data;
15221
+ return /* @__PURE__ */ jsx22("div", { "data-slot": "reviews-block", "data-reviews-layout": layout ?? "grid", children: /* @__PURE__ */ jsx22(
15222
+ Reviews,
15223
+ {
15224
+ reviews: block.reviews,
15225
+ notice: notice && notice.trim() !== "" ? notice : void 0
15226
+ }
15227
+ ) });
15113
15228
  }
15114
15229
  var DEFAULT_RENDERERS = {
15115
15230
  hero: HeroBlock,
@@ -15125,7 +15240,8 @@ var DEFAULT_RENDERERS = {
15125
15240
  before_after: BeforeAfterBlock,
15126
15241
  chips: ChipsBlock,
15127
15242
  icon_cards: IconCardsBlock,
15128
- image_text: ImageTextBlock
15243
+ image_text: ImageTextBlock,
15244
+ reviews: ReviewsBlock
15129
15245
  };
15130
15246
  var KICKER_TYPES = /* @__PURE__ */ new Set([
15131
15247
  "before_after",
@@ -15183,14 +15299,14 @@ function toIdFragment(value) {
15183
15299
  function SectionCta2({ cta }) {
15184
15300
  if (!hasUsableCta(cta)) return null;
15185
15301
  const variant = toButtonVariant(cta.variant);
15186
- return /* @__PURE__ */ jsx20("div", { className: "pt-2", children: /* @__PURE__ */ jsx20(
15302
+ return /* @__PURE__ */ jsx22("div", { className: "pt-2", children: /* @__PURE__ */ jsx22(
15187
15303
  "a",
15188
15304
  {
15189
15305
  href: cta.url,
15190
15306
  "data-slot": "button",
15191
15307
  "data-variant": variant,
15192
15308
  "data-size": "default",
15193
- className: cn14(buttonVariants2({ variant, size: "default" })),
15309
+ className: cn16(buttonVariants2({ variant, size: "default" })),
15194
15310
  ...cta.isExternal ? { target: "_blank", rel: "noopener noreferrer" } : {},
15195
15311
  children: cta.label
15196
15312
  }
@@ -15211,6 +15327,8 @@ function PageBlocks({
15211
15327
  const type = canonicalTypeOf(block.blockType);
15212
15328
  if (type === null) return [];
15213
15329
  if (EMBED_TYPES.has(type) && !block.resolved) return [];
15330
+ if (type === "reviews" && (!Array.isArray(block.reviews) || block.reviews.length === 0))
15331
+ return [];
15214
15332
  if (type === "cta" && !components?.cta && !block.heading && !hasUsableCta(block.cta)) return [];
15215
15333
  const Renderer = components?.[type] ?? DEFAULT_RENDERERS[type];
15216
15334
  const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
@@ -15218,18 +15336,18 @@ function PageBlocks({
15218
15336
  const kicker = kickerOf(type, block);
15219
15337
  const ownsHeading = OWN_HEADING_TYPES.has(type);
15220
15338
  return [
15221
- /* @__PURE__ */ jsxs19(
15339
+ /* @__PURE__ */ jsxs21(
15222
15340
  "section",
15223
15341
  {
15224
15342
  "data-slot": "page-block",
15225
15343
  "data-block-type": type,
15226
15344
  "aria-labelledby": headingId,
15227
15345
  style: surfaceStyle(background),
15228
- className: cn14("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
15346
+ className: cn16("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
15229
15347
  children: [
15230
- kicker && /* @__PURE__ */ jsx20("p", { "data-slot": "page-block-kicker", className: cn14("-mb-4", KICKER_CLASS_NAME), children: kicker }),
15231
- block.heading && !ownsHeading && /* @__PURE__ */ jsx20(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx20("span", { id: headingId, children: block.heading }) }),
15232
- ownsHeading ? /* @__PURE__ */ jsx20(
15348
+ kicker && /* @__PURE__ */ jsx22("p", { "data-slot": "page-block-kicker", className: cn16("-mb-4", KICKER_CLASS_NAME), children: kicker }),
15349
+ block.heading && !ownsHeading && /* @__PURE__ */ jsx22(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx22("span", { id: headingId, children: block.heading }) }),
15350
+ ownsHeading ? /* @__PURE__ */ jsx22(
15233
15351
  Renderer,
15234
15352
  {
15235
15353
  block,
@@ -15237,7 +15355,7 @@ function PageBlocks({
15237
15355
  embedHref,
15238
15356
  headingId
15239
15357
  }
15240
- ) : /* @__PURE__ */ jsx20(
15358
+ ) : /* @__PURE__ */ jsx22(
15241
15359
  Renderer,
15242
15360
  {
15243
15361
  block,
@@ -15245,7 +15363,7 @@ function PageBlocks({
15245
15363
  embedHref
15246
15364
  }
15247
15365
  ),
15248
- /* @__PURE__ */ jsx20(SectionCta2, { cta: block.cta })
15366
+ /* @__PURE__ */ jsx22(SectionCta2, { cta: block.cta })
15249
15367
  ]
15250
15368
  },
15251
15369
  block.id
@@ -15253,12 +15371,12 @@ function PageBlocks({
15253
15371
  ];
15254
15372
  });
15255
15373
  if (sections.length === 0) return null;
15256
- return /* @__PURE__ */ jsx20("div", { className: cn14("space-y-12", className), "data-slot": "page-blocks", children: sections });
15374
+ return /* @__PURE__ */ jsx22("div", { className: cn16("space-y-12", className), "data-slot": "page-blocks", children: sections });
15257
15375
  }
15258
15376
 
15259
15377
  // src/components/shop-filters.tsx
15260
- import { cn as cn15 } from "@reblu/site-ui/utils";
15261
- import { jsx as jsx21, jsxs as jsxs20 } from "react/jsx-runtime";
15378
+ import { cn as cn17 } from "@reblu/site-ui/utils";
15379
+ import { jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
15262
15380
  var DEFAULT_SHOP_PRICE_BANDS = [
15263
15381
  { max: 2500 },
15264
15382
  { min: 2500, max: 5e3 },
@@ -15302,7 +15420,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
15302
15420
  return "";
15303
15421
  }
15304
15422
  function OptionLink({ href, active, label, onActivate }) {
15305
- return /* @__PURE__ */ jsx21(
15423
+ return /* @__PURE__ */ jsx23(
15306
15424
  "a",
15307
15425
  {
15308
15426
  href,
@@ -15311,7 +15429,7 @@ function OptionLink({ href, active, label, onActivate }) {
15311
15429
  event.preventDefault();
15312
15430
  onActivate();
15313
15431
  } : void 0,
15314
- className: cn15(
15432
+ className: cn17(
15315
15433
  "inline-flex items-center rounded-full border px-3 py-1 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
15316
15434
  active ? "border-transparent bg-primary text-primary-foreground" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground"
15317
15435
  ),
@@ -15320,9 +15438,9 @@ function OptionLink({ href, active, label, onActivate }) {
15320
15438
  );
15321
15439
  }
15322
15440
  function FilterFieldset({ legend, children: children2 }) {
15323
- return /* @__PURE__ */ jsxs20("fieldset", { className: "space-y-2", children: [
15324
- /* @__PURE__ */ jsx21("legend", { className: "text-sm font-medium text-foreground", children: legend }),
15325
- /* @__PURE__ */ jsx21("div", { className: "flex flex-wrap gap-2", children: children2 })
15441
+ return /* @__PURE__ */ jsxs22("fieldset", { className: "space-y-2", children: [
15442
+ /* @__PURE__ */ jsx23("legend", { className: "text-sm font-medium text-foreground", children: legend }),
15443
+ /* @__PURE__ */ jsx23("div", { className: "flex flex-wrap gap-2", children: children2 })
15326
15444
  ] });
15327
15445
  }
15328
15446
  function ShopFilters({
@@ -15345,11 +15463,11 @@ function ShopFilters({
15345
15463
  if (!shouldRenderShopFilters(facets, active)) {
15346
15464
  return null;
15347
15465
  }
15348
- return /* @__PURE__ */ jsxs20("div", { className: cn15("space-y-6", className), "data-slot": "shop-filters", children: [
15466
+ return /* @__PURE__ */ jsxs22("div", { className: cn17("space-y-6", className), "data-slot": "shop-filters", children: [
15349
15467
  visibleTaxonomies.map((axis) => {
15350
15468
  const activeSlug = active.taxonomy?.[axis.key];
15351
- return /* @__PURE__ */ jsxs20(FilterFieldset, { legend: axis.label, children: [
15352
- /* @__PURE__ */ jsx21(
15469
+ return /* @__PURE__ */ jsxs22(FilterFieldset, { legend: axis.label, children: [
15470
+ /* @__PURE__ */ jsx23(
15353
15471
  OptionLink,
15354
15472
  {
15355
15473
  href: hrefs.taxonomy(axis.key, void 0),
@@ -15364,7 +15482,7 @@ function ShopFilters({
15364
15482
  ),
15365
15483
  axis.terms.map((term) => {
15366
15484
  const isActive = activeSlug === term.slug;
15367
- return /* @__PURE__ */ jsx21(
15485
+ return /* @__PURE__ */ jsx23(
15368
15486
  OptionLink,
15369
15487
  {
15370
15488
  href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
@@ -15384,9 +15502,9 @@ function ShopFilters({
15384
15502
  }),
15385
15503
  visibleAttributes.map((attr) => {
15386
15504
  const activeValues = toValueArray(active.attr?.[attr.key]);
15387
- return /* @__PURE__ */ jsx21(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
15505
+ return /* @__PURE__ */ jsx23(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
15388
15506
  const isActive = activeValues.includes(opt.value);
15389
- return /* @__PURE__ */ jsx21(
15507
+ return /* @__PURE__ */ jsx23(
15390
15508
  OptionLink,
15391
15509
  {
15392
15510
  href: hrefs.attr(attr.key, opt.value),
@@ -15404,11 +15522,11 @@ function ShopFilters({
15404
15522
  );
15405
15523
  }) }, attr.key);
15406
15524
  }),
15407
- showPriceGroup && /* @__PURE__ */ jsx21(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
15525
+ showPriceGroup && /* @__PURE__ */ jsx23(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
15408
15526
  const isActive = active.priceMin === band.min && active.priceMax === band.max;
15409
15527
  const nextMin = isActive ? void 0 : band.min;
15410
15528
  const nextMax = isActive ? void 0 : band.max;
15411
- return /* @__PURE__ */ jsx21(
15529
+ return /* @__PURE__ */ jsx23(
15412
15530
  OptionLink,
15413
15531
  {
15414
15532
  href: hrefs.price(nextMin, nextMax),
@@ -15419,7 +15537,7 @@ function ShopFilters({
15419
15537
  i
15420
15538
  );
15421
15539
  }) }),
15422
- hasOnSale && /* @__PURE__ */ jsx21(
15540
+ hasOnSale && /* @__PURE__ */ jsx23(
15423
15541
  OptionLink,
15424
15542
  {
15425
15543
  href: hrefs.onSale(!active.onSale),
@@ -15428,7 +15546,7 @@ function ShopFilters({
15428
15546
  onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
15429
15547
  }
15430
15548
  ),
15431
- /* @__PURE__ */ jsx21(
15549
+ /* @__PURE__ */ jsx23(
15432
15550
  "a",
15433
15551
  {
15434
15552
  href: hrefs.clearAll(),
@@ -15444,8 +15562,8 @@ function ShopFilters({
15444
15562
  }
15445
15563
 
15446
15564
  // src/components/course-catalog-filters.tsx
15447
- import { cn as cn16 } from "@reblu/site-ui/utils";
15448
- import { jsx as jsx22, jsxs as jsxs21 } from "react/jsx-runtime";
15565
+ import { cn as cn18 } from "@reblu/site-ui/utils";
15566
+ import { jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
15449
15567
  var DEFAULT_COURSE_PRICE_BANDS = [
15450
15568
  { max: 5e3 },
15451
15569
  { min: 5e3, max: 15e3 },
@@ -15498,9 +15616,9 @@ function CourseCatalogFilters({
15498
15616
  const showPrice = enabled.price !== false;
15499
15617
  const isFree = Boolean(active.free);
15500
15618
  if (!showCategories && !showInstructors && !showPrice) return null;
15501
- return /* @__PURE__ */ jsxs21("div", { className: cn16("space-y-6", className), "data-slot": "course-catalog-filters", children: [
15502
- showCategories && /* @__PURE__ */ jsxs21(FilterFieldset, { legend: t.category, children: [
15503
- /* @__PURE__ */ jsx22(
15619
+ return /* @__PURE__ */ jsxs23("div", { className: cn18("space-y-6", className), "data-slot": "course-catalog-filters", children: [
15620
+ showCategories && /* @__PURE__ */ jsxs23(FilterFieldset, { legend: t.category, children: [
15621
+ /* @__PURE__ */ jsx24(
15504
15622
  OptionLink,
15505
15623
  {
15506
15624
  href: categoryHref(void 0),
@@ -15512,7 +15630,7 @@ function CourseCatalogFilters({
15512
15630
  sortedCategories.map((category) => {
15513
15631
  const isActive = active.category === category.slug;
15514
15632
  const next2 = isActive ? void 0 : category.slug;
15515
- return /* @__PURE__ */ jsx22(
15633
+ return /* @__PURE__ */ jsx24(
15516
15634
  OptionLink,
15517
15635
  {
15518
15636
  href: categoryHref(next2),
@@ -15524,8 +15642,8 @@ function CourseCatalogFilters({
15524
15642
  );
15525
15643
  })
15526
15644
  ] }),
15527
- showInstructors && /* @__PURE__ */ jsxs21(FilterFieldset, { legend: t.instructor, children: [
15528
- /* @__PURE__ */ jsx22(
15645
+ showInstructors && /* @__PURE__ */ jsxs23(FilterFieldset, { legend: t.instructor, children: [
15646
+ /* @__PURE__ */ jsx24(
15529
15647
  OptionLink,
15530
15648
  {
15531
15649
  href: hrefs.instructor(void 0),
@@ -15537,7 +15655,7 @@ function CourseCatalogFilters({
15537
15655
  named.map((instructor) => {
15538
15656
  const isActive = active.instructor === instructor.id;
15539
15657
  const next2 = isActive ? void 0 : instructor.id;
15540
- return /* @__PURE__ */ jsx22(
15658
+ return /* @__PURE__ */ jsx24(
15541
15659
  OptionLink,
15542
15660
  {
15543
15661
  href: hrefs.instructor(next2),
@@ -15549,8 +15667,8 @@ function CourseCatalogFilters({
15549
15667
  );
15550
15668
  })
15551
15669
  ] }),
15552
- showPrice && /* @__PURE__ */ jsxs21(FilterFieldset, { legend: t.price, children: [
15553
- /* @__PURE__ */ jsx22(
15670
+ showPrice && /* @__PURE__ */ jsxs23(FilterFieldset, { legend: t.price, children: [
15671
+ /* @__PURE__ */ jsx24(
15554
15672
  OptionLink,
15555
15673
  {
15556
15674
  href: hrefs.free(!isFree),
@@ -15565,7 +15683,7 @@ function CourseCatalogFilters({
15565
15683
  const isActive = !isFree && active.priceMin === band.min && active.priceMax === band.max;
15566
15684
  const nextMin = isActive ? void 0 : band.min;
15567
15685
  const nextMax = isActive ? void 0 : band.max;
15568
- return /* @__PURE__ */ jsx22(
15686
+ return /* @__PURE__ */ jsx24(
15569
15687
  OptionLink,
15570
15688
  {
15571
15689
  href: hrefs.price(nextMin, nextMax),
@@ -15577,7 +15695,7 @@ function CourseCatalogFilters({
15577
15695
  );
15578
15696
  })
15579
15697
  ] }),
15580
- /* @__PURE__ */ jsx22(
15698
+ /* @__PURE__ */ jsx24(
15581
15699
  "a",
15582
15700
  {
15583
15701
  href: hrefs.clearAll(),
@@ -15599,8 +15717,8 @@ function CourseCatalogFilters({
15599
15717
  }
15600
15718
 
15601
15719
  // src/components/cart-line-list.tsx
15602
- import { cn as cn17 } from "@reblu/site-ui/utils";
15603
- import { jsx as jsx23, jsxs as jsxs22 } from "react/jsx-runtime";
15720
+ import { cn as cn19 } from "@reblu/site-ui/utils";
15721
+ import { jsx as jsx25, jsxs as jsxs24 } from "react/jsx-runtime";
15604
15722
  var DEFAULT_LABELS2 = {
15605
15723
  quantityLabel: "Cantidad",
15606
15724
  decrease: "Reducir cantidad",
@@ -15613,20 +15731,20 @@ var DEFAULT_LABELS2 = {
15613
15731
  function CartLineIncludes({ entries, note, className }) {
15614
15732
  const hasNote = note != null && note !== false && note !== "";
15615
15733
  if (entries.length === 0 && !hasNote) return null;
15616
- return /* @__PURE__ */ jsxs22(
15734
+ return /* @__PURE__ */ jsxs24(
15617
15735
  "div",
15618
15736
  {
15619
- className: cn17("mt-2 space-y-2 rounded-lg bg-muted px-4 py-3 text-sm", className),
15737
+ className: cn19("mt-2 space-y-2 rounded-lg bg-muted px-4 py-3 text-sm", className),
15620
15738
  "data-slot": "cart-line-includes",
15621
15739
  children: [
15622
- entries.length > 0 && /* @__PURE__ */ jsx23("dl", { className: "grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1.5", children: entries.map((entry, idx) => (
15740
+ entries.length > 0 && /* @__PURE__ */ jsx25("dl", { className: "grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1.5", children: entries.map((entry, idx) => (
15623
15741
  // eslint-disable-next-line react/no-array-index-key -- entries are positional, SITE-built rows
15624
- /* @__PURE__ */ jsxs22("div", { className: "contents", children: [
15625
- /* @__PURE__ */ jsx23("dt", { className: "font-semibold text-muted-foreground", children: entry.label }),
15626
- /* @__PURE__ */ jsx23("dd", { className: "m-0", children: entry.value })
15742
+ /* @__PURE__ */ jsxs24("div", { className: "contents", children: [
15743
+ /* @__PURE__ */ jsx25("dt", { className: "font-semibold text-muted-foreground", children: entry.label }),
15744
+ /* @__PURE__ */ jsx25("dd", { className: "m-0", children: entry.value })
15627
15745
  ] }, idx)
15628
15746
  )) }),
15629
- hasNote && /* @__PURE__ */ jsx23("p", { className: "text-muted-foreground", children: note })
15747
+ hasNote && /* @__PURE__ */ jsx25("p", { className: "text-muted-foreground", children: note })
15630
15748
  ]
15631
15749
  }
15632
15750
  );
@@ -15655,9 +15773,9 @@ function CartLineList({
15655
15773
  }) {
15656
15774
  const t = { ...DEFAULT_LABELS2, ...labels };
15657
15775
  const noticeContent = notice === true ? t.cancelledNotice : notice;
15658
- return /* @__PURE__ */ jsxs22("div", { className: cn17("space-y-4", className), "data-slot": "cart-line-list", children: [
15659
- /* @__PURE__ */ jsx23("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
15660
- noticeContent != null && noticeContent !== false && /* @__PURE__ */ jsx23(
15776
+ return /* @__PURE__ */ jsxs24("div", { className: cn19("space-y-4", className), "data-slot": "cart-line-list", children: [
15777
+ /* @__PURE__ */ jsx25("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
15778
+ noticeContent != null && noticeContent !== false && /* @__PURE__ */ jsx25(
15661
15779
  "div",
15662
15780
  {
15663
15781
  role: "status",
@@ -15666,34 +15784,34 @@ function CartLineList({
15666
15784
  children: noticeContent
15667
15785
  }
15668
15786
  ),
15669
- /* @__PURE__ */ jsx23("ul", { className: "space-y-4", children: items.map((item) => {
15787
+ /* @__PURE__ */ jsx25("ul", { className: "space-y-4", children: items.map((item) => {
15670
15788
  const maxQty = item.maxStock ?? Infinity;
15671
15789
  const atMax = item.quantity >= maxQty;
15672
15790
  const atMin = item.quantity <= 1;
15673
15791
  const message = lineMessage?.(item);
15674
15792
  const includes = lineIncludes?.(item);
15675
- return /* @__PURE__ */ jsxs22(
15793
+ return /* @__PURE__ */ jsxs24(
15676
15794
  "li",
15677
15795
  {
15678
15796
  className: "flex gap-4 rounded-xl border border-border bg-card p-4",
15679
15797
  children: [
15680
- /* @__PURE__ */ jsx23("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ jsx23("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
15681
- /* @__PURE__ */ jsxs22("div", { className: "min-w-0 flex-1", children: [
15682
- /* @__PURE__ */ jsx23("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
15683
- item.variantName && /* @__PURE__ */ jsx23("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
15684
- /* @__PURE__ */ jsxs22("p", { className: "mt-1 text-sm text-muted-foreground", children: [
15798
+ /* @__PURE__ */ jsx25("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ jsx25("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
15799
+ /* @__PURE__ */ jsxs24("div", { className: "min-w-0 flex-1", children: [
15800
+ /* @__PURE__ */ jsx25("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
15801
+ item.variantName && /* @__PURE__ */ jsx25("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
15802
+ /* @__PURE__ */ jsxs24("p", { className: "mt-1 text-sm text-muted-foreground", children: [
15685
15803
  formatPrice(item.unitPrice, currencyCode, locale),
15686
15804
  " ",
15687
15805
  t.unitPriceSuffix
15688
15806
  ] }),
15689
- /* @__PURE__ */ jsxs22(
15807
+ /* @__PURE__ */ jsxs24(
15690
15808
  "div",
15691
15809
  {
15692
15810
  role: "group",
15693
15811
  "aria-label": t.quantityLabel,
15694
15812
  className: "mt-3 flex items-center gap-3",
15695
15813
  children: [
15696
- /* @__PURE__ */ jsx23(
15814
+ /* @__PURE__ */ jsx25(
15697
15815
  "button",
15698
15816
  {
15699
15817
  type: "button",
@@ -15704,8 +15822,8 @@ function CartLineList({
15704
15822
  children: "\u2212"
15705
15823
  }
15706
15824
  ),
15707
- /* @__PURE__ */ jsx23("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
15708
- /* @__PURE__ */ jsx23(
15825
+ /* @__PURE__ */ jsx25("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
15826
+ /* @__PURE__ */ jsx25(
15709
15827
  "button",
15710
15828
  {
15711
15829
  type: "button",
@@ -15716,7 +15834,7 @@ function CartLineList({
15716
15834
  children: "+"
15717
15835
  }
15718
15836
  ),
15719
- onRemove && /* @__PURE__ */ jsx23(
15837
+ onRemove && /* @__PURE__ */ jsx25(
15720
15838
  "button",
15721
15839
  {
15722
15840
  type: "button",
@@ -15729,7 +15847,7 @@ function CartLineList({
15729
15847
  ]
15730
15848
  }
15731
15849
  ),
15732
- message != null && message !== false && /* @__PURE__ */ jsx23(
15850
+ message != null && message !== false && /* @__PURE__ */ jsx25(
15733
15851
  "p",
15734
15852
  {
15735
15853
  className: "mt-2 text-sm text-destructive",
@@ -15737,12 +15855,12 @@ function CartLineList({
15737
15855
  children: message
15738
15856
  }
15739
15857
  ),
15740
- includes != null && includes !== false && /* @__PURE__ */ jsxs22("details", { className: "mt-2", "data-slot": "cart-line-list-includes", children: [
15741
- /* @__PURE__ */ jsx23("summary", { className: "cursor-pointer text-sm font-semibold text-primary", children: t.includesSummary }),
15858
+ includes != null && includes !== false && /* @__PURE__ */ jsxs24("details", { className: "mt-2", "data-slot": "cart-line-list-includes", children: [
15859
+ /* @__PURE__ */ jsx25("summary", { className: "cursor-pointer text-sm font-semibold text-primary", children: t.includesSummary }),
15742
15860
  includes
15743
15861
  ] })
15744
15862
  ] }),
15745
- /* @__PURE__ */ jsx23("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ jsx23("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
15863
+ /* @__PURE__ */ jsx25("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ jsx25("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
15746
15864
  ]
15747
15865
  },
15748
15866
  lineKey(item.productId, item.variantId)
@@ -15752,8 +15870,8 @@ function CartLineList({
15752
15870
  }
15753
15871
 
15754
15872
  // src/components/cart-summary.tsx
15755
- import { cn as cn18 } from "@reblu/site-ui/utils";
15756
- import { jsx as jsx24, jsxs as jsxs23 } from "react/jsx-runtime";
15873
+ import { cn as cn20 } from "@reblu/site-ui/utils";
15874
+ import { jsx as jsx26, jsxs as jsxs25 } from "react/jsx-runtime";
15757
15875
  var DEFAULT_LABELS3 = {
15758
15876
  subtotal: "Subtotal",
15759
15877
  discountPrefix: "Descuento",
@@ -15783,37 +15901,37 @@ function CartSummary({
15783
15901
  const hasDiscount = Boolean(discountAmount && discountAmount > 0);
15784
15902
  const noticeContent = notice === true ? t.cancelledNotice : notice;
15785
15903
  const hasNotice = noticeContent != null && noticeContent !== false;
15786
- const breakdown = /* @__PURE__ */ jsxs23(
15904
+ const breakdown = /* @__PURE__ */ jsxs25(
15787
15905
  "dl",
15788
15906
  {
15789
- className: cn18("space-y-2 text-sm", !hasNotice && className),
15907
+ className: cn20("space-y-2 text-sm", !hasNotice && className),
15790
15908
  "data-slot": "cart-summary",
15791
15909
  children: [
15792
- /* @__PURE__ */ jsxs23("div", { className: "flex justify-between text-muted-foreground", children: [
15793
- /* @__PURE__ */ jsx24("dt", { children: t.subtotal }),
15794
- /* @__PURE__ */ jsx24("dd", { children: formatPrice(subtotal, currencyCode, locale) })
15910
+ /* @__PURE__ */ jsxs25("div", { className: "flex justify-between text-muted-foreground", children: [
15911
+ /* @__PURE__ */ jsx26("dt", { children: t.subtotal }),
15912
+ /* @__PURE__ */ jsx26("dd", { children: formatPrice(subtotal, currencyCode, locale) })
15795
15913
  ] }),
15796
- hasDiscount && /* @__PURE__ */ jsxs23("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
15797
- /* @__PURE__ */ jsx24("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
15798
- /* @__PURE__ */ jsxs23("dd", { children: [
15914
+ hasDiscount && /* @__PURE__ */ jsxs25("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
15915
+ /* @__PURE__ */ jsx26("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
15916
+ /* @__PURE__ */ jsxs25("dd", { children: [
15799
15917
  "-",
15800
15918
  formatPrice(discountAmount, currencyCode, locale)
15801
15919
  ] })
15802
15920
  ] }),
15803
- shippingEnabled && /* @__PURE__ */ jsxs23("div", { className: "flex justify-between text-muted-foreground", children: [
15804
- /* @__PURE__ */ jsx24("dt", { children: t.shipping }),
15805
- /* @__PURE__ */ jsx24("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
15921
+ shippingEnabled && /* @__PURE__ */ jsxs25("div", { className: "flex justify-between text-muted-foreground", children: [
15922
+ /* @__PURE__ */ jsx26("dt", { children: t.shipping }),
15923
+ /* @__PURE__ */ jsx26("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
15806
15924
  ] }),
15807
- /* @__PURE__ */ jsxs23("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
15808
- /* @__PURE__ */ jsx24("dt", { children: t.total }),
15809
- /* @__PURE__ */ jsx24("dd", { children: formatPrice(total, currencyCode, locale) })
15925
+ /* @__PURE__ */ jsxs25("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
15926
+ /* @__PURE__ */ jsx26("dt", { children: t.total }),
15927
+ /* @__PURE__ */ jsx26("dd", { children: formatPrice(total, currencyCode, locale) })
15810
15928
  ] })
15811
15929
  ]
15812
15930
  }
15813
15931
  );
15814
15932
  if (!hasNotice) return breakdown;
15815
- return /* @__PURE__ */ jsxs23("div", { className: cn18("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
15816
- /* @__PURE__ */ jsx24(
15933
+ return /* @__PURE__ */ jsxs25("div", { className: cn20("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
15934
+ /* @__PURE__ */ jsx26(
15817
15935
  "div",
15818
15936
  {
15819
15937
  role: "status",
@@ -15827,8 +15945,8 @@ function CartSummary({
15827
15945
  }
15828
15946
 
15829
15947
  // src/components/cart-adjustments-notice.tsx
15830
- import { cn as cn19 } from "@reblu/site-ui/utils";
15831
- import { jsx as jsx25 } from "react/jsx-runtime";
15948
+ import { cn as cn21 } from "@reblu/site-ui/utils";
15949
+ import { jsx as jsx27 } from "react/jsx-runtime";
15832
15950
  var DEFAULT_LABELS4 = {
15833
15951
  removed: (names) => names.length === 1 ? `Hemos quitado del carrito: ${names[0]}, ya no est\xE1 disponible.` : `Hemos quitado del carrito: ${names.join(", ")}, ya no est\xE1n disponibles.`,
15834
15952
  quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
@@ -15862,20 +15980,20 @@ function CartAdjustmentsNotice({
15862
15980
  );
15863
15981
  }
15864
15982
  if (messages.length === 0) return null;
15865
- return /* @__PURE__ */ jsx25(
15983
+ return /* @__PURE__ */ jsx27(
15866
15984
  "div",
15867
15985
  {
15868
15986
  role: "status",
15869
- className: cn19("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
15987
+ className: cn21("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
15870
15988
  "data-slot": "cart-adjustments-notice",
15871
- children: messages.length === 1 ? /* @__PURE__ */ jsx25("p", { children: messages[0] }) : /* @__PURE__ */ jsx25("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ jsx25("li", { children: message }, index)) })
15989
+ children: messages.length === 1 ? /* @__PURE__ */ jsx27("p", { children: messages[0] }) : /* @__PURE__ */ jsx27("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ jsx27("li", { children: message }, index)) })
15872
15990
  }
15873
15991
  );
15874
15992
  }
15875
15993
 
15876
15994
  // src/components/added-to-cart-toast.tsx
15877
- import { cn as cn20 } from "@reblu/site-ui/utils";
15878
- import { jsx as jsx26, jsxs as jsxs24 } from "react/jsx-runtime";
15995
+ import { cn as cn22 } from "@reblu/site-ui/utils";
15996
+ import { jsx as jsx28, jsxs as jsxs26 } from "react/jsx-runtime";
15879
15997
  var DEFAULT_LABELS5 = {
15880
15998
  success: "A\xF1adido al carrito",
15881
15999
  error: "No se pudo a\xF1adir al carrito",
@@ -15895,12 +16013,12 @@ function AddedToCartToast({
15895
16013
  const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
15896
16014
  const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
15897
16015
  const variant = status === "success" ? "success" : "error";
15898
- return /* @__PURE__ */ jsxs24(
16016
+ return /* @__PURE__ */ jsxs26(
15899
16017
  "div",
15900
16018
  {
15901
16019
  "data-slot": "added-to-cart-toast",
15902
16020
  "data-variant": variant,
15903
- className: cn20(
16021
+ className: cn22(
15904
16022
  "flex items-center gap-3 rounded-xl border border-border bg-card p-3 text-sm shadow-lg",
15905
16023
  variant === "success" && "border-green-600/30 dark:border-green-400/30",
15906
16024
  variant === "error" && "border-destructive/30",
@@ -15908,20 +16026,20 @@ function AddedToCartToast({
15908
16026
  ),
15909
16027
  children: [
15910
16028
  hasThumbnail && // eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
15911
- /* @__PURE__ */ jsx26("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
15912
- /* @__PURE__ */ jsxs24("div", { className: "min-w-0 flex-1", children: [
15913
- /* @__PURE__ */ jsx26("p", { className: "truncate font-semibold text-foreground", children: productName }),
15914
- /* @__PURE__ */ jsx26("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
16029
+ /* @__PURE__ */ jsx28("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
16030
+ /* @__PURE__ */ jsxs26("div", { className: "min-w-0 flex-1", children: [
16031
+ /* @__PURE__ */ jsx28("p", { className: "truncate font-semibold text-foreground", children: productName }),
16032
+ /* @__PURE__ */ jsx28("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
15915
16033
  ] }),
15916
- /* @__PURE__ */ jsx26("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsx26("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
16034
+ /* @__PURE__ */ jsx28("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsx28("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
15917
16035
  ]
15918
16036
  }
15919
16037
  );
15920
16038
  }
15921
16039
 
15922
16040
  // src/components/checkout-login-prompt.tsx
15923
- import { cn as cn21 } from "@reblu/site-ui/utils";
15924
- import { Fragment as Fragment5, jsx as jsx27, jsxs as jsxs25 } from "react/jsx-runtime";
16041
+ import { cn as cn23 } from "@reblu/site-ui/utils";
16042
+ import { Fragment as Fragment5, jsx as jsx29, jsxs as jsxs27 } from "react/jsx-runtime";
15925
16043
  var DEFAULT_LABELS6 = {
15926
16044
  title: "Identificaci\xF3n",
15927
16045
  description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
@@ -15948,26 +16066,26 @@ function CheckoutLoginPrompt({
15948
16066
  if (!open) return null;
15949
16067
  const t = { ...DEFAULT_LABELS6, ...labels };
15950
16068
  const isValidEmail = EMAIL_PATTERN.test(email.trim());
15951
- return /* @__PURE__ */ jsxs25(Fragment5, { children: [
15952
- /* @__PURE__ */ jsx27("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
15953
- /* @__PURE__ */ jsxs25(
16069
+ return /* @__PURE__ */ jsxs27(Fragment5, { children: [
16070
+ /* @__PURE__ */ jsx29("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
16071
+ /* @__PURE__ */ jsxs27(
15954
16072
  "div",
15955
16073
  {
15956
16074
  role: "dialog",
15957
16075
  "aria-modal": "true",
15958
16076
  "aria-labelledby": "checkout-login-prompt-title",
15959
16077
  "data-slot": "checkout-login-prompt",
15960
- className: cn21(
16078
+ className: cn23(
15961
16079
  "fixed left-1/2 top-1/2 z-50 w-full max-w-md -translate-x-1/2 -translate-y-1/2 space-y-5 rounded-2xl border border-border bg-background p-6 shadow-2xl",
15962
16080
  className
15963
16081
  ),
15964
16082
  children: [
15965
- /* @__PURE__ */ jsxs25("div", { className: "flex items-start justify-between gap-3", children: [
15966
- /* @__PURE__ */ jsxs25("div", { children: [
15967
- /* @__PURE__ */ jsx27("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
15968
- /* @__PURE__ */ jsx27("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
16083
+ /* @__PURE__ */ jsxs27("div", { className: "flex items-start justify-between gap-3", children: [
16084
+ /* @__PURE__ */ jsxs27("div", { children: [
16085
+ /* @__PURE__ */ jsx29("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
16086
+ /* @__PURE__ */ jsx29("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
15969
16087
  ] }),
15970
- /* @__PURE__ */ jsx27(
16088
+ /* @__PURE__ */ jsx29(
15971
16089
  "button",
15972
16090
  {
15973
16091
  type: "button",
@@ -15978,9 +16096,9 @@ function CheckoutLoginPrompt({
15978
16096
  }
15979
16097
  )
15980
16098
  ] }),
15981
- /* @__PURE__ */ jsxs25("div", { className: "space-y-2", children: [
15982
- /* @__PURE__ */ jsx27("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
15983
- /* @__PURE__ */ jsx27(
16099
+ /* @__PURE__ */ jsxs27("div", { className: "space-y-2", children: [
16100
+ /* @__PURE__ */ jsx29("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
16101
+ /* @__PURE__ */ jsx29(
15984
16102
  "input",
15985
16103
  {
15986
16104
  id: "checkout-login-prompt-email",
@@ -15989,29 +16107,29 @@ function CheckoutLoginPrompt({
15989
16107
  value: email,
15990
16108
  onChange: (e) => onEmailChange(e.target.value),
15991
16109
  placeholder: t.emailPlaceholder,
15992
- className: cn21(
16110
+ className: cn23(
15993
16111
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
15994
16112
  error ? "border-destructive" : "border-border focus:border-primary"
15995
16113
  )
15996
16114
  }
15997
16115
  ),
15998
- error && /* @__PURE__ */ jsx27("p", { className: "text-xs text-destructive", children: error })
16116
+ error && /* @__PURE__ */ jsx29("p", { className: "text-xs text-destructive", children: error })
15999
16117
  ] }),
16000
- /* @__PURE__ */ jsxs25("div", { className: "space-y-2", children: [
16001
- /* @__PURE__ */ jsx27(
16118
+ /* @__PURE__ */ jsxs27("div", { className: "space-y-2", children: [
16119
+ /* @__PURE__ */ jsx29(
16002
16120
  "button",
16003
16121
  {
16004
16122
  type: "button",
16005
16123
  onClick: onSubmitEmail,
16006
16124
  disabled: checking || !isValidEmail,
16007
- className: cn21(
16125
+ className: cn23(
16008
16126
  "flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-2.5 text-sm font-semibold transition-all",
16009
16127
  checking || !isValidEmail ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
16010
16128
  ),
16011
16129
  children: checking ? t.checking : t.continueWithEmail
16012
16130
  }
16013
16131
  ),
16014
- /* @__PURE__ */ jsx27(
16132
+ /* @__PURE__ */ jsx29(
16015
16133
  "button",
16016
16134
  {
16017
16135
  type: "button",
@@ -16028,9 +16146,9 @@ function CheckoutLoginPrompt({
16028
16146
  }
16029
16147
 
16030
16148
  // src/components/checkout-form.tsx
16031
- import { cn as cn22 } from "@reblu/site-ui/utils";
16149
+ import { cn as cn24 } from "@reblu/site-ui/utils";
16032
16150
  import { PhoneInput } from "@reblu/site-ui/phone-input";
16033
- import { Fragment as Fragment6, jsx as jsx28, jsxs as jsxs26 } from "react/jsx-runtime";
16151
+ import { Fragment as Fragment6, jsx as jsx30, jsxs as jsxs28 } from "react/jsx-runtime";
16034
16152
  var DEFAULT_LABELS7 = {
16035
16153
  contactTitle: "Datos de contacto",
16036
16154
  nameLabel: "Nombre completo",
@@ -16086,22 +16204,22 @@ function CheckoutForm({
16086
16204
  event.preventDefault();
16087
16205
  if (discountCode.trim() && !discountApplying) onApplyDiscount();
16088
16206
  }
16089
- return /* @__PURE__ */ jsxs26(Fragment6, { children: [
16207
+ return /* @__PURE__ */ jsxs28(Fragment6, { children: [
16090
16208
  loginPrompt,
16091
- /* @__PURE__ */ jsxs26(
16209
+ /* @__PURE__ */ jsxs28(
16092
16210
  "form",
16093
16211
  {
16094
16212
  "data-testid": "checkout-form",
16095
16213
  onSubmit,
16096
- className: cn22("space-y-8", className),
16214
+ className: cn24("space-y-8", className),
16097
16215
  "data-slot": "checkout-form",
16098
16216
  children: [
16099
- /* @__PURE__ */ jsxs26("section", { className: "space-y-4", children: [
16100
- /* @__PURE__ */ jsx28("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
16101
- /* @__PURE__ */ jsxs26("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
16102
- /* @__PURE__ */ jsxs26("div", { className: "space-y-1", children: [
16103
- /* @__PURE__ */ jsx28("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
16104
- /* @__PURE__ */ jsx28(
16217
+ /* @__PURE__ */ jsxs28("section", { className: "space-y-4", children: [
16218
+ /* @__PURE__ */ jsx30("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
16219
+ /* @__PURE__ */ jsxs28("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
16220
+ /* @__PURE__ */ jsxs28("div", { className: "space-y-1", children: [
16221
+ /* @__PURE__ */ jsx30("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
16222
+ /* @__PURE__ */ jsx30(
16105
16223
  "input",
16106
16224
  {
16107
16225
  id: "checkout-form-name",
@@ -16110,17 +16228,17 @@ function CheckoutForm({
16110
16228
  value: contact.name,
16111
16229
  onChange: (e) => patchContact({ name: e.target.value }),
16112
16230
  placeholder: t.namePlaceholder,
16113
- className: cn22(
16231
+ className: cn24(
16114
16232
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
16115
16233
  contactErrors?.name ? "border-destructive" : "border-border focus:border-primary"
16116
16234
  )
16117
16235
  }
16118
16236
  ),
16119
- contactErrors?.name && /* @__PURE__ */ jsx28("p", { className: "text-xs text-destructive", children: contactErrors.name })
16237
+ contactErrors?.name && /* @__PURE__ */ jsx30("p", { className: "text-xs text-destructive", children: contactErrors.name })
16120
16238
  ] }),
16121
- /* @__PURE__ */ jsxs26("div", { className: "space-y-1", children: [
16122
- /* @__PURE__ */ jsx28("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
16123
- /* @__PURE__ */ jsx28(
16239
+ /* @__PURE__ */ jsxs28("div", { className: "space-y-1", children: [
16240
+ /* @__PURE__ */ jsx30("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
16241
+ /* @__PURE__ */ jsx30(
16124
16242
  "input",
16125
16243
  {
16126
16244
  id: "checkout-form-email",
@@ -16129,15 +16247,15 @@ function CheckoutForm({
16129
16247
  value: contact.email,
16130
16248
  onChange: (e) => patchContact({ email: e.target.value }),
16131
16249
  placeholder: t.emailPlaceholder,
16132
- className: cn22(
16250
+ className: cn24(
16133
16251
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
16134
16252
  contactErrors?.email ? "border-destructive" : "border-border focus:border-primary"
16135
16253
  )
16136
16254
  }
16137
16255
  ),
16138
- contactErrors?.email && /* @__PURE__ */ jsx28("p", { className: "text-xs text-destructive", children: contactErrors.email })
16256
+ contactErrors?.email && /* @__PURE__ */ jsx30("p", { className: "text-xs text-destructive", children: contactErrors.email })
16139
16257
  ] }),
16140
- /* @__PURE__ */ jsx28("div", { className: "space-y-1", children: /* @__PURE__ */ jsx28(
16258
+ /* @__PURE__ */ jsx30("div", { className: "space-y-1", children: /* @__PURE__ */ jsx30(
16141
16259
  PhoneInput,
16142
16260
  {
16143
16261
  id: "checkout-form-phone",
@@ -16151,26 +16269,26 @@ function CheckoutForm({
16151
16269
  ] })
16152
16270
  ] }),
16153
16271
  children2,
16154
- generalError ? /* @__PURE__ */ jsx28("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
16155
- /* @__PURE__ */ jsxs26("section", { className: "space-y-3", children: [
16156
- /* @__PURE__ */ jsx28("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
16157
- autoDiscount ? /* @__PURE__ */ jsxs26(
16272
+ generalError ? /* @__PURE__ */ jsx30("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
16273
+ /* @__PURE__ */ jsxs28("section", { className: "space-y-3", children: [
16274
+ /* @__PURE__ */ jsx30("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
16275
+ autoDiscount ? /* @__PURE__ */ jsxs28(
16158
16276
  "div",
16159
16277
  {
16160
16278
  className: "flex items-center gap-2 rounded-lg border border-green-200 bg-green-50 px-4 py-3 text-sm text-green-700 dark:border-green-800 dark:bg-green-900/20 dark:text-green-400",
16161
16279
  "data-slot": "checkout-staff-discount",
16162
16280
  children: [
16163
- /* @__PURE__ */ jsx28("span", { className: "font-semibold", children: t.staffDiscountApplied }),
16164
- /* @__PURE__ */ jsx28("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
16281
+ /* @__PURE__ */ jsx30("span", { className: "font-semibold", children: t.staffDiscountApplied }),
16282
+ /* @__PURE__ */ jsx30("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
16165
16283
  ]
16166
16284
  }
16167
16285
  ) : null,
16168
- appliedDiscount && !autoDiscount ? /* @__PURE__ */ jsxs26("div", { className: "flex items-center justify-between rounded-lg border border-green-200 bg-green-50 px-4 py-3 dark:border-green-800 dark:bg-green-900/20", children: [
16169
- /* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
16170
- /* @__PURE__ */ jsx28("span", { className: "font-semibold", children: appliedDiscount.code }),
16171
- /* @__PURE__ */ jsx28("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
16286
+ appliedDiscount && !autoDiscount ? /* @__PURE__ */ jsxs28("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: [
16287
+ /* @__PURE__ */ jsxs28("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
16288
+ /* @__PURE__ */ jsx30("span", { className: "font-semibold", children: appliedDiscount.code }),
16289
+ /* @__PURE__ */ jsx30("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
16172
16290
  ] }),
16173
- /* @__PURE__ */ jsx28(
16291
+ /* @__PURE__ */ jsx30(
16174
16292
  "button",
16175
16293
  {
16176
16294
  type: "button",
@@ -16180,9 +16298,9 @@ function CheckoutForm({
16180
16298
  children: t.removeDiscount
16181
16299
  }
16182
16300
  )
16183
- ] }) : /* @__PURE__ */ jsxs26("div", { className: "flex gap-2", children: [
16184
- /* @__PURE__ */ jsx28("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
16185
- /* @__PURE__ */ jsx28(
16301
+ ] }) : /* @__PURE__ */ jsxs28("div", { className: "flex gap-2", children: [
16302
+ /* @__PURE__ */ jsx30("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
16303
+ /* @__PURE__ */ jsx30(
16186
16304
  "input",
16187
16305
  {
16188
16306
  id: "checkout-form-discount-code",
@@ -16194,7 +16312,7 @@ function CheckoutForm({
16194
16312
  className: "flex-1 rounded-lg border border-border bg-background px-3 py-2 text-sm uppercase transition focus:border-primary focus:outline-none focus:ring-2 focus:ring-primary/20"
16195
16313
  }
16196
16314
  ),
16197
- /* @__PURE__ */ jsx28(
16315
+ /* @__PURE__ */ jsx30(
16198
16316
  "button",
16199
16317
  {
16200
16318
  type: "button",
@@ -16205,14 +16323,14 @@ function CheckoutForm({
16205
16323
  }
16206
16324
  )
16207
16325
  ] }),
16208
- discountError && /* @__PURE__ */ jsx28("p", { className: "text-xs text-destructive", children: discountError })
16326
+ discountError && /* @__PURE__ */ jsx30("p", { className: "text-xs text-destructive", children: discountError })
16209
16327
  ] }),
16210
- /* @__PURE__ */ jsx28(
16328
+ /* @__PURE__ */ jsx30(
16211
16329
  "button",
16212
16330
  {
16213
16331
  type: "submit",
16214
16332
  disabled: submitting || submitDisabled,
16215
- className: cn22(
16333
+ className: cn24(
16216
16334
  "flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-3 font-semibold transition-all",
16217
16335
  submitting || submitDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
16218
16336
  ),
@@ -16226,11 +16344,11 @@ function CheckoutForm({
16226
16344
  }
16227
16345
 
16228
16346
  // src/components/order-confirmation.tsx
16229
- import { cn as cn24 } from "@reblu/site-ui/utils";
16347
+ import { cn as cn26 } from "@reblu/site-ui/utils";
16230
16348
 
16231
16349
  // src/components/order-invoice-link.tsx
16232
- import { cn as cn23 } from "@reblu/site-ui/utils";
16233
- import { jsx as jsx29, jsxs as jsxs27 } from "react/jsx-runtime";
16350
+ import { cn as cn25 } from "@reblu/site-ui/utils";
16351
+ import { jsx as jsx31, jsxs as jsxs29 } from "react/jsx-runtime";
16234
16352
  var DEFAULT_LABELS8 = {
16235
16353
  linkLabel: "Descargar la factura {number}",
16236
16354
  signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
@@ -16238,8 +16356,8 @@ var DEFAULT_LABELS8 = {
16238
16356
  function OrderInvoiceLink({ invoice, labels, className }) {
16239
16357
  if (!invoice) return null;
16240
16358
  const t = { ...DEFAULT_LABELS8, ...labels };
16241
- return /* @__PURE__ */ jsxs27("div", { className: cn23("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
16242
- /* @__PURE__ */ jsx29(
16359
+ return /* @__PURE__ */ jsxs29("div", { className: cn25("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
16360
+ /* @__PURE__ */ jsx31(
16243
16361
  "a",
16244
16362
  {
16245
16363
  href: invoice.url,
@@ -16247,12 +16365,12 @@ function OrderInvoiceLink({ invoice, labels, className }) {
16247
16365
  children: t.linkLabel.replace("{number}", invoice.number)
16248
16366
  }
16249
16367
  ),
16250
- /* @__PURE__ */ jsx29("p", { className: "text-muted-foreground", children: t.signInHint })
16368
+ /* @__PURE__ */ jsx31("p", { className: "text-muted-foreground", children: t.signInHint })
16251
16369
  ] });
16252
16370
  }
16253
16371
 
16254
16372
  // src/components/order-confirmation.tsx
16255
- import { jsx as jsx30, jsxs as jsxs28 } from "react/jsx-runtime";
16373
+ import { jsx as jsx32, jsxs as jsxs30 } from "react/jsx-runtime";
16256
16374
  var DEFAULT_LABELS9 = {
16257
16375
  pollingTitle: "Confirmando tu pedido\u2026",
16258
16376
  pollingDescription: "Estamos procesando el pago, un momento\u2026",
@@ -16327,60 +16445,60 @@ function OrderConfirmation({
16327
16445
  const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
16328
16446
  const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
16329
16447
  const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
16330
- return /* @__PURE__ */ jsxs28("div", { className: cn24("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
16331
- /* @__PURE__ */ jsx30("h1", { className: "text-3xl font-bold", children: title }),
16332
- /* @__PURE__ */ jsx30("p", { className: "text-lg text-muted-foreground", children: description }),
16333
- showFullOrderSummary && order && /* @__PURE__ */ jsxs28("div", { className: "space-y-6", children: [
16334
- /* @__PURE__ */ jsxs28("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16335
- /* @__PURE__ */ jsx30("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
16336
- /* @__PURE__ */ jsx30("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
16448
+ return /* @__PURE__ */ jsxs30("div", { className: cn26("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
16449
+ /* @__PURE__ */ jsx32("h1", { className: "text-3xl font-bold", children: title }),
16450
+ /* @__PURE__ */ jsx32("p", { className: "text-lg text-muted-foreground", children: description }),
16451
+ showFullOrderSummary && order && /* @__PURE__ */ jsxs30("div", { className: "space-y-6", children: [
16452
+ /* @__PURE__ */ jsxs30("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16453
+ /* @__PURE__ */ jsx32("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
16454
+ /* @__PURE__ */ jsx32("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
16337
16455
  ] }),
16338
- /* @__PURE__ */ jsxs28("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
16339
- order.items.map((item, idx) => /* @__PURE__ */ jsxs28(
16456
+ /* @__PURE__ */ jsxs30("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
16457
+ order.items.map((item, idx) => /* @__PURE__ */ jsxs30(
16340
16458
  "div",
16341
16459
  {
16342
16460
  className: "flex justify-between gap-4 text-sm",
16343
16461
  children: [
16344
- /* @__PURE__ */ jsxs28("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
16462
+ /* @__PURE__ */ jsxs30("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
16345
16463
  item.product.name,
16346
16464
  item.variant ? ` (${item.variant.name})` : "",
16347
16465
  " x",
16348
16466
  item.quantity
16349
16467
  ] }),
16350
- /* @__PURE__ */ jsx30("span", { children: formatPrice(item.total, currencyCode, locale) })
16468
+ /* @__PURE__ */ jsx32("span", { children: formatPrice(item.total, currencyCode, locale) })
16351
16469
  ]
16352
16470
  },
16353
16471
  idx
16354
16472
  )),
16355
- /* @__PURE__ */ jsx30("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ jsxs28("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
16356
- /* @__PURE__ */ jsx30("span", { children: t.totalLabel }),
16357
- /* @__PURE__ */ jsx30("span", { children: formatPrice(order.total, currencyCode, locale) })
16473
+ /* @__PURE__ */ jsx32("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ jsxs30("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
16474
+ /* @__PURE__ */ jsx32("span", { children: t.totalLabel }),
16475
+ /* @__PURE__ */ jsx32("span", { children: formatPrice(order.total, currencyCode, locale) })
16358
16476
  ] }) })
16359
16477
  ] }),
16360
- showPurchaseTexts && order.purchaseTexts?.length ? /* @__PURE__ */ jsx30("div", { className: "mx-auto max-w-sm space-y-3 text-left", "data-slot": "order-confirmation-purchase-texts", children: order.purchaseTexts.map((entry) => /* @__PURE__ */ jsxs28(
16478
+ showPurchaseTexts && order.purchaseTexts?.length ? /* @__PURE__ */ jsx32("div", { className: "mx-auto max-w-sm space-y-3 text-left", "data-slot": "order-confirmation-purchase-texts", children: order.purchaseTexts.map((entry) => /* @__PURE__ */ jsxs30(
16361
16479
  "div",
16362
16480
  {
16363
16481
  className: "rounded-xl border border-border bg-card p-4",
16364
16482
  "data-slot": "order-confirmation-purchase-text",
16365
16483
  "data-kind": entry.kind,
16366
16484
  children: [
16367
- /* @__PURE__ */ jsx30("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: entry.label }),
16368
- entry.place ? /* @__PURE__ */ jsxs28("address", { className: "mb-2 text-sm not-italic", "data-slot": "order-confirmation-pickup-place", children: [
16369
- entry.place.name ? /* @__PURE__ */ jsx30("span", { className: "block font-medium", children: entry.place.name }) : null,
16370
- entry.place.address.map((line) => /* @__PURE__ */ jsx30("span", { className: "block", children: line }, line))
16485
+ /* @__PURE__ */ jsx32("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: entry.label }),
16486
+ entry.place ? /* @__PURE__ */ jsxs30("address", { className: "mb-2 text-sm not-italic", "data-slot": "order-confirmation-pickup-place", children: [
16487
+ entry.place.name ? /* @__PURE__ */ jsx32("span", { className: "block font-medium", children: entry.place.name }) : null,
16488
+ entry.place.address.map((line) => /* @__PURE__ */ jsx32("span", { className: "block", children: line }, line))
16371
16489
  ] }) : null,
16372
- /* @__PURE__ */ jsx30("p", { className: "whitespace-pre-line text-sm", children: entry.text })
16490
+ /* @__PURE__ */ jsx32("p", { className: "whitespace-pre-line text-sm", children: entry.text })
16373
16491
  ]
16374
16492
  },
16375
16493
  entry.kind
16376
16494
  )) }) : null,
16377
- t.foundDescription.includes("{email}") ? null : /* @__PURE__ */ jsxs28("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
16495
+ t.foundDescription.includes("{email}") ? null : /* @__PURE__ */ jsxs30("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
16378
16496
  t.confirmationEmailPrefix,
16379
16497
  " ",
16380
- /* @__PURE__ */ jsx30("span", { className: "font-medium text-foreground", children: order.customerEmail }),
16498
+ /* @__PURE__ */ jsx32("span", { className: "font-medium text-foreground", children: order.customerEmail }),
16381
16499
  "."
16382
16500
  ] }),
16383
- /* @__PURE__ */ jsx30(
16501
+ /* @__PURE__ */ jsx32(
16384
16502
  OrderInvoiceLink,
16385
16503
  {
16386
16504
  invoice: order.invoice,
@@ -16388,11 +16506,11 @@ function OrderConfirmation({
16388
16506
  }
16389
16507
  )
16390
16508
  ] }),
16391
- showOrderReference && order && /* @__PURE__ */ jsxs28("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16392
- /* @__PURE__ */ jsx30("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
16393
- /* @__PURE__ */ jsx30("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
16509
+ showOrderReference && order && /* @__PURE__ */ jsxs30("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16510
+ /* @__PURE__ */ jsx32("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
16511
+ /* @__PURE__ */ jsx32("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
16394
16512
  ] }),
16395
- status === "failed" && cartHref && /* @__PURE__ */ jsx30(
16513
+ status === "failed" && cartHref && /* @__PURE__ */ jsx32(
16396
16514
  "a",
16397
16515
  {
16398
16516
  href: cartHref,
@@ -16400,7 +16518,7 @@ function OrderConfirmation({
16400
16518
  children: t.backToCartLabel
16401
16519
  }
16402
16520
  ),
16403
- showRecheck && /* @__PURE__ */ jsx30(
16521
+ showRecheck && /* @__PURE__ */ jsx32(
16404
16522
  "button",
16405
16523
  {
16406
16524
  type: "button",
@@ -16409,16 +16527,16 @@ function OrderConfirmation({
16409
16527
  children: t.recheckLabel
16410
16528
  }
16411
16529
  ),
16412
- showSessionReference && /* @__PURE__ */ jsxs28("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16413
- /* @__PURE__ */ jsx30("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
16414
- /* @__PURE__ */ jsx30("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
16530
+ showSessionReference && /* @__PURE__ */ jsxs30("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
16531
+ /* @__PURE__ */ jsx32("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
16532
+ /* @__PURE__ */ jsx32("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
16415
16533
  ] })
16416
16534
  ] });
16417
16535
  }
16418
16536
 
16419
16537
  // src/components/full-invoice-fields.tsx
16420
- import { cn as cn25 } from "@reblu/site-ui/utils";
16421
- import { jsx as jsx31, jsxs as jsxs29 } from "react/jsx-runtime";
16538
+ import { cn as cn27 } from "@reblu/site-ui/utils";
16539
+ import { jsx as jsx33, jsxs as jsxs31 } from "react/jsx-runtime";
16422
16540
  var EMPTY_FULL_INVOICE_VALUE = {
16423
16541
  wantsFullInvoice: false,
16424
16542
  billingIdType: "NIF",
@@ -16535,12 +16653,12 @@ function FullInvoiceFields({
16535
16653
  const showFields = value.wantsFullInvoice || overCap;
16536
16654
  const isSpanishNif = value.billingIdType === "NIF";
16537
16655
  const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
16538
- const error = (key2) => errors[key2] ? /* @__PURE__ */ jsx31("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
16656
+ const error = (key2) => errors[key2] ? /* @__PURE__ */ jsx33("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
16539
16657
  const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
16540
- return /* @__PURE__ */ jsxs29("section", { className: cn25("space-y-4", className), "data-slot": "full-invoice-fields", children: [
16541
- overCap ? /* @__PURE__ */ jsx31("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16542
- /* @__PURE__ */ jsxs29("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
16543
- /* @__PURE__ */ jsx31(
16658
+ return /* @__PURE__ */ jsxs31("section", { className: cn27("space-y-4", className), "data-slot": "full-invoice-fields", children: [
16659
+ overCap ? /* @__PURE__ */ jsx33("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ jsxs31("div", { className: "space-y-1", children: [
16660
+ /* @__PURE__ */ jsxs31("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
16661
+ /* @__PURE__ */ jsx33(
16544
16662
  "input",
16545
16663
  {
16546
16664
  type: "checkbox",
@@ -16550,12 +16668,12 @@ function FullInvoiceFields({
16550
16668
  ),
16551
16669
  t.toggle
16552
16670
  ] }),
16553
- /* @__PURE__ */ jsx31("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
16671
+ /* @__PURE__ */ jsx33("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
16554
16672
  ] }),
16555
- showFields && /* @__PURE__ */ jsxs29("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
16556
- /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16557
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
16558
- /* @__PURE__ */ jsx31(
16673
+ showFields && /* @__PURE__ */ jsxs31("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
16674
+ /* @__PURE__ */ jsxs31("div", { className: "space-y-1", children: [
16675
+ /* @__PURE__ */ jsx33("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
16676
+ /* @__PURE__ */ jsx33(
16559
16677
  "select",
16560
16678
  {
16561
16679
  id: "full-invoice-id-type",
@@ -16564,14 +16682,14 @@ function FullInvoiceFields({
16564
16682
  value: value.billingIdType,
16565
16683
  onChange: (e) => set("billingIdType", e.target.value),
16566
16684
  ...invalid2("billingIdType"),
16567
- children: ID_TYPES.map((type) => /* @__PURE__ */ jsx31("option", { value: type, children: t.idTypeOptions[type] }, type))
16685
+ children: ID_TYPES.map((type) => /* @__PURE__ */ jsx33("option", { value: type, children: t.idTypeOptions[type] }, type))
16568
16686
  }
16569
16687
  ),
16570
16688
  error("billingIdType")
16571
16689
  ] }),
16572
- !isSpanishNif && /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16573
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
16574
- /* @__PURE__ */ jsxs29(
16690
+ !isSpanishNif && /* @__PURE__ */ jsxs31("div", { className: "space-y-1", children: [
16691
+ /* @__PURE__ */ jsx33("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
16692
+ /* @__PURE__ */ jsxs31(
16575
16693
  "select",
16576
16694
  {
16577
16695
  id: "full-invoice-id-country",
@@ -16581,16 +16699,16 @@ function FullInvoiceFields({
16581
16699
  onChange: (e) => set("billingIdCountry", e.target.value),
16582
16700
  ...invalid2("billingIdCountry"),
16583
16701
  children: [
16584
- /* @__PURE__ */ jsx31("option", { value: "", disabled: true, children: t.chooseCountry }),
16585
- countries.map((c) => /* @__PURE__ */ jsx31("option", { value: c.code, children: c.name }, c.code))
16702
+ /* @__PURE__ */ jsx33("option", { value: "", disabled: true, children: t.chooseCountry }),
16703
+ countries.map((c) => /* @__PURE__ */ jsx33("option", { value: c.code, children: c.name }, c.code))
16586
16704
  ]
16587
16705
  }
16588
16706
  ),
16589
16707
  error("billingIdCountry")
16590
16708
  ] }),
16591
- /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16592
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
16593
- /* @__PURE__ */ jsx31(
16709
+ /* @__PURE__ */ jsxs31("div", { className: "space-y-1", children: [
16710
+ /* @__PURE__ */ jsx33("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
16711
+ /* @__PURE__ */ jsx33(
16594
16712
  "input",
16595
16713
  {
16596
16714
  id: "full-invoice-nif",
@@ -16603,9 +16721,9 @@ function FullInvoiceFields({
16603
16721
  ),
16604
16722
  error("billingNif")
16605
16723
  ] }),
16606
- /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16607
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
16608
- /* @__PURE__ */ jsx31(
16724
+ /* @__PURE__ */ jsxs31("div", { className: "space-y-1", children: [
16725
+ /* @__PURE__ */ jsx33("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
16726
+ /* @__PURE__ */ jsx33(
16609
16727
  "input",
16610
16728
  {
16611
16729
  id: "full-invoice-name",
@@ -16618,9 +16736,9 @@ function FullInvoiceFields({
16618
16736
  ),
16619
16737
  error("billingName")
16620
16738
  ] }),
16621
- /* @__PURE__ */ jsxs29("div", { className: "space-y-1 sm:col-span-2", children: [
16622
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
16623
- /* @__PURE__ */ jsx31(
16739
+ /* @__PURE__ */ jsxs31("div", { className: "space-y-1 sm:col-span-2", children: [
16740
+ /* @__PURE__ */ jsx33("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
16741
+ /* @__PURE__ */ jsx33(
16624
16742
  "input",
16625
16743
  {
16626
16744
  id: "full-invoice-street",
@@ -16632,9 +16750,9 @@ function FullInvoiceFields({
16632
16750
  }
16633
16751
  )
16634
16752
  ] }),
16635
- /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16636
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
16637
- /* @__PURE__ */ jsx31(
16753
+ /* @__PURE__ */ jsxs31("div", { className: "space-y-1", children: [
16754
+ /* @__PURE__ */ jsx33("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
16755
+ /* @__PURE__ */ jsx33(
16638
16756
  "input",
16639
16757
  {
16640
16758
  id: "full-invoice-postal-code",
@@ -16645,9 +16763,9 @@ function FullInvoiceFields({
16645
16763
  }
16646
16764
  )
16647
16765
  ] }),
16648
- /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16649
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
16650
- /* @__PURE__ */ jsx31(
16766
+ /* @__PURE__ */ jsxs31("div", { className: "space-y-1", children: [
16767
+ /* @__PURE__ */ jsx33("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
16768
+ /* @__PURE__ */ jsx33(
16651
16769
  "input",
16652
16770
  {
16653
16771
  id: "full-invoice-city",
@@ -16658,9 +16776,9 @@ function FullInvoiceFields({
16658
16776
  }
16659
16777
  )
16660
16778
  ] }),
16661
- /* @__PURE__ */ jsxs29("div", { className: "space-y-1", children: [
16662
- /* @__PURE__ */ jsx31("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
16663
- /* @__PURE__ */ jsx31(
16779
+ /* @__PURE__ */ jsxs31("div", { className: "space-y-1", children: [
16780
+ /* @__PURE__ */ jsx33("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
16781
+ /* @__PURE__ */ jsx33(
16664
16782
  "select",
16665
16783
  {
16666
16784
  id: "full-invoice-country",
@@ -16668,18 +16786,18 @@ function FullInvoiceFields({
16668
16786
  required: true,
16669
16787
  value: value.country,
16670
16788
  onChange: (e) => set("country", e.target.value),
16671
- children: countries.map((c) => /* @__PURE__ */ jsx31("option", { value: c.code, children: c.name }, c.code))
16789
+ children: countries.map((c) => /* @__PURE__ */ jsx33("option", { value: c.code, children: c.name }, c.code))
16672
16790
  }
16673
16791
  )
16674
16792
  ] }),
16675
- /* @__PURE__ */ jsx31("div", { className: "sm:col-span-2", children: error("address") })
16793
+ /* @__PURE__ */ jsx33("div", { className: "sm:col-span-2", children: error("address") })
16676
16794
  ] })
16677
16795
  ] });
16678
16796
  }
16679
16797
 
16680
16798
  // src/components/checkout-delivery-choice.tsx
16681
- import { cn as cn26 } from "@reblu/site-ui/utils";
16682
- import { jsx as jsx32, jsxs as jsxs30 } from "react/jsx-runtime";
16799
+ import { cn as cn28 } from "@reblu/site-ui/utils";
16800
+ import { jsx as jsx34, jsxs as jsxs32 } from "react/jsx-runtime";
16683
16801
  var EMPTY_CHECKOUT_ADDRESS = {
16684
16802
  firstName: "",
16685
16803
  lastName: "",
@@ -16742,17 +16860,17 @@ function CheckoutDeliveryChoice({
16742
16860
  const isPickup = value?.type === "PICKUP";
16743
16861
  const isShipping = value?.type === "SHIPPING";
16744
16862
  const errorId = `${uid}-delivery-error`;
16745
- return /* @__PURE__ */ jsxs30(
16863
+ return /* @__PURE__ */ jsxs32(
16746
16864
  "fieldset",
16747
16865
  {
16748
16866
  "data-slot": "checkout-delivery",
16749
16867
  "aria-describedby": error ? errorId : void 0,
16750
- className: cn26("space-y-4", className),
16868
+ className: cn28("space-y-4", className),
16751
16869
  children: [
16752
- /* @__PURE__ */ jsx32("legend", { className: "mb-2 text-lg font-semibold", children: t.legend }),
16753
- /* @__PURE__ */ jsxs30("div", { className: "grid gap-3 sm:grid-cols-2", children: [
16754
- homeDelivery ? /* @__PURE__ */ jsxs30("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16755
- /* @__PURE__ */ jsx32(
16870
+ /* @__PURE__ */ jsx34("legend", { className: "mb-2 text-lg font-semibold", children: t.legend }),
16871
+ /* @__PURE__ */ jsxs32("div", { className: "grid gap-3 sm:grid-cols-2", children: [
16872
+ homeDelivery ? /* @__PURE__ */ jsxs32("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16873
+ /* @__PURE__ */ jsx34(
16756
16874
  "input",
16757
16875
  {
16758
16876
  type: "radio",
@@ -16762,16 +16880,16 @@ function CheckoutDeliveryChoice({
16762
16880
  className: "mt-0.5 size-4 accent-primary"
16763
16881
  }
16764
16882
  ),
16765
- /* @__PURE__ */ jsxs30("span", { className: "flex-1 space-y-1", children: [
16766
- /* @__PURE__ */ jsxs30("span", { className: "flex justify-between gap-2 font-medium", children: [
16767
- /* @__PURE__ */ jsx32("span", { children: copy.shippingOptionLabel }),
16768
- /* @__PURE__ */ jsx32("span", { className: "tabular-nums", children: homeCost })
16883
+ /* @__PURE__ */ jsxs32("span", { className: "flex-1 space-y-1", children: [
16884
+ /* @__PURE__ */ jsxs32("span", { className: "flex justify-between gap-2 font-medium", children: [
16885
+ /* @__PURE__ */ jsx34("span", { children: copy.shippingOptionLabel }),
16886
+ /* @__PURE__ */ jsx34("span", { className: "tabular-nums", children: homeCost })
16769
16887
  ] }),
16770
- delivery.estimatedDeliveryText ? /* @__PURE__ */ jsx32("span", { className: "block text-sm text-muted-foreground", children: delivery.estimatedDeliveryText }) : null
16888
+ delivery.estimatedDeliveryText ? /* @__PURE__ */ jsx34("span", { className: "block text-sm text-muted-foreground", children: delivery.estimatedDeliveryText }) : null
16771
16889
  ] })
16772
16890
  ] }) : null,
16773
- pickup ? /* @__PURE__ */ jsxs30("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16774
- /* @__PURE__ */ jsx32(
16891
+ pickup ? /* @__PURE__ */ jsxs32("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
16892
+ /* @__PURE__ */ jsx34(
16775
16893
  "input",
16776
16894
  {
16777
16895
  type: "radio",
@@ -16781,23 +16899,23 @@ function CheckoutDeliveryChoice({
16781
16899
  className: "mt-0.5 size-4 accent-primary"
16782
16900
  }
16783
16901
  ),
16784
- /* @__PURE__ */ jsxs30("span", { className: "flex flex-1 justify-between gap-2 font-medium", children: [
16785
- /* @__PURE__ */ jsx32("span", { children: copy.pickupOptionLabel }),
16786
- /* @__PURE__ */ jsx32("span", { children: t.free })
16902
+ /* @__PURE__ */ jsxs32("span", { className: "flex flex-1 justify-between gap-2 font-medium", children: [
16903
+ /* @__PURE__ */ jsx34("span", { children: copy.pickupOptionLabel }),
16904
+ /* @__PURE__ */ jsx34("span", { children: t.free })
16787
16905
  ] })
16788
16906
  ] }) : null
16789
16907
  ] }),
16790
- error ? /* @__PURE__ */ jsx32("p", { id: errorId, role: "alert", className: "text-sm text-destructive", children: error }) : null,
16791
- isPickup ? /* @__PURE__ */ jsxs30("div", { role: "radiogroup", "aria-labelledby": `${uid}-points`, className: "space-y-2", children: [
16792
- /* @__PURE__ */ jsx32("p", { id: `${uid}-points`, className: "text-sm font-medium", children: t.pickupPointsLegend }),
16908
+ error ? /* @__PURE__ */ jsx34("p", { id: errorId, role: "alert", className: "text-sm text-destructive", children: error }) : null,
16909
+ isPickup ? /* @__PURE__ */ jsxs32("div", { role: "radiogroup", "aria-labelledby": `${uid}-points`, className: "space-y-2", children: [
16910
+ /* @__PURE__ */ jsx34("p", { id: `${uid}-points`, className: "text-sm font-medium", children: t.pickupPointsLegend }),
16793
16911
  delivery.pickupLocations.map((location2) => {
16794
16912
  const descId = `${uid}-point-${location2.id}`;
16795
- return /* @__PURE__ */ jsxs30(
16913
+ return /* @__PURE__ */ jsxs32(
16796
16914
  "label",
16797
16915
  {
16798
16916
  className: "flex cursor-pointer items-start gap-3 rounded-lg border border-border p-3 has-[:checked]:border-primary",
16799
16917
  children: [
16800
- /* @__PURE__ */ jsx32(
16918
+ /* @__PURE__ */ jsx34(
16801
16919
  "input",
16802
16920
  {
16803
16921
  type: "radio",
@@ -16808,9 +16926,9 @@ function CheckoutDeliveryChoice({
16808
16926
  className: "mt-0.5 size-4 accent-primary"
16809
16927
  }
16810
16928
  ),
16811
- /* @__PURE__ */ jsxs30("span", { className: "space-y-0.5 text-sm", children: [
16812
- /* @__PURE__ */ jsx32("span", { className: "block font-medium", children: location2.name }),
16813
- /* @__PURE__ */ jsx32("span", { id: descId, className: "block text-muted-foreground", children: pickupDescription(location2) })
16929
+ /* @__PURE__ */ jsxs32("span", { className: "space-y-0.5 text-sm", children: [
16930
+ /* @__PURE__ */ jsx34("span", { className: "block font-medium", children: location2.name }),
16931
+ /* @__PURE__ */ jsx34("span", { id: descId, className: "block text-muted-foreground", children: pickupDescription(location2) })
16814
16932
  ] })
16815
16933
  ]
16816
16934
  },
@@ -16818,14 +16936,14 @@ function CheckoutDeliveryChoice({
16818
16936
  );
16819
16937
  })
16820
16938
  ] }) : null,
16821
- isShipping ? /* @__PURE__ */ jsxs30("fieldset", { className: "space-y-3", children: [
16822
- /* @__PURE__ */ jsx32("legend", { className: "mb-2 text-sm font-medium", children: t.addressLegend }),
16823
- /* @__PURE__ */ jsx32("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: ADDRESS_FIELDS.map(({ key: key2, autoComplete, required, wide }) => {
16939
+ isShipping ? /* @__PURE__ */ jsxs32("fieldset", { className: "space-y-3", children: [
16940
+ /* @__PURE__ */ jsx34("legend", { className: "mb-2 text-sm font-medium", children: t.addressLegend }),
16941
+ /* @__PURE__ */ jsx34("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: ADDRESS_FIELDS.map(({ key: key2, autoComplete, required, wide }) => {
16824
16942
  const fieldId = `${uid}-${key2}`;
16825
16943
  const fieldError = addressErrors?.[key2];
16826
- return /* @__PURE__ */ jsxs30("div", { className: cn26("space-y-1", wide && "sm:col-span-2"), children: [
16827
- /* @__PURE__ */ jsx32("label", { htmlFor: fieldId, className: "text-sm font-medium", children: t[key2] }),
16828
- /* @__PURE__ */ jsx32(
16944
+ return /* @__PURE__ */ jsxs32("div", { className: cn28("space-y-1", wide && "sm:col-span-2"), children: [
16945
+ /* @__PURE__ */ jsx34("label", { htmlFor: fieldId, className: "text-sm font-medium", children: t[key2] }),
16946
+ /* @__PURE__ */ jsx34(
16829
16947
  "input",
16830
16948
  {
16831
16949
  id: fieldId,
@@ -16836,13 +16954,13 @@ function CheckoutDeliveryChoice({
16836
16954
  onChange: (e) => onAddressChange({ ...address, [key2]: e.target.value }),
16837
16955
  "aria-invalid": fieldError ? true : void 0,
16838
16956
  "aria-describedby": fieldError ? `${fieldId}-error` : void 0,
16839
- className: cn26(
16957
+ className: cn28(
16840
16958
  INPUT_CLASS,
16841
16959
  fieldError ? "border-destructive" : "border-border focus:border-primary"
16842
16960
  )
16843
16961
  }
16844
16962
  ),
16845
- fieldError ? /* @__PURE__ */ jsx32("p", { id: `${fieldId}-error`, className: "text-sm text-destructive", children: fieldError }) : null
16963
+ fieldError ? /* @__PURE__ */ jsx34("p", { id: `${fieldId}-error`, className: "text-sm text-destructive", children: fieldError }) : null
16846
16964
  ] }, key2);
16847
16965
  }) })
16848
16966
  ] }) : null
@@ -16884,8 +17002,8 @@ function toCheckoutFulfillmentFields(value, address, requiresDelivery = true) {
16884
17002
  }
16885
17003
 
16886
17004
  // src/components/checkout-quote-summary.tsx
16887
- import { cn as cn27 } from "@reblu/site-ui/utils";
16888
- import { Fragment as Fragment7, jsx as jsx33, jsxs as jsxs31 } from "react/jsx-runtime";
17005
+ import { cn as cn29 } from "@reblu/site-ui/utils";
17006
+ import { Fragment as Fragment7, jsx as jsx35, jsxs as jsxs33 } from "react/jsx-runtime";
16889
17007
  var DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS = {
16890
17008
  subtotal: "Subtotal",
16891
17009
  discount: (codeOrLabel, isAutomatic) => isAutomatic ? codeOrLabel : `Descuento (${codeOrLabel})`,
@@ -16902,9 +17020,9 @@ function Row({
16902
17020
  value,
16903
17021
  className
16904
17022
  }) {
16905
- return /* @__PURE__ */ jsxs31("div", { "data-slot": "checkout-quote-row", className: cn27("flex justify-between gap-4", className), children: [
16906
- /* @__PURE__ */ jsx33("dt", { children: name }),
16907
- /* @__PURE__ */ jsx33("dd", { className: "shrink-0 tabular-nums", children: value })
17023
+ return /* @__PURE__ */ jsxs33("div", { "data-slot": "checkout-quote-row", className: cn29("flex justify-between gap-4", className), children: [
17024
+ /* @__PURE__ */ jsx35("dt", { children: name }),
17025
+ /* @__PURE__ */ jsx35("dd", { className: "shrink-0 tabular-nums", children: value })
16908
17026
  ] });
16909
17027
  }
16910
17028
  function CheckoutQuoteSummary({
@@ -16920,22 +17038,22 @@ function CheckoutQuoteSummary({
16920
17038
  const price = (cents) => formatPrice(cents, currencyCode, locale);
16921
17039
  const { fulfillment, shipping, tax, discount } = quote;
16922
17040
  const Tag = `h${headingLevel}`;
16923
- return /* @__PURE__ */ jsxs31("section", { "data-slot": "checkout-quote-summary", className: slotClassName("space-y-4", "", className), children: [
16924
- heading ? /* @__PURE__ */ jsx33(Tag, { className: "text-lg font-semibold", children: heading }) : null,
16925
- /* @__PURE__ */ jsx33("ul", { className: "space-y-3 text-sm", children: quote.lines.map((line) => /* @__PURE__ */ jsxs31("li", { className: "flex justify-between gap-4", children: [
16926
- /* @__PURE__ */ jsxs31("div", { className: "min-w-0 space-y-0.5", children: [
16927
- /* @__PURE__ */ jsx33("p", { className: "font-medium", children: line.name }),
16928
- line.variantName ? /* @__PURE__ */ jsx33("p", { className: "text-muted-foreground", children: line.variantName }) : null,
16929
- /* @__PURE__ */ jsxs31("p", { className: "flex flex-wrap items-center gap-2 text-muted-foreground", children: [
16930
- line.kindLabel ? /* @__PURE__ */ jsx33("span", { "data-slot": "checkout-quote-kind", className: "rounded-full border border-border px-2 py-0.5 text-xs font-medium text-foreground", children: line.kindLabel }) : null,
16931
- /* @__PURE__ */ jsx33("span", { children: t.quantityTimesUnit(line.quantity, price(line.unitPrice)) })
17041
+ return /* @__PURE__ */ jsxs33("section", { "data-slot": "checkout-quote-summary", className: slotClassName("space-y-4", "", className), children: [
17042
+ heading ? /* @__PURE__ */ jsx35(Tag, { className: "text-lg font-semibold", children: heading }) : null,
17043
+ /* @__PURE__ */ jsx35("ul", { className: "space-y-3 text-sm", children: quote.lines.map((line) => /* @__PURE__ */ jsxs33("li", { className: "flex justify-between gap-4", children: [
17044
+ /* @__PURE__ */ jsxs33("div", { className: "min-w-0 space-y-0.5", children: [
17045
+ /* @__PURE__ */ jsx35("p", { className: "font-medium", children: line.name }),
17046
+ line.variantName ? /* @__PURE__ */ jsx35("p", { className: "text-muted-foreground", children: line.variantName }) : null,
17047
+ /* @__PURE__ */ jsxs33("p", { className: "flex flex-wrap items-center gap-2 text-muted-foreground", children: [
17048
+ line.kindLabel ? /* @__PURE__ */ jsx35("span", { "data-slot": "checkout-quote-kind", className: "rounded-full border border-border px-2 py-0.5 text-xs font-medium text-foreground", children: line.kindLabel }) : null,
17049
+ /* @__PURE__ */ jsx35("span", { children: t.quantityTimesUnit(line.quantity, price(line.unitPrice)) })
16932
17050
  ] })
16933
17051
  ] }),
16934
- /* @__PURE__ */ jsx33("span", { className: "shrink-0 tabular-nums", children: price(line.total) })
17052
+ /* @__PURE__ */ jsx35("span", { className: "shrink-0 tabular-nums", children: price(line.total) })
16935
17053
  ] }, `${line.productId}-${line.variantId ?? ""}`)) }),
16936
- /* @__PURE__ */ jsxs31("dl", { className: "space-y-2 border-t border-border pt-3 text-sm", children: [
16937
- /* @__PURE__ */ jsx33(Row, { name: t.subtotal, value: price(quote.subtotal) }),
16938
- discount && discount.amount > 0 ? /* @__PURE__ */ jsx33(
17054
+ /* @__PURE__ */ jsxs33("dl", { className: "space-y-2 border-t border-border pt-3 text-sm", children: [
17055
+ /* @__PURE__ */ jsx35(Row, { name: t.subtotal, value: price(quote.subtotal) }),
17056
+ discount && discount.amount > 0 ? /* @__PURE__ */ jsx35(
16939
17057
  Row,
16940
17058
  {
16941
17059
  className: "text-green-700 dark:text-green-400",
@@ -16943,17 +17061,17 @@ function CheckoutQuoteSummary({
16943
17061
  value: `\u2212${price(discount.amount)}`
16944
17062
  }
16945
17063
  ) : null,
16946
- fulfillment.type ? /* @__PURE__ */ jsx33(
17064
+ fulfillment.type ? /* @__PURE__ */ jsx35(
16947
17065
  Row,
16948
17066
  {
16949
- name: /* @__PURE__ */ jsxs31(Fragment7, { children: [
17067
+ name: /* @__PURE__ */ jsxs33(Fragment7, { children: [
16950
17068
  fulfillment.label ?? t.delivery,
16951
- fulfillment.type === "PICKUP" && fulfillment.pickupLocation ? /* @__PURE__ */ jsx33("span", { className: "block text-muted-foreground", children: fulfillment.pickupLocation.name }) : null
17069
+ fulfillment.type === "PICKUP" && fulfillment.pickupLocation ? /* @__PURE__ */ jsx35("span", { className: "block text-muted-foreground", children: fulfillment.pickupLocation.name }) : null
16952
17070
  ] }),
16953
17071
  value: fulfillment.type === "PICKUP" || shipping.isFree ? t.free : price(shipping.cost)
16954
17072
  }
16955
17073
  ) : null,
16956
- tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ jsx33(
17074
+ tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ jsx35(
16957
17075
  Row,
16958
17076
  {
16959
17077
  className: tax.isIncluded ? "text-muted-foreground" : void 0,
@@ -16962,13 +17080,13 @@ function CheckoutQuoteSummary({
16962
17080
  },
16963
17081
  entry.label
16964
17082
  )) : null,
16965
- /* @__PURE__ */ jsx33(Row, { className: "border-t border-border pt-2 text-base font-bold", name: t.total, value: price(quote.total) })
17083
+ /* @__PURE__ */ jsx35(Row, { className: "border-t border-border pt-2 text-base font-bold", name: t.total, value: price(quote.total) })
16966
17084
  ] }),
16967
- tax.isIncluded ? /* @__PURE__ */ jsx33("p", { className: "text-sm text-muted-foreground", children: t.taxesIncludedNote }) : null,
16968
- fulfillment.type === "SHIPPING" && !shipping.isFree && shipping.remainingForFree ? /* @__PURE__ */ jsx33("p", { className: "text-sm text-muted-foreground", children: t.remainingForFree(price(shipping.remainingForFree)) }) : null,
16969
- fulfillment.type && quote.deliveryEstimateText ? /* @__PURE__ */ jsx33("p", { "data-slot": "checkout-quote-estimate", className: "text-sm text-muted-foreground", children: quote.deliveryEstimateText }) : null,
16970
- quote.discountError ? /* @__PURE__ */ jsx33("p", { role: "status", className: "text-sm text-destructive", children: quote.discountError.message }) : null,
16971
- quote.blockingReason ? /* @__PURE__ */ jsx33("p", { role: "alert", className: "rounded-lg border border-destructive/50 bg-destructive/10 p-3 text-sm text-destructive", children: quote.blockingReason.message }) : null
17085
+ tax.isIncluded ? /* @__PURE__ */ jsx35("p", { className: "text-sm text-muted-foreground", children: t.taxesIncludedNote }) : null,
17086
+ fulfillment.type === "SHIPPING" && !shipping.isFree && shipping.remainingForFree ? /* @__PURE__ */ jsx35("p", { className: "text-sm text-muted-foreground", children: t.remainingForFree(price(shipping.remainingForFree)) }) : null,
17087
+ fulfillment.type && quote.deliveryEstimateText ? /* @__PURE__ */ jsx35("p", { "data-slot": "checkout-quote-estimate", className: "text-sm text-muted-foreground", children: quote.deliveryEstimateText }) : null,
17088
+ quote.discountError ? /* @__PURE__ */ jsx35("p", { role: "status", className: "text-sm text-destructive", children: quote.discountError.message }) : null,
17089
+ quote.blockingReason ? /* @__PURE__ */ jsx35("p", { role: "alert", className: "rounded-lg border border-destructive/50 bg-destructive/10 p-3 text-sm text-destructive", children: quote.blockingReason.message }) : null
16972
17090
  ] });
16973
17091
  }
16974
17092
  var DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS = {
@@ -16986,7 +17104,7 @@ function checkoutQuoteNotice({
16986
17104
  function CheckoutQuoteNotice({ reason, labels, className }) {
16987
17105
  if (!reason) return null;
16988
17106
  const t = { ...DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS, ...labels };
16989
- return /* @__PURE__ */ jsx33(
17107
+ return /* @__PURE__ */ jsx35(
16990
17108
  "p",
16991
17109
  {
16992
17110
  role: "status",
@@ -16998,8 +17116,8 @@ function CheckoutQuoteNotice({ reason, labels, className }) {
16998
17116
  }
16999
17117
 
17000
17118
  // src/components/checkout-terms-acceptance.tsx
17001
- import { cn as cn28 } from "@reblu/site-ui/utils";
17002
- import { Fragment as Fragment8, jsx as jsx34, jsxs as jsxs32 } from "react/jsx-runtime";
17119
+ import { cn as cn30 } from "@reblu/site-ui/utils";
17120
+ import { Fragment as Fragment8, jsx as jsx36, jsxs as jsxs34 } from "react/jsx-runtime";
17003
17121
  function splitTermsLabel(label) {
17004
17122
  const at = label.indexOf("{terms}");
17005
17123
  return at === -1 ? [`${label} `, ""] : [label.slice(0, at), label.slice(at + "{terms}".length)];
@@ -17021,9 +17139,9 @@ function CheckoutTermsAcceptance({
17021
17139
  (part) => part.replaceAll("{tenant}", copy.tenantName)
17022
17140
  );
17023
17141
  const newTab = copy.isTermsLinkNewTab;
17024
- return /* @__PURE__ */ jsxs32("div", { "data-slot": "checkout-terms", className: cn28("space-y-1", className), children: [
17025
- /* @__PURE__ */ jsxs32("div", { className: "flex items-start gap-3", children: [
17026
- /* @__PURE__ */ jsx34(
17142
+ return /* @__PURE__ */ jsxs34("div", { "data-slot": "checkout-terms", className: cn30("space-y-1", className), children: [
17143
+ /* @__PURE__ */ jsxs34("div", { className: "flex items-start gap-3", children: [
17144
+ /* @__PURE__ */ jsx36(
17027
17145
  "input",
17028
17146
  {
17029
17147
  id: boxId,
@@ -17036,9 +17154,9 @@ function CheckoutTermsAcceptance({
17036
17154
  className: "mt-0.5 size-5 shrink-0 cursor-pointer accent-primary"
17037
17155
  }
17038
17156
  ),
17039
- /* @__PURE__ */ jsxs32("label", { htmlFor: boxId, className: "text-sm leading-relaxed", children: [
17157
+ /* @__PURE__ */ jsxs34("label", { htmlFor: boxId, className: "text-sm leading-relaxed", children: [
17040
17158
  before,
17041
- /* @__PURE__ */ jsxs32(
17159
+ /* @__PURE__ */ jsxs34(
17042
17160
  "a",
17043
17161
  {
17044
17162
  href: copy.termsLinkUrl ?? termsHref,
@@ -17046,9 +17164,9 @@ function CheckoutTermsAcceptance({
17046
17164
  className: "font-medium underline underline-offset-2 hover:text-primary",
17047
17165
  children: [
17048
17166
  copy.termsLinkText,
17049
- newTab ? /* @__PURE__ */ jsxs32(Fragment8, { children: [
17167
+ newTab ? /* @__PURE__ */ jsxs34(Fragment8, { children: [
17050
17168
  " ",
17051
- /* @__PURE__ */ jsx34("span", { className: "sr-only", children: newTabHint })
17169
+ /* @__PURE__ */ jsx36("span", { className: "sr-only", children: newTabHint })
17052
17170
  ] }) : null
17053
17171
  ]
17054
17172
  }
@@ -17056,7 +17174,7 @@ function CheckoutTermsAcceptance({
17056
17174
  after
17057
17175
  ] })
17058
17176
  ] }),
17059
- error ? /* @__PURE__ */ jsx34("p", { id: errorId, className: "pl-8 text-sm text-destructive", children: error }) : null
17177
+ error ? /* @__PURE__ */ jsx36("p", { id: errorId, className: "pl-8 text-sm text-destructive", children: error }) : null
17060
17178
  ] });
17061
17179
  }
17062
17180
  function toCheckoutTermsFields(copy, accepted) {
@@ -17065,8 +17183,8 @@ function toCheckoutTermsFields(copy, accepted) {
17065
17183
  }
17066
17184
 
17067
17185
  // src/components/checkout-pay-action.tsx
17068
- import { cn as cn29 } from "@reblu/site-ui/utils";
17069
- import { jsx as jsx35, jsxs as jsxs33 } from "react/jsx-runtime";
17186
+ import { cn as cn31 } from "@reblu/site-ui/utils";
17187
+ import { jsx as jsx37, jsxs as jsxs35 } from "react/jsx-runtime";
17070
17188
  function CheckoutPayAction({
17071
17189
  label,
17072
17190
  notice,
@@ -17080,22 +17198,22 @@ function CheckoutPayAction({
17080
17198
  }) {
17081
17199
  const noticeId = `${id}-notice`;
17082
17200
  const isDisabled = submitting || disabled;
17083
- return /* @__PURE__ */ jsxs33("div", { "data-slot": "checkout-pay-action", className: cn29("space-y-3", className), children: [
17084
- /* @__PURE__ */ jsx35(
17201
+ return /* @__PURE__ */ jsxs35("div", { "data-slot": "checkout-pay-action", className: cn31("space-y-3", className), children: [
17202
+ /* @__PURE__ */ jsx37(
17085
17203
  "button",
17086
17204
  {
17087
17205
  type: "submit",
17088
17206
  disabled: isDisabled,
17089
17207
  "aria-busy": submitting || void 0,
17090
17208
  "aria-describedby": notice ? noticeId : void 0,
17091
- className: buttonClassName ?? cn29(
17209
+ className: buttonClassName ?? cn31(
17092
17210
  "flex w-full items-center justify-center gap-2 rounded-xl px-4 py-3 text-base font-semibold transition-all",
17093
17211
  isDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "cursor-pointer bg-primary text-primary-foreground hover:bg-primary/90"
17094
17212
  ),
17095
17213
  children: submitting ? submittingLabel : label
17096
17214
  }
17097
17215
  ),
17098
- notice ? /* @__PURE__ */ jsx35("p", { id: noticeId, "data-slot": "checkout-pay-notice", className: noticeClassName ?? "text-sm text-muted-foreground", children: notice }) : null
17216
+ notice ? /* @__PURE__ */ jsx37("p", { id: noticeId, "data-slot": "checkout-pay-notice", className: noticeClassName ?? "text-sm text-muted-foreground", children: notice }) : null
17099
17217
  ] });
17100
17218
  }
17101
17219
 
@@ -17122,8 +17240,8 @@ function toAcademyCheckoutInvoiceFields(value, overCap, issuesInvoices = true) {
17122
17240
  }
17123
17241
 
17124
17242
  // src/components/contact-interest-field.tsx
17125
- import { cn as cn30 } from "@reblu/site-ui/utils";
17126
- import { jsx as jsx36, jsxs as jsxs34 } from "react/jsx-runtime";
17243
+ import { cn as cn32 } from "@reblu/site-ui/utils";
17244
+ import { jsx as jsx38, jsxs as jsxs36 } from "react/jsx-runtime";
17127
17245
  function ContactInterestField({
17128
17246
  interest,
17129
17247
  value,
@@ -17140,18 +17258,18 @@ function ContactInterestField({
17140
17258
  else next2.delete(option2);
17141
17259
  onChange(interest.options.filter((candidate) => next2.has(candidate)));
17142
17260
  };
17143
- return /* @__PURE__ */ jsxs34("fieldset", { "data-slot": "contact-interest", className: cn30("space-y-2", className), children: [
17144
- /* @__PURE__ */ jsx36("legend", { className: "text-sm font-medium", children: interest.label }),
17145
- /* @__PURE__ */ jsx36("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
17261
+ return /* @__PURE__ */ jsxs36("fieldset", { "data-slot": "contact-interest", className: cn32("space-y-2", className), children: [
17262
+ /* @__PURE__ */ jsx38("legend", { className: "text-sm font-medium", children: interest.label }),
17263
+ /* @__PURE__ */ jsx38("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
17146
17264
  const id = `${idPrefix}-${index}`;
17147
- return /* @__PURE__ */ jsxs34(
17265
+ return /* @__PURE__ */ jsxs36(
17148
17266
  "label",
17149
17267
  {
17150
17268
  htmlFor: id,
17151
17269
  "data-slot": "contact-interest-option",
17152
17270
  className: "flex items-center gap-2 text-sm",
17153
17271
  children: [
17154
- /* @__PURE__ */ jsx36(
17272
+ /* @__PURE__ */ jsx38(
17155
17273
  "input",
17156
17274
  {
17157
17275
  id,
@@ -17219,6 +17337,7 @@ export {
17219
17337
  ImageTextSplit,
17220
17338
  LegalDocument,
17221
17339
  LessonPreview,
17340
+ LinkedPagesGrid,
17222
17341
  MarkdownRenderer,
17223
17342
  OrderConfirmation,
17224
17343
  OrderInvoiceLink,
@@ -17233,6 +17352,7 @@ export {
17233
17352
  SafeHtml,
17234
17353
  ShopFilters,
17235
17354
  Specialty,
17355
+ TeamGrid,
17236
17356
  Treatment,
17237
17357
  TrustBadges,
17238
17358
  buildFaqPageJsonLd,
@@ -17242,11 +17362,14 @@ export {
17242
17362
  collectFaqItems,
17243
17363
  courseSellsAsGuest,
17244
17364
  defaultCheckoutFulfillment,
17365
+ filterByLink,
17245
17366
  formatPrice,
17246
17367
  getShopErrorMessage,
17247
17368
  isAllowedYouTubeHost,
17248
17369
  isCheckoutDeliveryComplete,
17249
17370
  isOverSimplifiedInvoiceCap,
17371
+ linkFilterOptions,
17372
+ linkKey,
17250
17373
  markdownToPlainText,
17251
17374
  markdownToSafeHtml,
17252
17375
  quoteRequiresDelivery,