@reblu/site-blocks 0.18.0 → 0.20.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.cjs CHANGED
@@ -47,6 +47,7 @@ __export(src_exports, {
47
47
  ParentPage: () => ParentPage,
48
48
  ProductCard: () => ProductCard,
49
49
  ProductTrustItems: () => ProductTrustItems,
50
+ ProfessionalFields: () => ProfessionalFields,
50
51
  ProfileCard: () => ProfileCard,
51
52
  SafeHtml: () => SafeHtml,
52
53
  ShopFilters: () => ShopFilters,
@@ -13699,34 +13700,82 @@ function ParentPage({
13699
13700
  var Specialty = ParentPage;
13700
13701
 
13701
13702
  // src/components/profile-card.tsx
13703
+ var import_utils7 = require("@reblu/site-ui/utils");
13704
+
13705
+ // src/components/professional-fields.tsx
13702
13706
  var import_utils6 = require("@reblu/site-ui/utils");
13703
13707
  var import_jsx_runtime7 = require("react/jsx-runtime");
13708
+ function ProfessionalFields({
13709
+ fields,
13710
+ variant = "profile",
13711
+ className
13712
+ }) {
13713
+ const shown = (fields ?? []).filter((f) => variant !== "card" || f.showOnCard);
13714
+ if (shown.length === 0) return null;
13715
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
13716
+ "dl",
13717
+ {
13718
+ className: (0, import_utils6.cn)(
13719
+ "grid gap-x-3 gap-y-1 text-sm",
13720
+ variant === "card" ? "justify-center" : "grid-cols-[auto_1fr]",
13721
+ className
13722
+ ),
13723
+ "data-slot": "professional-fields",
13724
+ "data-variant": variant,
13725
+ children: shown.map((field, index) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
13726
+ "div",
13727
+ {
13728
+ className: variant === "card" ? "flex justify-center gap-1" : "contents",
13729
+ children: [
13730
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("dt", { className: "text-muted-foreground", children: field.label }),
13731
+ /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("dd", { className: "m-0 font-medium", children: field.value })
13732
+ ]
13733
+ },
13734
+ `${field.label}-${index}`
13735
+ ))
13736
+ }
13737
+ );
13738
+ }
13739
+
13740
+ // src/components/profile-card.tsx
13741
+ var import_jsx_runtime8 = require("react/jsx-runtime");
13704
13742
  function initials(name) {
13705
13743
  return name.split(/\s+/).filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
13706
13744
  }
13707
- function ProfileCard({ name, role, imageUrl, specialties = [], bio, href, className }) {
13745
+ function ProfileCard({
13746
+ name,
13747
+ role,
13748
+ imageUrl,
13749
+ specialties = [],
13750
+ bio,
13751
+ fields,
13752
+ href,
13753
+ className
13754
+ }) {
13708
13755
  const NameTag = href ? "a" : "span";
13709
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
13756
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
13710
13757
  "article",
13711
13758
  {
13712
- className: (0, import_utils6.cn)(
13759
+ className: (0, import_utils7.cn)(
13713
13760
  "flex flex-col items-center gap-3 rounded-lg border bg-card p-6 text-center",
13714
13761
  className
13715
13762
  ),
13716
13763
  "data-slot": "profile-card",
13717
13764
  children: [
13718
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "relative h-24 w-24 overflow-hidden rounded-full bg-muted", children: imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("img", { src: imageUrl, alt: name, loading: "lazy", className: "h-full w-full object-cover" }) : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "flex h-full w-full items-center justify-center text-2xl font-semibold text-muted-foreground", "aria-hidden": "true", children: initials(name) }) }),
13719
- /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "space-y-1", children: [
13720
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
13721
- NameTag,
13722
- {
13723
- ...href ? { href, className: "transition-colors hover:text-primary" } : {},
13724
- children: name
13725
- }
13726
- ) }),
13727
- role && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "text-sm text-muted-foreground", children: role })
13765
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "relative h-24 w-24 overflow-hidden rounded-full bg-muted", children: imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("img", { src: imageUrl, alt: name, loading: "lazy", className: "h-full w-full object-cover" }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
13766
+ "span",
13767
+ {
13768
+ className: "flex h-full w-full items-center justify-center text-2xl font-semibold text-muted-foreground",
13769
+ "aria-hidden": "true",
13770
+ children: initials(name)
13771
+ }
13772
+ ) }),
13773
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "space-y-1", children: [
13774
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(NameTag, { ...href ? { href, className: "transition-colors hover:text-primary" } : {}, children: name }) }),
13775
+ role && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "text-sm text-muted-foreground", children: role })
13728
13776
  ] }),
13729
- specialties.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
13777
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ProfessionalFields, { fields, variant: "card" }),
13778
+ specialties.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
13730
13779
  "li",
13731
13780
  {
13732
13781
  className: "inline-flex items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground",
@@ -13734,28 +13783,28 @@ function ProfileCard({ name, role, imageUrl, specialties = [], bio, href, classN
13734
13783
  },
13735
13784
  s2
13736
13785
  )) }),
13737
- bio && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "text-sm text-muted-foreground", children: bio })
13786
+ bio && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "text-sm text-muted-foreground", children: bio })
13738
13787
  ]
13739
13788
  }
13740
13789
  );
13741
13790
  }
13742
13791
 
13743
13792
  // src/components/product-card.tsx
13744
- var import_utils7 = require("@reblu/site-ui/utils");
13745
- var import_jsx_runtime8 = require("react/jsx-runtime");
13793
+ var import_utils8 = require("@reblu/site-ui/utils");
13794
+ var import_jsx_runtime9 = require("react/jsx-runtime");
13746
13795
  function ProductCard({ product, href, currencyCode = "EUR", locale, className }) {
13747
13796
  const image = product.images.find((i) => i.isPrimary) ?? product.images[0];
13748
13797
  const hasDiscount = product.comparePrice != null && product.comparePrice > product.price;
13749
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
13798
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
13750
13799
  "article",
13751
13800
  {
13752
- className: (0, import_utils7.cn)(
13801
+ className: (0, import_utils8.cn)(
13753
13802
  "group flex flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
13754
13803
  className
13755
13804
  ),
13756
13805
  "data-slot": "product-card",
13757
13806
  children: [
13758
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
13807
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
13759
13808
  "img",
13760
13809
  {
13761
13810
  src: image.url,
@@ -13763,14 +13812,14 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
13763
13812
  loading: "lazy",
13764
13813
  className: "h-full w-full object-cover transition-transform group-hover:scale-105"
13765
13814
  }
13766
- ) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
13767
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13768
- product.category && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("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 }),
13769
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
13770
- product.shortDescription && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
13771
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
13772
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
13773
- hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
13815
+ ) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
13816
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
13817
+ product.category && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("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 }),
13818
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
13819
+ product.shortDescription && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
13820
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
13821
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
13822
+ hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
13774
13823
  ] })
13775
13824
  ] })
13776
13825
  ]
@@ -13972,7 +14021,7 @@ var __iconNode8 = [
13972
14021
  var Truck = createLucideIcon("truck", __iconNode8);
13973
14022
 
13974
14023
  // src/components/product-trust-items.tsx
13975
- var import_jsx_runtime9 = require("react/jsx-runtime");
14024
+ var import_jsx_runtime10 = require("react/jsx-runtime");
13976
14025
  var DEFAULT_TRUST_ICONS = Object.freeze({
13977
14026
  shipping: Truck,
13978
14027
  returns: RotateCcw,
@@ -14006,17 +14055,17 @@ function ProductTrustItems({
14006
14055
  return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
14007
14056
  });
14008
14057
  if (rows.length === 0) return null;
14009
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(List, { "data-slot": "product-trust-items", className: slotClassName("space-y-2.5", "", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
14010
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
14011
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: text3 })
14058
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(List, { "data-slot": "product-trust-items", className: slotClassName("space-y-2.5", "", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
14059
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
14060
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: text3 })
14012
14061
  ] }, key2)) });
14013
14062
  }
14014
14063
 
14015
14064
  // src/components/faq-accordion.tsx
