@reblu/site-blocks 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -36,6 +36,25 @@ function buildShareUrls(url, title) {
36
36
  };
37
37
  }
38
38
 
39
+ // src/lib/shop-error-messages.ts
40
+ var DEFAULT_SHOP_ERROR_MESSAGES = {
41
+ STOCK_CHANGED: "Alguno de los productos de tu carrito ya no tiene stock suficiente.",
42
+ PRICE_CHANGED: "El precio de alguno de los productos de tu carrito ha cambiado. Rev\xEDsalo antes de continuar.",
43
+ PRODUCT_UNAVAILABLE: "Alguno de los productos de tu carrito ya no est\xE1 disponible.",
44
+ DISCOUNT_INVALID: "El c\xF3digo de descuento no es v\xE1lido.",
45
+ SHIPPING_UNAVAILABLE: "El env\xEDo no est\xE1 disponible para la direcci\xF3n indicada.",
46
+ INVALID_INPUT: "Revisa los datos introducidos.",
47
+ STORE_DISABLED: "La tienda no est\xE1 disponible en este momento.",
48
+ PAYMENT_PROVIDER_ERROR: "No hemos podido conectar con la pasarela de pago. Int\xE9ntalo de nuevo.",
49
+ INTERNAL_ERROR: "Ha ocurrido un error inesperado. Int\xE9ntalo de nuevo en unos minutos."
50
+ };
51
+ var DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE = "No se ha podido completar la operaci\xF3n. Int\xE9ntalo de nuevo.";
52
+ function getShopErrorMessage(code, overrides, fallback = DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE) {
53
+ if (!code) return fallback;
54
+ const messages = { ...DEFAULT_SHOP_ERROR_MESSAGES, ...overrides };
55
+ return messages[code] ?? fallback;
56
+ }
57
+
39
58
  // ../../node_modules/.pnpm/devlop@1.1.0/node_modules/devlop/lib/default.js
40
59
  function ok() {
41
60
  }
@@ -13589,103 +13608,16 @@ function ShopFilters({
13589
13608
  ] });
13590
13609
  }
13591
13610
 
13592
- // src/components/add-to-cart-button.tsx
13611
+ // src/components/cart-line-list.tsx
13593
13612
  import { cn as cn8 } from "@reblu/site-ui/utils";
13594
- import { jsx as jsx8 } from "react/jsx-runtime";
13613
+ import { jsx as jsx8, jsxs as jsxs7 } from "react/jsx-runtime";
13595
13614
  var DEFAULT_LABELS2 = {
13596
- add: "A\xF1adir al carrito",
13597
- adding: "A\xF1adiendo\u2026",
13598
- outOfStock: "Agotado"
13599
- };
13600
- function AddToCartButton({
13601
- onAddToCart,
13602
- disabled,
13603
- outOfStock,
13604
- pending,
13605
- labels,
13606
- className
13607
- }) {
13608
- const t = { ...DEFAULT_LABELS2, ...labels };
13609
- const isDisabled = Boolean(disabled || outOfStock || pending);
13610
- return /* @__PURE__ */ jsx8(
13611
- "button",
13612
- {
13613
- type: "button",
13614
- onClick: onAddToCart,
13615
- disabled: isDisabled,
13616
- "data-slot": "add-to-cart-button",
13617
- className: cn8(
13618
- "inline-flex items-center justify-center gap-2 rounded-xl px-4 py-2.5 text-sm font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
13619
- isDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90",
13620
- className
13621
- ),
13622
- children: outOfStock ? t.outOfStock : pending ? t.adding : t.add
13623
- }
13624
- );
13625
- }
13626
-
13627
- // src/components/cart-icon.tsx
13628
- import { cn as cn9 } from "@reblu/site-ui/utils";
13629
- import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
13630
- var DEFAULT_LABELS3 = {
13631
- cart: "Carrito",
13632
- itemsSuffix: (count) => `${count} art\xEDculo${count === 1 ? "" : "s"}`
13633
- };
13634
- function CartIcon({ itemCount, href, labels, className }) {
13635
- const t = { ...DEFAULT_LABELS3, ...labels };
13636
- const ariaLabel = itemCount > 0 ? `${t.cart} (${t.itemsSuffix(itemCount)})` : t.cart;
13637
- const displayCount = itemCount > 99 ? "99+" : String(itemCount);
13638
- return /* @__PURE__ */ jsxs7(
13639
- "a",
13640
- {
13641
- href,
13642
- "aria-label": ariaLabel,
13643
- "data-slot": "cart-icon",
13644
- className: cn9(
13645
- "relative inline-flex items-center justify-center rounded-lg p-2 text-foreground/80 transition-colors hover:bg-muted/60 hover:text-foreground",
13646
- className
13647
- ),
13648
- children: [
13649
- /* @__PURE__ */ jsxs7(
13650
- "svg",
13651
- {
13652
- viewBox: "0 0 24 24",
13653
- fill: "none",
13654
- stroke: "currentColor",
13655
- strokeWidth: 2,
13656
- strokeLinecap: "round",
13657
- strokeLinejoin: "round",
13658
- className: "h-5 w-5",
13659
- "aria-hidden": "true",
13660
- children: [
13661
- /* @__PURE__ */ jsx9("circle", { cx: "9", cy: "21", r: "1" }),
13662
- /* @__PURE__ */ jsx9("circle", { cx: "20", cy: "21", r: "1" }),
13663
- /* @__PURE__ */ jsx9("path", { d: "M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6" })
13664
- ]
13665
- }
13666
- ),
13667
- itemCount > 0 && /* @__PURE__ */ jsx9(
13668
- "span",
13669
- {
13670
- "aria-hidden": "true",
13671
- className: "absolute -top-0.5 -right-0.5 flex h-[18px] min-w-[18px] items-center justify-center rounded-full bg-primary px-1 text-[10px] font-bold leading-none tabular-nums text-primary-foreground",
13672
- children: displayCount
13673
- }
13674
- )
13675
- ]
13676
- }
13677
- );
13678
- }
13679
-
13680
- // src/components/cart-line-list.tsx
13681
- import { cn as cn10 } from "@reblu/site-ui/utils";
13682
- import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
13683
- var DEFAULT_LABELS4 = {
13684
13615
  quantityLabel: "Cantidad",
13685
13616
  decrease: "Reducir cantidad",
13686
13617
  increase: "Aumentar cantidad",
13687
13618
  remove: "Eliminar",
13688
- unitPriceSuffix: "/ ud."
13619
+ unitPriceSuffix: "/ ud.",
13620
+ cancelledNotice: "Pago cancelado: tu carrito sigue aqu\xED"
13689
13621
  };
