@reblu/site-blocks 0.11.0 → 0.12.1
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 +20 -0
- package/README.md +35 -0
- package/dist/index.cjs +281 -249
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +42 -8
- package/dist/index.d.ts +42 -8
- package/dist/index.js +280 -249
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -34,6 +34,7 @@ __export(src_exports, {
|
|
|
34
34
|
MarkdownRenderer: () => MarkdownRenderer,
|
|
35
35
|
OrderConfirmation: () => OrderConfirmation,
|
|
36
36
|
PageBlocks: () => PageBlocks,
|
|
37
|
+
PageCardGrid: () => PageCardGrid,
|
|
37
38
|
ParentPage: () => ParentPage,
|
|
38
39
|
ProductCard: () => ProductCard,
|
|
39
40
|
ProductTrustItems: () => ProductTrustItems,
|
|
@@ -13375,8 +13376,54 @@ function Treatment({ page, className }) {
|
|
|
13375
13376
|
}
|
|
13376
13377
|
|
|
13377
13378
|
// src/components/parent-page.tsx
|
|
13379
|
+
var import_utils5 = require("@reblu/site-ui/utils");
|
|
13380
|
+
|
|
13381
|
+
// src/components/page-card-grid.tsx
|
|
13378
13382
|
var import_utils4 = require("@reblu/site-ui/utils");
|
|
13379
13383
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
13384
|
+
var defaultPageHref = (page) => `/${page.slug}`;
|
|
13385
|
+
var pageKey = (page) => `${page.category?.slug ?? ""}/${page.slug}`;
|
|
13386
|
+
function PageCardGrid(props) {
|
|
13387
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PageCardGridSection, { ...props });
|
|
13388
|
+
}
|
|
13389
|
+
function PageCardGridSection({
|
|
13390
|
+
pages,
|
|
13391
|
+
pageHref = defaultPageHref,
|
|
13392
|
+
heading,
|
|
13393
|
+
className,
|
|
13394
|
+
keepEmptyHeading = false
|
|
13395
|
+
}) {
|
|
13396
|
+
if (pages.length === 0) return null;
|
|
13397
|
+
const showHeading = keepEmptyHeading ? heading !== void 0 : !!heading;
|
|
13398
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: (0, import_utils4.cn)("space-y-6", className), children: [
|
|
13399
|
+
showHeading && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h2", { className: "text-2xl font-bold", children: heading }),
|
|
13400
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "grid list-none grid-cols-1 gap-6 p-0 sm:grid-cols-2 lg:grid-cols-3", children: pages.map((page) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
13401
|
+
"a",
|
|
13402
|
+
{
|
|
13403
|
+
href: pageHref(page),
|
|
13404
|
+
className: "group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
|
|
13405
|
+
children: [
|
|
13406
|
+
page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
13407
|
+
"img",
|
|
13408
|
+
{
|
|
13409
|
+
src: page.coverImageUrl,
|
|
13410
|
+
alt: "",
|
|
13411
|
+
loading: "lazy",
|
|
13412
|
+
className: "h-full w-full object-cover transition-transform group-hover:scale-105"
|
|
13413
|
+
}
|
|
13414
|
+
) }),
|
|
13415
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
|
|
13416
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
|
|
13417
|
+
page.excerpt && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
|
|
13418
|
+
] })
|
|
13419
|
+
]
|
|
13420
|
+
}
|
|
13421
|
+
) }, pageKey(page))) })
|
|
13422
|
+
] });
|
|
13423
|
+
}
|
|
13424
|
+
|
|
13425
|
+
// src/components/parent-page.tsx
|
|
13426
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
13380
13427
|
var defaultChildPageHref = (slug) => `/${slug}`;
|
|
13381
13428
|
function ParentPage({
|
|
13382
13429
|
page,
|
|
@@ -13391,34 +13438,18 @@ function ParentPage({
|
|
|
13391
13438
|
const pages = childPages ?? treatments ?? [];
|
|
13392
13439
|
const hrefFor = childPageHref ?? treatmentHref ?? defaultChildPageHref;
|
|
13393
13440
|
const label = childPagesLabel ?? treatmentsLabel ?? "Treatments";
|
|
13394
|
-
return /* @__PURE__ */ (0,
|
|
13395
|
-
/* @__PURE__ */ (0,
|
|
13396
|
-
/* @__PURE__ */ (0,
|
|
13397
|
-
|
|
13398
|
-
|
|
13399
|
-
|
|
13400
|
-
|
|
13401
|
-
|
|
13402
|
-
|
|
13403
|
-
|
|
13404
|
-
|
|
13405
|
-
|
|
13406
|
-
"img",
|
|
13407
|
-
{
|
|
13408
|
-
src: t.coverImageUrl,
|
|
13409
|
-
alt: "",
|
|
13410
|
-
loading: "lazy",
|
|
13411
|
-
className: "h-full w-full object-cover transition-transform group-hover:scale-105"
|
|
13412
|
-
}
|
|
13413
|
-
) }),
|
|
13414
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
|
|
13415
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: t.title }),
|
|
13416
|
-
t.excerpt && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: t.excerpt })
|
|
13417
|
-
] })
|
|
13418
|
-
]
|
|
13419
|
-
}
|
|
13420
|
-
) }, t.slug)) })
|
|
13421
|
-
] })
|
|
13441
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("article", { className: (0, import_utils5.cn)("space-y-12", className), "data-slot": "specialty", children: [
|
|
13442
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PageHero, { page }),
|
|
13443
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PageSectionList, { sections: page.sections }),
|
|
13444
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
13445
|
+
PageCardGridSection,
|
|
13446
|
+
{
|
|
13447
|
+
pages,
|
|
13448
|
+
heading: label,
|
|
13449
|
+
pageHref: (child) => hrefFor(child.slug),
|
|
13450
|
+
keepEmptyHeading: true
|
|
13451
|
+
}
|
|
13452
|
+
)
|
|
13422
13453
|
] });
|
|
13423
13454
|
}
|
|
13424
13455
|
|
|
@@ -13426,34 +13457,34 @@ function ParentPage({
|
|
|
13426
13457
|
var Specialty = ParentPage;
|
|
13427
13458
|
|
|
13428
13459
|
// src/components/profile-card.tsx
|
|
13429
|
-
var
|
|
13430
|
-
var
|
|
13460
|
+
var import_utils6 = require("@reblu/site-ui/utils");
|
|
13461
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
13431
13462
|
function initials(name) {
|
|
13432
13463
|
return name.split(/\s+/).filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
|
|
13433
13464
|
}
|
|
13434
13465
|
function ProfileCard({ name, role, imageUrl, specialties = [], bio, href, className }) {
|
|
13435
13466
|
const NameTag = href ? "a" : "span";
|
|
13436
|
-
return /* @__PURE__ */ (0,
|
|
13467
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
13437
13468
|
"article",
|
|
13438
13469
|
{
|
|
13439
|
-
className: (0,
|
|
13470
|
+
className: (0, import_utils6.cn)(
|
|
13440
13471
|
"flex flex-col items-center gap-3 rounded-lg border bg-card p-6 text-center",
|
|
13441
13472
|
className
|
|
13442
13473
|
),
|
|
13443
13474
|
"data-slot": "profile-card",
|
|
13444
13475
|
children: [
|
|
13445
|
-
/* @__PURE__ */ (0,
|
|
13446
|
-
/* @__PURE__ */ (0,
|
|
13447
|
-
/* @__PURE__ */ (0,
|
|
13476
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "relative h-24 w-24 overflow-hidden rounded-full bg-muted", children: imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("img", { src: imageUrl, alt: name, loading: "lazy", className: "h-full w-full object-cover" }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "flex h-full w-full items-center justify-center text-2xl font-semibold text-muted-foreground", "aria-hidden": "true", children: initials(name) }) }),
|
|
13477
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "space-y-1", children: [
|
|
13478
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
13448
13479
|
NameTag,
|
|
13449
13480
|
{
|
|
13450
13481
|
...href ? { href, className: "transition-colors hover:text-primary" } : {},
|
|
13451
13482
|
children: name
|
|
13452
13483
|
}
|
|
13453
13484
|
) }),
|
|
13454
|
-
role && /* @__PURE__ */ (0,
|
|
13485
|
+
role && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-sm text-muted-foreground", children: role })
|
|
13455
13486
|
] }),
|
|
13456
|
-
specialties.length > 0 && /* @__PURE__ */ (0,
|
|
13487
|
+
specialties.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
13457
13488
|
"li",
|
|
13458
13489
|
{
|
|
13459
13490
|
className: "inline-flex items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground",
|
|
@@ -13461,28 +13492,28 @@ function ProfileCard({ name, role, imageUrl, specialties = [], bio, href, classN
|
|
|
13461
13492
|
},
|
|
13462
13493
|
s2
|
|
13463
13494
|
)) }),
|
|
13464
|
-
bio && /* @__PURE__ */ (0,
|
|
13495
|
+
bio && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-sm text-muted-foreground", children: bio })
|
|
13465
13496
|
]
|
|
13466
13497
|
}
|
|
13467
13498
|
);
|
|
13468
13499
|
}
|
|
13469
13500
|
|
|
13470
13501
|
// src/components/product-card.tsx
|
|
13471
|
-
var
|
|
13472
|
-
var
|
|
13502
|
+
var import_utils7 = require("@reblu/site-ui/utils");
|
|
13503
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
13473
13504
|
function ProductCard({ product, href, currencyCode = "EUR", locale, className }) {
|
|
13474
13505
|
const image = product.images.find((i) => i.isPrimary) ?? product.images[0];
|
|
13475
13506
|
const hasDiscount = product.comparePrice != null && product.comparePrice > product.price;
|
|
13476
|
-
return /* @__PURE__ */ (0,
|
|
13507
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
13477
13508
|
"article",
|
|
13478
13509
|
{
|
|
13479
|
-
className: (0,
|
|
13510
|
+
className: (0, import_utils7.cn)(
|
|
13480
13511
|
"group flex flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
|
|
13481
13512
|
className
|
|
13482
13513
|
),
|
|
13483
13514
|
"data-slot": "product-card",
|
|
13484
13515
|
children: [
|
|
13485
|
-
/* @__PURE__ */ (0,
|
|
13516
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
13486
13517
|
"img",
|
|
13487
13518
|
{
|
|
13488
13519
|
src: image.url,
|
|
@@ -13490,14 +13521,14 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
|
|
|
13490
13521
|
loading: "lazy",
|
|
13491
13522
|
className: "h-full w-full object-cover transition-transform group-hover:scale-105"
|
|
13492
13523
|
}
|
|
13493
|
-
) : /* @__PURE__ */ (0,
|
|
13494
|
-
/* @__PURE__ */ (0,
|
|
13495
|
-
product.category && /* @__PURE__ */ (0,
|
|
13496
|
-
/* @__PURE__ */ (0,
|
|
13497
|
-
product.shortDescription && /* @__PURE__ */ (0,
|
|
13498
|
-
/* @__PURE__ */ (0,
|
|
13499
|
-
/* @__PURE__ */ (0,
|
|
13500
|
-
hasDiscount && /* @__PURE__ */ (0,
|
|
13524
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
|
|
13525
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
|
|
13526
|
+
product.category && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "inline-flex w-fit items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground", children: product.category.name }),
|
|
13527
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
|
|
13528
|
+
product.shortDescription && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
|
|
13529
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
|
|
13530
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
|
|
13531
|
+
hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
|
|
13501
13532
|
] })
|
|
13502
13533
|
] })
|
|
13503
13534
|
]
|
|
@@ -13699,8 +13730,8 @@ var __iconNode8 = [
|
|
|
13699
13730
|
var Truck = createLucideIcon("truck", __iconNode8);
|
|
13700
13731
|
|
|
13701
13732
|
// src/components/product-trust-items.tsx
|
|
13702
|
-
var
|
|
13703
|
-
var
|
|
13733
|
+
var import_utils10 = require("@reblu/site-ui/utils");
|
|
13734
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
13704
13735
|
var DEFAULT_TRUST_ICONS = Object.freeze({
|
|
13705
13736
|
shipping: Truck,
|
|
13706
13737
|
returns: RotateCcw,
|
|
@@ -13734,17 +13765,17 @@ function ProductTrustItems({
|
|
|
13734
13765
|
return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
|
|
13735
13766
|
});
|
|
13736
13767
|
if (rows.length === 0) return null;
|
|
13737
|
-
return /* @__PURE__ */ (0,
|
|
13738
|
-
/* @__PURE__ */ (0,
|
|
13739
|
-
/* @__PURE__ */ (0,
|
|
13768
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(List, { "data-slot": "product-trust-items", className: (0, import_utils10.cn)("space-y-2.5", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("li", { className: (0, import_utils10.cn)("flex items-center gap-3 text-sm text-muted-foreground", itemClassName), children: [
|
|
13769
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
|
|
13770
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { children: text3 })
|
|
13740
13771
|
] }, key2)) });
|
|
13741
13772
|
}
|
|
13742
13773
|
|
|
13743
13774
|
// src/components/faq-accordion.tsx
|
|
13744
|
-
var
|
|
13775
|
+
var import_utils11 = require("@reblu/site-ui/utils");
|
|
13745
13776
|
|
|
13746
13777
|
// src/components/_heading.tsx
|
|
13747
|
-
var
|
|
13778
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
13748
13779
|
function nextHeadingLevel(level) {
|
|
13749
13780
|
return Math.min(level + 1, 6);
|
|
13750
13781
|
}
|
|
@@ -13754,11 +13785,11 @@ function Heading({
|
|
|
13754
13785
|
children: children2
|
|
13755
13786
|
}) {
|
|
13756
13787
|
const Tag = `h${level}`;
|
|
13757
|
-
return /* @__PURE__ */ (0,
|
|
13788
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Tag, { className, children: children2 });
|
|
13758
13789
|
}
|
|
13759
13790
|
|
|
13760
13791
|
// src/components/faq-accordion.tsx
|
|
13761
|
-
var
|
|
13792
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
13762
13793
|
function FaqAccordion({
|
|
13763
13794
|
items,
|
|
13764
13795
|
heading,
|
|
@@ -13769,18 +13800,18 @@ function FaqAccordion({
|
|
|
13769
13800
|
}) {
|
|
13770
13801
|
const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
|
|
13771
13802
|
if (visible.length === 0) return null;
|
|
13772
|
-
return /* @__PURE__ */ (0,
|
|
13773
|
-
heading && /* @__PURE__ */ (0,
|
|
13774
|
-
/* @__PURE__ */ (0,
|
|
13803
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: (0, import_utils11.cn)("space-y-4", className), "data-slot": "faq-accordion", children: [
|
|
13804
|
+
heading && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
|
|
13805
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
13775
13806
|
"details",
|
|
13776
13807
|
{
|
|
13777
13808
|
className: "group px-4",
|
|
13778
13809
|
"data-slot": "faq-item",
|
|
13779
13810
|
...defaultOpen.includes(index) ? { open: true } : {},
|
|
13780
13811
|
children: [
|
|
13781
|
-
/* @__PURE__ */ (0,
|
|
13782
|
-
questionHeadingLevel ? /* @__PURE__ */ (0,
|
|
13783
|
-
/* @__PURE__ */ (0,
|
|
13812
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.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: [
|
|
13813
|
+
questionHeadingLevel ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: item.q }),
|
|
13814
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
13784
13815
|
"span",
|
|
13785
13816
|
{
|
|
13786
13817
|
"aria-hidden": "true",
|
|
@@ -13789,7 +13820,7 @@ function FaqAccordion({
|
|
|
13789
13820
|
}
|
|
13790
13821
|
)
|
|
13791
13822
|
] }),
|
|
13792
|
-
/* @__PURE__ */ (0,
|
|
13823
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
|
|
13793
13824
|
]
|
|
13794
13825
|
},
|
|
13795
13826
|
index
|
|
@@ -13798,40 +13829,40 @@ function FaqAccordion({
|
|
|
13798
13829
|
}
|
|
13799
13830
|
|
|
13800
13831
|
// src/components/page-blocks.tsx
|
|
13801
|
-
var
|
|
13832
|
+
var import_utils12 = require("@reblu/site-ui/utils");
|
|
13802
13833
|
var import_button_variants2 = require("@reblu/site-ui/button-variants");
|
|
13803
|
-
var
|
|
13834
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
13804
13835
|
var ALIASES = {
|
|
13805
13836
|
doctor_embed: "profile_embed",
|
|
13806
13837
|
specialty_embed: "page_embed"
|
|
13807
13838
|
};
|
|
13808
13839
|
function HeroBlock({ block, headingLevel }) {
|
|
13809
13840
|
const { title, subtitle, imageUrl } = block.data;
|
|
13810
|
-
return /* @__PURE__ */ (0,
|
|
13811
|
-
/* @__PURE__ */ (0,
|
|
13812
|
-
subtitle && /* @__PURE__ */ (0,
|
|
13813
|
-
imageUrl && /* @__PURE__ */ (0,
|
|
13841
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "space-y-4", children: [
|
|
13842
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
|
|
13843
|
+
subtitle && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "text-lg opacity-80", children: subtitle }),
|
|
13844
|
+
imageUrl && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
|
|
13814
13845
|
] });
|
|
13815
13846
|
}
|
|
13816
13847
|
function RichtextBlock({ block, headingLevel }) {
|
|
13817
|
-
return /* @__PURE__ */ (0,
|
|
13848
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
|
|
13818
13849
|
}
|
|
13819
13850
|
function FaqBlock({ block }) {
|
|
13820
|
-
return /* @__PURE__ */ (0,
|
|
13851
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(FaqAccordion, { items: block.data.items });
|
|
13821
13852
|
}
|
|
13822
13853
|
function StatsBlock({ block }) {
|
|
13823
|
-
return /* @__PURE__ */ (0,
|
|
13824
|
-
/* @__PURE__ */ (0,
|
|
13825
|
-
/* @__PURE__ */ (0,
|
|
13854
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.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_runtime11.jsxs)("div", { className: "flex flex-col-reverse gap-1", children: [
|
|
13855
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("dt", { className: "text-sm opacity-80", children: item.label }),
|
|
13856
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("dd", { className: "text-3xl font-bold", children: item.value })
|
|
13826
13857
|
] }, i)) });
|
|
13827
13858
|
}
|
|
13828
13859
|
function TestimonialBlock({ block }) {
|
|
13829
13860
|
const { quote, author, role, avatarUrl } = block.data;
|
|
13830
|
-
return /* @__PURE__ */ (0,
|
|
13831
|
-
/* @__PURE__ */ (0,
|
|
13832
|
-
/* @__PURE__ */ (0,
|
|
13861
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("figure", { className: "space-y-4", children: [
|
|
13862
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { children: quote }) }),
|
|
13863
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("figcaption", { className: "flex items-center gap-3", children: [
|
|
13833
13864
|
avatarUrl && // eslint-disable-next-line @next/next/no-img-element
|
|
13834
|
-
/* @__PURE__ */ (0,
|
|
13865
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
13835
13866
|
"img",
|
|
13836
13867
|
{
|
|
13837
13868
|
src: avatarUrl,
|
|
@@ -13840,9 +13871,9 @@ function TestimonialBlock({ block }) {
|
|
|
13840
13871
|
className: "h-10 w-10 rounded-full object-cover"
|
|
13841
13872
|
}
|
|
13842
13873
|
),
|
|
13843
|
-
/* @__PURE__ */ (0,
|
|
13844
|
-
/* @__PURE__ */ (0,
|
|
13845
|
-
role && /* @__PURE__ */ (0,
|
|
13874
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { children: [
|
|
13875
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "font-semibold", children: author }),
|
|
13876
|
+
role && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "block text-sm opacity-80", children: role })
|
|
13846
13877
|
] })
|
|
13847
13878
|
] })
|
|
13848
13879
|
] });
|
|
@@ -13851,19 +13882,19 @@ function CtaSlotBlock(_props) {
|
|
|
13851
13882
|
return null;
|
|
13852
13883
|
}
|
|
13853
13884
|
function FeatureListBlock({ block }) {
|
|
13854
|
-
return /* @__PURE__ */ (0,
|
|
13885
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.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_runtime11.jsx)("li", { children: item.text }, i)) });
|
|
13855
13886
|
}
|
|
13856
13887
|
function GalleryBlock({ block }) {
|
|
13857
13888
|
const { images } = block.data;
|
|
13858
|
-
return /* @__PURE__ */ (0,
|
|
13889
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
13859
13890
|
"div",
|
|
13860
13891
|
{
|
|
13861
|
-
className: (0,
|
|
13892
|
+
className: (0, import_utils12.cn)(
|
|
13862
13893
|
"grid gap-4",
|
|
13863
13894
|
images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
|
|
13864
13895
|
),
|
|
13865
|
-
children: images.map((img, i) => /* @__PURE__ */ (0,
|
|
13866
|
-
/* @__PURE__ */ (0,
|
|
13896
|
+
children: images.map((img, i) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("figure", { className: "space-y-1", children: [
|
|
13897
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
13867
13898
|
"img",
|
|
13868
13899
|
{
|
|
13869
13900
|
src: img.url,
|
|
@@ -13872,7 +13903,7 @@ function GalleryBlock({ block }) {
|
|
|
13872
13903
|
className: "h-full w-full object-cover"
|
|
13873
13904
|
}
|
|
13874
13905
|
) }),
|
|
13875
|
-
img.caption && /* @__PURE__ */ (0,
|
|
13906
|
+
img.caption && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
|
|
13876
13907
|
] }, `${img.url}-${i}`))
|
|
13877
13908
|
}
|
|
13878
13909
|
);
|
|
@@ -13882,13 +13913,13 @@ function EmbedCard({
|
|
|
13882
13913
|
headingLevel,
|
|
13883
13914
|
embedHref
|
|
13884
13915
|
}) {
|
|
13885
|
-
return /* @__PURE__ */ (0,
|
|
13916
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
13886
13917
|
"a",
|
|
13887
13918
|
{
|
|
13888
13919
|
href: embedHref(resolved),
|
|
13889
13920
|
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",
|
|
13890
13921
|
children: [
|
|
13891
|
-
resolved.coverImageUrl && /* @__PURE__ */ (0,
|
|
13922
|
+
resolved.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
13892
13923
|
"img",
|
|
13893
13924
|
{
|
|
13894
13925
|
src: resolved.coverImageUrl,
|
|
@@ -13897,24 +13928,24 @@ function EmbedCard({
|
|
|
13897
13928
|
className: "h-full w-full object-cover"
|
|
13898
13929
|
}
|
|
13899
13930
|
) }),
|
|
13900
|
-
/* @__PURE__ */ (0,
|
|
13901
|
-
/* @__PURE__ */ (0,
|
|
13902
|
-
resolved.role && /* @__PURE__ */ (0,
|
|
13903
|
-
resolved.excerpt && /* @__PURE__ */ (0,
|
|
13931
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "space-y-1 p-4", children: [
|
|
13932
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
|
|
13933
|
+
resolved.role && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
|
|
13934
|
+
resolved.excerpt && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "text-muted-foreground", children: resolved.excerpt })
|
|
13904
13935
|
] })
|
|
13905
13936
|
]
|
|
13906
13937
|
}
|
|
13907
13938
|
);
|
|
13908
13939
|
}
|
|
13909
13940
|
function PageEmbedBlock({ block, headingLevel, embedHref }) {
|
|
13910
|
-
return /* @__PURE__ */ (0,
|
|
13941
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
13911
13942
|
}
|
|
13912
13943
|
function ProfileEmbedBlock({
|
|
13913
13944
|
block,
|
|
13914
13945
|
headingLevel,
|
|
13915
13946
|
embedHref
|
|
13916
13947
|
}) {
|
|
13917
|
-
return /* @__PURE__ */ (0,
|
|
13948
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
13918
13949
|
}
|
|
13919
13950
|
var DEFAULT_RENDERERS = {
|
|
13920
13951
|
hero: HeroBlock,
|
|
@@ -13971,14 +14002,14 @@ function toIdFragment(value) {
|
|
|
13971
14002
|
function SectionCta2({ cta }) {
|
|
13972
14003
|
if (!hasUsableCta(cta)) return null;
|
|
13973
14004
|
const variant = toButtonVariant(cta.variant);
|
|
13974
|
-
return /* @__PURE__ */ (0,
|
|
14005
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
13975
14006
|
"a",
|
|
13976
14007
|
{
|
|
13977
14008
|
href: cta.url,
|
|
13978
14009
|
"data-slot": "button",
|
|
13979
14010
|
"data-variant": variant,
|
|
13980
14011
|
"data-size": "default",
|
|
13981
|
-
className: (0,
|
|
14012
|
+
className: (0, import_utils12.cn)((0, import_button_variants2.buttonVariants)({ variant, size: "default" })),
|
|
13982
14013
|
...cta.isExternal ? { target: "_blank", rel: "noopener noreferrer" } : {},
|
|
13983
14014
|
children: cta.label
|
|
13984
14015
|
}
|
|
@@ -14004,17 +14035,17 @@ function PageBlocks({
|
|
|
14004
14035
|
const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
|
|
14005
14036
|
const background = block.backgroundColor;
|
|
14006
14037
|
return [
|
|
14007
|
-
/* @__PURE__ */ (0,
|
|
14038
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
14008
14039
|
"section",
|
|
14009
14040
|
{
|
|
14010
14041
|
"data-slot": "page-block",
|
|
14011
14042
|
"data-block-type": type,
|
|
14012
14043
|
"aria-labelledby": headingId,
|
|
14013
14044
|
style: surfaceStyle(background),
|
|
14014
|
-
className: (0,
|
|
14045
|
+
className: (0, import_utils12.cn)("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
|
|
14015
14046
|
children: [
|
|
14016
|
-
block.heading && /* @__PURE__ */ (0,
|
|
14017
|
-
/* @__PURE__ */ (0,
|
|
14047
|
+
block.heading && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { id: headingId, children: block.heading }) }),
|
|
14048
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
14018
14049
|
Renderer,
|
|
14019
14050
|
{
|
|
14020
14051
|
block,
|
|
@@ -14022,7 +14053,7 @@ function PageBlocks({
|
|
|
14022
14053
|
embedHref
|
|
14023
14054
|
}
|
|
14024
14055
|
),
|
|
14025
|
-
/* @__PURE__ */ (0,
|
|
14056
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SectionCta2, { cta: block.cta })
|
|
14026
14057
|
]
|
|
14027
14058
|
},
|
|
14028
14059
|
block.id
|
|
@@ -14030,12 +14061,12 @@ function PageBlocks({
|
|
|
14030
14061
|
];
|
|
14031
14062
|
});
|
|
14032
14063
|
if (sections.length === 0) return null;
|
|
14033
|
-
return /* @__PURE__ */ (0,
|
|
14064
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: (0, import_utils12.cn)("space-y-12", className), "data-slot": "page-blocks", children: sections });
|
|
14034
14065
|
}
|
|
14035
14066
|
|
|
14036
14067
|
// src/components/shop-filters.tsx
|
|
14037
|
-
var
|
|
14038
|
-
var
|
|
14068
|
+
var import_utils13 = require("@reblu/site-ui/utils");
|
|
14069
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
14039
14070
|
var DEFAULT_SHOP_PRICE_BANDS = [
|
|
14040
14071
|
{ max: 2500 },
|
|
14041
14072
|
{ min: 2500, max: 5e3 },
|
|
@@ -14079,7 +14110,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
|
|
|
14079
14110
|
return "";
|
|
14080
14111
|
}
|
|
14081
14112
|
function OptionLink({ href, active, label, onActivate }) {
|
|
14082
|
-
return /* @__PURE__ */ (0,
|
|
14113
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
14083
14114
|
"a",
|
|
14084
14115
|
{
|
|
14085
14116
|
href,
|
|
@@ -14088,7 +14119,7 @@ function OptionLink({ href, active, label, onActivate }) {
|
|
|
14088
14119
|
event.preventDefault();
|
|
14089
14120
|
onActivate();
|
|
14090
14121
|
} : void 0,
|
|
14091
|
-
className: (0,
|
|
14122
|
+
className: (0, import_utils13.cn)(
|
|
14092
14123
|
"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",
|
|
14093
14124
|
active ? "border-transparent bg-primary text-primary-foreground" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground"
|
|
14094
14125
|
),
|
|
@@ -14097,9 +14128,9 @@ function OptionLink({ href, active, label, onActivate }) {
|
|
|
14097
14128
|
);
|
|
14098
14129
|
}
|
|
14099
14130
|
function FilterFieldset({ legend, children: children2 }) {
|
|
14100
|
-
return /* @__PURE__ */ (0,
|
|
14101
|
-
/* @__PURE__ */ (0,
|
|
14102
|
-
/* @__PURE__ */ (0,
|
|
14131
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("fieldset", { className: "space-y-2", children: [
|
|
14132
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("legend", { className: "text-sm font-medium text-foreground", children: legend }),
|
|
14133
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "flex flex-wrap gap-2", children: children2 })
|
|
14103
14134
|
] });
|
|
14104
14135
|
}
|
|
14105
14136
|
function ShopFilters({
|
|
@@ -14122,11 +14153,11 @@ function ShopFilters({
|
|
|
14122
14153
|
if (!shouldRenderShopFilters(facets, active)) {
|
|
14123
14154
|
return null;
|
|
14124
14155
|
}
|
|
14125
|
-
return /* @__PURE__ */ (0,
|
|
14156
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: (0, import_utils13.cn)("space-y-6", className), "data-slot": "shop-filters", children: [
|
|
14126
14157
|
visibleTaxonomies.map((axis) => {
|
|
14127
14158
|
const activeSlug = active.taxonomy?.[axis.key];
|
|
14128
|
-
return /* @__PURE__ */ (0,
|
|
14129
|
-
/* @__PURE__ */ (0,
|
|
14159
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(FilterFieldset, { legend: axis.label, children: [
|
|
14160
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
14130
14161
|
OptionLink,
|
|
14131
14162
|
{
|
|
14132
14163
|
href: hrefs.taxonomy(axis.key, void 0),
|
|
@@ -14141,7 +14172,7 @@ function ShopFilters({
|
|
|
14141
14172
|
),
|
|
14142
14173
|
axis.terms.map((term) => {
|
|
14143
14174
|
const isActive = activeSlug === term.slug;
|
|
14144
|
-
return /* @__PURE__ */ (0,
|
|
14175
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
14145
14176
|
OptionLink,
|
|
14146
14177
|
{
|
|
14147
14178
|
href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
|
|
@@ -14161,9 +14192,9 @@ function ShopFilters({
|
|
|
14161
14192
|
}),
|
|
14162
14193
|
visibleAttributes.map((attr) => {
|
|
14163
14194
|
const activeValues = toValueArray(active.attr?.[attr.key]);
|
|
14164
|
-
return /* @__PURE__ */ (0,
|
|
14195
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
|
|
14165
14196
|
const isActive = activeValues.includes(opt.value);
|
|
14166
|
-
return /* @__PURE__ */ (0,
|
|
14197
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
14167
14198
|
OptionLink,
|
|
14168
14199
|
{
|
|
14169
14200
|
href: hrefs.attr(attr.key, opt.value),
|
|
@@ -14181,11 +14212,11 @@ function ShopFilters({
|
|
|
14181
14212
|
);
|
|
14182
14213
|
}) }, attr.key);
|
|
14183
14214
|
}),
|
|
14184
|
-
showPriceGroup && /* @__PURE__ */ (0,
|
|
14215
|
+
showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
|
|
14185
14216
|
const isActive = active.priceMin === band.min && active.priceMax === band.max;
|
|
14186
14217
|
const nextMin = isActive ? void 0 : band.min;
|
|
14187
14218
|
const nextMax = isActive ? void 0 : band.max;
|
|
14188
|
-
return /* @__PURE__ */ (0,
|
|
14219
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
14189
14220
|
OptionLink,
|
|
14190
14221
|
{
|
|
14191
14222
|
href: hrefs.price(nextMin, nextMax),
|
|
@@ -14196,7 +14227,7 @@ function ShopFilters({
|
|
|
14196
14227
|
i
|
|
14197
14228
|
);
|
|
14198
14229
|
}) }),
|
|
14199
|
-
hasOnSale && /* @__PURE__ */ (0,
|
|
14230
|
+
hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
14200
14231
|
OptionLink,
|
|
14201
14232
|
{
|
|
14202
14233
|
href: hrefs.onSale(!active.onSale),
|
|
@@ -14205,7 +14236,7 @@ function ShopFilters({
|
|
|
14205
14236
|
onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
|
|
14206
14237
|
}
|
|
14207
14238
|
),
|
|
14208
|
-
/* @__PURE__ */ (0,
|
|
14239
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
14209
14240
|
"a",
|
|
14210
14241
|
{
|
|
14211
14242
|
href: hrefs.clearAll(),
|
|
@@ -14221,8 +14252,8 @@ function ShopFilters({
|
|
|
14221
14252
|
}
|
|
14222
14253
|
|
|
14223
14254
|
// src/components/cart-line-list.tsx
|
|
14224
|
-
var
|
|
14225
|
-
var
|
|
14255
|
+
var import_utils14 = require("@reblu/site-ui/utils");
|
|
14256
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
14226
14257
|
var DEFAULT_LABELS2 = {
|
|
14227
14258
|
quantityLabel: "Cantidad",
|
|
14228
14259
|
decrease: "Reducir cantidad",
|
|
@@ -14247,9 +14278,9 @@ function CartLineList({
|
|
|
14247
14278
|
}) {
|
|
14248
14279
|
const t = { ...DEFAULT_LABELS2, ...labels };
|
|
14249
14280
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
14250
|
-
return /* @__PURE__ */ (0,
|
|
14251
|
-
/* @__PURE__ */ (0,
|
|
14252
|
-
noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0,
|
|
14281
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: (0, import_utils14.cn)("space-y-4", className), "data-slot": "cart-line-list", children: [
|
|
14282
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
|
|
14283
|
+
noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
14253
14284
|
"div",
|
|
14254
14285
|
{
|
|
14255
14286
|
role: "status",
|
|
@@ -14258,32 +14289,32 @@ function CartLineList({
|
|
|
14258
14289
|
children: noticeContent
|
|
14259
14290
|
}
|
|
14260
14291
|
),
|
|
14261
|
-
/* @__PURE__ */ (0,
|
|
14292
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
|
|
14262
14293
|
const maxQty = item.maxStock ?? Infinity;
|
|
14263
14294
|
const atMax = item.quantity >= maxQty;
|
|
14264
14295
|
const atMin = item.quantity <= 1;
|
|
14265
|
-
return /* @__PURE__ */ (0,
|
|
14296
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
14266
14297
|
"li",
|
|
14267
14298
|
{
|
|
14268
14299
|
className: "flex gap-4 rounded-xl border border-border bg-card p-4",
|
|
14269
14300
|
children: [
|
|
14270
|
-
/* @__PURE__ */ (0,
|
|
14271
|
-
/* @__PURE__ */ (0,
|
|
14272
|
-
/* @__PURE__ */ (0,
|
|
14273
|
-
item.variantName && /* @__PURE__ */ (0,
|
|
14274
|
-
/* @__PURE__ */ (0,
|
|
14301
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
|
|
14302
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
14303
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
|
|
14304
|
+
item.variantName && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
|
|
14305
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("p", { className: "mt-1 text-sm text-muted-foreground", children: [
|
|
14275
14306
|
formatPrice(item.unitPrice, currencyCode, locale),
|
|
14276
14307
|
" ",
|
|
14277
14308
|
t.unitPriceSuffix
|
|
14278
14309
|
] }),
|
|
14279
|
-
/* @__PURE__ */ (0,
|
|
14310
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
14280
14311
|
"div",
|
|
14281
14312
|
{
|
|
14282
14313
|
role: "group",
|
|
14283
14314
|
"aria-label": t.quantityLabel,
|
|
14284
14315
|
className: "mt-3 flex items-center gap-3",
|
|
14285
14316
|
children: [
|
|
14286
|
-
/* @__PURE__ */ (0,
|
|
14317
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
14287
14318
|
"button",
|
|
14288
14319
|
{
|
|
14289
14320
|
type: "button",
|
|
@@ -14294,8 +14325,8 @@ function CartLineList({
|
|
|
14294
14325
|
children: "\u2212"
|
|
14295
14326
|
}
|
|
14296
14327
|
),
|
|
14297
|
-
/* @__PURE__ */ (0,
|
|
14298
|
-
/* @__PURE__ */ (0,
|
|
14328
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
|
|
14329
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
14299
14330
|
"button",
|
|
14300
14331
|
{
|
|
14301
14332
|
type: "button",
|
|
@@ -14306,7 +14337,7 @@ function CartLineList({
|
|
|
14306
14337
|
children: "+"
|
|
14307
14338
|
}
|
|
14308
14339
|
),
|
|
14309
|
-
onRemove && /* @__PURE__ */ (0,
|
|
14340
|
+
onRemove && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
14310
14341
|
"button",
|
|
14311
14342
|
{
|
|
14312
14343
|
type: "button",
|
|
@@ -14320,7 +14351,7 @@ function CartLineList({
|
|
|
14320
14351
|
}
|
|
14321
14352
|
)
|
|
14322
14353
|
] }),
|
|
14323
|
-
/* @__PURE__ */ (0,
|
|
14354
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
|
|
14324
14355
|
]
|
|
14325
14356
|
},
|
|
14326
14357
|
lineKey(item.productId, item.variantId)
|
|
@@ -14330,8 +14361,8 @@ function CartLineList({
|
|
|
14330
14361
|
}
|
|
14331
14362
|
|
|
14332
14363
|
// src/components/cart-summary.tsx
|
|
14333
|
-
var
|
|
14334
|
-
var
|
|
14364
|
+
var import_utils15 = require("@reblu/site-ui/utils");
|
|
14365
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
14335
14366
|
var DEFAULT_LABELS3 = {
|
|
14336
14367
|
subtotal: "Subtotal",
|
|
14337
14368
|
discountPrefix: "Descuento",
|
|
@@ -14358,40 +14389,40 @@ function CartSummary({
|
|
|
14358
14389
|
const hasDiscount = Boolean(discount && discount > 0);
|
|
14359
14390
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
14360
14391
|
const hasNotice = noticeContent != null && noticeContent !== false;
|
|
14361
|
-
const breakdown = /* @__PURE__ */ (0,
|
|
14392
|
+
const breakdown = /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
14362
14393
|
"dl",
|
|
14363
14394
|
{
|
|
14364
|
-
className: (0,
|
|
14395
|
+
className: (0, import_utils15.cn)("space-y-2 text-sm", !hasNotice && className),
|
|
14365
14396
|
"data-slot": "cart-summary",
|
|
14366
14397
|
children: [
|
|
14367
|
-
/* @__PURE__ */ (0,
|
|
14368
|
-
/* @__PURE__ */ (0,
|
|
14369
|
-
/* @__PURE__ */ (0,
|
|
14398
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
14399
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("dt", { children: t.subtotal }),
|
|
14400
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("dd", { children: formatPrice(subtotal, currencyCode, locale) })
|
|
14370
14401
|
] }),
|
|
14371
|
-
hasDiscount && /* @__PURE__ */ (0,
|
|
14372
|
-
/* @__PURE__ */ (0,
|
|
14402
|
+
hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
|
|
14403
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("dt", { children: [
|
|
14373
14404
|
t.discountPrefix,
|
|
14374
14405
|
discountCode ? ` (${discountCode})` : ""
|
|
14375
14406
|
] }),
|
|
14376
|
-
/* @__PURE__ */ (0,
|
|
14407
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("dd", { children: [
|
|
14377
14408
|
"-",
|
|
14378
14409
|
formatPrice(discount, currencyCode, locale)
|
|
14379
14410
|
] })
|
|
14380
14411
|
] }),
|
|
14381
|
-
shippingEnabled && /* @__PURE__ */ (0,
|
|
14382
|
-
/* @__PURE__ */ (0,
|
|
14383
|
-
/* @__PURE__ */ (0,
|
|
14412
|
+
shippingEnabled && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
14413
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("dt", { children: t.shipping }),
|
|
14414
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
|
|
14384
14415
|
] }),
|
|
14385
|
-
/* @__PURE__ */ (0,
|
|
14386
|
-
/* @__PURE__ */ (0,
|
|
14387
|
-
/* @__PURE__ */ (0,
|
|
14416
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
|
|
14417
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("dt", { children: t.total }),
|
|
14418
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("dd", { children: formatPrice(total, currencyCode, locale) })
|
|
14388
14419
|
] })
|
|
14389
14420
|
]
|
|
14390
14421
|
}
|
|
14391
14422
|
);
|
|
14392
14423
|
if (!hasNotice) return breakdown;
|
|
14393
|
-
return /* @__PURE__ */ (0,
|
|
14394
|
-
/* @__PURE__ */ (0,
|
|
14424
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: (0, import_utils15.cn)("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
|
|
14425
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
14395
14426
|
"div",
|
|
14396
14427
|
{
|
|
14397
14428
|
role: "status",
|
|
@@ -14405,8 +14436,8 @@ function CartSummary({
|
|
|
14405
14436
|
}
|
|
14406
14437
|
|
|
14407
14438
|
// src/components/added-to-cart-toast.tsx
|
|
14408
|
-
var
|
|
14409
|
-
var
|
|
14439
|
+
var import_utils16 = require("@reblu/site-ui/utils");
|
|
14440
|
+
var import_jsx_runtime15 = (
|
|
14410
14441
|
// eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
|
|
14411
14442
|
require("react/jsx-runtime")
|
|
14412
14443
|
);
|
|
@@ -14429,32 +14460,32 @@ function AddedToCartToast({
|
|
|
14429
14460
|
const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
|
|
14430
14461
|
const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
|
|
14431
14462
|
const variant = status === "success" ? "success" : "error";
|
|
14432
|
-
return /* @__PURE__ */ (0,
|
|
14463
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
|
|
14433
14464
|
"div",
|
|
14434
14465
|
{
|
|
14435
14466
|
"data-slot": "added-to-cart-toast",
|
|
14436
14467
|
"data-variant": variant,
|
|
14437
|
-
className: (0,
|
|
14468
|
+
className: (0, import_utils16.cn)(
|
|
14438
14469
|
"flex items-center gap-3 rounded-xl border border-border bg-card p-3 text-sm shadow-lg",
|
|
14439
14470
|
variant === "success" && "border-green-600/30 dark:border-green-400/30",
|
|
14440
14471
|
variant === "error" && "border-destructive/30",
|
|
14441
14472
|
className
|
|
14442
14473
|
),
|
|
14443
14474
|
children: [
|
|
14444
|
-
hasThumbnail && /* @__PURE__ */ (0,
|
|
14445
|
-
/* @__PURE__ */ (0,
|
|
14446
|
-
/* @__PURE__ */ (0,
|
|
14447
|
-
/* @__PURE__ */ (0,
|
|
14475
|
+
hasThumbnail && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
|
|
14476
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
14477
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "truncate font-semibold text-foreground", children: productName }),
|
|
14478
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
|
|
14448
14479
|
] }),
|
|
14449
|
-
/* @__PURE__ */ (0,
|
|
14480
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
|
|
14450
14481
|
]
|
|
14451
14482
|
}
|
|
14452
14483
|
);
|
|
14453
14484
|
}
|
|
14454
14485
|
|
|
14455
14486
|
// src/components/checkout-login-prompt.tsx
|
|
14456
|
-
var
|
|
14457
|
-
var
|
|
14487
|
+
var import_utils17 = require("@reblu/site-ui/utils");
|
|
14488
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
14458
14489
|
var DEFAULT_LABELS5 = {
|
|
14459
14490
|
title: "Identificaci\xF3n",
|
|
14460
14491
|
description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
|
|
@@ -14481,26 +14512,26 @@ function CheckoutLoginPrompt({
|
|
|
14481
14512
|
if (!open) return null;
|
|
14482
14513
|
const t = { ...DEFAULT_LABELS5, ...labels };
|
|
14483
14514
|
const isValidEmail = EMAIL_PATTERN.test(email.trim());
|
|
14484
|
-
return /* @__PURE__ */ (0,
|
|
14485
|
-
/* @__PURE__ */ (0,
|
|
14486
|
-
/* @__PURE__ */ (0,
|
|
14515
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
|
|
14516
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
|
|
14517
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
14487
14518
|
"div",
|
|
14488
14519
|
{
|
|
14489
14520
|
role: "dialog",
|
|
14490
14521
|
"aria-modal": "true",
|
|
14491
14522
|
"aria-labelledby": "checkout-login-prompt-title",
|
|
14492
14523
|
"data-slot": "checkout-login-prompt",
|
|
14493
|
-
className: (0,
|
|
14524
|
+
className: (0, import_utils17.cn)(
|
|
14494
14525
|
"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",
|
|
14495
14526
|
className
|
|
14496
14527
|
),
|
|
14497
14528
|
children: [
|
|
14498
|
-
/* @__PURE__ */ (0,
|
|
14499
|
-
/* @__PURE__ */ (0,
|
|
14500
|
-
/* @__PURE__ */ (0,
|
|
14501
|
-
/* @__PURE__ */ (0,
|
|
14529
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
|
|
14530
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { children: [
|
|
14531
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
|
|
14532
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
|
|
14502
14533
|
] }),
|
|
14503
|
-
/* @__PURE__ */ (0,
|
|
14534
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14504
14535
|
"button",
|
|
14505
14536
|
{
|
|
14506
14537
|
type: "button",
|
|
@@ -14511,9 +14542,9 @@ function CheckoutLoginPrompt({
|
|
|
14511
14542
|
}
|
|
14512
14543
|
)
|
|
14513
14544
|
] }),
|
|
14514
|
-
/* @__PURE__ */ (0,
|
|
14515
|
-
/* @__PURE__ */ (0,
|
|
14516
|
-
/* @__PURE__ */ (0,
|
|
14545
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "space-y-2", children: [
|
|
14546
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
14547
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14517
14548
|
"input",
|
|
14518
14549
|
{
|
|
14519
14550
|
id: "checkout-login-prompt-email",
|
|
@@ -14522,29 +14553,29 @@ function CheckoutLoginPrompt({
|
|
|
14522
14553
|
value: email,
|
|
14523
14554
|
onChange: (e) => onEmailChange(e.target.value),
|
|
14524
14555
|
placeholder: t.emailPlaceholder,
|
|
14525
|
-
className: (0,
|
|
14556
|
+
className: (0, import_utils17.cn)(
|
|
14526
14557
|
"w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
|
|
14527
14558
|
error ? "border-destructive" : "border-border focus:border-primary"
|
|
14528
14559
|
)
|
|
14529
14560
|
}
|
|
14530
14561
|
),
|
|
14531
|
-
error && /* @__PURE__ */ (0,
|
|
14562
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { className: "text-xs text-destructive", children: error })
|
|
14532
14563
|
] }),
|
|
14533
|
-
/* @__PURE__ */ (0,
|
|
14534
|
-
/* @__PURE__ */ (0,
|
|
14564
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "space-y-2", children: [
|
|
14565
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14535
14566
|
"button",
|
|
14536
14567
|
{
|
|
14537
14568
|
type: "button",
|
|
14538
14569
|
onClick: onSubmitEmail,
|
|
14539
14570
|
disabled: checking || !isValidEmail,
|
|
14540
|
-
className: (0,
|
|
14571
|
+
className: (0, import_utils17.cn)(
|
|
14541
14572
|
"flex w-full items-center justify-center gap-2 rounded-xl px-4 py-2.5 text-sm font-semibold transition-all",
|
|
14542
14573
|
checking || !isValidEmail ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
|
|
14543
14574
|
),
|
|
14544
14575
|
children: checking ? t.checking : t.continueWithEmail
|
|
14545
14576
|
}
|
|
14546
14577
|
),
|
|
14547
|
-
/* @__PURE__ */ (0,
|
|
14578
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14548
14579
|
"button",
|
|
14549
14580
|
{
|
|
14550
14581
|
type: "button",
|
|
@@ -14561,9 +14592,9 @@ function CheckoutLoginPrompt({
|
|
|
14561
14592
|
}
|
|
14562
14593
|
|
|
14563
14594
|
// src/components/checkout-form.tsx
|
|
14564
|
-
var
|
|
14595
|
+
var import_utils18 = require("@reblu/site-ui/utils");
|
|
14565
14596
|
var import_phone_input = require("@reblu/site-ui/phone-input");
|
|
14566
|
-
var
|
|
14597
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
14567
14598
|
var DEFAULT_LABELS6 = {
|
|
14568
14599
|
contactTitle: "Datos de contacto",
|
|
14569
14600
|
nameLabel: "Nombre completo",
|
|
@@ -14617,22 +14648,22 @@ function CheckoutForm({
|
|
|
14617
14648
|
event.preventDefault();
|
|
14618
14649
|
if (discountCode.trim() && !discountApplying) onApplyDiscount();
|
|
14619
14650
|
}
|
|
14620
|
-
return /* @__PURE__ */ (0,
|
|
14651
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
|
|
14621
14652
|
loginPrompt,
|
|
14622
|
-
/* @__PURE__ */ (0,
|
|
14653
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
14623
14654
|
"form",
|
|
14624
14655
|
{
|
|
14625
14656
|
"data-testid": "checkout-form",
|
|
14626
14657
|
onSubmit,
|
|
14627
|
-
className: (0,
|
|
14658
|
+
className: (0, import_utils18.cn)("space-y-8", className),
|
|
14628
14659
|
"data-slot": "checkout-form",
|
|
14629
14660
|
children: [
|
|
14630
|
-
/* @__PURE__ */ (0,
|
|
14631
|
-
/* @__PURE__ */ (0,
|
|
14632
|
-
/* @__PURE__ */ (0,
|
|
14633
|
-
/* @__PURE__ */ (0,
|
|
14634
|
-
/* @__PURE__ */ (0,
|
|
14635
|
-
/* @__PURE__ */ (0,
|
|
14661
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("section", { className: "space-y-4", children: [
|
|
14662
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
|
|
14663
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
14664
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "space-y-1", children: [
|
|
14665
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
|
|
14666
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14636
14667
|
"input",
|
|
14637
14668
|
{
|
|
14638
14669
|
id: "checkout-form-name",
|
|
@@ -14641,17 +14672,17 @@ function CheckoutForm({
|
|
|
14641
14672
|
value: contact.name,
|
|
14642
14673
|
onChange: (e) => patchContact({ name: e.target.value }),
|
|
14643
14674
|
placeholder: t.namePlaceholder,
|
|
14644
|
-
className: (0,
|
|
14675
|
+
className: (0, import_utils18.cn)(
|
|
14645
14676
|
"w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
|
|
14646
14677
|
contactErrors?.name ? "border-destructive" : "border-border focus:border-primary"
|
|
14647
14678
|
)
|
|
14648
14679
|
}
|
|
14649
14680
|
),
|
|
14650
|
-
contactErrors?.name && /* @__PURE__ */ (0,
|
|
14681
|
+
contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
|
|
14651
14682
|
] }),
|
|
14652
|
-
/* @__PURE__ */ (0,
|
|
14653
|
-
/* @__PURE__ */ (0,
|
|
14654
|
-
/* @__PURE__ */ (0,
|
|
14683
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "space-y-1", children: [
|
|
14684
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
14685
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14655
14686
|
"input",
|
|
14656
14687
|
{
|
|
14657
14688
|
id: "checkout-form-email",
|
|
@@ -14660,15 +14691,15 @@ function CheckoutForm({
|
|
|
14660
14691
|
value: contact.email,
|
|
14661
14692
|
onChange: (e) => patchContact({ email: e.target.value }),
|
|
14662
14693
|
placeholder: t.emailPlaceholder,
|
|
14663
|
-
className: (0,
|
|
14694
|
+
className: (0, import_utils18.cn)(
|
|
14664
14695
|
"w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
|
|
14665
14696
|
contactErrors?.email ? "border-destructive" : "border-border focus:border-primary"
|
|
14666
14697
|
)
|
|
14667
14698
|
}
|
|
14668
14699
|
),
|
|
14669
|
-
contactErrors?.email && /* @__PURE__ */ (0,
|
|
14700
|
+
contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
|
|
14670
14701
|
] }),
|
|
14671
|
-
/* @__PURE__ */ (0,
|
|
14702
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14672
14703
|
import_phone_input.PhoneInput,
|
|
14673
14704
|
{
|
|
14674
14705
|
id: "checkout-form-phone",
|
|
@@ -14682,15 +14713,15 @@ function CheckoutForm({
|
|
|
14682
14713
|
] })
|
|
14683
14714
|
] }),
|
|
14684
14715
|
children2,
|
|
14685
|
-
generalError ? /* @__PURE__ */ (0,
|
|
14686
|
-
/* @__PURE__ */ (0,
|
|
14687
|
-
/* @__PURE__ */ (0,
|
|
14688
|
-
appliedDiscount ? /* @__PURE__ */ (0,
|
|
14689
|
-
/* @__PURE__ */ (0,
|
|
14690
|
-
/* @__PURE__ */ (0,
|
|
14691
|
-
/* @__PURE__ */ (0,
|
|
14716
|
+
generalError ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
|
|
14717
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("section", { className: "space-y-3", children: [
|
|
14718
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
|
|
14719
|
+
appliedDiscount ? /* @__PURE__ */ (0, import_jsx_runtime17.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: [
|
|
14720
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
|
|
14721
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "font-semibold", children: appliedDiscount.code }),
|
|
14722
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
|
|
14692
14723
|
] }),
|
|
14693
|
-
/* @__PURE__ */ (0,
|
|
14724
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14694
14725
|
"button",
|
|
14695
14726
|
{
|
|
14696
14727
|
type: "button",
|
|
@@ -14700,9 +14731,9 @@ function CheckoutForm({
|
|
|
14700
14731
|
children: t.removeDiscount
|
|
14701
14732
|
}
|
|
14702
14733
|
)
|
|
14703
|
-
] }) : /* @__PURE__ */ (0,
|
|
14704
|
-
/* @__PURE__ */ (0,
|
|
14705
|
-
/* @__PURE__ */ (0,
|
|
14734
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex gap-2", children: [
|
|
14735
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
|
|
14736
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14706
14737
|
"input",
|
|
14707
14738
|
{
|
|
14708
14739
|
id: "checkout-form-discount-code",
|
|
@@ -14714,7 +14745,7 @@ function CheckoutForm({
|
|
|
14714
14745
|
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"
|
|
14715
14746
|
}
|
|
14716
14747
|
),
|
|
14717
|
-
/* @__PURE__ */ (0,
|
|
14748
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14718
14749
|
"button",
|
|
14719
14750
|
{
|
|
14720
14751
|
type: "button",
|
|
@@ -14725,14 +14756,14 @@ function CheckoutForm({
|
|
|
14725
14756
|
}
|
|
14726
14757
|
)
|
|
14727
14758
|
] }),
|
|
14728
|
-
discountError && /* @__PURE__ */ (0,
|
|
14759
|
+
discountError && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-xs text-destructive", children: discountError })
|
|
14729
14760
|
] }),
|
|
14730
|
-
/* @__PURE__ */ (0,
|
|
14761
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14731
14762
|
"button",
|
|
14732
14763
|
{
|
|
14733
14764
|
type: "submit",
|
|
14734
14765
|
disabled: submitting || submitDisabled,
|
|
14735
|
-
className: (0,
|
|
14766
|
+
className: (0, import_utils18.cn)(
|
|
14736
14767
|
"flex w-full items-center justify-center gap-2 rounded-xl px-4 py-3 font-semibold transition-all",
|
|
14737
14768
|
submitting || submitDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
|
|
14738
14769
|
),
|
|
@@ -14746,8 +14777,8 @@ function CheckoutForm({
|
|
|
14746
14777
|
}
|
|
14747
14778
|
|
|
14748
14779
|
// src/components/order-confirmation.tsx
|
|
14749
|
-
var
|
|
14750
|
-
var
|
|
14780
|
+
var import_utils19 = require("@reblu/site-ui/utils");
|
|
14781
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
14751
14782
|
var DEFAULT_LABELS7 = {
|
|
14752
14783
|
pollingTitle: "Confirmando tu pedido\u2026",
|
|
14753
14784
|
pollingDescription: "Estamos procesando el pago, un momento\u2026",
|
|
@@ -14809,48 +14840,48 @@ function OrderConfirmation({
|
|
|
14809
14840
|
const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
|
|
14810
14841
|
const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
|
|
14811
14842
|
const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
|
|
14812
|
-
return /* @__PURE__ */ (0,
|
|
14813
|
-
/* @__PURE__ */ (0,
|
|
14814
|
-
/* @__PURE__ */ (0,
|
|
14815
|
-
showFullOrderSummary && order && /* @__PURE__ */ (0,
|
|
14816
|
-
/* @__PURE__ */ (0,
|
|
14817
|
-
/* @__PURE__ */ (0,
|
|
14818
|
-
/* @__PURE__ */ (0,
|
|
14843
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: (0, import_utils19.cn)("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
|
|
14844
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("h1", { className: "text-3xl font-bold", children: title }),
|
|
14845
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "text-lg text-muted-foreground", children: description }),
|
|
14846
|
+
showFullOrderSummary && order && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "space-y-6", children: [
|
|
14847
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
14848
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
|
|
14849
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
14819
14850
|
] }),
|
|
14820
|
-
/* @__PURE__ */ (0,
|
|
14821
|
-
order.items.map((item, idx) => /* @__PURE__ */ (0,
|
|
14851
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
|
|
14852
|
+
order.items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
14822
14853
|
"div",
|
|
14823
14854
|
{
|
|
14824
14855
|
className: "flex justify-between gap-4 text-sm",
|
|
14825
14856
|
children: [
|
|
14826
|
-
/* @__PURE__ */ (0,
|
|
14857
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
|
|
14827
14858
|
item.product.name,
|
|
14828
14859
|
item.variant ? ` (${item.variant.name})` : "",
|
|
14829
14860
|
" x",
|
|
14830
14861
|
item.quantity
|
|
14831
14862
|
] }),
|
|
14832
|
-
/* @__PURE__ */ (0,
|
|
14863
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
|
|
14833
14864
|
]
|
|
14834
14865
|
},
|
|
14835
14866
|
idx
|
|
14836
14867
|
)),
|
|
14837
|
-
/* @__PURE__ */ (0,
|
|
14838
|
-
/* @__PURE__ */ (0,
|
|
14839
|
-
/* @__PURE__ */ (0,
|
|
14868
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
|
|
14869
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { children: t.totalLabel }),
|
|
14870
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { children: formatPrice(order.total, currencyCode, locale) })
|
|
14840
14871
|
] }) })
|
|
14841
14872
|
] }),
|
|
14842
|
-
/* @__PURE__ */ (0,
|
|
14873
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
|
|
14843
14874
|
t.confirmationEmailPrefix,
|
|
14844
14875
|
" ",
|
|
14845
|
-
/* @__PURE__ */ (0,
|
|
14876
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
|
|
14846
14877
|
"."
|
|
14847
14878
|
] })
|
|
14848
14879
|
] }),
|
|
14849
|
-
showOrderReference && order && /* @__PURE__ */ (0,
|
|
14850
|
-
/* @__PURE__ */ (0,
|
|
14851
|
-
/* @__PURE__ */ (0,
|
|
14880
|
+
showOrderReference && order && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
14881
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
|
|
14882
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
14852
14883
|
] }),
|
|
14853
|
-
status === "failed" && cartHref && /* @__PURE__ */ (0,
|
|
14884
|
+
status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14854
14885
|
"a",
|
|
14855
14886
|
{
|
|
14856
14887
|
href: cartHref,
|
|
@@ -14858,7 +14889,7 @@ function OrderConfirmation({
|
|
|
14858
14889
|
children: t.backToCartLabel
|
|
14859
14890
|
}
|
|
14860
14891
|
),
|
|
14861
|
-
showRecheck && /* @__PURE__ */ (0,
|
|
14892
|
+
showRecheck && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14862
14893
|
"button",
|
|
14863
14894
|
{
|
|
14864
14895
|
type: "button",
|
|
@@ -14867,9 +14898,9 @@ function OrderConfirmation({
|
|
|
14867
14898
|
children: t.recheckLabel
|
|
14868
14899
|
}
|
|
14869
14900
|
),
|
|
14870
|
-
showSessionReference && /* @__PURE__ */ (0,
|
|
14871
|
-
/* @__PURE__ */ (0,
|
|
14872
|
-
/* @__PURE__ */ (0,
|
|
14901
|
+
showSessionReference && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
14902
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
|
|
14903
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
|
|
14873
14904
|
] })
|
|
14874
14905
|
] });
|
|
14875
14906
|
}
|
|
@@ -14889,6 +14920,7 @@ function OrderConfirmation({
|
|
|
14889
14920
|
MarkdownRenderer,
|
|
14890
14921
|
OrderConfirmation,
|
|
14891
14922
|
PageBlocks,
|
|
14923
|
+
PageCardGrid,
|
|
14892
14924
|
ParentPage,
|
|
14893
14925
|
ProductCard,
|
|
14894
14926
|
ProductTrustItems,
|