14016
- var import_utils10 = require("@reblu/site-ui/utils");
14065
+ var import_utils11 = require("@reblu/site-ui/utils");
14017
14066
 
14018
14067
  // src/components/_heading.tsx
14019
- var import_jsx_runtime10 = require("react/jsx-runtime");
14068
+ var import_jsx_runtime11 = require("react/jsx-runtime");
14020
14069
  function nextHeadingLevel(level) {
14021
14070
  return Math.min(level + 1, 6);
14022
14071
  }
@@ -14026,11 +14075,11 @@ function Heading({
14026
14075
  children: children2
14027
14076
  }) {
14028
14077
  const Tag = `h${level}`;
14029
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Tag, { className, children: children2 });
14078
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Tag, { className, children: children2 });
14030
14079
  }
14031
14080
 
14032
14081
  // src/components/faq-accordion.tsx
14033
- var import_jsx_runtime11 = require("react/jsx-runtime");
14082
+ var import_jsx_runtime12 = require("react/jsx-runtime");
14034
14083
  function FaqAccordion({
14035
14084
  items,
14036
14085
  heading,
@@ -14041,18 +14090,18 @@ function FaqAccordion({
14041
14090
  }) {
14042
14091
  const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
14043
14092
  if (visible.length === 0) return null;
14044
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: (0, import_utils10.cn)("space-y-4", className), "data-slot": "faq-accordion", children: [
14045
- heading && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
14046
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
14093
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: (0, import_utils11.cn)("space-y-4", className), "data-slot": "faq-accordion", children: [
14094
+ heading && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
14095
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
14047
14096
  "details",
14048
14097
  {
14049
14098
  className: "group px-4",
14050
14099
  "data-slot": "faq-item",
14051
14100
  ...defaultOpen.includes(index) ? { open: true } : {},
14052
14101
  children: [
14053
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("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: [
14054
- questionHeadingLevel ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { children: item.q }),
14055
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
14102
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("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: [
14103
+ questionHeadingLevel ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { children: item.q }),
14104
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
14056
14105
  "span",
14057
14106
  {
14058
14107
  "aria-hidden": "true",
@@ -14061,7 +14110,7 @@ function FaqAccordion({
14061
14110
  }
14062
14111
  )
14063
14112
  ] }),
14064
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
14113
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
14065
14114
  ]
14066
14115
  },
14067
14116
  index
@@ -14070,8 +14119,8 @@ function FaqAccordion({
14070
14119
  }
14071
14120
 
14072
14121
  // src/components/trust-badges.tsx
14073
- var import_utils11 = require("@reblu/site-ui/utils");
14074
- var import_jsx_runtime12 = (
14122
+ var import_utils12 = require("@reblu/site-ui/utils");
14123
+ var import_jsx_runtime13 = (
14075
14124
  // eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
14076
14125
  require("react/jsx-runtime")
14077
14126
  );
@@ -14114,17 +14163,17 @@ function safeLogoSrc(url) {
14114
14163
  function BadgeContent({ badge, logoClassName }) {
14115
14164
  const src = safeLogoSrc(badge.logoUrl);
14116
14165
  if (src) {
14117
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
14166
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
14118
14167
  "img",
14119
14168
  {
14120
14169
  src,
14121
14170
  alt: badge.name,
14122
14171
  loading: "lazy",
14123
- className: (0, import_utils11.cn)("h-12 w-auto object-contain", logoClassName)
14172
+ className: (0, import_utils12.cn)("h-12 w-auto object-contain", logoClassName)
14124
14173
  }
14125
14174
  );
14126
14175
  }
14127
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-sm font-medium", children: badge.name });
14176
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "text-sm font-medium", children: badge.name });
14128
14177
  }
14129
14178
  function TrustBadges({
14130
14179
  badges,
@@ -14152,14 +14201,14 @@ function TrustBadges({
14152
14201
  if (groups.length === 0) return null;
14153
14202
  const hasHeading = heading !== void 0 && heading !== null && heading !== "";
14154
14203
  const groupHeadingLevel = hasHeading ? nextHeadingLevel(headingLevel) : headingLevel;
14155
- const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
14204
+ const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
14156
14205
  "div",
14157
14206
  {
14158
14207
  "data-slot": "trust-badge-group",
14159
14208
  "data-type": type,
14160
- className: (0, import_utils11.cn)("space-y-3", groupClassName),
14209
+ className: (0, import_utils12.cn)("space-y-3", groupClassName),
14161
14210
  children: [
14162
- groupHeading ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
14211
+ groupHeading ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
14163
14212
  Heading,
14164
14213
  {
14165
14214
  level: groupHeadingLevel,
@@ -14171,30 +14220,30 @@ function TrustBadges({
14171
14220
  children: groupHeading
14172
14221
  }
14173
14222
  ) : null,
14174
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("ul", { className: (0, import_utils11.cn)("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
14223
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("ul", { className: (0, import_utils12.cn)("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
14175
14224
  const href = safeHref(badge.url);
14176
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("li", { children: href ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14177
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(BadgeContent, { badge, logoClassName }),
14225
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("li", { children: href ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
14226
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(BadgeContent, { badge, logoClassName }),
14178
14227
  " ",
14179
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "sr-only", children: newWindowLabel })
14180
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(BadgeContent, { badge, logoClassName }) }, badge.id);
14228
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "sr-only", children: newWindowLabel })
14229
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(BadgeContent, { badge, logoClassName }) }, badge.id);
14181
14230
  }) })
14182
14231
  ]
14183
14232
  },
14184
14233
  type
14185
14234
  ));
14186
14235
  if (!hasHeading) {
14187
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { "data-slot": "trust-badges", className: (0, import_utils11.cn)("space-y-6", className), children: content });
14236
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { "data-slot": "trust-badges", className: (0, import_utils12.cn)("space-y-6", className), children: content });
14188
14237
  }
14189
14238
  const Tag = `h${headingLevel}`;
14190
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
14239
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
14191
14240
  "section",
14192
14241
  {
14193
14242
  "data-slot": "trust-badges",
14194
14243
  "aria-labelledby": headingId,
14195
- className: (0, import_utils11.cn)("space-y-6", className),
14244
+ className: (0, import_utils12.cn)("space-y-6", className),
14196
14245
  children: [
14197
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
14246
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
14198
14247
  Tag,
14199
14248
  {
14200
14249
  id: headingId,
@@ -14209,40 +14258,40 @@ function TrustBadges({
14209
14258
  }
14210
14259
 
14211
14260
  // src/components/page-blocks.tsx
14212
- var import_utils12 = require("@reblu/site-ui/utils");
14261
+ var import_utils13 = require("@reblu/site-ui/utils");
14213
14262
  var import_button_variants2 = require("@reblu/site-ui/button-variants");
14214
- var import_jsx_runtime13 = require("react/jsx-runtime");
14263
+ var import_jsx_runtime14 = require("react/jsx-runtime");
14215
14264
  var ALIASES = {
14216
14265
  doctor_embed: "profile_embed",
14217
14266
  specialty_embed: "page_embed"
14218
14267
  };
14219
14268
  function HeroBlock({ block, headingLevel }) {
14220
14269
  const { title, subtitle, imageUrl } = block.data;
14221
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "space-y-4", children: [
14222
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
14223
- subtitle && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-lg opacity-80", children: subtitle }),
14224
- imageUrl && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
14270
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "space-y-4", children: [
14271
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
14272
+ subtitle && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "text-lg opacity-80", children: subtitle }),
14273
+ imageUrl && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
14225
14274
  ] });
14226
14275
  }
14227
14276
  function RichtextBlock({ block, headingLevel }) {
14228
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
14277
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
14229
14278
  }
14230
14279
  function FaqBlock({ block }) {
14231
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(FaqAccordion, { items: block.data.items });
14280
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(FaqAccordion, { items: block.data.items });
14232
14281
  }
14233
14282
  function StatsBlock({ block }) {
14234
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-col-reverse gap-1", children: [
14235
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("dt", { className: "text-sm opacity-80", children: item.label }),
14236
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("dd", { className: "text-3xl font-bold", children: item.value })
14283
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex flex-col-reverse gap-1", children: [
14284
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("dt", { className: "text-sm opacity-80", children: item.label }),
14285
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("dd", { className: "text-3xl font-bold", children: item.value })
14237
14286
  ] }, i)) });