13690
13622
  function lineKey(productId, variantId) {
13691
13623
  return `${productId}-${variantId ?? "no-variant"}`;
@@ -13695,40 +13627,51 @@ function CartLineList({
13695
13627
  onQuantityChange,
13696
13628
  onRemove,
13697
13629
  liveMessage,
13630
+ notice,
13698
13631
  labels,
13699
13632
  currencyCode,
13700
13633
  locale,
13701
13634
  className
13702
13635
  }) {
13703
- const t = { ...DEFAULT_LABELS4, ...labels };
13704
- return /* @__PURE__ */ jsxs8("div", { className: cn10("space-y-4", className), "data-slot": "cart-line-list", children: [
13705
- /* @__PURE__ */ jsx10("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
13706
- /* @__PURE__ */ jsx10("ul", { className: "space-y-4", children: items.map((item) => {
13636
+ const t = { ...DEFAULT_LABELS2, ...labels };
13637
+ const noticeContent = notice === true ? t.cancelledNotice : notice;
13638
+ return /* @__PURE__ */ jsxs7("div", { className: cn8("space-y-4", className), "data-slot": "cart-line-list", children: [
13639
+ /* @__PURE__ */ jsx8("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
13640
+ noticeContent != null && noticeContent !== false && /* @__PURE__ */ jsx8(
13641
+ "div",
13642
+ {
13643
+ role: "status",
13644
+ className: "rounded-lg bg-muted px-3 py-2 text-sm text-muted-foreground",
13645
+ "data-slot": "cart-line-list-notice",
13646
+ children: noticeContent
13647
+ }
13648
+ ),
13649
+ /* @__PURE__ */ jsx8("ul", { className: "space-y-4", children: items.map((item) => {
13707
13650
  const maxQty = item.maxStock ?? Infinity;
13708
13651
  const atMax = item.quantity >= maxQty;
13709
13652
  const atMin = item.quantity <= 1;
13710
- return /* @__PURE__ */ jsxs8(
13653
+ return /* @__PURE__ */ jsxs7(
13711
13654
  "li",
13712
13655
  {
13713
13656
  className: "flex gap-4 rounded-xl border border-border bg-card p-4",
13714
13657
  children: [
13715
- /* @__PURE__ */ jsx10("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ jsx10("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
13716
- /* @__PURE__ */ jsxs8("div", { className: "min-w-0 flex-1", children: [
13717
- /* @__PURE__ */ jsx10("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
13718
- item.variantName && /* @__PURE__ */ jsx10("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
13719
- /* @__PURE__ */ jsxs8("p", { className: "mt-1 text-sm text-muted-foreground", children: [
13658
+ /* @__PURE__ */ jsx8("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ jsx8("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
13659
+ /* @__PURE__ */ jsxs7("div", { className: "min-w-0 flex-1", children: [
13660
+ /* @__PURE__ */ jsx8("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
13661
+ item.variantName && /* @__PURE__ */ jsx8("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
13662
+ /* @__PURE__ */ jsxs7("p", { className: "mt-1 text-sm text-muted-foreground", children: [
13720
13663
  formatPrice(item.unitPrice, currencyCode, locale),
13721
13664
  " ",
13722
13665
  t.unitPriceSuffix
13723
13666
  ] }),
13724
- /* @__PURE__ */ jsxs8(
13667
+ /* @__PURE__ */ jsxs7(
13725
13668
  "div",
13726
13669
  {
13727
13670
  role: "group",
13728
13671
  "aria-label": t.quantityLabel,
13729
13672
  className: "mt-3 flex items-center gap-3",
13730
13673
  children: [
13731
- /* @__PURE__ */ jsx10(
13674
+ /* @__PURE__ */ jsx8(
13732
13675
  "button",
13733
13676
  {
13734
13677
  type: "button",
@@ -13739,8 +13682,8 @@ function CartLineList({
13739
13682
  children: "\u2212"
13740
13683
  }
13741
13684
  ),
13742
- /* @__PURE__ */ jsx10("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
13743
- /* @__PURE__ */ jsx10(
13685
+ /* @__PURE__ */ jsx8("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
13686
+ /* @__PURE__ */ jsx8(
13744
13687
  "button",
13745
13688
  {
13746
13689
  type: "button",
@@ -13751,7 +13694,7 @@ function CartLineList({
13751
13694
  children: "+"
13752
13695
  }
13753
13696
  ),
13754
- onRemove && /* @__PURE__ */ jsx10(
13697
+ onRemove && /* @__PURE__ */ jsx8(
13755
13698
  "button",
13756
13699
  {
13757
13700
  type: "button",
@@ -13765,7 +13708,7 @@ function CartLineList({
13765
13708
  }
13766
13709
  )
13767
13710
  ] }),
13768
- /* @__PURE__ */ jsx10("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ jsx10("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
13711
+ /* @__PURE__ */ jsx8("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ jsx8("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
13769
13712
  ]
13770
13713
  },
13771
13714
  lineKey(item.productId, item.variantId)
@@ -13775,15 +13718,16 @@ function CartLineList({
13775
13718
  }
13776
13719
 
13777
13720
  // src/components/cart-summary.tsx
13778
- import { cn as cn11 } from "@reblu/site-ui/utils";
13779
- import { jsx as jsx11, jsxs as jsxs9 } from "react/jsx-runtime";
13780
- var DEFAULT_LABELS5 = {
13721
+ import { cn as cn9 } from "@reblu/site-ui/utils";
13722
+ import { jsx as jsx9, jsxs as jsxs8 } from "react/jsx-runtime";
13723
+ var DEFAULT_LABELS3 = {
13781
13724
  subtotal: "Subtotal",
13782
13725
  discountPrefix: "Descuento",
13783
13726
  shipping: "Env\xEDo",
13784
13727
  freeShipping: "Env\xEDo gratis",
13785
13728
  shippingCalculated: "Se calcula en el pago",
13786
- total: "Total"
13729
+ total: "Total",
13730
+ cancelledNotice: "Pago cancelado: tu carrito sigue aqu\xED"
13787
13731
  };
13788
13732
  function CartSummary({
13789
13733
  subtotal,
@@ -13792,43 +13736,112 @@ function CartSummary({
13792
13736
  shipping,
13793
13737
  shippingEnabled,
13794
13738
  total,
13739
+ notice,
13795
13740
  labels,
13796
13741
  currencyCode,
13797
13742
  locale,
13798
13743
  className
13799
13744
  }) {
13800
- const t = { ...DEFAULT_LABELS5, ...labels };
13745
+ const t = { ...DEFAULT_LABELS3, ...labels };
13801
13746
  const hasDiscount = Boolean(discount && discount > 0);
13802
- return /* @__PURE__ */ jsxs9("dl", { className: cn11("space-y-2 text-sm", className), "data-slot": "cart-summary", children: [
13803
- /* @__PURE__ */ jsxs9("div", { className: "flex justify-between text-muted-foreground", children: [
13804
- /* @__PURE__ */ jsx11("dt", { children: t.subtotal }),
13805
- /* @__PURE__ */ jsx11("dd", { children: formatPrice(subtotal, currencyCode, locale) })
13806
- ] }),
13807
- hasDiscount && /* @__PURE__ */ jsxs9("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
13808
- /* @__PURE__ */ jsxs9("dt", { children: [
13809
- t.discountPrefix,
13810
- discountCode ? ` (${discountCode})` : ""
13811
- ] }),
13812
- /* @__PURE__ */ jsxs9("dd", { children: [
13813
- "-",
13814
- formatPrice(discount, currencyCode, locale)
13815
- ] })
13816
- ] }),
13817
- shippingEnabled && /* @__PURE__ */ jsxs9("div", { className: "flex justify-between text-muted-foreground", children: [
13818
- /* @__PURE__ */ jsx11("dt", { children: t.shipping }),
13819
- /* @__PURE__ */ jsx11("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
13820
- ] }),
13821
- /* @__PURE__ */ jsxs9("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
13822
- /* @__PURE__ */ jsx11("dt", { children: t.total }),
13823
- /* @__PURE__ */ jsx11("dd", { children: formatPrice(total, currencyCode, locale) })
13824
- ] })
13747
+ const noticeContent = notice === true ? t.cancelledNotice : notice;
13748
+ const hasNotice = noticeContent != null && noticeContent !== false;
13749
+ const breakdown = /* @__PURE__ */ jsxs8(
13750
+ "dl",
13751
+ {
13752
+ className: cn9("space-y-2 text-sm", !hasNotice && className),
13753
+ "data-slot": "cart-summary",
13754
+ children: [
13755
+ /* @__PURE__ */ jsxs8("div", { className: "flex justify-between text-muted-foreground", children: [
13756
+ /* @__PURE__ */ jsx9("dt", { children: t.subtotal }),
13757
+ /* @__PURE__ */ jsx9("dd", { children: formatPrice(subtotal, currencyCode, locale) })
13758
+ ] }),
13759
+ hasDiscount && /* @__PURE__ */ jsxs8("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
13760
+ /* @__PURE__ */ jsxs8("dt", { children: [
13761
+ t.discountPrefix,
13762
+ discountCode ? ` (${discountCode})` : ""
13763
+ ] }),
13764
+ /* @__PURE__ */ jsxs8("dd", { children: [
13765
+ "-",
13766
+ formatPrice(discount, currencyCode, locale)
13767
+ ] })
13768
+ ] }),
13769
+ shippingEnabled && /* @__PURE__ */ jsxs8("div", { className: "flex justify-between text-muted-foreground", children: [
13770
+ /* @__PURE__ */ jsx9("dt", { children: t.shipping }),
13771
+ /* @__PURE__ */ jsx9("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
13772
+ ] }),
13773
+ /* @__PURE__ */ jsxs8("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
13774
+ /* @__PURE__ */ jsx9("dt", { children: t.total }),
13775
+ /* @__PURE__ */ jsx9("dd", { children: formatPrice(total, currencyCode, locale) })
13776
+ ] })
13777
+ ]
13778
+ }
13779
+ );
13780
+ if (!hasNotice) return breakdown;
13781
+ return /* @__PURE__ */ jsxs8("div", { className: cn9("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
13782
+ /* @__PURE__ */ jsx9(
13783
+ "div",
13784
+ {
13785
+ role: "status",
13786
+ className: "rounded-lg bg-muted px-3 py-2 text-sm text-muted-foreground",
13787
+ "data-slot": "cart-summary-notice",
13788
+ children: noticeContent
13789
+ }
13790
+ ),
13791
+ breakdown
13825
13792
  ] });
13826
13793
  }
13827
13794
 
13795
+ // src/components/added-to-cart-toast.tsx
13796
+ import { cn as cn10 } from "@reblu/site-ui/utils";
13797
+ import { jsx as jsx10, jsxs as jsxs9 } from "react/jsx-runtime";
13798
+ var DEFAULT_LABELS4 = {
13799
+ success: "A\xF1adido al carrito",
13800
+ error: "No se pudo a\xF1adir al carrito",
13801
+ outOfStock: "Producto agotado",
13802
+ viewCart: "Ver carrito"
13803
+ };
13804
+ function AddedToCartToast({
13805
+ status = "success",
13806
+ productName,
13807
+ quantity,
13808
+ imageUrl,
13809
+ cartHref,
13810
+ labels,
13811
+ className
13812
+ }) {
13813
+ const t = { ...DEFAULT_LABELS4, ...labels };
13814
+ const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
13815
+ const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
13816
+ const variant = status === "success" ? "success" : "error";
13817
+ return /* @__PURE__ */ jsxs9(
13818
+ "div",
13819
+ {
13820
+ "data-slot": "added-to-cart-toast",
13821
+ "data-variant": variant,
13822
+ className: cn10(
13823
+ "flex items-center gap-3 rounded-xl border border-border bg-card p-3 text-sm shadow-lg",
13824
+ variant === "success" && "border-green-600/30 dark:border-green-400/30",
13825
+ variant === "error" && "border-destructive/30",
13826
+ className
13827
+ ),
13828
+ children: [
13829
+ hasThumbnail && // eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
13830
+ /* @__PURE__ */ jsx10("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
13831
+ /* @__PURE__ */ jsxs9("div", { className: "min-w-0 flex-1", children: [
13832
+ /* @__PURE__ */ jsx10("p", { className: "truncate font-semibold text-foreground", children: productName }),
13833
+ /* @__PURE__ */ jsx10("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
13834
+ ] }),
13835
+ /* @__PURE__ */ jsx10("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsx10("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
13836
+ ]
13837
+ }
13838
+ );
13839
+ }
13840
+
13828
13841
  // src/components/checkout-login-prompt.tsx
13829
- import { cn as cn12 } from "@reblu/site-ui/utils";
13830
- import { Fragment as Fragment3, jsx as jsx12, jsxs as jsxs10 } from "react/jsx-runtime";
13831
- var DEFAULT_LABELS6 = {
13842
+ import { cn as cn11 } from "@reblu/site-ui/utils";
13843
+ import { Fragment as Fragment3, jsx as jsx11, jsxs as jsxs10 } from "react/jsx-runtime";
13844
+ var DEFAULT_LABELS5 = {
13832
13845
  title: "Identificaci\xF3n",
13833
13846
  description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
13834
13847
  emailLabel: "Email",
@@ -13852,10 +13865,10 @@ function CheckoutLoginPrompt({
13852
13865
  className
13853
13866
  }) {
13854
13867
  if (!open) return null;
13855
- const t = { ...DEFAULT_LABELS6, ...labels };
13868
+ const t = { ...DEFAULT_LABELS5, ...labels };
13856
13869
  const isValidEmail = EMAIL_PATTERN.test(email.trim());
13857
13870
  return /* @__PURE__ */ jsxs10(Fragment3, { children: [
13858
- /* @__PURE__ */ jsx12("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
13871
+ /* @__PURE__ */ jsx11("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
13859
13872
  /* @__PURE__ */ jsxs10(
13860
13873
  "div",
13861
13874
  {
@@ -13863,17 +13876,17 @@ function CheckoutLoginPrompt({
13863
13876
  "aria-modal": "true",
13864
13877
  "aria-labelledby": "checkout-login-prompt-title",
13865
13878
  "data-slot": "checkout-login-prompt",
13866
- className: cn12(
13879
+ className: cn11(
13867
13880
  "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",
13868
13881
  className
13869
13882
  ),
13870
13883
  children: [
13871
13884
  /* @__PURE__ */ jsxs10("div", { className: "flex items-start justify-between gap-3", children: [
13872
13885
  /* @__PURE__ */ jsxs10("div", { children: [
13873
- /* @__PURE__ */ jsx12("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
13874
- /* @__PURE__ */ jsx12("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
13886
+ /* @__PURE__ */ jsx11("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
13887
+ /* @__PURE__ */ jsx11("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
13875
13888
  ] }),
13876
- /* @__PURE__ */ jsx12(
13889
+ /* @__PURE__ */ jsx11(
13877
13890
  "button",
13878
13891
  {
13879
13892
  type: "button",
@@ -13885,8 +13898,8 @@ function CheckoutLoginPrompt({
13885
13898
  )
13886
13899
  ] }),
13887
13900
  /* @__PURE__ */ jsxs10("div", { className: "space-y-2", children: [
13888
- /* @__PURE__ */ jsx12("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
13889
- /* @__PURE__ */ jsx12(
13901
+ /* @__PURE__ */ jsx11("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
13902
+ /* @__PURE__ */ jsx11(
13890
13903
  "input",
13891
13904
  {
13892
13905
  id: "checkout-login-prompt-email",
@@ -13895,29 +13908,29 @@ function CheckoutLoginPrompt({
13895
13908
  value: email,
13896
13909
  onChange: (e) => onEmailChange(e.target.value),
13897
13910
  placeholder: t.emailPlaceholder,
13898
- className: cn12(
13911
+ className: cn11(
13899
13912
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
13900
13913
  error ? "border-destructive" : "border-border focus:border-primary"
13901
13914
  )
13902
13915
  }
13903
13916
  ),
13904
- error && /* @__PURE__ */ jsx12("p", { className: "text-xs text-destructive", children: error })
13917
+ error && /* @__PURE__ */ jsx11("p", { className: "text-xs text-destructive", children: error })
13905
13918
  ] }),
13906
13919
  /* @__PURE__ */ jsxs10("div", { className: "space-y-2", children: [
13907
- /* @__PURE__ */ jsx12(
13920
+ /* @__PURE__ */ jsx11(
13908
13921
  "button",
13909
13922
  {
13910
13923
  type: "button",
13911
13924
  onClick: onSubmitEmail,
13912
13925
  disabled: checking || !isValidEmail,
13913
- className: cn12(
13926
+ className: cn11(
13914
13927
  "flex w-full items-center justify-center gap-2 rounded-xl px-4 py-2.5 text-sm font-semibold transition-all",
13915
13928
  checking || !isValidEmail ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
13916
13929
  ),
13917
13930
  children: checking ? t.checking : t.continueWithEmail
13918
13931
  }
13919
13932
  ),
13920
- /* @__PURE__ */ jsx12(
13933
+ /* @__PURE__ */ jsx11(
13921
13934
  "button",
13922
13935
  {
13923
13936
  type: "button",
@@ -13934,9 +13947,9 @@ function CheckoutLoginPrompt({
13934
13947
  }
13935
13948
 
13936
13949
  // src/components/checkout-form.tsx
13937
- import { cn as cn13 } from "@reblu/site-ui/utils";
13938
- import { Fragment as Fragment4, jsx as jsx13, jsxs as jsxs11 } from "react/jsx-runtime";
13939
- var DEFAULT_LABELS7 = {
13950
+ import { cn as cn12 } from "@reblu/site-ui/utils";
13951
+ import { Fragment as Fragment4, jsx as jsx12, jsxs as jsxs11 } from "react/jsx-runtime";
13952
+ var DEFAULT_LABELS6 = {
13940
13953
  contactTitle: "Datos de contacto",
13941
13954
  nameLabel: "Nombre completo",
13942
13955
  namePlaceholder: "Tu nombre",
@@ -13973,7 +13986,7 @@ function CheckoutForm({
13973
13986
  locale,
13974
13987
  className
13975
13988
  }) {
13976
- const t = { ...DEFAULT_LABELS7, ...labels };
13989
+ const t = { ...DEFAULT_LABELS6, ...labels };
13977
13990
  function patchContact(patch3) {
13978
13991
  onContactChange({ ...contact, ...patch3 });
13979
13992
  }
@@ -13990,15 +14003,15 @@ function CheckoutForm({
13990
14003
  {
13991
14004
  "data-testid": "checkout-form",
13992
14005
  onSubmit,
13993
- className: cn13("space-y-8", className),
14006
+ className: cn12("space-y-8", className),
13994
14007
  "data-slot": "checkout-form",
13995
14008
  children: [
13996
14009
  /* @__PURE__ */ jsxs11("section", { className: "space-y-4", children: [
13997
- /* @__PURE__ */ jsx13("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
14010
+ /* @__PURE__ */ jsx12("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
13998
14011
  /* @__PURE__ */ jsxs11("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
13999
14012
  /* @__PURE__ */ jsxs11("div", { className: "space-y-1", children: [
14000
- /* @__PURE__ */ jsx13("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
14001
- /* @__PURE__ */ jsx13(
14013
+ /* @__PURE__ */ jsx12("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
14014
+ /* @__PURE__ */ jsx12(
14002
14015
  "input",
14003
14016
  {
14004
14017
  id: "checkout-form-name",
@@ -14007,17 +14020,17 @@ function CheckoutForm({
14007
14020
  value: contact.name,
14008
14021
  onChange: (e) => patchContact({ name: e.target.value }),
14009
14022
  placeholder: t.namePlaceholder,
14010
- className: cn13(
14023
+ className: cn12(
14011
14024
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
14012
14025
  contactErrors?.name ? "border-destructive" : "border-border focus:border-primary"
14013
14026
  )
14014
14027
  }
14015
14028
  ),
14016
- contactErrors?.name && /* @__PURE__ */ jsx13("p", { className: "text-xs text-destructive", children: contactErrors.name })
14029
+ contactErrors?.name && /* @__PURE__ */ jsx12("p", { className: "text-xs text-destructive", children: contactErrors.name })
14017
14030
  ] }),
14018
14031
  /* @__PURE__ */ jsxs11("div", { className: "space-y-1", children: [
14019
- /* @__PURE__ */ jsx13("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
14020
- /* @__PURE__ */ jsx13(
14032
+ /* @__PURE__ */ jsx12("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
14033
+ /* @__PURE__ */ jsx12(
14021
14034
  "input",
14022
14035
  {
14023
14036
  id: "checkout-form-email",
@@ -14026,17 +14039,17 @@ function CheckoutForm({
14026
14039
  value: contact.email,
14027
14040
  onChange: (e) => patchContact({ email: e.target.value }),
14028
14041
  placeholder: t.emailPlaceholder,
14029
- className: cn13(
14042
+ className: cn12(
14030
14043
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
14031
14044
  contactErrors?.email ? "border-destructive" : "border-border focus:border-primary"
14032
14045
  )
14033
14046
  }
14034
14047
  ),
14035
- contactErrors?.email && /* @__PURE__ */ jsx13("p", { className: "text-xs text-destructive", children: contactErrors.email })
14048
+ contactErrors?.email && /* @__PURE__ */ jsx12("p", { className: "text-xs text-destructive", children: contactErrors.email })
14036
14049
  ] }),
14037
14050
  /* @__PURE__ */ jsxs11("div", { className: "space-y-1", children: [
14038
- /* @__PURE__ */ jsx13("label", { htmlFor: "checkout-form-phone", className: "text-sm font-medium", children: t.phoneLabel }),
14039
- /* @__PURE__ */ jsx13(
14051
+ /* @__PURE__ */ jsx12("label", { htmlFor: "checkout-form-phone", className: "text-sm font-medium", children: t.phoneLabel }),
14052
+ /* @__PURE__ */ jsx12(
14040
14053
  "input",
14041
14054
  {
14042
14055
  id: "checkout-form-phone",
@@ -14044,25 +14057,25 @@ function CheckoutForm({
14044
14057
  autoComplete: "tel",
14045
14058
  value: contact.phone ?? "",
14046
14059
  onChange: (e) => patchContact({ phone: e.target.value }),
14047
- className: cn13(
14060
+ className: cn12(
14048
14061
  "w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
14049
14062
  contactErrors?.phone ? "border-destructive" : "border-border focus:border-primary"
14050
14063
  )
14051
14064
  }
14052
14065
  ),
14053
- contactErrors?.phone && /* @__PURE__ */ jsx13("p", { className: "text-xs text-destructive", children: contactErrors.phone })
14066
+ contactErrors?.phone && /* @__PURE__ */ jsx12("p", { className: "text-xs text-destructive", children: contactErrors.phone })
14054
14067
  ] })
14055
14068
  ] })
14056
14069
  ] }),
14057
14070
  children2,
14058
14071
  /* @__PURE__ */ jsxs11("section", { className: "space-y-3", children: [
14059
- /* @__PURE__ */ jsx13("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
14072
+ /* @__PURE__ */ jsx12("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
14060
14073
  appliedDiscount ? /* @__PURE__ */ jsxs11("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: [
14061
14074
  /* @__PURE__ */ jsxs11("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
14062
- /* @__PURE__ */ jsx13("span", { className: "font-semibold", children: appliedDiscount.code }),
14063
- /* @__PURE__ */ jsx13("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
14075
+ /* @__PURE__ */ jsx12("span", { className: "font-semibold", children: appliedDiscount.code }),
14076
+ /* @__PURE__ */ jsx12("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
14064
14077
  ] }),
14065
- /* @__PURE__ */ jsx13(
14078
+ /* @__PURE__ */ jsx12(
14066
14079
  "button",
14067
14080
  {
14068
14081
  type: "button",
@@ -14073,8 +14086,8 @@ function CheckoutForm({
14073
14086
  }
14074
14087
  )
14075
14088
  ] }) : /* @__PURE__ */ jsxs11("div", { className: "flex gap-2", children: [
14076
- /* @__PURE__ */ jsx13("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
14077
- /* @__PURE__ */ jsx13(
14089
+ /* @__PURE__ */ jsx12("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
14090
+ /* @__PURE__ */ jsx12(
14078
14091
  "input",
14079
14092
  {
14080
14093
  id: "checkout-form-discount-code",
@@ -14086,7 +14099,7 @@ function CheckoutForm({
14086
14099
  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"
14087
14100
  }
14088
14101
  ),
14089
- /* @__PURE__ */ jsx13(
14102
+ /* @__PURE__ */ jsx12(
14090
14103
  "button",
14091
14104
  {
14092
14105
  type: "button",
@@ -14097,14 +14110,14 @@ function CheckoutForm({
14097
14110
  }
14098
14111
  )
14099
14112
  ] }),
14100
- discountError && /* @__PURE__ */ jsx13("p", { className: "text-xs text-destructive", children: discountError })
14113
+ discountError && /* @__PURE__ */ jsx12("p", { className: "text-xs text-destructive", children: discountError })
14101
14114
  ] }),
14102
- /* @__PURE__ */ jsx13(
14115
+ /* @__PURE__ */ jsx12(
14103
14116
  "button",
14104
14117
  {
14105
14118
  type: "submit",
14106
14119
  disabled: submitting || submitDisabled,
14107
- className: cn13(
14120
+ className: cn12(
14108
14121
  "flex w-full items-center justify-center gap-2 rounded-xl px-4 py-3 font-semibold transition-all",
14109
14122
  submitting || submitDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
14110
14123
  ),
@@ -14118,9 +14131,9 @@ function CheckoutForm({
14118
14131
  }
14119
14132
 
14120
14133
  // src/components/order-confirmation.tsx
14121
- import { cn as cn14 } from "@reblu/site-ui/utils";
14122
- import { jsx as jsx14, jsxs as jsxs12 } from "react/jsx-runtime";
14123
- var DEFAULT_LABELS8 = {
14134
+ import { cn as cn13 } from "@reblu/site-ui/utils";
14135
+ import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
14136
+ var DEFAULT_LABELS7 = {
14124
14137
  pollingTitle: "Confirmando tu pedido\u2026",
14125
14138
  pollingDescription: "Estamos procesando el pago, un momento\u2026",
14126
14139
  foundTitle: "\xA1Pedido confirmado!",
@@ -14130,27 +14143,64 @@ var DEFAULT_LABELS8 = {
14130
14143
  orderNumberLabel: "Pedido confirmado",
14131
14144
  totalLabel: "Total",
14132
14145
  confirmationEmailPrefix: "Te hemos enviado un email de confirmaci\xF3n a",
14133
- sessionReferenceLabel: "Referencia de sesi\xF3n"
14146
+ sessionReferenceLabel: "Referencia de sesi\xF3n",
14147
+ // REB-837
14148
+ failedTitle: "El pago no se ha completado",
14149
+ failedDescription: "No se ha podido procesar el pago. Tu carrito sigue intacto.",
14150
+ backToCartLabel: "Volver al carrito",
14151
+ refundedTitle: "Este pedido ha sido reembolsado",
14152
+ refundedDescription: "El importe se ha devuelto a tu m\xE9todo de pago original.",
14153
+ partiallyRefundedTitle: "Este pedido ha sido reembolsado parcialmente",
14154
+ partiallyRefundedDescription: "Parte del importe se ha devuelto a tu m\xE9todo de pago original.",
14155
+ pendingTimeoutTitle: "Pedido recibido",
14156
+ pendingTimeoutDescription: "Estamos confirmando el pago; te enviaremos un email en cuanto se complete.",
14157
+ recheckLabel: "Volver a comprobar",
14158
+ notFoundTitle: "No encontramos ning\xFAn pedido",
14159
+ notFoundDescription: "Comprueba el enlace o contacta con nosotros si el problema persiste.",
14160
+ errorTitle: "Ha ocurrido un error",
14161
+ errorDescription: "No hemos podido comprobar el estado de tu pedido.",
14162
+ orderReferenceLabel: "Referencia del pedido"
14134
14163
  };
14135
14164
  function OrderConfirmation({
14136
14165
  status,
14137
14166
  order,
14138
14167
  sessionId,
14168
+ cartHref,
14169
+ onRecheck,
14139
14170
  labels,
14140
14171
  currencyCode,
14141
14172
  locale,
14142
14173
  className
14143
14174
  }) {
14144
- const t = { ...DEFAULT_LABELS8, ...labels };
14145
- const title = status === "polling" ? t.pollingTitle : order ? t.foundTitle : t.timeoutTitle;
14146
- const description = status === "polling" ? t.pollingDescription : order ? t.foundDescription : t.timeoutDescription;
14147
- return /* @__PURE__ */ jsxs12("div", { className: cn14("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
14148
- /* @__PURE__ */ jsx14("h1", { className: "text-3xl font-bold", children: title }),
14149
- /* @__PURE__ */ jsx14("p", { className: "text-lg text-muted-foreground", children: description }),
14150
- order && /* @__PURE__ */ jsxs12("div", { className: "space-y-6", children: [
14175
+ const t = { ...DEFAULT_LABELS7, ...labels };
14176
+ const isPolling = status === "polling" || status === "loading";
14177
+ const isFound = status === "found" || status === "paid";
14178
+ const { title, description } = (() => {
14179
+ if (isPolling) return { title: t.pollingTitle, description: t.pollingDescription };
14180
+ if (status === "failed") return { title: t.failedTitle, description: t.failedDescription };
14181
+ if (status === "refunded") return { title: t.refundedTitle, description: t.refundedDescription };
14182
+ if (status === "partially_refunded") {
14183
+ return { title: t.partiallyRefundedTitle, description: t.partiallyRefundedDescription };
14184
+ }
14185
+ if (status === "pending_timeout") {
14186
+ return { title: t.pendingTimeoutTitle, description: t.pendingTimeoutDescription };
14187
+ }
14188
+ if (status === "not_found") return { title: t.notFoundTitle, description: t.notFoundDescription };
14189
+ if (status === "error") return { title: t.errorTitle, description: t.errorDescription };
14190
+ if (isFound || order) return { title: t.foundTitle, description: t.foundDescription };
14191
+ return { title: t.timeoutTitle, description: t.timeoutDescription };
14192
+ })();
14193
+ const showFullOrderSummary = Boolean(order) && (isFound || status === "timeout");
14194
+ const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
14195
+ const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
14196
+ const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
14197
+ return /* @__PURE__ */ jsxs12("div", { className: cn13("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
14198
+ /* @__PURE__ */ jsx13("h1", { className: "text-3xl font-bold", children: title }),
14199
+ /* @__PURE__ */ jsx13("p", { className: "text-lg text-muted-foreground", children: description }),
14200
+ showFullOrderSummary && order && /* @__PURE__ */ jsxs12("div", { className: "space-y-6", children: [
14151
14201
  /* @__PURE__ */ jsxs12("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
14152
- /* @__PURE__ */ jsx14("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
14153
- /* @__PURE__ */ jsx14("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
14202
+ /* @__PURE__ */ jsx13("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
14203
+ /* @__PURE__ */ jsx13("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
14154
14204
  ] }),
14155
14205
  /* @__PURE__ */ jsxs12("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
14156
14206
  order.items.map((item, idx) => /* @__PURE__ */ jsxs12(
@@ -14164,37 +14214,59 @@ function OrderConfirmation({
14164
14214
  " x",
14165
14215
  item.quantity
14166
14216
  ] }),
14167
- /* @__PURE__ */ jsx14("span", { children: formatPrice(item.total, currencyCode, locale) })
14217
+ /* @__PURE__ */ jsx13("span", { children: formatPrice(item.total, currencyCode, locale) })
14168
14218
  ]
14169
14219
  },
14170
14220
  idx
14171
14221
  )),
14172
- /* @__PURE__ */ jsx14("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ jsxs12("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
14173
- /* @__PURE__ */ jsx14("span", { children: t.totalLabel }),
14174
- /* @__PURE__ */ jsx14("span", { children: formatPrice(order.total, currencyCode, locale) })
14222
+ /* @__PURE__ */ jsx13("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ jsxs12("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
14223
+ /* @__PURE__ */ jsx13("span", { children: t.totalLabel }),
14224
+ /* @__PURE__ */ jsx13("span", { children: formatPrice(order.total, currencyCode, locale) })
14175
14225
  ] }) })
14176
14226
  ] }),
14177
14227
  /* @__PURE__ */ jsxs12("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
14178
14228
  t.confirmationEmailPrefix,
14179
14229
  " ",
14180
- /* @__PURE__ */ jsx14("span", { className: "font-medium text-foreground", children: order.customerEmail }),
14230
+ /* @__PURE__ */ jsx13("span", { className: "font-medium text-foreground", children: order.customerEmail }),
14181
14231
  "."
14182
14232
  ] })
14183
14233
  ] }),
14184
- !order && status === "timeout" && sessionId && /* @__PURE__ */ jsxs12("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
14185
- /* @__PURE__ */ jsx14("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
14186
- /* @__PURE__ */ jsx14("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
14234
+ showOrderReference && order && /* @__PURE__ */ jsxs12("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
14235
+ /* @__PURE__ */ jsx13("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
14236
+ /* @__PURE__ */ jsx13("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
14237
+ ] }),
14238
+ status === "failed" && cartHref && /* @__PURE__ */ jsx13(
14239
+ "a",
14240
+ {
14241
+ href: cartHref,
14242
+ className: "inline-block text-sm font-semibold text-primary underline-offset-2 hover:underline",
14243
+ children: t.backToCartLabel
14244
+ }
14245
+ ),
14246
+ showRecheck && /* @__PURE__ */ jsx13(
14247
+ "button",
14248
+ {
14249
+ type: "button",
14250
+ onClick: onRecheck,
14251
+ 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",
14252
+ children: t.recheckLabel
14253
+ }
14254
+ ),
14255
+ showSessionReference && /* @__PURE__ */ jsxs12("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
14256
+ /* @__PURE__ */ jsx13("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
14257
+ /* @__PURE__ */ jsx13("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
14187
14258
  ] })
14188
14259
  ] });
14189
14260
  }
14190
14261
  export {
14191
14262
  ALLOWED_YOUTUBE_HOSTS,
14192
- AddToCartButton,
14193
- CartIcon,
14263
+ AddedToCartToast,
14194
14264
  CartLineList,
14195
14265
  CartSummary,
14196
14266
  CheckoutForm,
14197
14267
  CheckoutLoginPrompt,
14268
+ DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,
14269
+ DEFAULT_SHOP_ERROR_MESSAGES,
14198
14270
  DEFAULT_SHOP_PRICE_BANDS,
14199
14271
  MarkdownRenderer,
14200
14272
  OrderConfirmation,
@@ -14206,6 +14278,7 @@ export {
14206
14278
  Treatment,
14207
14279
  buildShareUrls,
14208
14280
  formatPrice,
14281
+ getShopErrorMessage,
14209
14282
  isAllowedYouTubeHost,
14210
14283
  markdownToSafeHtml,
14211
14284
  readingTime,