@reblu/site-blocks 0.10.0 → 0.11.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/CHANGELOG.md +6 -0
- package/README.md +66 -0
- package/dist/index.cjs +454 -193
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +41 -2
- package/dist/index.d.ts +41 -2
- package/dist/index.js +452 -193
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/dist/index.cjs
CHANGED
|
@@ -29,12 +29,14 @@ __export(src_exports, {
|
|
|
29
29
|
DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE: () => DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,
|
|
30
30
|
DEFAULT_SHOP_ERROR_MESSAGES: () => DEFAULT_SHOP_ERROR_MESSAGES,
|
|
31
31
|
DEFAULT_SHOP_PRICE_BANDS: () => DEFAULT_SHOP_PRICE_BANDS,
|
|
32
|
+
DEFAULT_TRUST_ICONS: () => DEFAULT_TRUST_ICONS,
|
|
32
33
|
FaqAccordion: () => FaqAccordion,
|
|
33
34
|
MarkdownRenderer: () => MarkdownRenderer,
|
|
34
35
|
OrderConfirmation: () => OrderConfirmation,
|
|
35
36
|
PageBlocks: () => PageBlocks,
|
|
36
37
|
ParentPage: () => ParentPage,
|
|
37
38
|
ProductCard: () => ProductCard,
|
|
39
|
+
ProductTrustItems: () => ProductTrustItems,
|
|
38
40
|
ProfileCard: () => ProfileCard,
|
|
39
41
|
SafeHtml: () => SafeHtml,
|
|
40
42
|
ShopFilters: () => ShopFilters,
|
|
@@ -13503,11 +13505,246 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
|
|
|
13503
13505
|
);
|
|
13504
13506
|
}
|
|
13505
13507
|
|
|
13508
|
+
// ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/createLucideIcon.js
|
|
13509
|
+
var import_react2 = require("react");
|
|
13510
|
+
|
|
13511
|
+
// ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/shared/src/utils.js
|
|
13512
|
+
var toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
13513
|
+
var toCamelCase = (string) => string.replace(
|
|
13514
|
+
/^([A-Z])|[\s-_]+(\w)/g,
|
|
13515
|
+
(match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()
|
|
13516
|
+
);
|
|
13517
|
+
var toPascalCase = (string) => {
|
|
13518
|
+
const camelCase = toCamelCase(string);
|
|
13519
|
+
return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
|
|
13520
|
+
};
|
|
13521
|
+
var mergeClasses = (...classes) => classes.filter((className, index, array) => {
|
|
13522
|
+
return Boolean(className) && className.trim() !== "" && array.indexOf(className) === index;
|
|
13523
|
+
}).join(" ").trim();
|
|
13524
|
+
var hasA11yProp = (props) => {
|
|
13525
|
+
for (const prop in props) {
|
|
13526
|
+
if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
|
|
13527
|
+
return true;
|
|
13528
|
+
}
|
|
13529
|
+
}
|
|
13530
|
+
};
|
|
13531
|
+
|
|
13532
|
+
// ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/Icon.js
|
|
13533
|
+
var import_react = require("react");
|
|
13534
|
+
|
|
13535
|
+
// ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/defaultAttributes.js
|
|
13536
|
+
var defaultAttributes = {
|
|
13537
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
13538
|
+
width: 24,
|
|
13539
|
+
height: 24,
|
|
13540
|
+
viewBox: "0 0 24 24",
|
|
13541
|
+
fill: "none",
|
|
13542
|
+
stroke: "currentColor",
|
|
13543
|
+
strokeWidth: 2,
|
|
13544
|
+
strokeLinecap: "round",
|
|
13545
|
+
strokeLinejoin: "round"
|
|
13546
|
+
};
|
|
13547
|
+
|
|
13548
|
+
// ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/Icon.js
|
|
13549
|
+
var Icon = (0, import_react.forwardRef)(
|
|
13550
|
+
({
|
|
13551
|
+
color: color2 = "currentColor",
|
|
13552
|
+
size = 24,
|
|
13553
|
+
strokeWidth = 2,
|
|
13554
|
+
absoluteStrokeWidth,
|
|
13555
|
+
className = "",
|
|
13556
|
+
children: children2,
|
|
13557
|
+
iconNode,
|
|
13558
|
+
...rest
|
|
13559
|
+
}, ref) => (0, import_react.createElement)(
|
|
13560
|
+
"svg",
|
|
13561
|
+
{
|
|
13562
|
+
ref,
|
|
13563
|
+
...defaultAttributes,
|
|
13564
|
+
width: size,
|
|
13565
|
+
height: size,
|
|
13566
|
+
stroke: color2,
|
|
13567
|
+
strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,
|
|
13568
|
+
className: mergeClasses("lucide", className),
|
|
13569
|
+
...!children2 && !hasA11yProp(rest) && { "aria-hidden": "true" },
|
|
13570
|
+
...rest
|
|
13571
|
+
},
|
|
13572
|
+
[
|
|
13573
|
+
...iconNode.map(([tag, attrs]) => (0, import_react.createElement)(tag, attrs)),
|
|
13574
|
+
...Array.isArray(children2) ? children2 : [children2]
|
|
13575
|
+
]
|
|
13576
|
+
)
|
|
13577
|
+
);
|
|
13578
|
+
|
|
13579
|
+
// ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/createLucideIcon.js
|
|
13580
|
+
var createLucideIcon = (iconName, iconNode) => {
|
|
13581
|
+
const Component = (0, import_react2.forwardRef)(
|
|
13582
|
+
({ className, ...props }, ref) => (0, import_react2.createElement)(Icon, {
|
|
13583
|
+
ref,
|
|
13584
|
+
iconNode,
|
|
13585
|
+
className: mergeClasses(
|
|
13586
|
+
`lucide-${toKebabCase(toPascalCase(iconName))}`,
|
|
13587
|
+
`lucide-${iconName}`,
|
|
13588
|
+
className
|
|
13589
|
+
),
|
|
13590
|
+
...props
|
|
13591
|
+
})
|
|
13592
|
+
);
|
|
13593
|
+
Component.displayName = toPascalCase(iconName);
|
|
13594
|
+
return Component;
|
|
13595
|
+
};
|
|
13596
|
+
|
|
13597
|
+
// ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/award.js
|
|
13598
|
+
var __iconNode = [
|
|
13599
|
+
[
|
|
13600
|
+
"path",
|
|
13601
|
+
{
|
|
13602
|
+
d: "m15.477 12.89 1.515 8.526a.5.5 0 0 1-.81.47l-3.58-2.687a1 1 0 0 0-1.197 0l-3.586 2.686a.5.5 0 0 1-.81-.469l1.514-8.526",
|
|
13603
|
+
key: "1yiouv"
|
|
13604
|
+
}
|
|
13605
|
+
],
|
|
13606
|
+
["circle", { cx: "12", cy: "8", r: "6", key: "1vp47v" }]
|
|
13607
|
+
];
|
|
13608
|
+
var Award = createLucideIcon("award", __iconNode);
|
|
13609
|
+
|
|
13610
|
+
// ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/badge-check.js
|
|
13611
|
+
var __iconNode2 = [
|
|
13612
|
+
[
|
|
13613
|
+
"path",
|
|
13614
|
+
{
|
|
13615
|
+
d: "M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z",
|
|
13616
|
+
key: "3c2336"
|
|
13617
|
+
}
|
|
13618
|
+
],
|
|
13619
|
+
["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
|
|
13620
|
+
];
|
|
13621
|
+
var BadgeCheck = createLucideIcon("badge-check", __iconNode2);
|
|
13622
|
+
|
|
13623
|
+
// ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/gift.js
|
|
13624
|
+
var __iconNode3 = [
|
|
13625
|
+
["rect", { x: "3", y: "8", width: "18", height: "4", rx: "1", key: "bkv52" }],
|
|
13626
|
+
["path", { d: "M12 8v13", key: "1c76mn" }],
|
|
13627
|
+
["path", { d: "M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7", key: "6wjy6b" }],
|
|
13628
|
+
[
|
|
13629
|
+
"path",
|
|
13630
|
+
{
|
|
13631
|
+
d: "M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5",
|
|
13632
|
+
key: "1ihvrl"
|
|
13633
|
+
}
|
|
13634
|
+
]
|
|
13635
|
+
];
|
|
13636
|
+
var Gift = createLucideIcon("gift", __iconNode3);
|
|
13637
|
+
|
|
13638
|
+
// ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/headset.js
|
|
13639
|
+
var __iconNode4 = [
|
|
13640
|
+
[
|
|
13641
|
+
"path",
|
|
13642
|
+
{
|
|
13643
|
+
d: "M3 11h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-5Zm0 0a9 9 0 1 1 18 0m0 0v5a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3Z",
|
|
13644
|
+
key: "12oyoe"
|
|
13645
|
+
}
|
|
13646
|
+
],
|
|
13647
|
+
["path", { d: "M21 16v2a4 4 0 0 1-4 4h-5", key: "1x7m43" }]
|
|
13648
|
+
];
|
|
13649
|
+
var Headset = createLucideIcon("headset", __iconNode4);
|
|
13650
|
+
|
|
13651
|
+
// ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/rotate-ccw.js
|
|
13652
|
+
var __iconNode5 = [
|
|
13653
|
+
["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
|
|
13654
|
+
["path", { d: "M3 3v5h5", key: "1xhq8a" }]
|
|
13655
|
+
];
|
|
13656
|
+
var RotateCcw = createLucideIcon("rotate-ccw", __iconNode5);
|
|
13657
|
+
|
|
13658
|
+
// ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/shield-check.js
|
|
13659
|
+
var __iconNode6 = [
|
|
13660
|
+
[
|
|
13661
|
+
"path",
|
|
13662
|
+
{
|
|
13663
|
+
d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",
|
|
13664
|
+
key: "oel41y"
|
|
13665
|
+
}
|
|
13666
|
+
],
|
|
13667
|
+
["path", { d: "m9 12 2 2 4-4", key: "dzmm74" }]
|
|
13668
|
+
];
|
|
13669
|
+
var ShieldCheck = createLucideIcon("shield-check", __iconNode6);
|
|
13670
|
+
|
|
13671
|
+
// ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/store.js
|
|
13672
|
+
var __iconNode7 = [
|
|
13673
|
+
["path", { d: "M15 21v-5a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v5", key: "slp6dd" }],
|
|
13674
|
+
[
|
|
13675
|
+
"path",
|
|
13676
|
+
{
|
|
13677
|
+
d: "M17.774 10.31a1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.451 0 1.12 1.12 0 0 0-1.548 0 2.5 2.5 0 0 1-3.452 0 1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.77-3.248l2.889-4.184A2 2 0 0 1 7 2h10a2 2 0 0 1 1.653.873l2.895 4.192a2.5 2.5 0 0 1-3.774 3.244",
|
|
13678
|
+
key: "o0xfot"
|
|
13679
|
+
}
|
|
13680
|
+
],
|
|
13681
|
+
["path", { d: "M4 10.95V19a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8.05", key: "wn3emo" }]
|
|
13682
|
+
];
|
|
13683
|
+
var Store = createLucideIcon("store", __iconNode7);
|
|
13684
|
+
|
|
13685
|
+
// ../../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.4/node_modules/lucide-react/dist/esm/icons/truck.js
|
|
13686
|
+
var __iconNode8 = [
|
|
13687
|
+
["path", { d: "M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2", key: "wrbu53" }],
|
|
13688
|
+
["path", { d: "M15 18H9", key: "1lyqi6" }],
|
|
13689
|
+
[
|
|
13690
|
+
"path",
|
|
13691
|
+
{
|
|
13692
|
+
d: "M19 18h2a1 1 0 0 0 1-1v-3.65a1 1 0 0 0-.22-.624l-3.48-4.35A1 1 0 0 0 17.52 8H14",
|
|
13693
|
+
key: "lysw3i"
|
|
13694
|
+
}
|
|
13695
|
+
],
|
|
13696
|
+
["circle", { cx: "17", cy: "18", r: "2", key: "332jqn" }],
|
|
13697
|
+
["circle", { cx: "7", cy: "18", r: "2", key: "19iecd" }]
|
|
13698
|
+
];
|
|
13699
|
+
var Truck = createLucideIcon("truck", __iconNode8);
|
|
13700
|
+
|
|
13701
|
+
// src/components/product-trust-items.tsx
|
|
13702
|
+
var import_utils9 = require("@reblu/site-ui/utils");
|
|
13703
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
13704
|
+
var DEFAULT_TRUST_ICONS = Object.freeze({
|
|
13705
|
+
shipping: Truck,
|
|
13706
|
+
returns: RotateCcw,
|
|
13707
|
+
"secure-payment": ShieldCheck,
|
|
13708
|
+
support: Headset,
|
|
13709
|
+
gift: Gift,
|
|
13710
|
+
pickup: Store,
|
|
13711
|
+
warranty: BadgeCheck,
|
|
13712
|
+
quality: Award
|
|
13713
|
+
});
|
|
13714
|
+
function isKnownIcon(icon) {
|
|
13715
|
+
return Object.prototype.hasOwnProperty.call(DEFAULT_TRUST_ICONS, icon);
|
|
13716
|
+
}
|
|
13717
|
+
function isEntryObject(value) {
|
|
13718
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
13719
|
+
}
|
|
13720
|
+
function ProductTrustItems({
|
|
13721
|
+
items,
|
|
13722
|
+
icons,
|
|
13723
|
+
as: List = "ul",
|
|
13724
|
+
className,
|
|
13725
|
+
itemClassName
|
|
13726
|
+
}) {
|
|
13727
|
+
if (!Array.isArray(items) || items.length === 0) return null;
|
|
13728
|
+
const rows = items.flatMap((item, index) => {
|
|
13729
|
+
if (!isEntryObject(item)) return [];
|
|
13730
|
+
const icon = item.icon;
|
|
13731
|
+
const text3 = typeof item.text === "string" ? item.text.trim() : "";
|
|
13732
|
+
if (typeof icon !== "string" || !isKnownIcon(icon) || text3 === "") return [];
|
|
13733
|
+
const Icon2 = icons?.[icon] ?? DEFAULT_TRUST_ICONS[icon];
|
|
13734
|
+
return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
|
|
13735
|
+
});
|
|
13736
|
+
if (rows.length === 0) return null;
|
|
13737
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(List, { "data-slot": "product-trust-items", className: (0, import_utils9.cn)("space-y-2.5", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("li", { className: (0, import_utils9.cn)("flex items-center gap-3 text-sm text-muted-foreground", itemClassName), children: [
|
|
13738
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
|
|
13739
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { children: text3 })
|
|
13740
|
+
] }, key2)) });
|
|
13741
|
+
}
|
|
13742
|
+
|
|
13506
13743
|
// src/components/faq-accordion.tsx
|
|
13507
|
-
var
|
|
13744
|
+
var import_utils10 = require("@reblu/site-ui/utils");
|
|
13508
13745
|
|
|
13509
13746
|
// src/components/_heading.tsx
|
|
13510
|
-
var
|
|
13747
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
13511
13748
|
function nextHeadingLevel(level) {
|
|
13512
13749
|
return Math.min(level + 1, 6);
|
|
13513
13750
|
}
|
|
@@ -13517,11 +13754,11 @@ function Heading({
|
|
|
13517
13754
|
children: children2
|
|
13518
13755
|
}) {
|
|
13519
13756
|
const Tag = `h${level}`;
|
|
13520
|
-
return /* @__PURE__ */ (0,
|
|
13757
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Tag, { className, children: children2 });
|
|
13521
13758
|
}
|
|
13522
13759
|
|
|
13523
13760
|
// src/components/faq-accordion.tsx
|
|
13524
|
-
var
|
|
13761
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
13525
13762
|
function FaqAccordion({
|
|
13526
13763
|
items,
|
|
13527
13764
|
heading,
|
|
@@ -13532,18 +13769,18 @@ function FaqAccordion({
|
|
|
13532
13769
|
}) {
|
|
13533
13770
|
const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
|
|
13534
13771
|
if (visible.length === 0) return null;
|
|
13535
|
-
return /* @__PURE__ */ (0,
|
|
13536
|
-
heading && /* @__PURE__ */ (0,
|
|
13537
|
-
/* @__PURE__ */ (0,
|
|
13772
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: (0, import_utils10.cn)("space-y-4", className), "data-slot": "faq-accordion", children: [
|
|
13773
|
+
heading && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
|
|
13774
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
|
13538
13775
|
"details",
|
|
13539
13776
|
{
|
|
13540
13777
|
className: "group px-4",
|
|
13541
13778
|
"data-slot": "faq-item",
|
|
13542
13779
|
...defaultOpen.includes(index) ? { open: true } : {},
|
|
13543
13780
|
children: [
|
|
13544
|
-
/* @__PURE__ */ (0,
|
|
13545
|
-
questionHeadingLevel ? /* @__PURE__ */ (0,
|
|
13546
|
-
/* @__PURE__ */ (0,
|
|
13781
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.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: [
|
|
13782
|
+
questionHeadingLevel ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { children: item.q }),
|
|
13783
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
13547
13784
|
"span",
|
|
13548
13785
|
{
|
|
13549
13786
|
"aria-hidden": "true",
|
|
@@ -13552,7 +13789,7 @@ function FaqAccordion({
|
|
|
13552
13789
|
}
|
|
13553
13790
|
)
|
|
13554
13791
|
] }),
|
|
13555
|
-
/* @__PURE__ */ (0,
|
|
13792
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
|
|
13556
13793
|
]
|
|
13557
13794
|
},
|
|
13558
13795
|
index
|
|
@@ -13561,40 +13798,40 @@ function FaqAccordion({
|
|
|
13561
13798
|
}
|
|
13562
13799
|
|
|
13563
13800
|
// src/components/page-blocks.tsx
|
|
13564
|
-
var
|
|
13801
|
+
var import_utils11 = require("@reblu/site-ui/utils");
|
|
13565
13802
|
var import_button_variants2 = require("@reblu/site-ui/button-variants");
|
|
13566
|
-
var
|
|
13803
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
13567
13804
|
var ALIASES = {
|
|
13568
13805
|
doctor_embed: "profile_embed",
|
|
13569
13806
|
specialty_embed: "page_embed"
|
|
13570
13807
|
};
|
|
13571
13808
|
function HeroBlock({ block, headingLevel }) {
|
|
13572
13809
|
const { title, subtitle, imageUrl } = block.data;
|
|
13573
|
-
return /* @__PURE__ */ (0,
|
|
13574
|
-
/* @__PURE__ */ (0,
|
|
13575
|
-
subtitle && /* @__PURE__ */ (0,
|
|
13576
|
-
imageUrl && /* @__PURE__ */ (0,
|
|
13810
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "space-y-4", children: [
|
|
13811
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
|
|
13812
|
+
subtitle && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "text-lg opacity-80", children: subtitle }),
|
|
13813
|
+
imageUrl && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
|
|
13577
13814
|
] });
|
|
13578
13815
|
}
|
|
13579
13816
|
function RichtextBlock({ block, headingLevel }) {
|
|
13580
|
-
return /* @__PURE__ */ (0,
|
|
13817
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
|
|
13581
13818
|
}
|
|
13582
13819
|
function FaqBlock({ block }) {
|
|
13583
|
-
return /* @__PURE__ */ (0,
|
|
13820
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(FaqAccordion, { items: block.data.items });
|
|
13584
13821
|
}
|
|
13585
13822
|
function StatsBlock({ block }) {
|
|
13586
|
-
return /* @__PURE__ */ (0,
|
|
13587
|
-
/* @__PURE__ */ (0,
|
|
13588
|
-
/* @__PURE__ */ (0,
|
|
13823
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.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_runtime10.jsxs)("div", { className: "flex flex-col-reverse gap-1", children: [
|
|
13824
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dt", { className: "text-sm opacity-80", children: item.label }),
|
|
13825
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dd", { className: "text-3xl font-bold", children: item.value })
|
|
13589
13826
|
] }, i)) });
|
|
13590
13827
|
}
|
|
13591
13828
|
function TestimonialBlock({ block }) {
|
|
13592
13829
|
const { quote, author, role, avatarUrl } = block.data;
|
|
13593
|
-
return /* @__PURE__ */ (0,
|
|
13594
|
-
/* @__PURE__ */ (0,
|
|
13595
|
-
/* @__PURE__ */ (0,
|
|
13830
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("figure", { className: "space-y-4", children: [
|
|
13831
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { children: quote }) }),
|
|
13832
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("figcaption", { className: "flex items-center gap-3", children: [
|
|
13596
13833
|
avatarUrl && // eslint-disable-next-line @next/next/no-img-element
|
|
13597
|
-
/* @__PURE__ */ (0,
|
|
13834
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
13598
13835
|
"img",
|
|
13599
13836
|
{
|
|
13600
13837
|
src: avatarUrl,
|
|
@@ -13603,9 +13840,9 @@ function TestimonialBlock({ block }) {
|
|
|
13603
13840
|
className: "h-10 w-10 rounded-full object-cover"
|
|
13604
13841
|
}
|
|
13605
13842
|
),
|
|
13606
|
-
/* @__PURE__ */ (0,
|
|
13607
|
-
/* @__PURE__ */ (0,
|
|
13608
|
-
role && /* @__PURE__ */ (0,
|
|
13843
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { children: [
|
|
13844
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "font-semibold", children: author }),
|
|
13845
|
+
role && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "block text-sm opacity-80", children: role })
|
|
13609
13846
|
] })
|
|
13610
13847
|
] })
|
|
13611
13848
|
] });
|
|
@@ -13614,19 +13851,19 @@ function CtaSlotBlock(_props) {
|
|
|
13614
13851
|
return null;
|
|
13615
13852
|
}
|
|
13616
13853
|
function FeatureListBlock({ block }) {
|
|
13617
|
-
return /* @__PURE__ */ (0,
|
|
13854
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.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_runtime10.jsx)("li", { children: item.text }, i)) });
|
|
13618
13855
|
}
|
|
13619
13856
|
function GalleryBlock({ block }) {
|
|
13620
13857
|
const { images } = block.data;
|
|
13621
|
-
return /* @__PURE__ */ (0,
|
|
13858
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
13622
13859
|
"div",
|
|
13623
13860
|
{
|
|
13624
|
-
className: (0,
|
|
13861
|
+
className: (0, import_utils11.cn)(
|
|
13625
13862
|
"grid gap-4",
|
|
13626
13863
|
images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
|
|
13627
13864
|
),
|
|
13628
|
-
children: images.map((img, i) => /* @__PURE__ */ (0,
|
|
13629
|
-
/* @__PURE__ */ (0,
|
|
13865
|
+
children: images.map((img, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("figure", { className: "space-y-1", children: [
|
|
13866
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
13630
13867
|
"img",
|
|
13631
13868
|
{
|
|
13632
13869
|
src: img.url,
|
|
@@ -13635,7 +13872,7 @@ function GalleryBlock({ block }) {
|
|
|
13635
13872
|
className: "h-full w-full object-cover"
|
|
13636
13873
|
}
|
|
13637
13874
|
) }),
|
|
13638
|
-
img.caption && /* @__PURE__ */ (0,
|
|
13875
|
+
img.caption && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
|
|
13639
13876
|
] }, `${img.url}-${i}`))
|
|
13640
13877
|
}
|
|
13641
13878
|
);
|
|
@@ -13645,13 +13882,13 @@ function EmbedCard({
|
|
|
13645
13882
|
headingLevel,
|
|
13646
13883
|
embedHref
|
|
13647
13884
|
}) {
|
|
13648
|
-
return /* @__PURE__ */ (0,
|
|
13885
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
13649
13886
|
"a",
|
|
13650
13887
|
{
|
|
13651
13888
|
href: embedHref(resolved),
|
|
13652
13889
|
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",
|
|
13653
13890
|
children: [
|
|
13654
|
-
resolved.coverImageUrl && /* @__PURE__ */ (0,
|
|
13891
|
+
resolved.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
13655
13892
|
"img",
|
|
13656
13893
|
{
|
|
13657
13894
|
src: resolved.coverImageUrl,
|
|
@@ -13660,24 +13897,24 @@ function EmbedCard({
|
|
|
13660
13897
|
className: "h-full w-full object-cover"
|
|
13661
13898
|
}
|
|
13662
13899
|
) }),
|
|
13663
|
-
/* @__PURE__ */ (0,
|
|
13664
|
-
/* @__PURE__ */ (0,
|
|
13665
|
-
resolved.role && /* @__PURE__ */ (0,
|
|
13666
|
-
resolved.excerpt && /* @__PURE__ */ (0,
|
|
13900
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "space-y-1 p-4", children: [
|
|
13901
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
|
|
13902
|
+
resolved.role && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
|
|
13903
|
+
resolved.excerpt && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "text-muted-foreground", children: resolved.excerpt })
|
|
13667
13904
|
] })
|
|
13668
13905
|
]
|
|
13669
13906
|
}
|
|
13670
13907
|
);
|
|
13671
13908
|
}
|
|
13672
13909
|
function PageEmbedBlock({ block, headingLevel, embedHref }) {
|
|
13673
|
-
return /* @__PURE__ */ (0,
|
|
13910
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
13674
13911
|
}
|
|
13675
13912
|
function ProfileEmbedBlock({
|
|
13676
13913
|
block,
|
|
13677
13914
|
headingLevel,
|
|
13678
13915
|
embedHref
|
|
13679
13916
|
}) {
|
|
13680
|
-
return /* @__PURE__ */ (0,
|
|
13917
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
13681
13918
|
}
|
|
13682
13919
|
var DEFAULT_RENDERERS = {
|
|
13683
13920
|
hero: HeroBlock,
|
|
@@ -13734,14 +13971,14 @@ function toIdFragment(value) {
|
|
|
13734
13971
|
function SectionCta2({ cta }) {
|
|
13735
13972
|
if (!hasUsableCta(cta)) return null;
|
|
13736
13973
|
const variant = toButtonVariant(cta.variant);
|
|
13737
|
-
return /* @__PURE__ */ (0,
|
|
13974
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
13738
13975
|
"a",
|
|
13739
13976
|
{
|
|
13740
13977
|
href: cta.url,
|
|
13741
13978
|
"data-slot": "button",
|
|
13742
13979
|
"data-variant": variant,
|
|
13743
13980
|
"data-size": "default",
|
|
13744
|
-
className: (0,
|
|
13981
|
+
className: (0, import_utils11.cn)((0, import_button_variants2.buttonVariants)({ variant, size: "default" })),
|
|
13745
13982
|
...cta.isExternal ? { target: "_blank", rel: "noopener noreferrer" } : {},
|
|
13746
13983
|
children: cta.label
|
|
13747
13984
|
}
|
|
@@ -13767,17 +14004,17 @@ function PageBlocks({
|
|
|
13767
14004
|
const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
|
|
13768
14005
|
const background = block.backgroundColor;
|
|
13769
14006
|
return [
|
|
13770
|
-
/* @__PURE__ */ (0,
|
|
14007
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
13771
14008
|
"section",
|
|
13772
14009
|
{
|
|
13773
14010
|
"data-slot": "page-block",
|
|
13774
14011
|
"data-block-type": type,
|
|
13775
14012
|
"aria-labelledby": headingId,
|
|
13776
14013
|
style: surfaceStyle(background),
|
|
13777
|
-
className: (0,
|
|
14014
|
+
className: (0, import_utils11.cn)("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
|
|
13778
14015
|
children: [
|
|
13779
|
-
block.heading && /* @__PURE__ */ (0,
|
|
13780
|
-
/* @__PURE__ */ (0,
|
|
14016
|
+
block.heading && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { id: headingId, children: block.heading }) }),
|
|
14017
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
13781
14018
|
Renderer,
|
|
13782
14019
|
{
|
|
13783
14020
|
block,
|
|
@@ -13785,7 +14022,7 @@ function PageBlocks({
|
|
|
13785
14022
|
embedHref
|
|
13786
14023
|
}
|
|
13787
14024
|
),
|
|
13788
|
-
/* @__PURE__ */ (0,
|
|
14025
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SectionCta2, { cta: block.cta })
|
|
13789
14026
|
]
|
|
13790
14027
|
},
|
|
13791
14028
|
block.id
|
|
@@ -13793,12 +14030,12 @@ function PageBlocks({
|
|
|
13793
14030
|
];
|
|
13794
14031
|
});
|
|
13795
14032
|
if (sections.length === 0) return null;
|
|
13796
|
-
return /* @__PURE__ */ (0,
|
|
14033
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: (0, import_utils11.cn)("space-y-12", className), "data-slot": "page-blocks", children: sections });
|
|
13797
14034
|
}
|
|
13798
14035
|
|
|
13799
14036
|
// src/components/shop-filters.tsx
|
|
13800
|
-
var
|
|
13801
|
-
var
|
|
14037
|
+
var import_utils12 = require("@reblu/site-ui/utils");
|
|
14038
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
13802
14039
|
var DEFAULT_SHOP_PRICE_BANDS = [
|
|
13803
14040
|
{ max: 2500 },
|
|
13804
14041
|
{ min: 2500, max: 5e3 },
|
|
@@ -13842,7 +14079,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
|
|
|
13842
14079
|
return "";
|
|
13843
14080
|
}
|
|
13844
14081
|
function OptionLink({ href, active, label, onActivate }) {
|
|
13845
|
-
return /* @__PURE__ */ (0,
|
|
14082
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
13846
14083
|
"a",
|
|
13847
14084
|
{
|
|
13848
14085
|
href,
|
|
@@ -13851,7 +14088,7 @@ function OptionLink({ href, active, label, onActivate }) {
|
|
|
13851
14088
|
event.preventDefault();
|
|
13852
14089
|
onActivate();
|
|
13853
14090
|
} : void 0,
|
|
13854
|
-
className: (0,
|
|
14091
|
+
className: (0, import_utils12.cn)(
|
|
13855
14092
|
"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",
|
|
13856
14093
|
active ? "border-transparent bg-primary text-primary-foreground" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground"
|
|
13857
14094
|
),
|
|
@@ -13860,9 +14097,9 @@ function OptionLink({ href, active, label, onActivate }) {
|
|
|
13860
14097
|
);
|
|
13861
14098
|
}
|
|
13862
14099
|
function FilterFieldset({ legend, children: children2 }) {
|
|
13863
|
-
return /* @__PURE__ */ (0,
|
|
13864
|
-
/* @__PURE__ */ (0,
|
|
13865
|
-
/* @__PURE__ */ (0,
|
|
14100
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("fieldset", { className: "space-y-2", children: [
|
|
14101
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("legend", { className: "text-sm font-medium text-foreground", children: legend }),
|
|
14102
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex flex-wrap gap-2", children: children2 })
|
|
13866
14103
|
] });
|
|
13867
14104
|
}
|
|
13868
14105
|
function ShopFilters({
|
|
@@ -13885,11 +14122,11 @@ function ShopFilters({
|
|
|
13885
14122
|
if (!shouldRenderShopFilters(facets, active)) {
|
|
13886
14123
|
return null;
|
|
13887
14124
|
}
|
|
13888
|
-
return /* @__PURE__ */ (0,
|
|
14125
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: (0, import_utils12.cn)("space-y-6", className), "data-slot": "shop-filters", children: [
|
|
13889
14126
|
visibleTaxonomies.map((axis) => {
|
|
13890
14127
|
const activeSlug = active.taxonomy?.[axis.key];
|
|
13891
|
-
return /* @__PURE__ */ (0,
|
|
13892
|
-
/* @__PURE__ */ (0,
|
|
14128
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(FilterFieldset, { legend: axis.label, children: [
|
|
14129
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
13893
14130
|
OptionLink,
|
|
13894
14131
|
{
|
|
13895
14132
|
href: hrefs.taxonomy(axis.key, void 0),
|
|
@@ -13904,7 +14141,7 @@ function ShopFilters({
|
|
|
13904
14141
|
),
|
|
13905
14142
|
axis.terms.map((term) => {
|
|
13906
14143
|
const isActive = activeSlug === term.slug;
|
|
13907
|
-
return /* @__PURE__ */ (0,
|
|
14144
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
13908
14145
|
OptionLink,
|
|
13909
14146
|
{
|
|
13910
14147
|
href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
|
|
@@ -13924,9 +14161,9 @@ function ShopFilters({
|
|
|
13924
14161
|
}),
|
|
13925
14162
|
visibleAttributes.map((attr) => {
|
|
13926
14163
|
const activeValues = toValueArray(active.attr?.[attr.key]);
|
|
13927
|
-
return /* @__PURE__ */ (0,
|
|
14164
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
|
|
13928
14165
|
const isActive = activeValues.includes(opt.value);
|
|
13929
|
-
return /* @__PURE__ */ (0,
|
|
14166
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
13930
14167
|
OptionLink,
|
|
13931
14168
|
{
|
|
13932
14169
|
href: hrefs.attr(attr.key, opt.value),
|
|
@@ -13944,11 +14181,11 @@ function ShopFilters({
|
|
|
13944
14181
|
);
|
|
13945
14182
|
}) }, attr.key);
|
|
13946
14183
|
}),
|
|
13947
|
-
showPriceGroup && /* @__PURE__ */ (0,
|
|
14184
|
+
showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
|
|
13948
14185
|
const isActive = active.priceMin === band.min && active.priceMax === band.max;
|
|
13949
14186
|
const nextMin = isActive ? void 0 : band.min;
|
|
13950
14187
|
const nextMax = isActive ? void 0 : band.max;
|
|
13951
|
-
return /* @__PURE__ */ (0,
|
|
14188
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
13952
14189
|
OptionLink,
|
|
13953
14190
|
{
|
|
13954
14191
|
href: hrefs.price(nextMin, nextMax),
|
|
@@ -13959,7 +14196,7 @@ function ShopFilters({
|
|
|
13959
14196
|
i
|
|
13960
14197
|
);
|
|
13961
14198
|
}) }),
|
|
13962
|
-
hasOnSale && /* @__PURE__ */ (0,
|
|
14199
|
+
hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
13963
14200
|
OptionLink,
|
|
13964
14201
|
{
|
|
13965
14202
|
href: hrefs.onSale(!active.onSale),
|
|
@@ -13968,7 +14205,7 @@ function ShopFilters({
|
|
|
13968
14205
|
onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
|
|
13969
14206
|
}
|
|
13970
14207
|
),
|
|
13971
|
-
/* @__PURE__ */ (0,
|
|
14208
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
13972
14209
|
"a",
|
|
13973
14210
|
{
|
|
13974
14211
|
href: hrefs.clearAll(),
|
|
@@ -13984,8 +14221,8 @@ function ShopFilters({
|
|
|
13984
14221
|
}
|
|
13985
14222
|
|
|
13986
14223
|
// src/components/cart-line-list.tsx
|
|
13987
|
-
var
|
|
13988
|
-
var
|
|
14224
|
+
var import_utils13 = require("@reblu/site-ui/utils");
|
|
14225
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
13989
14226
|
var DEFAULT_LABELS2 = {
|
|
13990
14227
|
quantityLabel: "Cantidad",
|
|
13991
14228
|
decrease: "Reducir cantidad",
|
|
@@ -14010,9 +14247,9 @@ function CartLineList({
|
|
|
14010
14247
|
}) {
|
|
14011
14248
|
const t = { ...DEFAULT_LABELS2, ...labels };
|
|
14012
14249
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
14013
|
-
return /* @__PURE__ */ (0,
|
|
14014
|
-
/* @__PURE__ */ (0,
|
|
14015
|
-
noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0,
|
|
14250
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: (0, import_utils13.cn)("space-y-4", className), "data-slot": "cart-line-list", children: [
|
|
14251
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
|
|
14252
|
+
noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
14016
14253
|
"div",
|
|
14017
14254
|
{
|
|
14018
14255
|
role: "status",
|
|
@@ -14021,32 +14258,32 @@ function CartLineList({
|
|
|
14021
14258
|
children: noticeContent
|
|
14022
14259
|
}
|
|
14023
14260
|
),
|
|
14024
|
-
/* @__PURE__ */ (0,
|
|
14261
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
|
|
14025
14262
|
const maxQty = item.maxStock ?? Infinity;
|
|
14026
14263
|
const atMax = item.quantity >= maxQty;
|
|
14027
14264
|
const atMin = item.quantity <= 1;
|
|
14028
|
-
return /* @__PURE__ */ (0,
|
|
14265
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
14029
14266
|
"li",
|
|
14030
14267
|
{
|
|
14031
14268
|
className: "flex gap-4 rounded-xl border border-border bg-card p-4",
|
|
14032
14269
|
children: [
|
|
14033
|
-
/* @__PURE__ */ (0,
|
|
14034
|
-
/* @__PURE__ */ (0,
|
|
14035
|
-
/* @__PURE__ */ (0,
|
|
14036
|
-
item.variantName && /* @__PURE__ */ (0,
|
|
14037
|
-
/* @__PURE__ */ (0,
|
|
14270
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
|
|
14271
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
14272
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
|
|
14273
|
+
item.variantName && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
|
|
14274
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("p", { className: "mt-1 text-sm text-muted-foreground", children: [
|
|
14038
14275
|
formatPrice(item.unitPrice, currencyCode, locale),
|
|
14039
14276
|
" ",
|
|
14040
14277
|
t.unitPriceSuffix
|
|
14041
14278
|
] }),
|
|
14042
|
-
/* @__PURE__ */ (0,
|
|
14279
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
14043
14280
|
"div",
|
|
14044
14281
|
{
|
|
14045
14282
|
role: "group",
|
|
14046
14283
|
"aria-label": t.quantityLabel,
|
|
14047
14284
|
className: "mt-3 flex items-center gap-3",
|
|
14048
14285
|
children: [
|
|
14049
|
-
/* @__PURE__ */ (0,
|
|
14286
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
14050
14287
|
"button",
|
|
14051
14288
|
{
|
|
14052
14289
|
type: "button",
|
|
@@ -14057,8 +14294,8 @@ function CartLineList({
|
|
|
14057
14294
|
children: "\u2212"
|
|
14058
14295
|
}
|
|
14059
14296
|
),
|
|
14060
|
-
/* @__PURE__ */ (0,
|
|
14061
|
-
/* @__PURE__ */ (0,
|
|
14297
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
|
|
14298
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
14062
14299
|
"button",
|
|
14063
14300
|
{
|
|
14064
14301
|
type: "button",
|
|
@@ -14069,7 +14306,7 @@ function CartLineList({
|
|
|
14069
14306
|
children: "+"
|
|
14070
14307
|
}
|
|
14071
14308
|
),
|
|
14072
|
-
onRemove && /* @__PURE__ */ (0,
|
|
14309
|
+
onRemove && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
14073
14310
|
"button",
|
|
14074
14311
|
{
|
|
14075
14312
|
type: "button",
|
|
@@ -14083,7 +14320,7 @@ function CartLineList({
|
|
|
14083
14320
|
}
|
|
14084
14321
|
)
|
|
14085
14322
|
] }),
|
|
14086
|
-
/* @__PURE__ */ (0,
|
|
14323
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
|
|
14087
14324
|
]
|
|
14088
14325
|
},
|
|
14089
14326
|
lineKey(item.productId, item.variantId)
|
|
@@ -14093,8 +14330,8 @@ function CartLineList({
|
|
|
14093
14330
|
}
|
|
14094
14331
|
|
|
14095
14332
|
// src/components/cart-summary.tsx
|
|
14096
|
-
var
|
|
14097
|
-
var
|
|
14333
|
+
var import_utils14 = require("@reblu/site-ui/utils");
|
|
14334
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
14098
14335
|
var DEFAULT_LABELS3 = {
|
|
14099
14336
|
subtotal: "Subtotal",
|
|
14100
14337
|
discountPrefix: "Descuento",
|
|
@@ -14121,40 +14358,40 @@ function CartSummary({
|
|
|
14121
14358
|
const hasDiscount = Boolean(discount && discount > 0);
|
|
14122
14359
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
14123
14360
|
const hasNotice = noticeContent != null && noticeContent !== false;
|
|
14124
|
-
const breakdown = /* @__PURE__ */ (0,
|
|
14361
|
+
const breakdown = /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
14125
14362
|
"dl",
|
|
14126
14363
|
{
|
|
14127
|
-
className: (0,
|
|
14364
|
+
className: (0, import_utils14.cn)("space-y-2 text-sm", !hasNotice && className),
|
|
14128
14365
|
"data-slot": "cart-summary",
|
|
14129
14366
|
children: [
|
|
14130
|
-
/* @__PURE__ */ (0,
|
|
14131
|
-
/* @__PURE__ */ (0,
|
|
14132
|
-
/* @__PURE__ */ (0,
|
|
14367
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
14368
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("dt", { children: t.subtotal }),
|
|
14369
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("dd", { children: formatPrice(subtotal, currencyCode, locale) })
|
|
14133
14370
|
] }),
|
|
14134
|
-
hasDiscount && /* @__PURE__ */ (0,
|
|
14135
|
-
/* @__PURE__ */ (0,
|
|
14371
|
+
hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
|
|
14372
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("dt", { children: [
|
|
14136
14373
|
t.discountPrefix,
|
|
14137
14374
|
discountCode ? ` (${discountCode})` : ""
|
|
14138
14375
|
] }),
|
|
14139
|
-
/* @__PURE__ */ (0,
|
|
14376
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("dd", { children: [
|
|
14140
14377
|
"-",
|
|
14141
14378
|
formatPrice(discount, currencyCode, locale)
|
|
14142
14379
|
] })
|
|
14143
14380
|
] }),
|
|
14144
|
-
shippingEnabled && /* @__PURE__ */ (0,
|
|
14145
|
-
/* @__PURE__ */ (0,
|
|
14146
|
-
/* @__PURE__ */ (0,
|
|
14381
|
+
shippingEnabled && /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
14382
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("dt", { children: t.shipping }),
|
|
14383
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
|
|
14147
14384
|
] }),
|
|
14148
|
-
/* @__PURE__ */ (0,
|
|
14149
|
-
/* @__PURE__ */ (0,
|
|
14150
|
-
/* @__PURE__ */ (0,
|
|
14385
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
|
|
14386
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("dt", { children: t.total }),
|
|
14387
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("dd", { children: formatPrice(total, currencyCode, locale) })
|
|
14151
14388
|
] })
|
|
14152
14389
|
]
|
|
14153
14390
|
}
|
|
14154
14391
|
);
|
|
14155
14392
|
if (!hasNotice) return breakdown;
|
|
14156
|
-
return /* @__PURE__ */ (0,
|
|
14157
|
-
/* @__PURE__ */ (0,
|
|
14393
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: (0, import_utils14.cn)("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
|
|
14394
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
14158
14395
|
"div",
|
|
14159
14396
|
{
|
|
14160
14397
|
role: "status",
|
|
@@ -14168,8 +14405,8 @@ function CartSummary({
|
|
|
14168
14405
|
}
|
|
14169
14406
|
|
|
14170
14407
|
// src/components/added-to-cart-toast.tsx
|
|
14171
|
-
var
|
|
14172
|
-
var
|
|
14408
|
+
var import_utils15 = require("@reblu/site-ui/utils");
|
|
14409
|
+
var import_jsx_runtime14 = (
|
|
14173
14410
|
// eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
|
|
14174
14411
|
require("react/jsx-runtime")
|
|
14175
14412
|
);
|
|
@@ -14192,32 +14429,32 @@ function AddedToCartToast({
|
|
|
14192
14429
|
const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
|
|
14193
14430
|
const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
|
|
14194
14431
|
const variant = status === "success" ? "success" : "error";
|
|
14195
|
-
return /* @__PURE__ */ (0,
|
|
14432
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
14196
14433
|
"div",
|
|
14197
14434
|
{
|
|
14198
14435
|
"data-slot": "added-to-cart-toast",
|
|
14199
14436
|
"data-variant": variant,
|
|
14200
|
-
className: (0,
|
|
14437
|
+
className: (0, import_utils15.cn)(
|
|
14201
14438
|
"flex items-center gap-3 rounded-xl border border-border bg-card p-3 text-sm shadow-lg",
|
|
14202
14439
|
variant === "success" && "border-green-600/30 dark:border-green-400/30",
|
|
14203
14440
|
variant === "error" && "border-destructive/30",
|
|
14204
14441
|
className
|
|
14205
14442
|
),
|
|
14206
14443
|
children: [
|
|
14207
|
-
hasThumbnail && /* @__PURE__ */ (0,
|
|
14208
|
-
/* @__PURE__ */ (0,
|
|
14209
|
-
/* @__PURE__ */ (0,
|
|
14210
|
-
/* @__PURE__ */ (0,
|
|
14444
|
+
hasThumbnail && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
|
|
14445
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
14446
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "truncate font-semibold text-foreground", children: productName }),
|
|
14447
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
|
|
14211
14448
|
] }),
|
|
14212
|
-
/* @__PURE__ */ (0,
|
|
14449
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
|
|
14213
14450
|
]
|
|
14214
14451
|
}
|
|
14215
14452
|
);
|
|
14216
14453
|
}
|
|
14217
14454
|
|
|
14218
14455
|
// src/components/checkout-login-prompt.tsx
|
|
14219
|
-
var
|
|
14220
|
-
var
|
|
14456
|
+
var import_utils16 = require("@reblu/site-ui/utils");
|
|
14457
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
14221
14458
|
var DEFAULT_LABELS5 = {
|
|
14222
14459
|
title: "Identificaci\xF3n",
|
|
14223
14460
|
description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
|
|
@@ -14244,26 +14481,26 @@ function CheckoutLoginPrompt({
|
|
|
14244
14481
|
if (!open) return null;
|
|
14245
14482
|
const t = { ...DEFAULT_LABELS5, ...labels };
|
|
14246
14483
|
const isValidEmail = EMAIL_PATTERN.test(email.trim());
|
|
14247
|
-
return /* @__PURE__ */ (0,
|
|
14248
|
-
/* @__PURE__ */ (0,
|
|
14249
|
-
/* @__PURE__ */ (0,
|
|
14484
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_jsx_runtime15.Fragment, { children: [
|
|
14485
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
|
|
14486
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
|
|
14250
14487
|
"div",
|
|
14251
14488
|
{
|
|
14252
14489
|
role: "dialog",
|
|
14253
14490
|
"aria-modal": "true",
|
|
14254
14491
|
"aria-labelledby": "checkout-login-prompt-title",
|
|
14255
14492
|
"data-slot": "checkout-login-prompt",
|
|
14256
|
-
className: (0,
|
|
14493
|
+
className: (0, import_utils16.cn)(
|
|
14257
14494
|
"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",
|
|
14258
14495
|
className
|
|
14259
14496
|
),
|
|
14260
14497
|
children: [
|
|
14261
|
-
/* @__PURE__ */ (0,
|
|
14262
|
-
/* @__PURE__ */ (0,
|
|
14263
|
-
/* @__PURE__ */ (0,
|
|
14264
|
-
/* @__PURE__ */ (0,
|
|
14498
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
|
|
14499
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { children: [
|
|
14500
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
|
|
14501
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
|
|
14265
14502
|
] }),
|
|
14266
|
-
/* @__PURE__ */ (0,
|
|
14503
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
14267
14504
|
"button",
|
|
14268
14505
|
{
|
|
14269
14506
|
type: "button",
|
|
@@ -14274,9 +14511,9 @@ function CheckoutLoginPrompt({
|
|
|
14274
14511
|
}
|
|
14275
14512
|
)
|
|
14276
14513
|
] }),
|
|
14277
|
-
/* @__PURE__ */ (0,
|
|
14278
|
-
/* @__PURE__ */ (0,
|
|
14279
|
-
/* @__PURE__ */ (0,
|
|
14514
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "space-y-2", children: [
|
|
14515
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
14516
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
14280
14517
|
"input",
|
|
14281
14518
|
{
|
|
14282
14519
|
id: "checkout-login-prompt-email",
|
|
@@ -14285,29 +14522,29 @@ function CheckoutLoginPrompt({
|
|
|
14285
14522
|
value: email,
|
|
14286
14523
|
onChange: (e) => onEmailChange(e.target.value),
|
|
14287
14524
|
placeholder: t.emailPlaceholder,
|
|
14288
|
-
className: (0,
|
|
14525
|
+
className: (0, import_utils16.cn)(
|
|
14289
14526
|
"w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
|
|
14290
14527
|
error ? "border-destructive" : "border-border focus:border-primary"
|
|
14291
14528
|
)
|
|
14292
14529
|
}
|
|
14293
14530
|
),
|
|
14294
|
-
error && /* @__PURE__ */ (0,
|
|
14531
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-xs text-destructive", children: error })
|
|
14295
14532
|
] }),
|
|
14296
|
-
/* @__PURE__ */ (0,
|
|
14297
|
-
/* @__PURE__ */ (0,
|
|
14533
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "space-y-2", children: [
|
|
14534
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
14298
14535
|
"button",
|
|
14299
14536
|
{
|
|
14300
14537
|
type: "button",
|
|
14301
14538
|
onClick: onSubmitEmail,
|
|
14302
14539
|
disabled: checking || !isValidEmail,
|
|
14303
|
-
className: (0,
|
|
14540
|
+
className: (0, import_utils16.cn)(
|
|
14304
14541
|
"flex w-full items-center justify-center gap-2 rounded-xl px-4 py-2.5 text-sm font-semibold transition-all",
|
|
14305
14542
|
checking || !isValidEmail ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
|
|
14306
14543
|
),
|
|
14307
14544
|
children: checking ? t.checking : t.continueWithEmail
|
|
14308
14545
|
}
|
|
14309
14546
|
),
|
|
14310
|
-
/* @__PURE__ */ (0,
|
|
14547
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
14311
14548
|
"button",
|
|
14312
14549
|
{
|
|
14313
14550
|
type: "button",
|
|
@@ -14324,9 +14561,9 @@ function CheckoutLoginPrompt({
|
|
|
14324
14561
|
}
|
|
14325
14562
|
|
|
14326
14563
|
// src/components/checkout-form.tsx
|
|
14327
|
-
var
|
|
14564
|
+
var import_utils17 = require("@reblu/site-ui/utils");
|
|
14328
14565
|
var import_phone_input = require("@reblu/site-ui/phone-input");
|
|
14329
|
-
var
|
|
14566
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
14330
14567
|
var DEFAULT_LABELS6 = {
|
|
14331
14568
|
contactTitle: "Datos de contacto",
|
|
14332
14569
|
nameLabel: "Nombre completo",
|
|
@@ -14380,22 +14617,22 @@ function CheckoutForm({
|
|
|
14380
14617
|
event.preventDefault();
|
|
14381
14618
|
if (discountCode.trim() && !discountApplying) onApplyDiscount();
|
|
14382
14619
|
}
|
|
14383
|
-
return /* @__PURE__ */ (0,
|
|
14620
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
|
|
14384
14621
|
loginPrompt,
|
|
14385
|
-
/* @__PURE__ */ (0,
|
|
14622
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
14386
14623
|
"form",
|
|
14387
14624
|
{
|
|
14388
14625
|
"data-testid": "checkout-form",
|
|
14389
14626
|
onSubmit,
|
|
14390
|
-
className: (0,
|
|
14627
|
+
className: (0, import_utils17.cn)("space-y-8", className),
|
|
14391
14628
|
"data-slot": "checkout-form",
|
|
14392
14629
|
children: [
|
|
14393
|
-
/* @__PURE__ */ (0,
|
|
14394
|
-
/* @__PURE__ */ (0,
|
|
14395
|
-
/* @__PURE__ */ (0,
|
|
14396
|
-
/* @__PURE__ */ (0,
|
|
14397
|
-
/* @__PURE__ */ (0,
|
|
14398
|
-
/* @__PURE__ */ (0,
|
|
14630
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("section", { className: "space-y-4", children: [
|
|
14631
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
|
|
14632
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
14633
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "space-y-1", children: [
|
|
14634
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
|
|
14635
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14399
14636
|
"input",
|
|
14400
14637
|
{
|
|
14401
14638
|
id: "checkout-form-name",
|
|
@@ -14404,17 +14641,17 @@ function CheckoutForm({
|
|
|
14404
14641
|
value: contact.name,
|
|
14405
14642
|
onChange: (e) => patchContact({ name: e.target.value }),
|
|
14406
14643
|
placeholder: t.namePlaceholder,
|
|
14407
|
-
className: (0,
|
|
14644
|
+
className: (0, import_utils17.cn)(
|
|
14408
14645
|
"w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
|
|
14409
14646
|
contactErrors?.name ? "border-destructive" : "border-border focus:border-primary"
|
|
14410
14647
|
)
|
|
14411
14648
|
}
|
|
14412
14649
|
),
|
|
14413
|
-
contactErrors?.name && /* @__PURE__ */ (0,
|
|
14650
|
+
contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
|
|
14414
14651
|
] }),
|
|
14415
|
-
/* @__PURE__ */ (0,
|
|
14416
|
-
/* @__PURE__ */ (0,
|
|
14417
|
-
/* @__PURE__ */ (0,
|
|
14652
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "space-y-1", children: [
|
|
14653
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
14654
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14418
14655
|
"input",
|
|
14419
14656
|
{
|
|
14420
14657
|
id: "checkout-form-email",
|
|
@@ -14423,15 +14660,15 @@ function CheckoutForm({
|
|
|
14423
14660
|
value: contact.email,
|
|
14424
14661
|
onChange: (e) => patchContact({ email: e.target.value }),
|
|
14425
14662
|
placeholder: t.emailPlaceholder,
|
|
14426
|
-
className: (0,
|
|
14663
|
+
className: (0, import_utils17.cn)(
|
|
14427
14664
|
"w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
|
|
14428
14665
|
contactErrors?.email ? "border-destructive" : "border-border focus:border-primary"
|
|
14429
14666
|
)
|
|
14430
14667
|
}
|
|
14431
14668
|
),
|
|
14432
|
-
contactErrors?.email && /* @__PURE__ */ (0,
|
|
14669
|
+
contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
|
|
14433
14670
|
] }),
|
|
14434
|
-
/* @__PURE__ */ (0,
|
|
14671
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14435
14672
|
import_phone_input.PhoneInput,
|
|
14436
14673
|
{
|
|
14437
14674
|
id: "checkout-form-phone",
|
|
@@ -14445,15 +14682,15 @@ function CheckoutForm({
|
|
|
14445
14682
|
] })
|
|
14446
14683
|
] }),
|
|
14447
14684
|
children2,
|
|
14448
|
-
generalError ? /* @__PURE__ */ (0,
|
|
14449
|
-
/* @__PURE__ */ (0,
|
|
14450
|
-
/* @__PURE__ */ (0,
|
|
14451
|
-
appliedDiscount ? /* @__PURE__ */ (0,
|
|
14452
|
-
/* @__PURE__ */ (0,
|
|
14453
|
-
/* @__PURE__ */ (0,
|
|
14454
|
-
/* @__PURE__ */ (0,
|
|
14685
|
+
generalError ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
|
|
14686
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("section", { className: "space-y-3", children: [
|
|
14687
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
|
|
14688
|
+
appliedDiscount ? /* @__PURE__ */ (0, import_jsx_runtime16.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: [
|
|
14689
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
|
|
14690
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "font-semibold", children: appliedDiscount.code }),
|
|
14691
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
|
|
14455
14692
|
] }),
|
|
14456
|
-
/* @__PURE__ */ (0,
|
|
14693
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14457
14694
|
"button",
|
|
14458
14695
|
{
|
|
14459
14696
|
type: "button",
|
|
@@ -14463,9 +14700,9 @@ function CheckoutForm({
|
|
|
14463
14700
|
children: t.removeDiscount
|
|
14464
14701
|
}
|
|
14465
14702
|
)
|
|
14466
|
-
] }) : /* @__PURE__ */ (0,
|
|
14467
|
-
/* @__PURE__ */ (0,
|
|
14468
|
-
/* @__PURE__ */ (0,
|
|
14703
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex gap-2", children: [
|
|
14704
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
|
|
14705
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14469
14706
|
"input",
|
|
14470
14707
|
{
|
|
14471
14708
|
id: "checkout-form-discount-code",
|
|
@@ -14477,7 +14714,7 @@ function CheckoutForm({
|
|
|
14477
14714
|
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"
|
|
14478
14715
|
}
|
|
14479
14716
|
),
|
|
14480
|
-
/* @__PURE__ */ (0,
|
|
14717
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14481
14718
|
"button",
|
|
14482
14719
|
{
|
|
14483
14720
|
type: "button",
|
|
@@ -14488,14 +14725,14 @@ function CheckoutForm({
|
|
|
14488
14725
|
}
|
|
14489
14726
|
)
|
|
14490
14727
|
] }),
|
|
14491
|
-
discountError && /* @__PURE__ */ (0,
|
|
14728
|
+
discountError && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "text-xs text-destructive", children: discountError })
|
|
14492
14729
|
] }),
|
|
14493
|
-
/* @__PURE__ */ (0,
|
|
14730
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14494
14731
|
"button",
|
|
14495
14732
|
{
|
|
14496
14733
|
type: "submit",
|
|
14497
14734
|
disabled: submitting || submitDisabled,
|
|
14498
|
-
className: (0,
|
|
14735
|
+
className: (0, import_utils17.cn)(
|
|
14499
14736
|
"flex w-full items-center justify-center gap-2 rounded-xl px-4 py-3 font-semibold transition-all",
|
|
14500
14737
|
submitting || submitDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
|
|
14501
14738
|
),
|
|
@@ -14509,8 +14746,8 @@ function CheckoutForm({
|
|
|
14509
14746
|
}
|
|
14510
14747
|
|
|
14511
14748
|
// src/components/order-confirmation.tsx
|
|
14512
|
-
var
|
|
14513
|
-
var
|
|
14749
|
+
var import_utils18 = require("@reblu/site-ui/utils");
|
|
14750
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
14514
14751
|
var DEFAULT_LABELS7 = {
|
|
14515
14752
|
pollingTitle: "Confirmando tu pedido\u2026",
|
|
14516
14753
|
pollingDescription: "Estamos procesando el pago, un momento\u2026",
|
|
@@ -14572,48 +14809,48 @@ function OrderConfirmation({
|
|
|
14572
14809
|
const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
|
|
14573
14810
|
const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
|
|
14574
14811
|
const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
|
|
14575
|
-
return /* @__PURE__ */ (0,
|
|
14576
|
-
/* @__PURE__ */ (0,
|
|
14577
|
-
/* @__PURE__ */ (0,
|
|
14578
|
-
showFullOrderSummary && order && /* @__PURE__ */ (0,
|
|
14579
|
-
/* @__PURE__ */ (0,
|
|
14580
|
-
/* @__PURE__ */ (0,
|
|
14581
|
-
/* @__PURE__ */ (0,
|
|
14812
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: (0, import_utils18.cn)("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
|
|
14813
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h1", { className: "text-3xl font-bold", children: title }),
|
|
14814
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-lg text-muted-foreground", children: description }),
|
|
14815
|
+
showFullOrderSummary && order && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "space-y-6", children: [
|
|
14816
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
14817
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
|
|
14818
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
14582
14819
|
] }),
|
|
14583
|
-
/* @__PURE__ */ (0,
|
|
14584
|
-
order.items.map((item, idx) => /* @__PURE__ */ (0,
|
|
14820
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
|
|
14821
|
+
order.items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
14585
14822
|
"div",
|
|
14586
14823
|
{
|
|
14587
14824
|
className: "flex justify-between gap-4 text-sm",
|
|
14588
14825
|
children: [
|
|
14589
|
-
/* @__PURE__ */ (0,
|
|
14826
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
|
|
14590
14827
|
item.product.name,
|
|
14591
14828
|
item.variant ? ` (${item.variant.name})` : "",
|
|
14592
14829
|
" x",
|
|
14593
14830
|
item.quantity
|
|
14594
14831
|
] }),
|
|
14595
|
-
/* @__PURE__ */ (0,
|
|
14832
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
|
|
14596
14833
|
]
|
|
14597
14834
|
},
|
|
14598
14835
|
idx
|
|
14599
14836
|
)),
|
|
14600
|
-
/* @__PURE__ */ (0,
|
|
14601
|
-
/* @__PURE__ */ (0,
|
|
14602
|
-
/* @__PURE__ */ (0,
|
|
14837
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
|
|
14838
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: t.totalLabel }),
|
|
14839
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: formatPrice(order.total, currencyCode, locale) })
|
|
14603
14840
|
] }) })
|
|
14604
14841
|
] }),
|
|
14605
|
-
/* @__PURE__ */ (0,
|
|
14842
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
|
|
14606
14843
|
t.confirmationEmailPrefix,
|
|
14607
14844
|
" ",
|
|
14608
|
-
/* @__PURE__ */ (0,
|
|
14845
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
|
|
14609
14846
|
"."
|
|
14610
14847
|
] })
|
|
14611
14848
|
] }),
|
|
14612
|
-
showOrderReference && order && /* @__PURE__ */ (0,
|
|
14613
|
-
/* @__PURE__ */ (0,
|
|
14614
|
-
/* @__PURE__ */ (0,
|
|
14849
|
+
showOrderReference && order && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
14850
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
|
|
14851
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
14615
14852
|
] }),
|
|
14616
|
-
status === "failed" && cartHref && /* @__PURE__ */ (0,
|
|
14853
|
+
status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14617
14854
|
"a",
|
|
14618
14855
|
{
|
|
14619
14856
|
href: cartHref,
|
|
@@ -14621,7 +14858,7 @@ function OrderConfirmation({
|
|
|
14621
14858
|
children: t.backToCartLabel
|
|
14622
14859
|
}
|
|
14623
14860
|
),
|
|
14624
|
-
showRecheck && /* @__PURE__ */ (0,
|
|
14861
|
+
showRecheck && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14625
14862
|
"button",
|
|
14626
14863
|
{
|
|
14627
14864
|
type: "button",
|
|
@@ -14630,9 +14867,9 @@ function OrderConfirmation({
|
|
|
14630
14867
|
children: t.recheckLabel
|
|
14631
14868
|
}
|
|
14632
14869
|
),
|
|
14633
|
-
showSessionReference && /* @__PURE__ */ (0,
|
|
14634
|
-
/* @__PURE__ */ (0,
|
|
14635
|
-
/* @__PURE__ */ (0,
|
|
14870
|
+
showSessionReference && /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
14871
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
|
|
14872
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
|
|
14636
14873
|
] })
|
|
14637
14874
|
] });
|
|
14638
14875
|
}
|
|
@@ -14647,12 +14884,14 @@ function OrderConfirmation({
|
|
|
14647
14884
|
DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,
|
|
14648
14885
|
DEFAULT_SHOP_ERROR_MESSAGES,
|
|
14649
14886
|
DEFAULT_SHOP_PRICE_BANDS,
|
|
14887
|
+
DEFAULT_TRUST_ICONS,
|
|
14650
14888
|
FaqAccordion,
|
|
14651
14889
|
MarkdownRenderer,
|
|
14652
14890
|
OrderConfirmation,
|
|
14653
14891
|
PageBlocks,
|
|
14654
14892
|
ParentPage,
|
|
14655
14893
|
ProductCard,
|
|
14894
|
+
ProductTrustItems,
|
|
14656
14895
|
ProfileCard,
|
|
14657
14896
|
SafeHtml,
|
|
14658
14897
|
ShopFilters,
|
|
@@ -14669,4 +14908,26 @@ function OrderConfirmation({
|
|
|
14669
14908
|
sanitizeHtml,
|
|
14670
14909
|
shouldRenderShopFilters
|
|
14671
14910
|
});
|
|
14911
|
+
/*! Bundled license information:
|
|
14912
|
+
|
|
14913
|
+
lucide-react/dist/esm/shared/src/utils.js:
|
|
14914
|
+
lucide-react/dist/esm/defaultAttributes.js:
|
|
14915
|
+
lucide-react/dist/esm/Icon.js:
|
|
14916
|
+
lucide-react/dist/esm/createLucideIcon.js:
|
|
14917
|
+
lucide-react/dist/esm/icons/award.js:
|
|
14918
|
+
lucide-react/dist/esm/icons/badge-check.js:
|
|
14919
|
+
lucide-react/dist/esm/icons/gift.js:
|
|
14920
|
+
lucide-react/dist/esm/icons/headset.js:
|
|
14921
|
+
lucide-react/dist/esm/icons/rotate-ccw.js:
|
|
14922
|
+
lucide-react/dist/esm/icons/shield-check.js:
|
|
14923
|
+
lucide-react/dist/esm/icons/store.js:
|
|
14924
|
+
lucide-react/dist/esm/icons/truck.js:
|
|
14925
|
+
lucide-react/dist/esm/lucide-react.js:
|
|
14926
|
+
(**
|
|
14927
|
+
* @license lucide-react v0.562.0 - ISC
|
|
14928
|
+
*
|
|
14929
|
+
* This source code is licensed under the ISC license.
|
|
14930
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
14931
|
+
*)
|
|
14932
|
+
*/
|
|
14672
14933
|
//# sourceMappingURL=index.cjs.map
|