14238
14287
  }
14239
14288
  function TestimonialBlock({ block }) {
14240
14289
  const { quote, author, role, avatarUrl } = block.data;
14241
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("figure", { className: "space-y-4", children: [
14242
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { children: quote }) }),
14243
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("figcaption", { className: "flex items-center gap-3", children: [
14290
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("figure", { className: "space-y-4", children: [
14291
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { children: quote }) }),
14292
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("figcaption", { className: "flex items-center gap-3", children: [
14244
14293
  avatarUrl && // eslint-disable-next-line @next/next/no-img-element
14245
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
14294
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14246
14295
  "img",
14247
14296
  {
14248
14297
  src: avatarUrl,
@@ -14251,9 +14300,9 @@ function TestimonialBlock({ block }) {
14251
14300
  className: "h-10 w-10 rounded-full object-cover"
14252
14301
  }
14253
14302
  ),
14254
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { children: [
14255
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "font-semibold", children: author }),
14256
- role && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "block text-sm opacity-80", children: role })
14303
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("span", { children: [
14304
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "font-semibold", children: author }),
14305
+ role && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "block text-sm opacity-80", children: role })
14257
14306
  ] })
14258
14307
  ] })
14259
14308
  ] });
@@ -14262,19 +14311,19 @@ function CtaSlotBlock(_props) {
14262
14311
  return null;
14263
14312
  }
14264
14313
  function FeatureListBlock({ block }) {
14265
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("li", { children: item.text }, i)) });
14314
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("li", { children: item.text }, i)) });
14266
14315
  }
14267
14316
  function GalleryBlock({ block }) {
14268
14317
  const { images } = block.data;
14269
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
14318
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14270
14319
  "div",
14271
14320
  {
14272
- className: (0, import_utils12.cn)(
14321
+ className: (0, import_utils13.cn)(
14273
14322
  "grid gap-4",
14274
14323
  images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
14275
14324
  ),
14276
- children: images.map((img, i) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("figure", { className: "space-y-1", children: [
14277
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
14325
+ children: images.map((img, i) => /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("figure", { className: "space-y-1", children: [
14326
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14278
14327
  "img",
14279
14328
  {
14280
14329
  src: img.url,
@@ -14283,7 +14332,7 @@ function GalleryBlock({ block }) {
14283
14332
  className: "h-full w-full object-cover"
14284
14333
  }
14285
14334
  ) }),
14286
- img.caption && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
14335
+ img.caption && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
14287
14336
  ] }, `${img.url}-${i}`))
14288
14337
  }
14289
14338
  );
@@ -14293,13 +14342,13 @@ function EmbedCard({
14293
14342
  headingLevel,
14294
14343
  embedHref
14295
14344
  }) {
14296
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
14345
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
14297
14346
  "a",
14298
14347
  {
14299
14348
  href: embedHref(resolved),
14300
14349
  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",
14301
14350
  children: [
14302
- resolved.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
14351
+ resolved.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14303
14352
  "img",
14304
14353
  {
14305
14354
  src: resolved.coverImageUrl,
@@ -14308,24 +14357,24 @@ function EmbedCard({
14308
14357
  className: "h-full w-full object-cover"
14309
14358
  }
14310
14359
  ) }),
14311
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "space-y-1 p-4", children: [
14312
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
14313
- resolved.role && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
14314
- resolved.excerpt && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-muted-foreground", children: resolved.excerpt })
14360
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "space-y-1 p-4", children: [
14361
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
14362
+ resolved.role && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
14363
+ resolved.excerpt && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "text-muted-foreground", children: resolved.excerpt })
14315
14364
  ] })
14316
14365
  ]
14317
14366
  }
14318
14367
  );
14319
14368
  }
14320
14369
  function PageEmbedBlock({ block, headingLevel, embedHref }) {
14321
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14370
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14322
14371
  }
14323
14372
  function ProfileEmbedBlock({
14324
14373
  block,
14325
14374
  headingLevel,
14326
14375
  embedHref
14327
14376
  }) {
14328
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14377
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
14329
14378
  }
14330
14379
  var DEFAULT_RENDERERS = {
14331
14380
  hero: HeroBlock,
@@ -14382,14 +14431,14 @@ function toIdFragment(value) {
14382
14431
  function SectionCta2({ cta }) {
14383
14432
  if (!hasUsableCta(cta)) return null;
14384
14433
  const variant = toButtonVariant(cta.variant);
14385
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
14434
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14386
14435
  "a",
14387
14436
  {
14388
14437
  href: cta.url,
14389
14438
  "data-slot": "button",
14390
14439
  "data-variant": variant,
14391
14440
  "data-size": "default",
14392
- className: (0, import_utils12.cn)((0, import_button_variants2.buttonVariants)({ variant, size: "default" })),
14441
+ className: (0, import_utils13.cn)((0, import_button_variants2.buttonVariants)({ variant, size: "default" })),
14393
14442
  ...cta.isExternal ? { target: "_blank", rel: "noopener noreferrer" } : {},
14394
14443
  children: cta.label
14395
14444
  }
@@ -14415,17 +14464,17 @@ function PageBlocks({
14415
14464
  const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
14416
14465
  const background = block.backgroundColor;
14417
14466
  return [
14418
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
14467
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
14419
14468
  "section",
14420
14469
  {
14421
14470
  "data-slot": "page-block",
14422
14471
  "data-block-type": type,
14423
14472
  "aria-labelledby": headingId,
14424
14473
  style: surfaceStyle(background),
14425
- className: (0, import_utils12.cn)("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
14474
+ className: (0, import_utils13.cn)("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
14426
14475
  children: [
14427
- block.heading && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { id: headingId, children: block.heading }) }),
14428
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
14476
+ block.heading && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { id: headingId, children: block.heading }) }),
14477
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14429
14478
  Renderer,
14430
14479
  {
14431
14480
  block,
@@ -14433,7 +14482,7 @@ function PageBlocks({
14433
14482
  embedHref
14434
14483
  }
14435
14484
  ),
14436
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SectionCta2, { cta: block.cta })
14485
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SectionCta2, { cta: block.cta })
14437
14486
  ]
14438
14487
  },
14439
14488
  block.id
@@ -14441,12 +14490,12 @@ function PageBlocks({
14441
14490
  ];
14442
14491
  });
14443
14492
  if (sections.length === 0) return null;
14444
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: (0, import_utils12.cn)("space-y-12", className), "data-slot": "page-blocks", children: sections });
14493
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: (0, import_utils13.cn)("space-y-12", className), "data-slot": "page-blocks", children: sections });
14445
14494
  }
14446
14495
 
14447
14496
  // src/components/shop-filters.tsx
14448
- var import_utils13 = require("@reblu/site-ui/utils");
14449
- var import_jsx_runtime14 = require("react/jsx-runtime");
14497
+ var import_utils14 = require("@reblu/site-ui/utils");
14498
+ var import_jsx_runtime15 = require("react/jsx-runtime");
14450
14499
  var DEFAULT_SHOP_PRICE_BANDS = [
14451
14500
  { max: 2500 },
14452
14501
  { min: 2500, max: 5e3 },
@@ -14490,7 +14539,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
14490
14539
  return "";
14491
14540
  }
14492
14541
  function OptionLink({ href, active, label, onActivate }) {
14493
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14542
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14494
14543
  "a",
14495
14544
  {
14496
14545
  href,
@@ -14499,7 +14548,7 @@ function OptionLink({ href, active, label, onActivate }) {
14499
14548
  event.preventDefault();
14500
14549
  onActivate();
14501
14550
  } : void 0,
14502
- className: (0, import_utils13.cn)(
14551
+ className: (0, import_utils14.cn)(
14503
14552
  "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",
14504
14553
  active ? "border-transparent bg-primary text-primary-foreground" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground"
14505
14554
  ),
@@ -14508,9 +14557,9 @@ function OptionLink({ href, active, label, onActivate }) {
14508
14557
  );
14509
14558
  }
14510
14559
  function FilterFieldset({ legend, children: children2 }) {
14511
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("fieldset", { className: "space-y-2", children: [
14512
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("legend", { className: "text-sm font-medium text-foreground", children: legend }),
14513
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex flex-wrap gap-2", children: children2 })
14560
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("fieldset", { className: "space-y-2", children: [
14561
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("legend", { className: "text-sm font-medium text-foreground", children: legend }),
14562
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex flex-wrap gap-2", children: children2 })
14514
14563
  ] });
14515
14564
  }
14516
14565
  function ShopFilters({
@@ -14533,11 +14582,11 @@ function ShopFilters({
14533
14582
  if (!shouldRenderShopFilters(facets, active)) {
14534
14583
  return null;
14535
14584
  }
14536
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: (0, import_utils13.cn)("space-y-6", className), "data-slot": "shop-filters", children: [
14585
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: (0, import_utils14.cn)("space-y-6", className), "data-slot": "shop-filters", children: [
14537
14586
  visibleTaxonomies.map((axis) => {
14538
14587
  const activeSlug = active.taxonomy?.[axis.key];
14539
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(FilterFieldset, { legend: axis.label, children: [
14540
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14588
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(FilterFieldset, { legend: axis.label, children: [
14589
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14541
14590
  OptionLink,
14542
14591
  {
14543
14592
  href: hrefs.taxonomy(axis.key, void 0),
@@ -14552,7 +14601,7 @@ function ShopFilters({
14552
14601
  ),
14553
14602
  axis.terms.map((term) => {
14554
14603
  const isActive = activeSlug === term.slug;
14555
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14604
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14556
14605
  OptionLink,
14557
14606
  {
14558
14607
  href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
@@ -14572,9 +14621,9 @@ function ShopFilters({
14572
14621
  }),
14573
14622
  visibleAttributes.map((attr) => {
14574
14623
  const activeValues = toValueArray(active.attr?.[attr.key]);
14575
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
14624
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
14576
14625
  const isActive = activeValues.includes(opt.value);
14577
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14626
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14578
14627
  OptionLink,
14579
14628
  {
14580
14629
  href: hrefs.attr(attr.key, opt.value),
@@ -14592,11 +14641,11 @@ function ShopFilters({
14592
14641
  );
14593
14642
  }) }, attr.key);
14594
14643
  }),
14595
- showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
14644
+ showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
14596
14645
  const isActive = active.priceMin === band.min && active.priceMax === band.max;
14597
14646
  const nextMin = isActive ? void 0 : band.min;
14598
14647
  const nextMax = isActive ? void 0 : band.max;
14599
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14648
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14600
14649
  OptionLink,
14601
14650
  {
14602
14651
  href: hrefs.price(nextMin, nextMax),
@@ -14607,7 +14656,7 @@ function ShopFilters({
14607
14656
  i
14608
14657
  );
14609
14658
  }) }),
14610
- hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14659
+ hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14611
14660
  OptionLink,
14612
14661
  {
14613
14662
  href: hrefs.onSale(!active.onSale),
@@ -14616,7 +14665,7 @@ function ShopFilters({
14616
14665
  onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
14617
14666
  }
14618
14667
  ),
14619
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
14668
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14620
14669
  "a",
14621
14670
  {
14622
14671
  href: hrefs.clearAll(),
@@ -14632,8 +14681,8 @@ function ShopFilters({
14632
14681
  }
14633
14682
 
14634
14683
  // src/components/cart-line-list.tsx
14635
- var import_utils14 = require("@reblu/site-ui/utils");
14636
- var import_jsx_runtime15 = require("react/jsx-runtime");
14684
+ var import_utils15 = require("@reblu/site-ui/utils");
14685
+ var import_jsx_runtime16 = require("react/jsx-runtime");
14637
14686
  var DEFAULT_LABELS2 = {
14638
14687
  quantityLabel: "Cantidad",
14639
14688
  decrease: "Reducir cantidad",
@@ -14659,9 +14708,9 @@ function CartLineList({
14659
14708
  }) {
14660
14709
  const t = { ...DEFAULT_LABELS2, ...labels };
14661
14710
  const noticeContent = notice === true ? t.cancelledNotice : notice;
14662
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: (0, import_utils14.cn)("space-y-4", className), "data-slot": "cart-line-list", children: [
14663
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
14664
- noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14711
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: (0, import_utils15.cn)("space-y-4", className), "data-slot": "cart-line-list", children: [
14712
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
14713
+ noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14665
14714
  "div",
14666
14715
  {
14667
14716
  role: "status",
@@ -14670,69 +14719,69 @@ function CartLineList({
14670
14719
  children: noticeContent
14671
14720
  }
14672
14721
  ),
14673
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
14722
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
14674
14723
  const maxQty = item.maxStock ?? Infinity;
14675
14724
  const atMax = item.quantity >= maxQty;
14676
14725
  const atMin = item.quantity <= 1;
14677
14726
  const message = lineMessage?.(item);
14678
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
14727
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
14679
14728
  "li",
14680
14729
  {
14681
14730
  className: "flex gap-4 rounded-xl border border-border bg-card p-4",
14682
14731
  children: [
14683
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
14684
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "min-w-0 flex-1", children: [
14685
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
14686
- item.variantName && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
14687
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("p", { className: "mt-1 text-sm text-muted-foreground", children: [
14732
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
14733
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "min-w-0 flex-1", children: [
14734
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
14735
+ item.variantName && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
14736
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("p", { className: "mt-1 text-sm text-muted-foreground", children: [
14688
14737
  formatPrice(item.unitPrice, currencyCode, locale),
14689
14738
  " ",
14690
14739
  t.unitPriceSuffix
14691
14740
  ] }),
14692
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
14741
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
14693
14742
  "div",
14694
14743
  {
14695
14744
  role: "group",
14696
14745
  "aria-label": t.quantityLabel,
14697
14746
  className: "mt-3 flex items-center gap-3",
14698
14747
  children: [
14699
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14748
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14700
14749
  "button",
14701
14750
  {
14702
14751
  type: "button",
14703
14752
  "aria-label": t.decrease,
14704
14753
  disabled: !onQuantityChange || atMin,
14705
14754
  onClick: onQuantityChange ? () => onQuantityChange(item.productId, item.variantId, item.quantity - 1) : void 0,
14706
- className: "flex h-7 w-7 items-center justify-center rounded border border-border transition hover:bg-muted disabled:cursor-not-allowed disabled:opacity-40",
14755
+ className: "flex h-7 w-7 cursor-pointer items-center justify-center rounded border border-border transition hover:bg-muted disabled:cursor-not-allowed disabled:opacity-40",
14707
14756
  children: "\u2212"
14708
14757
  }
14709
14758
  ),
14710
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
14711
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14759
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
14760
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14712
14761
  "button",
14713
14762
  {
14714
14763
  type: "button",
14715
14764
  "aria-label": t.increase,
14716
14765
  disabled: !onQuantityChange || atMax,
14717
14766
  onClick: onQuantityChange ? () => onQuantityChange(item.productId, item.variantId, item.quantity + 1) : void 0,
14718
- className: "flex h-7 w-7 items-center justify-center rounded border border-border transition hover:bg-muted disabled:cursor-not-allowed disabled:opacity-40",
14767
+ className: "flex h-7 w-7 cursor-pointer items-center justify-center rounded border border-border transition hover:bg-muted disabled:cursor-not-allowed disabled:opacity-40",
14719
14768
  children: "+"
14720
14769
  }
14721
14770
  ),
14722
- onRemove && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14771
+ onRemove && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14723
14772
  "button",
14724
14773
  {
14725
14774
  type: "button",
14726
14775
  "aria-label": `${t.remove} ${item.name}`,
14727
14776
  onClick: () => onRemove(item.productId, item.variantId),
14728
- className: "ml-2 text-muted-foreground transition-colors hover:text-destructive",
14777
+ className: "ml-2 cursor-pointer text-muted-foreground transition-colors hover:text-destructive",
14729
14778
  children: t.remove
14730
14779
  }
14731
14780
  )
14732
14781
  ]
14733
14782
  }
14734
14783
  ),
14735
- message != null && message !== false && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
14784
+ message != null && message !== false && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14736
14785
  "p",
14737
14786
  {
14738
14787
  className: "mt-2 text-sm text-destructive",
@@ -14741,7 +14790,7 @@ function CartLineList({
14741
14790
  }
14742
14791
  )
14743
14792
  ] }),
14744
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
14793
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
14745
14794
  ]
14746
14795
  },
14747
14796
  lineKey(item.productId, item.variantId)
@@ -14751,8 +14800,8 @@ function CartLineList({
14751
14800
  }
14752
14801
 
14753
14802
  // src/components/cart-summary.tsx
14754
- var import_utils15 = require("@reblu/site-ui/utils");
14755
- var import_jsx_runtime16 = require("react/jsx-runtime");
14803
+ var import_utils16 = require("@reblu/site-ui/utils");
14804
+ var import_jsx_runtime17 = require("react/jsx-runtime");
14756
14805
  var DEFAULT_LABELS3 = {
14757
14806
  subtotal: "Subtotal",
14758
14807
  discountPrefix: "Descuento",
@@ -14760,12 +14809,14 @@ var DEFAULT_LABELS3 = {
14760
14809
  freeShipping: "Env\xEDo gratis",
14761
14810
  shippingCalculated: "Se calcula en el pago",
14762
14811
  total: "Total",
14763
- cancelledNotice: "Pago cancelado: tu carrito sigue aqu\xED"
14812
+ cancelledNotice: "Pago cancelado: tu carrito sigue aqu\xED",
14813
+ staffDiscountApplied: "Descuento de personal aplicado"
14764
14814
  };
14765
14815
  function CartSummary({
14766
14816
  subtotal,
14767
14817
  discount,
14768
14818
  discountCode,
14819
+ autoDiscount,
14769
14820
  shipping,
14770
14821
  shippingEnabled,
14771
14822
  total,
@@ -14776,43 +14827,41 @@ function CartSummary({
14776
14827
  className
14777
14828
  }) {
14778
14829
  const t = { ...DEFAULT_LABELS3, ...labels };
14779
- const hasDiscount = Boolean(discount && discount > 0);
14830
+ const discountAmount = discount ?? autoDiscount?.amount;
14831
+ const hasDiscount = Boolean(discountAmount && discountAmount > 0);
14780
14832
  const noticeContent = notice === true ? t.cancelledNotice : notice;
14781
14833
  const hasNotice = noticeContent != null && noticeContent !== false;
14782
- const breakdown = /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
14834
+ const breakdown = /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
14783
14835
  "dl",
14784
14836
  {
14785
- className: (0, import_utils15.cn)("space-y-2 text-sm", !hasNotice && className),
14837
+ className: (0, import_utils16.cn)("space-y-2 text-sm", !hasNotice && className),
14786
14838
  "data-slot": "cart-summary",
14787
14839
  children: [
14788
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
14789
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("dt", { children: t.subtotal }),
14790
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("dd", { children: formatPrice(subtotal, currencyCode, locale) })
14840
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
14841
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("dt", { children: t.subtotal }),
14842
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("dd", { children: formatPrice(subtotal, currencyCode, locale) })
14791
14843
  ] }),
14792
- hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
14793
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("dt", { children: [
14794
- t.discountPrefix,
14795
- discountCode ? ` (${discountCode})` : ""
14796
- ] }),
14797
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("dd", { children: [
14844
+ hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
14845
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
14846
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("dd", { children: [
14798
14847
  "-",
14799
- formatPrice(discount, currencyCode, locale)
14848
+ formatPrice(discountAmount, currencyCode, locale)
14800
14849
  ] })
14801
14850
  ] }),
14802
- shippingEnabled && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
14803
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("dt", { children: t.shipping }),
14804
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
14851
+ shippingEnabled && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
14852
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("dt", { children: t.shipping }),
14853
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
14805
14854
  ] }),
14806
- /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
14807
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("dt", { children: t.total }),
14808
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("dd", { children: formatPrice(total, currencyCode, locale) })
14855
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
14856
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("dt", { children: t.total }),
14857
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("dd", { children: formatPrice(total, currencyCode, locale) })
14809
14858
  ] })
14810
14859
  ]
14811
14860
  }
14812
14861
  );
14813
14862
  if (!hasNotice) return breakdown;
14814
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: (0, import_utils15.cn)("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
14815
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
14863
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: (0, import_utils16.cn)("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
14864
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14816
14865
  "div",
14817
14866
  {
14818
14867
  role: "status",
@@ -14826,8 +14875,8 @@ function CartSummary({
14826
14875
  }
14827
14876
 
14828
14877
  // src/components/cart-adjustments-notice.tsx
14829
- var import_utils16 = require("@reblu/site-ui/utils");
14830
- var import_jsx_runtime17 = require("react/jsx-runtime");
14878
+ var import_utils17 = require("@reblu/site-ui/utils");
14879
+ var import_jsx_runtime18 = require("react/jsx-runtime");
14831
14880
  var DEFAULT_LABELS4 = {
14832
14881
  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.`,
14833
14882
  quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
@@ -14861,20 +14910,20 @@ function CartAdjustmentsNotice({
14861
14910
  );
14862
14911
  }
14863
14912
  if (messages.length === 0) return null;
14864
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
14913
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
14865
14914
  "div",
14866
14915
  {
14867
14916
  role: "status",
14868
- className: (0, import_utils16.cn)("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
14917
+ className: (0, import_utils17.cn)("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
14869
14918
  "data-slot": "cart-adjustments-notice",
14870
- children: messages.length === 1 ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { children: messages[0] }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("li", { children: message }, index)) })
14919
+ children: messages.length === 1 ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { children: messages[0] }) : /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("li", { children: message }, index)) })
14871
14920
  }
14872
14921
  );
14873
14922
  }
14874
14923
 
14875
14924
  // src/components/added-to-cart-toast.tsx
14876
- var import_utils17 = require("@reblu/site-ui/utils");
14877
- var import_jsx_runtime18 = (
14925
+ var import_utils18 = require("@reblu/site-ui/utils");
14926
+ var import_jsx_runtime19 = (
14878
14927
  // eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
14879
14928
  require("react/jsx-runtime")
14880
14929
  );
@@ -14897,32 +14946,32 @@ function AddedToCartToast({
14897
14946
  const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
14898
14947
  const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
14899
14948
  const variant = status === "success" ? "success" : "error";
14900
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
14949
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
14901
14950
  "div",
14902
14951
  {
14903
14952
  "data-slot": "added-to-cart-toast",
14904
14953
  "data-variant": variant,
14905
- className: (0, import_utils17.cn)(
14954
+ className: (0, import_utils18.cn)(
14906
14955
  "flex items-center gap-3 rounded-xl border border-border bg-card p-3 text-sm shadow-lg",
14907
14956
  variant === "success" && "border-green-600/30 dark:border-green-400/30",
14908
14957
  variant === "error" && "border-destructive/30",
14909
14958
  className
14910
14959
  ),
14911
14960
  children: [
14912
- hasThumbnail && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
14913
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "min-w-0 flex-1", children: [
14914
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "truncate font-semibold text-foreground", children: productName }),
14915
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
14961
+ hasThumbnail && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
14962
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "min-w-0 flex-1", children: [
14963
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "truncate font-semibold text-foreground", children: productName }),
14964
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
14916
14965
  ] }),
14917
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
14966
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
14918
14967
  ]
14919
14968
  }
14920
14969
  );
14921
14970
  }
14922
14971
 
14923
14972
  // src/components/checkout-login-prompt.tsx
14924
- var import_utils18 = require("@reblu/site-ui/utils");
14925
- var import_jsx_runtime19 = require("react/jsx-runtime");
14973
+ var import_utils19 = require("@reblu/site-ui/utils");
14974
+ var import_jsx_runtime20 = require("react/jsx-runtime");
14926
14975
  var DEFAULT_LABELS6 = {
14927
14976
  title: "Identificaci\xF3n",
14928
14977
  description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
@@ -14949,39 +14998,39 @@ function CheckoutLoginPrompt({
14949
14998
  if (!open) return null;
14950
14999
  const t = { ...DEFAULT_LABELS6, ...labels };
14951
15000
  const isValidEmail = EMAIL_PATTERN.test(email.trim());
14952
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment, { children: [
14953
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
14954
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
15001
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment, { children: [
15002
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
15003
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
14955
15004
  "div",
14956
15005
  {
14957
15006
  role: "dialog",
14958
15007
  "aria-modal": "true",
14959
15008
  "aria-labelledby": "checkout-login-prompt-title",
14960
15009
  "data-slot": "checkout-login-prompt",
14961
- className: (0, import_utils18.cn)(
15010
+ className: (0, import_utils19.cn)(
14962
15011
  "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",
14963
15012
  className
14964
15013
  ),
14965
15014
  children: [
14966
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
14967
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { children: [
14968
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
14969
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
15015
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
15016
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { children: [
15017
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
15018
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
14970
15019
  ] }),
14971
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
15020
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
14972
15021
  "button",
14973
15022
  {
14974
15023
  type: "button",
14975
15024
  onClick: onClose,
14976
15025
  "aria-label": t.close,
14977
- className: "flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
15026
+ className: "flex h-8 w-8 flex-shrink-0 cursor-pointer items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
14978
15027
  children: "\u2715"
14979
15028
  }
14980
15029
  )
14981
15030
  ] }),
14982
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "space-y-2", children: [
14983
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
14984
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
15031
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "space-y-2", children: [
15032
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
15033
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
14985
15034
  "input",
14986
15035
  {
14987
15036
  id: "checkout-login-prompt-email",
@@ -14990,34 +15039,34 @@ function CheckoutLoginPrompt({
14990
15039
  value: email,
14991
15040
  onChange: (e) => onEmailChange(e.target.value),
14992
15041
  placeholder: t.emailPlaceholder,
14993
- className: (0, import_utils18.cn)(
15042
+ className: (0, import_utils19.cn)(
14994
15043
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
14995
15044
  error ? "border-destructive" : "border-border focus:border-primary"
14996
15045
  )
14997
15046
  }
14998
15047
  ),
14999
- error && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-xs text-destructive", children: error })
15048
+ error && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-xs text-destructive", children: error })
15000
15049
  ] }),
15001
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "space-y-2", children: [
15002
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
15050
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "space-y-2", children: [
15051
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
15003
15052
  "button",
15004
15053
  {
15005
15054
  type: "button",
15006
15055
  onClick: onSubmitEmail,
15007
15056
  disabled: checking || !isValidEmail,
15008
- className: (0, import_utils18.cn)(
15009
- "flex w-full items-center justify-center gap-2 rounded-xl px-4 py-2.5 text-sm font-semibold transition-all",
15057
+ className: (0, import_utils19.cn)(
15058
+ "flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-2.5 text-sm font-semibold transition-all",
15010
15059
  checking || !isValidEmail ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
15011
15060
  ),
15012
15061
  children: checking ? t.checking : t.continueWithEmail
15013
15062
  }
15014
15063
  ),
15015
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
15064
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
15016
15065
  "button",
15017
15066
  {
15018
15067
  type: "button",
15019
15068
  onClick: onContinueAsGuest,
15020
- className: "flex w-full items-center justify-center gap-2 rounded-xl bg-muted px-4 py-2.5 text-sm font-semibold text-muted-foreground transition-colors hover:bg-muted/70",
15069
+ className: "flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl bg-muted px-4 py-2.5 text-sm font-semibold text-muted-foreground transition-colors hover:bg-muted/70",
15021
15070
  children: t.continueAsGuest
15022
15071
  }
15023
15072
  )
@@ -15029,9 +15078,9 @@ function CheckoutLoginPrompt({
15029
15078
  }
15030
15079
 
15031
15080
  // src/components/checkout-form.tsx
15032
- var import_utils19 = require("@reblu/site-ui/utils");
15081
+ var import_utils20 = require("@reblu/site-ui/utils");
15033
15082
  var import_phone_input = require("@reblu/site-ui/phone-input");
15034
- var import_jsx_runtime20 = require("react/jsx-runtime");
15083
+ var import_jsx_runtime21 = require("react/jsx-runtime");
15035
15084
  var DEFAULT_LABELS7 = {
15036
15085
  contactTitle: "Datos de contacto",
15037
15086
  nameLabel: "Nombre completo",
@@ -15045,6 +15094,7 @@ var DEFAULT_LABELS7 = {
15045
15094
  applyingDiscount: "Aplicando\u2026",
15046
15095
  removeDiscount: "Quitar",
15047
15096
  discountAppliedSuffix: (amount) => `\u2014 ${amount} de descuento`,
15097
+ staffDiscountApplied: "Descuento de personal aplicado",
15048
15098
  submit: "Confirmar y pagar",
15049
15099
  submitting: "Procesando\u2026"
15050
15100
  };
@@ -15059,6 +15109,7 @@ function CheckoutForm({
15059
15109
  onApplyDiscount,
15060
15110
  onRemoveDiscount,
15061
15111
  appliedDiscount,
15112
+ autoDiscount,
15062
15113
  discountApplying,
15063
15114
  discountError,
15064
15115
  loginPrompt,
@@ -15085,22 +15136,22 @@ function CheckoutForm({
15085
15136
  event.preventDefault();
15086
15137
  if (discountCode.trim() && !discountApplying) onApplyDiscount();
15087
15138
  }
15088
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment, { children: [
15139
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [
15089
15140
  loginPrompt,
15090
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
15141
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
15091
15142
  "form",
15092
15143
  {
15093
15144
  "data-testid": "checkout-form",
15094
15145
  onSubmit,
15095
- className: (0, import_utils19.cn)("space-y-8", className),
15146
+ className: (0, import_utils20.cn)("space-y-8", className),
15096
15147
  "data-slot": "checkout-form",
15097
15148
  children: [
15098
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("section", { className: "space-y-4", children: [
15099
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
15100
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15101
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "space-y-1", children: [
15102
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
15103
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
15149
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("section", { className: "space-y-4", children: [
15150
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
15151
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15152
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-1", children: [
15153
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
15154
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15104
15155
  "input",
15105
15156
  {
15106
15157
  id: "checkout-form-name",
@@ -15109,17 +15160,17 @@ function CheckoutForm({
15109
15160
  value: contact.name,
15110
15161
  onChange: (e) => patchContact({ name: e.target.value }),
15111
15162
  placeholder: t.namePlaceholder,
15112
- className: (0, import_utils19.cn)(
15163
+ className: (0, import_utils20.cn)(
15113
15164
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
15114
15165
  contactErrors?.name ? "border-destructive" : "border-border focus:border-primary"
15115
15166
  )
15116
15167
  }
15117
15168
  ),
15118
- contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
15169
+ contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
15119
15170
  ] }),
15120
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "space-y-1", children: [
15121
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
15122
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
15171
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-1", children: [
15172
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
15173
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15123
15174
  "input",
15124
15175
  {
15125
15176
  id: "checkout-form-email",
@@ -15128,15 +15179,15 @@ function CheckoutForm({
15128
15179
  value: contact.email,
15129
15180
  onChange: (e) => patchContact({ email: e.target.value }),
15130
15181
  placeholder: t.emailPlaceholder,
15131
- className: (0, import_utils19.cn)(
15182
+ className: (0, import_utils20.cn)(
15132
15183
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
15133
15184
  contactErrors?.email ? "border-destructive" : "border-border focus:border-primary"
15134
15185
  )
15135
15186
  }
15136
15187
  ),
15137
- contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
15188
+ contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
15138
15189
  ] }),
15139
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
15190
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15140
15191
  import_phone_input.PhoneInput,
15141
15192
  {
15142
15193
  id: "checkout-form-phone",
@@ -15150,27 +15201,38 @@ function CheckoutForm({
15150
15201
  ] })
15151
15202
  ] }),
15152
15203
  children2,
15153
- generalError ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
15154
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("section", { className: "space-y-3", children: [
15155
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
15156
- appliedDiscount ? /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("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: [
15157
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
15158
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "font-semibold", children: appliedDiscount.code }),
15159
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
15204
+ generalError ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
15205
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("section", { className: "space-y-3", children: [
15206
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
15207
+ autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
15208
+ "div",
15209
+ {
15210
+ 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",
15211
+ "data-slot": "checkout-staff-discount",
15212
+ children: [
15213
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "font-semibold", children: t.staffDiscountApplied }),
15214
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
15215
+ ]
15216
+ }
15217
+ ) : null,
15218
+ appliedDiscount && !autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("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: [
15219
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
15220
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "font-semibold", children: appliedDiscount.code }),
15221
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
15160
15222
  ] }),
15161
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
15223
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15162
15224
  "button",
15163
15225
  {
15164
15226
  type: "button",
15165
15227
  onClick: onRemoveDiscount,
15166
15228
  "aria-label": t.removeDiscount,
15167
- className: "text-green-600 transition-colors hover:text-green-800 dark:text-green-400 dark:hover:text-green-200",
15229
+ className: "cursor-pointer text-green-600 transition-colors hover:text-green-800 dark:text-green-400 dark:hover:text-green-200",
15168
15230
  children: t.removeDiscount
15169
15231
  }
15170
15232
  )
15171
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "flex gap-2", children: [
15172
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
15173
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
15233
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex gap-2", children: [
15234
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
15235
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15174
15236
  "input",
15175
15237
  {
15176
15238
  id: "checkout-form-discount-code",
@@ -15182,26 +15244,26 @@ function CheckoutForm({
15182
15244
  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"
15183
15245
  }
15184
15246
  ),
15185
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
15247
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15186
15248
  "button",
15187
15249
  {
15188
15250
  type: "button",
15189
15251
  onClick: onApplyDiscount,
15190
15252
  disabled: !discountCode.trim() || discountApplying,
15191
- className: "rounded-lg bg-muted px-4 py-2 text-sm font-medium text-foreground transition hover:bg-muted/70 disabled:cursor-not-allowed disabled:opacity-50",
15253
+ className: "cursor-pointer rounded-lg bg-muted px-4 py-2 text-sm font-medium text-foreground transition hover:bg-muted/70 disabled:cursor-not-allowed disabled:opacity-50",
15192
15254
  children: discountApplying ? t.applyingDiscount : t.applyDiscount
15193
15255
  }
15194
15256
  )
15195
15257
  ] }),
15196
- discountError && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-xs text-destructive", children: discountError })
15258
+ discountError && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "text-xs text-destructive", children: discountError })
15197
15259
  ] }),
15198
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
15260
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15199
15261
  "button",
15200
15262
  {
15201
15263
  type: "submit",
15202
15264
  disabled: submitting || submitDisabled,
15203
- className: (0, import_utils19.cn)(
15204
- "flex w-full items-center justify-center gap-2 rounded-xl px-4 py-3 font-semibold transition-all",
15265
+ className: (0, import_utils20.cn)(
15266
+ "flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-3 font-semibold transition-all",
15205
15267
  submitting || submitDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
15206
15268
  ),
15207
15269
  children: submitting ? t.submitting : t.submit
@@ -15214,11 +15276,11 @@ function CheckoutForm({
15214
15276
  }
15215
15277
 
15216
15278
  // src/components/order-confirmation.tsx
15217
- var import_utils21 = require("@reblu/site-ui/utils");
15279
+ var import_utils22 = require("@reblu/site-ui/utils");
15218
15280
 
15219
15281
  // src/components/order-invoice-link.tsx
15220
- var import_utils20 = require("@reblu/site-ui/utils");
15221
- var import_jsx_runtime21 = require("react/jsx-runtime");
15282
+ var import_utils21 = require("@reblu/site-ui/utils");
15283
+ var import_jsx_runtime22 = require("react/jsx-runtime");
15222
15284
  var DEFAULT_LABELS8 = {
15223
15285
  linkLabel: "Descargar la factura {number}",
15224
15286
  signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
@@ -15226,8 +15288,8 @@ var DEFAULT_LABELS8 = {
15226
15288
  function OrderInvoiceLink({ invoice, labels, className }) {
15227
15289
  if (!invoice) return null;
15228
15290
  const t = { ...DEFAULT_LABELS8, ...labels };
15229
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: (0, import_utils20.cn)("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
15230
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
15291
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: (0, import_utils21.cn)("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
15292
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15231
15293
  "a",
15232
15294
  {
15233
15295
  href: invoice.url,
@@ -15235,17 +15297,19 @@ function OrderInvoiceLink({ invoice, labels, className }) {
15235
15297
  children: t.linkLabel.replace("{number}", invoice.number)
15236
15298
  }
15237
15299
  ),
15238
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "text-muted-foreground", children: t.signInHint })
15300
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-muted-foreground", children: t.signInHint })
15239
15301
  ] });
15240
15302
  }
15241
15303
 
15242
15304
  // src/components/order-confirmation.tsx
15243
- var import_jsx_runtime22 = require("react/jsx-runtime");
15305
+ var import_jsx_runtime23 = require("react/jsx-runtime");
15244
15306
  var DEFAULT_LABELS9 = {
15245
15307
  pollingTitle: "Confirmando tu pedido\u2026",
15246
15308
  pollingDescription: "Estamos procesando el pago, un momento\u2026",
15247
15309
  foundTitle: "\xA1Pedido confirmado!",
15248
- foundDescription: "Recibir\xE1s un email de confirmaci\xF3n con todos los detalles.",
15310
+ // REB-1085: every buyer gets a customer account; the order email carries
15311
+ // the access link. Files are never served from this page.
15312
+ foundDescription: "Te hemos enviado un email con tu acceso.",
15249
15313
  timeoutTitle: "Pago recibido",
15250
15314
  timeoutDescription: "Tu pago se ha procesado. Recibir\xE1s un email de confirmaci\xF3n en breve.",
15251
15315
  orderNumberLabel: "Pedido confirmado",
@@ -15304,43 +15368,43 @@ function OrderConfirmation({
15304
15368
  const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
15305
15369
  const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
15306
15370
  const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
15307
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: (0, import_utils21.cn)("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
15308
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("h1", { className: "text-3xl font-bold", children: title }),
15309
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-lg text-muted-foreground", children: description }),
15310
- showFullOrderSummary && order && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "space-y-6", children: [
15311
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15312
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
15313
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15371
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: (0, import_utils22.cn)("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
15372
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("h1", { className: "text-3xl font-bold", children: title }),
15373
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "text-lg text-muted-foreground", children: description }),
15374
+ showFullOrderSummary && order && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-6", children: [
15375
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15376
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
15377
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15314
15378
  ] }),
15315
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
15316
- order.items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
15379
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
15380
+ order.items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
15317
15381
  "div",
15318
15382
  {
15319
15383
  className: "flex justify-between gap-4 text-sm",
15320
15384
  children: [
15321
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
15385
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
15322
15386
  item.product.name,
15323
15387
  item.variant ? ` (${item.variant.name})` : "",
15324
15388
  " x",
15325
15389
  item.quantity
15326
15390
  ] }),
15327
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
15391
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
15328
15392
  ]
15329
15393
  },
15330
15394
  idx
15331
15395
  )),
15332
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
15333
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { children: t.totalLabel }),
15334
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { children: formatPrice(order.total, currencyCode, locale) })
15396
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
15397
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { children: t.totalLabel }),
15398
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { children: formatPrice(order.total, currencyCode, locale) })
15335
15399
  ] }) })
15336
15400
  ] }),
15337
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
15401
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
15338
15402
  t.confirmationEmailPrefix,
15339
15403
  " ",
15340
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
15404
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
15341
15405
  "."
15342
15406
  ] }),
15343
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15407
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15344
15408
  OrderInvoiceLink,
15345
15409
  {
15346
15410
  invoice: order.invoice,
@@ -15348,11 +15412,11 @@ function OrderConfirmation({
15348
15412
  }
15349
15413
  )
15350
15414
  ] }),
15351
- showOrderReference && order && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15352
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
15353
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15415
+ showOrderReference && order && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15416
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
15417
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
15354
15418
  ] }),
15355
- status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15419
+ status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15356
15420
  "a",
15357
15421
  {
15358
15422
  href: cartHref,
@@ -15360,25 +15424,25 @@ function OrderConfirmation({
15360
15424
  children: t.backToCartLabel
15361
15425
  }
15362
15426
  ),
15363
- showRecheck && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
15427
+ showRecheck && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15364
15428
  "button",
15365
15429
  {
15366
15430
  type: "button",
15367
15431
  onClick: onRecheck,
15368
- className: "inline-flex items-center justify-center rounded-xl bg-primary px-4 py-2.5 text-sm font-semibold text-primary-foreground transition-colors hover:bg-primary/90",
15432
+ className: "inline-flex cursor-pointer items-center justify-center rounded-xl bg-primary px-4 py-2.5 text-sm font-semibold text-primary-foreground transition-colors hover:bg-primary/90",
15369
15433
  children: t.recheckLabel
15370
15434
  }
15371
15435
  ),
15372
- showSessionReference && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15373
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
15374
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
15436
+ showSessionReference && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
15437
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
15438
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
15375
15439
  ] })
15376
15440
  ] });
15377
15441
  }
15378
15442
 
15379
15443
  // src/components/full-invoice-fields.tsx
15380
- var import_utils22 = require("@reblu/site-ui/utils");
15381
- var import_jsx_runtime23 = require("react/jsx-runtime");
15444
+ var import_utils23 = require("@reblu/site-ui/utils");
15445
+ var import_jsx_runtime24 = require("react/jsx-runtime");
15382
15446
  var EMPTY_FULL_INVOICE_VALUE = {
15383
15447
  wantsFullInvoice: false,
15384
15448
  billingIdType: "NIF",
@@ -15495,12 +15559,12 @@ function FullInvoiceFields({
15495
15559
  const showFields = value.wantsFullInvoice || overCap;
15496
15560
  const isSpanishNif = value.billingIdType === "NIF";
15497
15561
  const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
15498
- const error = (key2) => errors[key2] ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
15562
+ const error = (key2) => errors[key2] ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
15499
15563
  const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
15500
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("section", { className: (0, import_utils22.cn)("space-y-4", className), "data-slot": "full-invoice-fields", children: [
15501
- overCap ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-1", children: [
15502
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
15503
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15564
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("section", { className: (0, import_utils23.cn)("space-y-4", className), "data-slot": "full-invoice-fields", children: [
15565
+ overCap ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-1", children: [
15566
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
15567
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15504
15568
  "input",
15505
15569
  {
15506
15570
  type: "checkbox",
@@ -15510,12 +15574,12 @@ function FullInvoiceFields({
15510
15574
  ),
15511
15575
  t.toggle
15512
15576
  ] }),
15513
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
15577
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
15514
15578
  ] }),
15515
- showFields && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15516
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-1", children: [
15517
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
15518
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15579
+ showFields && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
15580
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-1", children: [
15581
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
15582
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15519
15583
  "select",
15520
15584
  {
15521
15585
  id: "full-invoice-id-type",
@@ -15524,14 +15588,14 @@ function FullInvoiceFields({
15524
15588
  value: value.billingIdType,
15525
15589
  onChange: (e) => set("billingIdType", e.target.value),
15526
15590
  ...invalid2("billingIdType"),
15527
- children: ID_TYPES.map((type) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("option", { value: type, children: t.idTypeOptions[type] }, type))
15591
+ children: ID_TYPES.map((type) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("option", { value: type, children: t.idTypeOptions[type] }, type))
15528
15592
  }
15529
15593
  ),
15530
15594
  error("billingIdType")
15531
15595
  ] }),
15532
- !isSpanishNif && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-1", children: [
15533
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
15534
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
15596
+ !isSpanishNif && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-1", children: [
15597
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
15598
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
15535
15599
  "select",
15536
15600
  {
15537
15601
  id: "full-invoice-id-country",
@@ -15541,16 +15605,16 @@ function FullInvoiceFields({
15541
15605
  onChange: (e) => set("billingIdCountry", e.target.value),
15542
15606
  ...invalid2("billingIdCountry"),
15543
15607
  children: [
15544
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("option", { value: "", disabled: true, children: t.chooseCountry }),
15545
- countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("option", { value: c.code, children: c.name }, c.code))
15608
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("option", { value: "", disabled: true, children: t.chooseCountry }),
15609
+ countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("option", { value: c.code, children: c.name }, c.code))
15546
15610
  ]
15547
15611
  }
15548
15612
  ),
15549
15613
  error("billingIdCountry")
15550
15614
  ] }),
15551
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-1", children: [
15552
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
15553
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15615
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-1", children: [
15616
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
15617
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15554
15618
  "input",
15555
15619
  {
15556
15620
  id: "full-invoice-nif",
@@ -15563,9 +15627,9 @@ function FullInvoiceFields({
15563
15627
  ),
15564
15628
  error("billingNif")
15565
15629
  ] }),
15566
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-1", children: [
15567
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
15568
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15630
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-1", children: [
15631
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
15632
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15569
15633
  "input",
15570
15634
  {
15571
15635
  id: "full-invoice-name",
@@ -15578,9 +15642,9 @@ function FullInvoiceFields({
15578
15642
  ),
15579
15643
  error("billingName")
15580
15644
  ] }),
15581
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-1 sm:col-span-2", children: [
15582
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
15583
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15645
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-1 sm:col-span-2", children: [
15646
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
15647
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15584
15648
  "input",
15585
15649
  {
15586
15650
  id: "full-invoice-street",
@@ -15592,9 +15656,9 @@ function FullInvoiceFields({
15592
15656
  }
15593
15657
  )
15594
15658
  ] }),
15595
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-1", children: [
15596
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
15597
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15659
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-1", children: [
15660
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
15661
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15598
15662
  "input",
15599
15663
  {
15600
15664
  id: "full-invoice-postal-code",
@@ -15605,9 +15669,9 @@ function FullInvoiceFields({
15605
15669
  }
15606
15670
  )
15607
15671
  ] }),
15608
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-1", children: [
15609
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
15610
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15672
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-1", children: [
15673
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
15674
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15611
15675
  "input",
15612
15676
  {
15613
15677
  id: "full-invoice-city",
@@ -15618,9 +15682,9 @@ function FullInvoiceFields({
15618
15682
  }
15619
15683
  )
15620
15684
  ] }),
15621
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-1", children: [
15622
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
15623
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
15685
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-1", children: [
15686
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
15687
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
15624
15688
  "select",
15625
15689
  {
15626
15690
  id: "full-invoice-country",
@@ -15628,11 +15692,11 @@ function FullInvoiceFields({
15628
15692
  required: true,
15629
15693
  value: value.country,
15630
15694
  onChange: (e) => set("country", e.target.value),
15631
- children: countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("option", { value: c.code, children: c.name }, c.code))
15695
+ children: countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("option", { value: c.code, children: c.name }, c.code))
15632
15696
  }
15633
15697
  )
15634
15698
  ] }),
15635
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "sm:col-span-2", children: error("address") })
15699
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "sm:col-span-2", children: error("address") })
15636
15700
  ] })
15637
15701
  ] });
15638
15702
  }
@@ -15668,6 +15732,7 @@ var import_site_contracts = require("@reblu/site-contracts");
15668
15732
  ParentPage,
15669
15733
  ProductCard,
15670
15734
  ProductTrustItems,
15735
+ ProfessionalFields,
15671
15736
  ProfileCard,
15672
15737
  SafeHtml,
15673
15738
  ShopFilters,