@reblu/site-blocks 0.19.0 → 0.21.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 +29 -0
- package/README.md +126 -2
- package/dist/client.cjs +372 -45
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +78 -2
- package/dist/client.d.ts +78 -2
- package/dist/client.js +369 -44
- package/dist/client.js.map +1 -1
- package/dist/index.cjs +440 -305
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +68 -4
- package/dist/index.d.ts +68 -4
- package/dist/index.js +438 -305
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -30,6 +30,7 @@ __export(src_exports, {
|
|
|
30
30
|
CourseDescription: () => CourseDescription,
|
|
31
31
|
DATA_REQUEST_TYPES: () => import_site_contracts.DATA_REQUEST_TYPES,
|
|
32
32
|
DEFAULT_INVOICE_COUNTRIES: () => DEFAULT_INVOICE_COUNTRIES,
|
|
33
|
+
DEFAULT_LESSON_PREVIEW_LABELS: () => DEFAULT_LESSON_PREVIEW_LABELS,
|
|
33
34
|
DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE: () => DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,
|
|
34
35
|
DEFAULT_SHOP_ERROR_MESSAGES: () => DEFAULT_SHOP_ERROR_MESSAGES,
|
|
35
36
|
DEFAULT_SHOP_PRICE_BANDS: () => DEFAULT_SHOP_PRICE_BANDS,
|
|
@@ -39,6 +40,7 @@ __export(src_exports, {
|
|
|
39
40
|
EMPTY_FULL_INVOICE_VALUE: () => EMPTY_FULL_INVOICE_VALUE,
|
|
40
41
|
FaqAccordion: () => FaqAccordion,
|
|
41
42
|
FullInvoiceFields: () => FullInvoiceFields,
|
|
43
|
+
LessonPreview: () => LessonPreview,
|
|
42
44
|
MarkdownRenderer: () => MarkdownRenderer,
|
|
43
45
|
OrderConfirmation: () => OrderConfirmation,
|
|
44
46
|
OrderInvoiceLink: () => OrderInvoiceLink,
|
|
@@ -13523,13 +13525,129 @@ function CourseDescription({
|
|
|
13523
13525
|
);
|
|
13524
13526
|
}
|
|
13525
13527
|
|
|
13528
|
+
// src/components/lesson-preview.tsx
|
|
13529
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
13530
|
+
var DEFAULT_LESSON_PREVIEW_LABELS = {
|
|
13531
|
+
badge: "Vista previa gratuita",
|
|
13532
|
+
player: "V\xEDdeo",
|
|
13533
|
+
duration: "Duraci\xF3n"
|
|
13534
|
+
};
|
|
13535
|
+
function isEmbeddable(url) {
|
|
13536
|
+
try {
|
|
13537
|
+
return new URL(url).protocol === "https:";
|
|
13538
|
+
} catch {
|
|
13539
|
+
return false;
|
|
13540
|
+
}
|
|
13541
|
+
}
|
|
13542
|
+
function clock(seconds) {
|
|
13543
|
+
const whole = Math.round(seconds);
|
|
13544
|
+
const h2 = Math.floor(whole / 3600);
|
|
13545
|
+
const m2 = Math.floor(whole % 3600 / 60);
|
|
13546
|
+
const s2 = whole % 60;
|
|
13547
|
+
const ss = String(s2).padStart(2, "0");
|
|
13548
|
+
return {
|
|
13549
|
+
text: h2 > 0 ? `${h2}:${String(m2).padStart(2, "0")}:${ss}` : `${m2}:${ss}`,
|
|
13550
|
+
iso: `PT${h2 > 0 ? `${h2}H` : ""}${m2}M${s2}S`
|
|
13551
|
+
};
|
|
13552
|
+
}
|
|
13553
|
+
function isVisiblyEmpty2(html5) {
|
|
13554
|
+
if (/<(img|iframe|hr)\b/i.test(html5)) return false;
|
|
13555
|
+
return html5.replace(/<[^>]*>/g, "").trim() === "";
|
|
13556
|
+
}
|
|
13557
|
+
function LessonPreview({
|
|
13558
|
+
lesson,
|
|
13559
|
+
labels: labelOverrides,
|
|
13560
|
+
headingLevel = 2,
|
|
13561
|
+
headingId = "lesson-preview-heading",
|
|
13562
|
+
headingClassName,
|
|
13563
|
+
contentClassName,
|
|
13564
|
+
className
|
|
13565
|
+
}) {
|
|
13566
|
+
const labels = { ...DEFAULT_LESSON_PREVIEW_LABELS, ...labelOverrides };
|
|
13567
|
+
const Tag = `h${headingLevel}`;
|
|
13568
|
+
const video = lesson.video && isEmbeddable(lesson.video.embedUrl) ? lesson.video : null;
|
|
13569
|
+
const html5 = markdownToSafeHtml(lesson.content);
|
|
13570
|
+
const hasBody = html5 !== null && html5 !== "" && !isVisiblyEmpty2(html5);
|
|
13571
|
+
const duration = typeof lesson.durationSeconds === "number" && lesson.durationSeconds > 0 ? clock(lesson.durationSeconds) : null;
|
|
13572
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
13573
|
+
"article",
|
|
13574
|
+
{
|
|
13575
|
+
"data-slot": "lesson-preview",
|
|
13576
|
+
"aria-labelledby": headingId,
|
|
13577
|
+
className: slotClassName("space-y-6", "", className),
|
|
13578
|
+
children: [
|
|
13579
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("header", { className: "space-y-2", children: [
|
|
13580
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
13581
|
+
"span",
|
|
13582
|
+
{
|
|
13583
|
+
"data-slot": "lesson-preview-badge",
|
|
13584
|
+
className: "inline-flex items-center rounded-full bg-primary/10 px-3 py-1 text-xs font-semibold text-primary",
|
|
13585
|
+
children: labels.badge
|
|
13586
|
+
}
|
|
13587
|
+
),
|
|
13588
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
13589
|
+
Tag,
|
|
13590
|
+
{
|
|
13591
|
+
id: headingId,
|
|
13592
|
+
className: slotClassName("", "text-2xl font-semibold leading-tight", headingClassName),
|
|
13593
|
+
children: lesson.title
|
|
13594
|
+
}
|
|
13595
|
+
),
|
|
13596
|
+
duration && /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
|
|
13597
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("span", { className: "sr-only", children: [
|
|
13598
|
+
labels.duration,
|
|
13599
|
+
": "
|
|
13600
|
+
] }),
|
|
13601
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
13602
|
+
"time",
|
|
13603
|
+
{
|
|
13604
|
+
"data-slot": "lesson-preview-duration",
|
|
13605
|
+
dateTime: duration.iso,
|
|
13606
|
+
className: "tabular-nums",
|
|
13607
|
+
children: duration.text
|
|
13608
|
+
}
|
|
13609
|
+
)
|
|
13610
|
+
] })
|
|
13611
|
+
] }),
|
|
13612
|
+
video && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
13613
|
+
"div",
|
|
13614
|
+
{
|
|
13615
|
+
"data-slot": "lesson-preview-player",
|
|
13616
|
+
className: "aspect-video w-full overflow-hidden rounded-xl border border-border bg-black",
|
|
13617
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
13618
|
+
"iframe",
|
|
13619
|
+
{
|
|
13620
|
+
src: video.embedUrl,
|
|
13621
|
+
title: `${labels.player}: ${lesson.title}`,
|
|
13622
|
+
allow: "accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture; fullscreen",
|
|
13623
|
+
allowFullScreen: true,
|
|
13624
|
+
loading: "lazy",
|
|
13625
|
+
referrerPolicy: "strict-origin-when-cross-origin",
|
|
13626
|
+
className: "size-full border-0"
|
|
13627
|
+
}
|
|
13628
|
+
)
|
|
13629
|
+
}
|
|
13630
|
+
),
|
|
13631
|
+
hasBody && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { "data-slot": "lesson-preview-content", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
13632
|
+
SafeHtml,
|
|
13633
|
+
{
|
|
13634
|
+
html: html5,
|
|
13635
|
+
headingOffset: headingLevel,
|
|
13636
|
+
className: slotClassName("", "text-muted-foreground", contentClassName)
|
|
13637
|
+
}
|
|
13638
|
+
) })
|
|
13639
|
+
]
|
|
13640
|
+
}
|
|
13641
|
+
);
|
|
13642
|
+
}
|
|
13643
|
+
|
|
13526
13644
|
// src/components/treatment.tsx
|
|
13527
13645
|
var import_utils3 = require("@reblu/site-ui/utils");
|
|
13528
13646
|
|
|
13529
13647
|
// src/components/_page-parts.tsx
|
|
13530
13648
|
var import_utils2 = require("@reblu/site-ui/utils");
|
|
13531
13649
|
var import_button_variants = require("@reblu/site-ui/button-variants");
|
|
13532
|
-
var
|
|
13650
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
13533
13651
|
var KNOWN_BUTTON_VARIANTS = /* @__PURE__ */ new Set([
|
|
13534
13652
|
"default",
|
|
13535
13653
|
"destructive",
|
|
@@ -13542,11 +13660,11 @@ function toButtonVariant(variant) {
|
|
|
13542
13660
|
return variant && KNOWN_BUTTON_VARIANTS.has(variant) ? variant : "default";
|
|
13543
13661
|
}
|
|
13544
13662
|
function PageHero({ page }) {
|
|
13545
|
-
return /* @__PURE__ */ (0,
|
|
13546
|
-
page.category && /* @__PURE__ */ (0,
|
|
13547
|
-
/* @__PURE__ */ (0,
|
|
13548
|
-
page.subtitle && /* @__PURE__ */ (0,
|
|
13549
|
-
page.coverImageUrl && /* @__PURE__ */ (0,
|
|
13663
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("header", { className: "space-y-4", children: [
|
|
13664
|
+
page.category && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "inline-flex items-center rounded-full bg-secondary px-3 py-1 text-sm font-medium text-secondary-foreground", children: page.category.name }),
|
|
13665
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h1", { className: "text-4xl font-bold tracking-tight", children: page.title }),
|
|
13666
|
+
page.subtitle && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "text-lg text-muted-foreground", children: page.subtitle }),
|
|
13667
|
+
page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
13550
13668
|
"img",
|
|
13551
13669
|
{
|
|
13552
13670
|
src: page.coverImageUrl,
|
|
@@ -13560,7 +13678,7 @@ function PageHero({ page }) {
|
|
|
13560
13678
|
function SectionCta({ section }) {
|
|
13561
13679
|
if (!section.ctaLabel || !section.ctaUrl) return null;
|
|
13562
13680
|
const variant = toButtonVariant(section.ctaVariant);
|
|
13563
|
-
return /* @__PURE__ */ (0,
|
|
13681
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
13564
13682
|
"a",
|
|
13565
13683
|
{
|
|
13566
13684
|
href: section.ctaUrl,
|
|
@@ -13575,46 +13693,46 @@ function SectionCta({ section }) {
|
|
|
13575
13693
|
}
|
|
13576
13694
|
function SectionImages({ section }) {
|
|
13577
13695
|
if (section.images.length === 0) return null;
|
|
13578
|
-
return /* @__PURE__ */ (0,
|
|
13579
|
-
/* @__PURE__ */ (0,
|
|
13580
|
-
img.caption && /* @__PURE__ */ (0,
|
|
13696
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: (0, import_utils2.cn)("grid gap-4", section.images.length > 1 ? "sm:grid-cols-2" : "grid-cols-1"), children: section.images.map((img) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("figure", { className: "space-y-1", children: [
|
|
13697
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("img", { src: img.url, alt: img.alt, loading: "lazy", className: "h-full w-full object-cover" }) }),
|
|
13698
|
+
img.caption && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
|
|
13581
13699
|
] }, `${img.url}-${img.order}`)) });
|
|
13582
13700
|
}
|
|
13583
13701
|
function PageSectionBlock({ section }) {
|
|
13584
13702
|
const imageFirst = section.layout === "IMAGE_TEXT";
|
|
13585
13703
|
const sideBySide = section.layout === "TEXT_IMAGE" || section.layout === "IMAGE_TEXT";
|
|
13586
13704
|
const hasImages = section.images.length > 0;
|
|
13587
|
-
const body3 = /* @__PURE__ */ (0,
|
|
13588
|
-
section.heading && /* @__PURE__ */ (0,
|
|
13589
|
-
/* @__PURE__ */ (0,
|
|
13590
|
-
/* @__PURE__ */ (0,
|
|
13705
|
+
const body3 = /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "space-y-4", children: [
|
|
13706
|
+
section.heading && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h2", { className: "text-2xl font-bold", children: section.heading }),
|
|
13707
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SafeHtml, { html: sanitizeHtml(section.contentHtml), headingOffset: 2 }),
|
|
13708
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SectionCta, { section })
|
|
13591
13709
|
] });
|
|
13592
13710
|
if (sideBySide && hasImages) {
|
|
13593
|
-
return /* @__PURE__ */ (0,
|
|
13594
|
-
/* @__PURE__ */ (0,
|
|
13711
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("section", { className: "grid items-center gap-8 md:grid-cols-2", children: imageFirst ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
|
|
13712
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SectionImages, { section }),
|
|
13595
13713
|
body3
|
|
13596
|
-
] }) : /* @__PURE__ */ (0,
|
|
13714
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
|
|
13597
13715
|
body3,
|
|
13598
|
-
/* @__PURE__ */ (0,
|
|
13716
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SectionImages, { section })
|
|
13599
13717
|
] }) });
|
|
13600
13718
|
}
|
|
13601
|
-
return /* @__PURE__ */ (0,
|
|
13719
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "space-y-4", children: [
|
|
13602
13720
|
body3,
|
|
13603
|
-
/* @__PURE__ */ (0,
|
|
13721
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(SectionImages, { section })
|
|
13604
13722
|
] });
|
|
13605
13723
|
}
|
|
13606
13724
|
function PageSectionList({ sections }) {
|
|
13607
13725
|
if (sections.length === 0) return null;
|
|
13608
13726
|
const ordered = sections.slice().sort((a, b2) => a.order - b2.order);
|
|
13609
|
-
return /* @__PURE__ */ (0,
|
|
13727
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "space-y-12", children: ordered.map((section) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(PageSectionBlock, { section }, section.id)) });
|
|
13610
13728
|
}
|
|
13611
13729
|
|
|
13612
13730
|
// src/components/treatment.tsx
|
|
13613
|
-
var
|
|
13731
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
13614
13732
|
function Treatment({ page, className }) {
|
|
13615
|
-
return /* @__PURE__ */ (0,
|
|
13616
|
-
/* @__PURE__ */ (0,
|
|
13617
|
-
/* @__PURE__ */ (0,
|
|
13733
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("article", { className: (0, import_utils3.cn)("space-y-12", className), "data-slot": "treatment", children: [
|
|
13734
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PageHero, { page }),
|
|
13735
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(PageSectionList, { sections: page.sections })
|
|
13618
13736
|
] });
|
|
13619
13737
|
}
|
|
13620
13738
|
|
|
@@ -13623,11 +13741,11 @@ var import_utils5 = require("@reblu/site-ui/utils");
|
|
|
13623
13741
|
|
|
13624
13742
|
// src/components/page-card-grid.tsx
|
|
13625
13743
|
var import_utils4 = require("@reblu/site-ui/utils");
|
|
13626
|
-
var
|
|
13744
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
13627
13745
|
var defaultPageHref = (page) => `/${page.slug}`;
|
|
13628
13746
|
var pageKey = (page) => `${page.category?.slug ?? ""}/${page.slug}`;
|
|
13629
13747
|
function PageCardGrid(props) {
|
|
13630
|
-
return /* @__PURE__ */ (0,
|
|
13748
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(PageCardGridSection, { ...props });
|
|
13631
13749
|
}
|
|
13632
13750
|
function PageCardGridSection({
|
|
13633
13751
|
pages,
|
|
@@ -13638,15 +13756,15 @@ function PageCardGridSection({
|
|
|
13638
13756
|
}) {
|
|
13639
13757
|
if (pages.length === 0) return null;
|
|
13640
13758
|
const showHeading = keepEmptyHeading ? heading !== void 0 : !!heading;
|
|
13641
|
-
return /* @__PURE__ */ (0,
|
|
13642
|
-
showHeading && /* @__PURE__ */ (0,
|
|
13643
|
-
/* @__PURE__ */ (0,
|
|
13759
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("section", { className: (0, import_utils4.cn)("space-y-6", className), children: [
|
|
13760
|
+
showHeading && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h2", { className: "text-2xl font-bold", children: heading }),
|
|
13761
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.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_runtime6.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
13644
13762
|
"a",
|
|
13645
13763
|
{
|
|
13646
13764
|
href: pageHref(page),
|
|
13647
13765
|
className: "group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
|
|
13648
13766
|
children: [
|
|
13649
|
-
page.coverImageUrl && /* @__PURE__ */ (0,
|
|
13767
|
+
page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
13650
13768
|
"img",
|
|
13651
13769
|
{
|
|
13652
13770
|
src: page.coverImageUrl,
|
|
@@ -13655,9 +13773,9 @@ function PageCardGridSection({
|
|
|
13655
13773
|
className: "h-full w-full object-cover transition-transform group-hover:scale-105"
|
|
13656
13774
|
}
|
|
13657
13775
|
) }),
|
|
13658
|
-
/* @__PURE__ */ (0,
|
|
13659
|
-
/* @__PURE__ */ (0,
|
|
13660
|
-
page.excerpt && /* @__PURE__ */ (0,
|
|
13776
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
|
|
13777
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
|
|
13778
|
+
page.excerpt && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
|
|
13661
13779
|
] })
|
|
13662
13780
|
]
|
|
13663
13781
|
}
|
|
@@ -13666,7 +13784,7 @@ function PageCardGridSection({
|
|
|
13666
13784
|
}
|
|
13667
13785
|
|
|
13668
13786
|
// src/components/parent-page.tsx
|
|
13669
|
-
var
|
|
13787
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
13670
13788
|
var defaultChildPageHref = (slug) => `/${slug}`;
|
|
13671
13789
|
function ParentPage({
|
|
13672
13790
|
page,
|
|
@@ -13681,10 +13799,10 @@ function ParentPage({
|
|
|
13681
13799
|
const pages = childPages ?? treatments ?? [];
|
|
13682
13800
|
const hrefFor = childPageHref ?? treatmentHref ?? defaultChildPageHref;
|
|
13683
13801
|
const label = childPagesLabel ?? treatmentsLabel ?? "Treatments";
|
|
13684
|
-
return /* @__PURE__ */ (0,
|
|
13685
|
-
/* @__PURE__ */ (0,
|
|
13686
|
-
/* @__PURE__ */ (0,
|
|
13687
|
-
/* @__PURE__ */ (0,
|
|
13802
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("article", { className: (0, import_utils5.cn)("space-y-12", className), "data-slot": "specialty", children: [
|
|
13803
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PageHero, { page }),
|
|
13804
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PageSectionList, { sections: page.sections }),
|
|
13805
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
13688
13806
|
PageCardGridSection,
|
|
13689
13807
|
{
|
|
13690
13808
|
pages,
|
|
@@ -13704,7 +13822,7 @@ var import_utils7 = require("@reblu/site-ui/utils");
|
|
|
13704
13822
|
|
|
13705
13823
|
// src/components/professional-fields.tsx
|
|
13706
13824
|
var import_utils6 = require("@reblu/site-ui/utils");
|
|
13707
|
-
var
|
|
13825
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
13708
13826
|
function ProfessionalFields({
|
|
13709
13827
|
fields,
|
|
13710
13828
|
variant = "profile",
|
|
@@ -13712,7 +13830,7 @@ function ProfessionalFields({
|
|
|
13712
13830
|
}) {
|
|
13713
13831
|
const shown = (fields ?? []).filter((f) => variant !== "card" || f.showOnCard);
|
|
13714
13832
|
if (shown.length === 0) return null;
|
|
13715
|
-
return /* @__PURE__ */ (0,
|
|
13833
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
13716
13834
|
"dl",
|
|
13717
13835
|
{
|
|
13718
13836
|
className: (0, import_utils6.cn)(
|
|
@@ -13722,13 +13840,13 @@ function ProfessionalFields({
|
|
|
13722
13840
|
),
|
|
13723
13841
|
"data-slot": "professional-fields",
|
|
13724
13842
|
"data-variant": variant,
|
|
13725
|
-
children: shown.map((field, index) => /* @__PURE__ */ (0,
|
|
13843
|
+
children: shown.map((field, index) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
13726
13844
|
"div",
|
|
13727
13845
|
{
|
|
13728
13846
|
className: variant === "card" ? "flex justify-center gap-1" : "contents",
|
|
13729
13847
|
children: [
|
|
13730
|
-
/* @__PURE__ */ (0,
|
|
13731
|
-
/* @__PURE__ */ (0,
|
|
13848
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("dt", { className: "text-muted-foreground", children: field.label }),
|
|
13849
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("dd", { className: "m-0 font-medium", children: field.value })
|
|
13732
13850
|
]
|
|
13733
13851
|
},
|
|
13734
13852
|
`${field.label}-${index}`
|
|
@@ -13738,7 +13856,7 @@ function ProfessionalFields({
|
|
|
13738
13856
|
}
|
|
13739
13857
|
|
|
13740
13858
|
// src/components/profile-card.tsx
|
|
13741
|
-
var
|
|
13859
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
13742
13860
|
function initials(name) {
|
|
13743
13861
|
return name.split(/\s+/).filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
|
|
13744
13862
|
}
|
|
@@ -13753,7 +13871,7 @@ function ProfileCard({
|
|
|
13753
13871
|
className
|
|
13754
13872
|
}) {
|
|
13755
13873
|
const NameTag = href ? "a" : "span";
|
|
13756
|
-
return /* @__PURE__ */ (0,
|
|
13874
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
|
13757
13875
|
"article",
|
|
13758
13876
|
{
|
|
13759
13877
|
className: (0, import_utils7.cn)(
|
|
@@ -13762,7 +13880,7 @@ function ProfileCard({
|
|
|
13762
13880
|
),
|
|
13763
13881
|
"data-slot": "profile-card",
|
|
13764
13882
|
children: [
|
|
13765
|
-
/* @__PURE__ */ (0,
|
|
13883
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "relative h-24 w-24 overflow-hidden rounded-full bg-muted", children: imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("img", { src: imageUrl, alt: name, loading: "lazy", className: "h-full w-full object-cover" }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
13766
13884
|
"span",
|
|
13767
13885
|
{
|
|
13768
13886
|
className: "flex h-full w-full items-center justify-center text-2xl font-semibold text-muted-foreground",
|
|
@@ -13770,12 +13888,12 @@ function ProfileCard({
|
|
|
13770
13888
|
children: initials(name)
|
|
13771
13889
|
}
|
|
13772
13890
|
) }),
|
|
13773
|
-
/* @__PURE__ */ (0,
|
|
13774
|
-
/* @__PURE__ */ (0,
|
|
13775
|
-
role && /* @__PURE__ */ (0,
|
|
13891
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "space-y-1", children: [
|
|
13892
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(NameTag, { ...href ? { href, className: "transition-colors hover:text-primary" } : {}, children: name }) }),
|
|
13893
|
+
role && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-sm text-muted-foreground", children: role })
|
|
13776
13894
|
] }),
|
|
13777
|
-
/* @__PURE__ */ (0,
|
|
13778
|
-
specialties.length > 0 && /* @__PURE__ */ (0,
|
|
13895
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(ProfessionalFields, { fields, variant: "card" }),
|
|
13896
|
+
specialties.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
13779
13897
|
"li",
|
|
13780
13898
|
{
|
|
13781
13899
|
className: "inline-flex items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground",
|
|
@@ -13783,7 +13901,7 @@ function ProfileCard({
|
|
|
13783
13901
|
},
|
|
13784
13902
|
s2
|
|
13785
13903
|
)) }),
|
|
13786
|
-
bio && /* @__PURE__ */ (0,
|
|
13904
|
+
bio && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "text-sm text-muted-foreground", children: bio })
|
|
13787
13905
|
]
|
|
13788
13906
|
}
|
|
13789
13907
|
);
|
|
@@ -13791,11 +13909,11 @@ function ProfileCard({
|
|
|
13791
13909
|
|
|
13792
13910
|
// src/components/product-card.tsx
|
|
13793
13911
|
var import_utils8 = require("@reblu/site-ui/utils");
|
|
13794
|
-
var
|
|
13912
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
13795
13913
|
function ProductCard({ product, href, currencyCode = "EUR", locale, className }) {
|
|
13796
13914
|
const image = product.images.find((i) => i.isPrimary) ?? product.images[0];
|
|
13797
13915
|
const hasDiscount = product.comparePrice != null && product.comparePrice > product.price;
|
|
13798
|
-
return /* @__PURE__ */ (0,
|
|
13916
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
13799
13917
|
"article",
|
|
13800
13918
|
{
|
|
13801
13919
|
className: (0, import_utils8.cn)(
|
|
@@ -13804,7 +13922,7 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
|
|
|
13804
13922
|
),
|
|
13805
13923
|
"data-slot": "product-card",
|
|
13806
13924
|
children: [
|
|
13807
|
-
/* @__PURE__ */ (0,
|
|
13925
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
13808
13926
|
"img",
|
|
13809
13927
|
{
|
|
13810
13928
|
src: image.url,
|
|
@@ -13812,14 +13930,14 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
|
|
|
13812
13930
|
loading: "lazy",
|
|
13813
13931
|
className: "h-full w-full object-cover transition-transform group-hover:scale-105"
|
|
13814
13932
|
}
|
|
13815
|
-
) : /* @__PURE__ */ (0,
|
|
13816
|
-
/* @__PURE__ */ (0,
|
|
13817
|
-
product.category && /* @__PURE__ */ (0,
|
|
13818
|
-
/* @__PURE__ */ (0,
|
|
13819
|
-
product.shortDescription && /* @__PURE__ */ (0,
|
|
13820
|
-
/* @__PURE__ */ (0,
|
|
13821
|
-
/* @__PURE__ */ (0,
|
|
13822
|
-
hasDiscount && /* @__PURE__ */ (0,
|
|
13933
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
|
|
13934
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
|
|
13935
|
+
product.category && /* @__PURE__ */ (0, import_jsx_runtime10.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 }),
|
|
13936
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
|
|
13937
|
+
product.shortDescription && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
|
|
13938
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
|
|
13939
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
|
|
13940
|
+
hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
|
|
13823
13941
|
] })
|
|
13824
13942
|
] })
|
|
13825
13943
|
]
|
|
@@ -14021,7 +14139,7 @@ var __iconNode8 = [
|
|
|
14021
14139
|
var Truck = createLucideIcon("truck", __iconNode8);
|
|
14022
14140
|
|
|
14023
14141
|
// src/components/product-trust-items.tsx
|
|
14024
|
-
var
|
|
14142
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
14025
14143
|
var DEFAULT_TRUST_ICONS = Object.freeze({
|
|
14026
14144
|
shipping: Truck,
|
|
14027
14145
|
returns: RotateCcw,
|
|
@@ -14055,9 +14173,9 @@ function ProductTrustItems({
|
|
|
14055
14173
|
return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
|
|
14056
14174
|
});
|
|
14057
14175
|
if (rows.length === 0) return null;
|
|
14058
|
-
return /* @__PURE__ */ (0,
|
|
14059
|
-
/* @__PURE__ */ (0,
|
|
14060
|
-
/* @__PURE__ */ (0,
|
|
14176
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(List, { "data-slot": "product-trust-items", className: slotClassName("space-y-2.5", "", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
|
|
14177
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
|
|
14178
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { children: text3 })
|
|
14061
14179
|
] }, key2)) });
|
|
14062
14180
|
}
|
|
14063
14181
|
|
|
@@ -14065,7 +14183,7 @@ function ProductTrustItems({
|
|
|
14065
14183
|
var import_utils11 = require("@reblu/site-ui/utils");
|
|
14066
14184
|
|
|
14067
14185
|
// src/components/_heading.tsx
|
|
14068
|
-
var
|
|
14186
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
14069
14187
|
function nextHeadingLevel(level) {
|
|
14070
14188
|
return Math.min(level + 1, 6);
|
|
14071
14189
|
}
|
|
@@ -14075,11 +14193,11 @@ function Heading({
|
|
|
14075
14193
|
children: children2
|
|
14076
14194
|
}) {
|
|
14077
14195
|
const Tag = `h${level}`;
|
|
14078
|
-
return /* @__PURE__ */ (0,
|
|
14196
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Tag, { className, children: children2 });
|
|
14079
14197
|
}
|
|
14080
14198
|
|
|
14081
14199
|
// src/components/faq-accordion.tsx
|
|
14082
|
-
var
|
|
14200
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
14083
14201
|
function FaqAccordion({
|
|
14084
14202
|
items,
|
|
14085
14203
|
heading,
|
|
@@ -14090,18 +14208,18 @@ function FaqAccordion({
|
|
|
14090
14208
|
}) {
|
|
14091
14209
|
const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
|
|
14092
14210
|
if (visible.length === 0) return null;
|
|
14093
|
-
return /* @__PURE__ */ (0,
|
|
14094
|
-
heading && /* @__PURE__ */ (0,
|
|
14095
|
-
/* @__PURE__ */ (0,
|
|
14211
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: (0, import_utils11.cn)("space-y-4", className), "data-slot": "faq-accordion", children: [
|
|
14212
|
+
heading && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
|
|
14213
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
14096
14214
|
"details",
|
|
14097
14215
|
{
|
|
14098
14216
|
className: "group px-4",
|
|
14099
14217
|
"data-slot": "faq-item",
|
|
14100
14218
|
...defaultOpen.includes(index) ? { open: true } : {},
|
|
14101
14219
|
children: [
|
|
14102
|
-
/* @__PURE__ */ (0,
|
|
14103
|
-
questionHeadingLevel ? /* @__PURE__ */ (0,
|
|
14104
|
-
/* @__PURE__ */ (0,
|
|
14220
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.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: [
|
|
14221
|
+
questionHeadingLevel ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: item.q }),
|
|
14222
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
14105
14223
|
"span",
|
|
14106
14224
|
{
|
|
14107
14225
|
"aria-hidden": "true",
|
|
@@ -14110,7 +14228,7 @@ function FaqAccordion({
|
|
|
14110
14228
|
}
|
|
14111
14229
|
)
|
|
14112
14230
|
] }),
|
|
14113
|
-
/* @__PURE__ */ (0,
|
|
14231
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
|
|
14114
14232
|
]
|
|
14115
14233
|
},
|
|
14116
14234
|
index
|
|
@@ -14120,7 +14238,7 @@ function FaqAccordion({
|
|
|
14120
14238
|
|
|
14121
14239
|
// src/components/trust-badges.tsx
|
|
14122
14240
|
var import_utils12 = require("@reblu/site-ui/utils");
|
|
14123
|
-
var
|
|
14241
|
+
var import_jsx_runtime14 = (
|
|
14124
14242
|
// eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
|
|
14125
14243
|
require("react/jsx-runtime")
|
|
14126
14244
|
);
|
|
@@ -14163,7 +14281,7 @@ function safeLogoSrc(url) {
|
|
|
14163
14281
|
function BadgeContent({ badge, logoClassName }) {
|
|
14164
14282
|
const src = safeLogoSrc(badge.logoUrl);
|
|
14165
14283
|
if (src) {
|
|
14166
|
-
return /* @__PURE__ */ (0,
|
|
14284
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
14167
14285
|
"img",
|
|
14168
14286
|
{
|
|
14169
14287
|
src,
|
|
@@ -14173,7 +14291,7 @@ function BadgeContent({ badge, logoClassName }) {
|
|
|
14173
14291
|
}
|
|
14174
14292
|
);
|
|
14175
14293
|
}
|
|
14176
|
-
return /* @__PURE__ */ (0,
|
|
14294
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-sm font-medium", children: badge.name });
|
|
14177
14295
|
}
|
|
14178
14296
|
function TrustBadges({
|
|
14179
14297
|
badges,
|
|
@@ -14201,14 +14319,14 @@ function TrustBadges({
|
|
|
14201
14319
|
if (groups.length === 0) return null;
|
|
14202
14320
|
const hasHeading = heading !== void 0 && heading !== null && heading !== "";
|
|
14203
14321
|
const groupHeadingLevel = hasHeading ? nextHeadingLevel(headingLevel) : headingLevel;
|
|
14204
|
-
const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ (0,
|
|
14322
|
+
const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
14205
14323
|
"div",
|
|
14206
14324
|
{
|
|
14207
14325
|
"data-slot": "trust-badge-group",
|
|
14208
14326
|
"data-type": type,
|
|
14209
14327
|
className: (0, import_utils12.cn)("space-y-3", groupClassName),
|
|
14210
14328
|
children: [
|
|
14211
|
-
groupHeading ? /* @__PURE__ */ (0,
|
|
14329
|
+
groupHeading ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
14212
14330
|
Heading,
|
|
14213
14331
|
{
|
|
14214
14332
|
level: groupHeadingLevel,
|
|
@@ -14220,30 +14338,30 @@ function TrustBadges({
|
|
|
14220
14338
|
children: groupHeading
|
|
14221
14339
|
}
|
|
14222
14340
|
) : null,
|
|
14223
|
-
/* @__PURE__ */ (0,
|
|
14341
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("ul", { className: (0, import_utils12.cn)("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
|
|
14224
14342
|
const href = safeHref(badge.url);
|
|
14225
|
-
return /* @__PURE__ */ (0,
|
|
14226
|
-
/* @__PURE__ */ (0,
|
|
14343
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("li", { children: href ? /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
|
|
14344
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(BadgeContent, { badge, logoClassName }),
|
|
14227
14345
|
" ",
|
|
14228
|
-
/* @__PURE__ */ (0,
|
|
14229
|
-
] }) : /* @__PURE__ */ (0,
|
|
14346
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "sr-only", children: newWindowLabel })
|
|
14347
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(BadgeContent, { badge, logoClassName }) }, badge.id);
|
|
14230
14348
|
}) })
|
|
14231
14349
|
]
|
|
14232
14350
|
},
|
|
14233
14351
|
type
|
|
14234
14352
|
));
|
|
14235
14353
|
if (!hasHeading) {
|
|
14236
|
-
return /* @__PURE__ */ (0,
|
|
14354
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { "data-slot": "trust-badges", className: (0, import_utils12.cn)("space-y-6", className), children: content });
|
|
14237
14355
|
}
|
|
14238
14356
|
const Tag = `h${headingLevel}`;
|
|
14239
|
-
return /* @__PURE__ */ (0,
|
|
14357
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
14240
14358
|
"section",
|
|
14241
14359
|
{
|
|
14242
14360
|
"data-slot": "trust-badges",
|
|
14243
14361
|
"aria-labelledby": headingId,
|
|
14244
14362
|
className: (0, import_utils12.cn)("space-y-6", className),
|
|
14245
14363
|
children: [
|
|
14246
|
-
/* @__PURE__ */ (0,
|
|
14364
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
14247
14365
|
Tag,
|
|
14248
14366
|
{
|
|
14249
14367
|
id: headingId,
|
|
@@ -14260,38 +14378,38 @@ function TrustBadges({
|
|
|
14260
14378
|
// src/components/page-blocks.tsx
|
|
14261
14379
|
var import_utils13 = require("@reblu/site-ui/utils");
|
|
14262
14380
|
var import_button_variants2 = require("@reblu/site-ui/button-variants");
|
|
14263
|
-
var
|
|
14381
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
14264
14382
|
var ALIASES = {
|
|
14265
14383
|
doctor_embed: "profile_embed",
|
|
14266
14384
|
specialty_embed: "page_embed"
|
|
14267
14385
|
};
|
|
14268
14386
|
function HeroBlock({ block, headingLevel }) {
|
|
14269
14387
|
const { title, subtitle, imageUrl } = block.data;
|
|
14270
|
-
return /* @__PURE__ */ (0,
|
|
14271
|
-
/* @__PURE__ */ (0,
|
|
14272
|
-
subtitle && /* @__PURE__ */ (0,
|
|
14273
|
-
imageUrl && /* @__PURE__ */ (0,
|
|
14388
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "space-y-4", children: [
|
|
14389
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
|
|
14390
|
+
subtitle && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-lg opacity-80", children: subtitle }),
|
|
14391
|
+
imageUrl && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
|
|
14274
14392
|
] });
|
|
14275
14393
|
}
|
|
14276
14394
|
function RichtextBlock({ block, headingLevel }) {
|
|
14277
|
-
return /* @__PURE__ */ (0,
|
|
14395
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
|
|
14278
14396
|
}
|
|
14279
14397
|
function FaqBlock({ block }) {
|
|
14280
|
-
return /* @__PURE__ */ (0,
|
|
14398
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FaqAccordion, { items: block.data.items });
|
|
14281
14399
|
}
|
|
14282
14400
|
function StatsBlock({ block }) {
|
|
14283
|
-
return /* @__PURE__ */ (0,
|
|
14284
|
-
/* @__PURE__ */ (0,
|
|
14285
|
-
/* @__PURE__ */ (0,
|
|
14401
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.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_runtime15.jsxs)("div", { className: "flex flex-col-reverse gap-1", children: [
|
|
14402
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("dt", { className: "text-sm opacity-80", children: item.label }),
|
|
14403
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("dd", { className: "text-3xl font-bold", children: item.value })
|
|
14286
14404
|
] }, i)) });
|
|
14287
14405
|
}
|
|
14288
14406
|
function TestimonialBlock({ block }) {
|
|
14289
14407
|
const { quote, author, role, avatarUrl } = block.data;
|
|
14290
|
-
return /* @__PURE__ */ (0,
|
|
14291
|
-
/* @__PURE__ */ (0,
|
|
14292
|
-
/* @__PURE__ */ (0,
|
|
14408
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("figure", { className: "space-y-4", children: [
|
|
14409
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { children: quote }) }),
|
|
14410
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("figcaption", { className: "flex items-center gap-3", children: [
|
|
14293
14411
|
avatarUrl && // eslint-disable-next-line @next/next/no-img-element
|
|
14294
|
-
/* @__PURE__ */ (0,
|
|
14412
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
14295
14413
|
"img",
|
|
14296
14414
|
{
|
|
14297
14415
|
src: avatarUrl,
|
|
@@ -14300,9 +14418,9 @@ function TestimonialBlock({ block }) {
|
|
|
14300
14418
|
className: "h-10 w-10 rounded-full object-cover"
|
|
14301
14419
|
}
|
|
14302
14420
|
),
|
|
14303
|
-
/* @__PURE__ */ (0,
|
|
14304
|
-
/* @__PURE__ */ (0,
|
|
14305
|
-
role && /* @__PURE__ */ (0,
|
|
14421
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("span", { children: [
|
|
14422
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "font-semibold", children: author }),
|
|
14423
|
+
role && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "block text-sm opacity-80", children: role })
|
|
14306
14424
|
] })
|
|
14307
14425
|
] })
|
|
14308
14426
|
] });
|
|
@@ -14311,19 +14429,19 @@ function CtaSlotBlock(_props) {
|
|
|
14311
14429
|
return null;
|
|
14312
14430
|
}
|
|
14313
14431
|
function FeatureListBlock({ block }) {
|
|
14314
|
-
return /* @__PURE__ */ (0,
|
|
14432
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.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_runtime15.jsx)("li", { children: item.text }, i)) });
|
|
14315
14433
|
}
|
|
14316
14434
|
function GalleryBlock({ block }) {
|
|
14317
14435
|
const { images } = block.data;
|
|
14318
|
-
return /* @__PURE__ */ (0,
|
|
14436
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
14319
14437
|
"div",
|
|
14320
14438
|
{
|
|
14321
14439
|
className: (0, import_utils13.cn)(
|
|
14322
14440
|
"grid gap-4",
|
|
14323
14441
|
images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
|
|
14324
14442
|
),
|
|
14325
|
-
children: images.map((img, i) => /* @__PURE__ */ (0,
|
|
14326
|
-
/* @__PURE__ */ (0,
|
|
14443
|
+
children: images.map((img, i) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("figure", { className: "space-y-1", children: [
|
|
14444
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
14327
14445
|
"img",
|
|
14328
14446
|
{
|
|
14329
14447
|
src: img.url,
|
|
@@ -14332,7 +14450,7 @@ function GalleryBlock({ block }) {
|
|
|
14332
14450
|
className: "h-full w-full object-cover"
|
|
14333
14451
|
}
|
|
14334
14452
|
) }),
|
|
14335
|
-
img.caption && /* @__PURE__ */ (0,
|
|
14453
|
+
img.caption && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
|
|
14336
14454
|
] }, `${img.url}-${i}`))
|
|
14337
14455
|
}
|
|
14338
14456
|
);
|
|
@@ -14342,13 +14460,13 @@ function EmbedCard({
|
|
|
14342
14460
|
headingLevel,
|
|
14343
14461
|
embedHref
|
|
14344
14462
|
}) {
|
|
14345
|
-
return /* @__PURE__ */ (0,
|
|
14463
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
|
|
14346
14464
|
"a",
|
|
14347
14465
|
{
|
|
14348
14466
|
href: embedHref(resolved),
|
|
14349
14467
|
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",
|
|
14350
14468
|
children: [
|
|
14351
|
-
resolved.coverImageUrl && /* @__PURE__ */ (0,
|
|
14469
|
+
resolved.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
14352
14470
|
"img",
|
|
14353
14471
|
{
|
|
14354
14472
|
src: resolved.coverImageUrl,
|
|
@@ -14357,24 +14475,24 @@ function EmbedCard({
|
|
|
14357
14475
|
className: "h-full w-full object-cover"
|
|
14358
14476
|
}
|
|
14359
14477
|
) }),
|
|
14360
|
-
/* @__PURE__ */ (0,
|
|
14361
|
-
/* @__PURE__ */ (0,
|
|
14362
|
-
resolved.role && /* @__PURE__ */ (0,
|
|
14363
|
-
resolved.excerpt && /* @__PURE__ */ (0,
|
|
14478
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: "space-y-1 p-4", children: [
|
|
14479
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
|
|
14480
|
+
resolved.role && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
|
|
14481
|
+
resolved.excerpt && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-muted-foreground", children: resolved.excerpt })
|
|
14364
14482
|
] })
|
|
14365
14483
|
]
|
|
14366
14484
|
}
|
|
14367
14485
|
);
|
|
14368
14486
|
}
|
|
14369
14487
|
function PageEmbedBlock({ block, headingLevel, embedHref }) {
|
|
14370
|
-
return /* @__PURE__ */ (0,
|
|
14488
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
14371
14489
|
}
|
|
14372
14490
|
function ProfileEmbedBlock({
|
|
14373
14491
|
block,
|
|
14374
14492
|
headingLevel,
|
|
14375
14493
|
embedHref
|
|
14376
14494
|
}) {
|
|
14377
|
-
return /* @__PURE__ */ (0,
|
|
14495
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
14378
14496
|
}
|
|
14379
14497
|
var DEFAULT_RENDERERS = {
|
|
14380
14498
|
hero: HeroBlock,
|
|
@@ -14431,7 +14549,7 @@ function toIdFragment(value) {
|
|
|
14431
14549
|
function SectionCta2({ cta }) {
|
|
14432
14550
|
if (!hasUsableCta(cta)) return null;
|
|
14433
14551
|
const variant = toButtonVariant(cta.variant);
|
|
14434
|
-
return /* @__PURE__ */ (0,
|
|
14552
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
14435
14553
|
"a",
|
|
14436
14554
|
{
|
|
14437
14555
|
href: cta.url,
|
|
@@ -14464,7 +14582,7 @@ function PageBlocks({
|
|
|
14464
14582
|
const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
|
|
14465
14583
|
const background = block.backgroundColor;
|
|
14466
14584
|
return [
|
|
14467
|
-
/* @__PURE__ */ (0,
|
|
14585
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
|
|
14468
14586
|
"section",
|
|
14469
14587
|
{
|
|
14470
14588
|
"data-slot": "page-block",
|
|
@@ -14473,8 +14591,8 @@ function PageBlocks({
|
|
|
14473
14591
|
style: surfaceStyle(background),
|
|
14474
14592
|
className: (0, import_utils13.cn)("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
|
|
14475
14593
|
children: [
|
|
14476
|
-
block.heading && /* @__PURE__ */ (0,
|
|
14477
|
-
/* @__PURE__ */ (0,
|
|
14594
|
+
block.heading && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { id: headingId, children: block.heading }) }),
|
|
14595
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
14478
14596
|
Renderer,
|
|
14479
14597
|
{
|
|
14480
14598
|
block,
|
|
@@ -14482,7 +14600,7 @@ function PageBlocks({
|
|
|
14482
14600
|
embedHref
|
|
14483
14601
|
}
|
|
14484
14602
|
),
|
|
14485
|
-
/* @__PURE__ */ (0,
|
|
14603
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SectionCta2, { cta: block.cta })
|
|
14486
14604
|
]
|
|
14487
14605
|
},
|
|
14488
14606
|
block.id
|
|
@@ -14490,12 +14608,12 @@ function PageBlocks({
|
|
|
14490
14608
|
];
|
|
14491
14609
|
});
|
|
14492
14610
|
if (sections.length === 0) return null;
|
|
14493
|
-
return /* @__PURE__ */ (0,
|
|
14611
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: (0, import_utils13.cn)("space-y-12", className), "data-slot": "page-blocks", children: sections });
|
|
14494
14612
|
}
|
|
14495
14613
|
|
|
14496
14614
|
// src/components/shop-filters.tsx
|
|
14497
14615
|
var import_utils14 = require("@reblu/site-ui/utils");
|
|
14498
|
-
var
|
|
14616
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
14499
14617
|
var DEFAULT_SHOP_PRICE_BANDS = [
|
|
14500
14618
|
{ max: 2500 },
|
|
14501
14619
|
{ min: 2500, max: 5e3 },
|
|
@@ -14539,7 +14657,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
|
|
|
14539
14657
|
return "";
|
|
14540
14658
|
}
|
|
14541
14659
|
function OptionLink({ href, active, label, onActivate }) {
|
|
14542
|
-
return /* @__PURE__ */ (0,
|
|
14660
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14543
14661
|
"a",
|
|
14544
14662
|
{
|
|
14545
14663
|
href,
|
|
@@ -14557,9 +14675,9 @@ function OptionLink({ href, active, label, onActivate }) {
|
|
|
14557
14675
|
);
|
|
14558
14676
|
}
|
|
14559
14677
|
function FilterFieldset({ legend, children: children2 }) {
|
|
14560
|
-
return /* @__PURE__ */ (0,
|
|
14561
|
-
/* @__PURE__ */ (0,
|
|
14562
|
-
/* @__PURE__ */ (0,
|
|
14678
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("fieldset", { className: "space-y-2", children: [
|
|
14679
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("legend", { className: "text-sm font-medium text-foreground", children: legend }),
|
|
14680
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "flex flex-wrap gap-2", children: children2 })
|
|
14563
14681
|
] });
|
|
14564
14682
|
}
|
|
14565
14683
|
function ShopFilters({
|
|
@@ -14582,11 +14700,11 @@ function ShopFilters({
|
|
|
14582
14700
|
if (!shouldRenderShopFilters(facets, active)) {
|
|
14583
14701
|
return null;
|
|
14584
14702
|
}
|
|
14585
|
-
return /* @__PURE__ */ (0,
|
|
14703
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: (0, import_utils14.cn)("space-y-6", className), "data-slot": "shop-filters", children: [
|
|
14586
14704
|
visibleTaxonomies.map((axis) => {
|
|
14587
14705
|
const activeSlug = active.taxonomy?.[axis.key];
|
|
14588
|
-
return /* @__PURE__ */ (0,
|
|
14589
|
-
/* @__PURE__ */ (0,
|
|
14706
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(FilterFieldset, { legend: axis.label, children: [
|
|
14707
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14590
14708
|
OptionLink,
|
|
14591
14709
|
{
|
|
14592
14710
|
href: hrefs.taxonomy(axis.key, void 0),
|
|
@@ -14601,7 +14719,7 @@ function ShopFilters({
|
|
|
14601
14719
|
),
|
|
14602
14720
|
axis.terms.map((term) => {
|
|
14603
14721
|
const isActive = activeSlug === term.slug;
|
|
14604
|
-
return /* @__PURE__ */ (0,
|
|
14722
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14605
14723
|
OptionLink,
|
|
14606
14724
|
{
|
|
14607
14725
|
href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
|
|
@@ -14621,9 +14739,9 @@ function ShopFilters({
|
|
|
14621
14739
|
}),
|
|
14622
14740
|
visibleAttributes.map((attr) => {
|
|
14623
14741
|
const activeValues = toValueArray(active.attr?.[attr.key]);
|
|
14624
|
-
return /* @__PURE__ */ (0,
|
|
14742
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
|
|
14625
14743
|
const isActive = activeValues.includes(opt.value);
|
|
14626
|
-
return /* @__PURE__ */ (0,
|
|
14744
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14627
14745
|
OptionLink,
|
|
14628
14746
|
{
|
|
14629
14747
|
href: hrefs.attr(attr.key, opt.value),
|
|
@@ -14641,11 +14759,11 @@ function ShopFilters({
|
|
|
14641
14759
|
);
|
|
14642
14760
|
}) }, attr.key);
|
|
14643
14761
|
}),
|
|
14644
|
-
showPriceGroup && /* @__PURE__ */ (0,
|
|
14762
|
+
showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
|
|
14645
14763
|
const isActive = active.priceMin === band.min && active.priceMax === band.max;
|
|
14646
14764
|
const nextMin = isActive ? void 0 : band.min;
|
|
14647
14765
|
const nextMax = isActive ? void 0 : band.max;
|
|
14648
|
-
return /* @__PURE__ */ (0,
|
|
14766
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14649
14767
|
OptionLink,
|
|
14650
14768
|
{
|
|
14651
14769
|
href: hrefs.price(nextMin, nextMax),
|
|
@@ -14656,7 +14774,7 @@ function ShopFilters({
|
|
|
14656
14774
|
i
|
|
14657
14775
|
);
|
|
14658
14776
|
}) }),
|
|
14659
|
-
hasOnSale && /* @__PURE__ */ (0,
|
|
14777
|
+
hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14660
14778
|
OptionLink,
|
|
14661
14779
|
{
|
|
14662
14780
|
href: hrefs.onSale(!active.onSale),
|
|
@@ -14665,7 +14783,7 @@ function ShopFilters({
|
|
|
14665
14783
|
onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
|
|
14666
14784
|
}
|
|
14667
14785
|
),
|
|
14668
|
-
/* @__PURE__ */ (0,
|
|
14786
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14669
14787
|
"a",
|
|
14670
14788
|
{
|
|
14671
14789
|
href: hrefs.clearAll(),
|
|
@@ -14682,7 +14800,7 @@ function ShopFilters({
|
|
|
14682
14800
|
|
|
14683
14801
|
// src/components/cart-line-list.tsx
|
|
14684
14802
|
var import_utils15 = require("@reblu/site-ui/utils");
|
|
14685
|
-
var
|
|
14803
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
14686
14804
|
var DEFAULT_LABELS2 = {
|
|
14687
14805
|
quantityLabel: "Cantidad",
|
|
14688
14806
|
decrease: "Reducir cantidad",
|
|
@@ -14708,9 +14826,9 @@ function CartLineList({
|
|
|
14708
14826
|
}) {
|
|
14709
14827
|
const t = { ...DEFAULT_LABELS2, ...labels };
|
|
14710
14828
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
14711
|
-
return /* @__PURE__ */ (0,
|
|
14712
|
-
/* @__PURE__ */ (0,
|
|
14713
|
-
noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0,
|
|
14829
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: (0, import_utils15.cn)("space-y-4", className), "data-slot": "cart-line-list", children: [
|
|
14830
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
|
|
14831
|
+
noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14714
14832
|
"div",
|
|
14715
14833
|
{
|
|
14716
14834
|
role: "status",
|
|
@@ -14719,33 +14837,33 @@ function CartLineList({
|
|
|
14719
14837
|
children: noticeContent
|
|
14720
14838
|
}
|
|
14721
14839
|
),
|
|
14722
|
-
/* @__PURE__ */ (0,
|
|
14840
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
|
|
14723
14841
|
const maxQty = item.maxStock ?? Infinity;
|
|
14724
14842
|
const atMax = item.quantity >= maxQty;
|
|
14725
14843
|
const atMin = item.quantity <= 1;
|
|
14726
14844
|
const message = lineMessage?.(item);
|
|
14727
|
-
return /* @__PURE__ */ (0,
|
|
14845
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
14728
14846
|
"li",
|
|
14729
14847
|
{
|
|
14730
14848
|
className: "flex gap-4 rounded-xl border border-border bg-card p-4",
|
|
14731
14849
|
children: [
|
|
14732
|
-
/* @__PURE__ */ (0,
|
|
14733
|
-
/* @__PURE__ */ (0,
|
|
14734
|
-
/* @__PURE__ */ (0,
|
|
14735
|
-
item.variantName && /* @__PURE__ */ (0,
|
|
14736
|
-
/* @__PURE__ */ (0,
|
|
14850
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
|
|
14851
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
14852
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
|
|
14853
|
+
item.variantName && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
|
|
14854
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("p", { className: "mt-1 text-sm text-muted-foreground", children: [
|
|
14737
14855
|
formatPrice(item.unitPrice, currencyCode, locale),
|
|
14738
14856
|
" ",
|
|
14739
14857
|
t.unitPriceSuffix
|
|
14740
14858
|
] }),
|
|
14741
|
-
/* @__PURE__ */ (0,
|
|
14859
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
14742
14860
|
"div",
|
|
14743
14861
|
{
|
|
14744
14862
|
role: "group",
|
|
14745
14863
|
"aria-label": t.quantityLabel,
|
|
14746
14864
|
className: "mt-3 flex items-center gap-3",
|
|
14747
14865
|
children: [
|
|
14748
|
-
/* @__PURE__ */ (0,
|
|
14866
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14749
14867
|
"button",
|
|
14750
14868
|
{
|
|
14751
14869
|
type: "button",
|
|
@@ -14756,8 +14874,8 @@ function CartLineList({
|
|
|
14756
14874
|
children: "\u2212"
|
|
14757
14875
|
}
|
|
14758
14876
|
),
|
|
14759
|
-
/* @__PURE__ */ (0,
|
|
14760
|
-
/* @__PURE__ */ (0,
|
|
14877
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
|
|
14878
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14761
14879
|
"button",
|
|
14762
14880
|
{
|
|
14763
14881
|
type: "button",
|
|
@@ -14768,7 +14886,7 @@ function CartLineList({
|
|
|
14768
14886
|
children: "+"
|
|
14769
14887
|
}
|
|
14770
14888
|
),
|
|
14771
|
-
onRemove && /* @__PURE__ */ (0,
|
|
14889
|
+
onRemove && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14772
14890
|
"button",
|
|
14773
14891
|
{
|
|
14774
14892
|
type: "button",
|
|
@@ -14781,7 +14899,7 @@ function CartLineList({
|
|
|
14781
14899
|
]
|
|
14782
14900
|
}
|
|
14783
14901
|
),
|
|
14784
|
-
message != null && message !== false && /* @__PURE__ */ (0,
|
|
14902
|
+
message != null && message !== false && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14785
14903
|
"p",
|
|
14786
14904
|
{
|
|
14787
14905
|
className: "mt-2 text-sm text-destructive",
|
|
@@ -14790,7 +14908,7 @@ function CartLineList({
|
|
|
14790
14908
|
}
|
|
14791
14909
|
)
|
|
14792
14910
|
] }),
|
|
14793
|
-
/* @__PURE__ */ (0,
|
|
14911
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
|
|
14794
14912
|
]
|
|
14795
14913
|
},
|
|
14796
14914
|
lineKey(item.productId, item.variantId)
|
|
@@ -14801,7 +14919,7 @@ function CartLineList({
|
|
|
14801
14919
|
|
|
14802
14920
|
// src/components/cart-summary.tsx
|
|
14803
14921
|
var import_utils16 = require("@reblu/site-ui/utils");
|
|
14804
|
-
var
|
|
14922
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
14805
14923
|
var DEFAULT_LABELS3 = {
|
|
14806
14924
|
subtotal: "Subtotal",
|
|
14807
14925
|
discountPrefix: "Descuento",
|
|
@@ -14809,12 +14927,14 @@ var DEFAULT_LABELS3 = {
|
|
|
14809
14927
|
freeShipping: "Env\xEDo gratis",
|
|
14810
14928
|
shippingCalculated: "Se calcula en el pago",
|
|
14811
14929
|
total: "Total",
|
|
14812
|
-
cancelledNotice: "Pago cancelado: tu carrito sigue aqu\xED"
|
|
14930
|
+
cancelledNotice: "Pago cancelado: tu carrito sigue aqu\xED",
|
|
14931
|
+
staffDiscountApplied: "Descuento de personal aplicado"
|
|
14813
14932
|
};
|
|
14814
14933
|
function CartSummary({
|
|
14815
14934
|
subtotal,
|
|
14816
14935
|
discount,
|
|
14817
14936
|
discountCode,
|
|
14937
|
+
autoDiscount,
|
|
14818
14938
|
shipping,
|
|
14819
14939
|
shippingEnabled,
|
|
14820
14940
|
total,
|
|
@@ -14825,43 +14945,41 @@ function CartSummary({
|
|
|
14825
14945
|
className
|
|
14826
14946
|
}) {
|
|
14827
14947
|
const t = { ...DEFAULT_LABELS3, ...labels };
|
|
14828
|
-
const
|
|
14948
|
+
const discountAmount = discount ?? autoDiscount?.amount;
|
|
14949
|
+
const hasDiscount = Boolean(discountAmount && discountAmount > 0);
|
|
14829
14950
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
14830
14951
|
const hasNotice = noticeContent != null && noticeContent !== false;
|
|
14831
|
-
const breakdown = /* @__PURE__ */ (0,
|
|
14952
|
+
const breakdown = /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
14832
14953
|
"dl",
|
|
14833
14954
|
{
|
|
14834
14955
|
className: (0, import_utils16.cn)("space-y-2 text-sm", !hasNotice && className),
|
|
14835
14956
|
"data-slot": "cart-summary",
|
|
14836
14957
|
children: [
|
|
14837
|
-
/* @__PURE__ */ (0,
|
|
14838
|
-
/* @__PURE__ */ (0,
|
|
14839
|
-
/* @__PURE__ */ (0,
|
|
14958
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
14959
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("dt", { children: t.subtotal }),
|
|
14960
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("dd", { children: formatPrice(subtotal, currencyCode, locale) })
|
|
14840
14961
|
] }),
|
|
14841
|
-
hasDiscount && /* @__PURE__ */ (0,
|
|
14842
|
-
/* @__PURE__ */ (0,
|
|
14843
|
-
|
|
14844
|
-
discountCode ? ` (${discountCode})` : ""
|
|
14845
|
-
] }),
|
|
14846
|
-
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("dd", { children: [
|
|
14962
|
+
hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
|
|
14963
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
|
|
14964
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("dd", { children: [
|
|
14847
14965
|
"-",
|
|
14848
|
-
formatPrice(
|
|
14966
|
+
formatPrice(discountAmount, currencyCode, locale)
|
|
14849
14967
|
] })
|
|
14850
14968
|
] }),
|
|
14851
|
-
shippingEnabled && /* @__PURE__ */ (0,
|
|
14852
|
-
/* @__PURE__ */ (0,
|
|
14853
|
-
/* @__PURE__ */ (0,
|
|
14969
|
+
shippingEnabled && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
14970
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("dt", { children: t.shipping }),
|
|
14971
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
|
|
14854
14972
|
] }),
|
|
14855
|
-
/* @__PURE__ */ (0,
|
|
14856
|
-
/* @__PURE__ */ (0,
|
|
14857
|
-
/* @__PURE__ */ (0,
|
|
14973
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
|
|
14974
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("dt", { children: t.total }),
|
|
14975
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("dd", { children: formatPrice(total, currencyCode, locale) })
|
|
14858
14976
|
] })
|
|
14859
14977
|
]
|
|
14860
14978
|
}
|
|
14861
14979
|
);
|
|
14862
14980
|
if (!hasNotice) return breakdown;
|
|
14863
|
-
return /* @__PURE__ */ (0,
|
|
14864
|
-
/* @__PURE__ */ (0,
|
|
14981
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: (0, import_utils16.cn)("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
|
|
14982
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14865
14983
|
"div",
|
|
14866
14984
|
{
|
|
14867
14985
|
role: "status",
|
|
@@ -14876,7 +14994,7 @@ function CartSummary({
|
|
|
14876
14994
|
|
|
14877
14995
|
// src/components/cart-adjustments-notice.tsx
|
|
14878
14996
|
var import_utils17 = require("@reblu/site-ui/utils");
|
|
14879
|
-
var
|
|
14997
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
14880
14998
|
var DEFAULT_LABELS4 = {
|
|
14881
14999
|
removed: (names) => names.length === 1 ? `Hemos quitado del carrito: ${names[0]}, ya no est\xE1 disponible.` : `Hemos quitado del carrito: ${names.join(", ")}, ya no est\xE1n disponibles.`,
|
|
14882
15000
|
quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
|
|
@@ -14910,20 +15028,20 @@ function CartAdjustmentsNotice({
|
|
|
14910
15028
|
);
|
|
14911
15029
|
}
|
|
14912
15030
|
if (messages.length === 0) return null;
|
|
14913
|
-
return /* @__PURE__ */ (0,
|
|
15031
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14914
15032
|
"div",
|
|
14915
15033
|
{
|
|
14916
15034
|
role: "status",
|
|
14917
15035
|
className: (0, import_utils17.cn)("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
|
|
14918
15036
|
"data-slot": "cart-adjustments-notice",
|
|
14919
|
-
children: messages.length === 1 ? /* @__PURE__ */ (0,
|
|
15037
|
+
children: messages.length === 1 ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { children: messages[0] }) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("li", { children: message }, index)) })
|
|
14920
15038
|
}
|
|
14921
15039
|
);
|
|
14922
15040
|
}
|
|
14923
15041
|
|
|
14924
15042
|
// src/components/added-to-cart-toast.tsx
|
|
14925
15043
|
var import_utils18 = require("@reblu/site-ui/utils");
|
|
14926
|
-
var
|
|
15044
|
+
var import_jsx_runtime20 = (
|
|
14927
15045
|
// eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
|
|
14928
15046
|
require("react/jsx-runtime")
|
|
14929
15047
|
);
|
|
@@ -14946,7 +15064,7 @@ function AddedToCartToast({
|
|
|
14946
15064
|
const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
|
|
14947
15065
|
const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
|
|
14948
15066
|
const variant = status === "success" ? "success" : "error";
|
|
14949
|
-
return /* @__PURE__ */ (0,
|
|
15067
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
14950
15068
|
"div",
|
|
14951
15069
|
{
|
|
14952
15070
|
"data-slot": "added-to-cart-toast",
|
|
@@ -14958,12 +15076,12 @@ function AddedToCartToast({
|
|
|
14958
15076
|
className
|
|
14959
15077
|
),
|
|
14960
15078
|
children: [
|
|
14961
|
-
hasThumbnail && /* @__PURE__ */ (0,
|
|
14962
|
-
/* @__PURE__ */ (0,
|
|
14963
|
-
/* @__PURE__ */ (0,
|
|
14964
|
-
/* @__PURE__ */ (0,
|
|
15079
|
+
hasThumbnail && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
|
|
15080
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
15081
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "truncate font-semibold text-foreground", children: productName }),
|
|
15082
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
|
|
14965
15083
|
] }),
|
|
14966
|
-
/* @__PURE__ */ (0,
|
|
15084
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
|
|
14967
15085
|
]
|
|
14968
15086
|
}
|
|
14969
15087
|
);
|
|
@@ -14971,7 +15089,7 @@ function AddedToCartToast({
|
|
|
14971
15089
|
|
|
14972
15090
|
// src/components/checkout-login-prompt.tsx
|
|
14973
15091
|
var import_utils19 = require("@reblu/site-ui/utils");
|
|
14974
|
-
var
|
|
15092
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
14975
15093
|
var DEFAULT_LABELS6 = {
|
|
14976
15094
|
title: "Identificaci\xF3n",
|
|
14977
15095
|
description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
|
|
@@ -14998,9 +15116,9 @@ function CheckoutLoginPrompt({
|
|
|
14998
15116
|
if (!open) return null;
|
|
14999
15117
|
const t = { ...DEFAULT_LABELS6, ...labels };
|
|
15000
15118
|
const isValidEmail = EMAIL_PATTERN.test(email.trim());
|
|
15001
|
-
return /* @__PURE__ */ (0,
|
|
15002
|
-
/* @__PURE__ */ (0,
|
|
15003
|
-
/* @__PURE__ */ (0,
|
|
15119
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [
|
|
15120
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
|
|
15121
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
15004
15122
|
"div",
|
|
15005
15123
|
{
|
|
15006
15124
|
role: "dialog",
|
|
@@ -15012,12 +15130,12 @@ function CheckoutLoginPrompt({
|
|
|
15012
15130
|
className
|
|
15013
15131
|
),
|
|
15014
15132
|
children: [
|
|
15015
|
-
/* @__PURE__ */ (0,
|
|
15016
|
-
/* @__PURE__ */ (0,
|
|
15017
|
-
/* @__PURE__ */ (0,
|
|
15018
|
-
/* @__PURE__ */ (0,
|
|
15133
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
|
|
15134
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { children: [
|
|
15135
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
|
|
15136
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
|
|
15019
15137
|
] }),
|
|
15020
|
-
/* @__PURE__ */ (0,
|
|
15138
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15021
15139
|
"button",
|
|
15022
15140
|
{
|
|
15023
15141
|
type: "button",
|
|
@@ -15028,9 +15146,9 @@ function CheckoutLoginPrompt({
|
|
|
15028
15146
|
}
|
|
15029
15147
|
)
|
|
15030
15148
|
] }),
|
|
15031
|
-
/* @__PURE__ */ (0,
|
|
15032
|
-
/* @__PURE__ */ (0,
|
|
15033
|
-
/* @__PURE__ */ (0,
|
|
15149
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-2", children: [
|
|
15150
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
15151
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15034
15152
|
"input",
|
|
15035
15153
|
{
|
|
15036
15154
|
id: "checkout-login-prompt-email",
|
|
@@ -15045,10 +15163,10 @@ function CheckoutLoginPrompt({
|
|
|
15045
15163
|
)
|
|
15046
15164
|
}
|
|
15047
15165
|
),
|
|
15048
|
-
error && /* @__PURE__ */ (0,
|
|
15166
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "text-xs text-destructive", children: error })
|
|
15049
15167
|
] }),
|
|
15050
|
-
/* @__PURE__ */ (0,
|
|
15051
|
-
/* @__PURE__ */ (0,
|
|
15168
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "space-y-2", children: [
|
|
15169
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15052
15170
|
"button",
|
|
15053
15171
|
{
|
|
15054
15172
|
type: "button",
|
|
@@ -15061,7 +15179,7 @@ function CheckoutLoginPrompt({
|
|
|
15061
15179
|
children: checking ? t.checking : t.continueWithEmail
|
|
15062
15180
|
}
|
|
15063
15181
|
),
|
|
15064
|
-
/* @__PURE__ */ (0,
|
|
15182
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15065
15183
|
"button",
|
|
15066
15184
|
{
|
|
15067
15185
|
type: "button",
|
|
@@ -15080,7 +15198,7 @@ function CheckoutLoginPrompt({
|
|
|
15080
15198
|
// src/components/checkout-form.tsx
|
|
15081
15199
|
var import_utils20 = require("@reblu/site-ui/utils");
|
|
15082
15200
|
var import_phone_input = require("@reblu/site-ui/phone-input");
|
|
15083
|
-
var
|
|
15201
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
15084
15202
|
var DEFAULT_LABELS7 = {
|
|
15085
15203
|
contactTitle: "Datos de contacto",
|
|
15086
15204
|
nameLabel: "Nombre completo",
|
|
@@ -15094,6 +15212,7 @@ var DEFAULT_LABELS7 = {
|
|
|
15094
15212
|
applyingDiscount: "Aplicando\u2026",
|
|
15095
15213
|
removeDiscount: "Quitar",
|
|
15096
15214
|
discountAppliedSuffix: (amount) => `\u2014 ${amount} de descuento`,
|
|
15215
|
+
staffDiscountApplied: "Descuento de personal aplicado",
|
|
15097
15216
|
submit: "Confirmar y pagar",
|
|
15098
15217
|
submitting: "Procesando\u2026"
|
|
15099
15218
|
};
|
|
@@ -15108,6 +15227,7 @@ function CheckoutForm({
|
|
|
15108
15227
|
onApplyDiscount,
|
|
15109
15228
|
onRemoveDiscount,
|
|
15110
15229
|
appliedDiscount,
|
|
15230
|
+
autoDiscount,
|
|
15111
15231
|
discountApplying,
|
|
15112
15232
|
discountError,
|
|
15113
15233
|
loginPrompt,
|
|
@@ -15134,9 +15254,9 @@ function CheckoutForm({
|
|
|
15134
15254
|
event.preventDefault();
|
|
15135
15255
|
if (discountCode.trim() && !discountApplying) onApplyDiscount();
|
|
15136
15256
|
}
|
|
15137
|
-
return /* @__PURE__ */ (0,
|
|
15257
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
|
|
15138
15258
|
loginPrompt,
|
|
15139
|
-
/* @__PURE__ */ (0,
|
|
15259
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
15140
15260
|
"form",
|
|
15141
15261
|
{
|
|
15142
15262
|
"data-testid": "checkout-form",
|
|
@@ -15144,12 +15264,12 @@ function CheckoutForm({
|
|
|
15144
15264
|
className: (0, import_utils20.cn)("space-y-8", className),
|
|
15145
15265
|
"data-slot": "checkout-form",
|
|
15146
15266
|
children: [
|
|
15147
|
-
/* @__PURE__ */ (0,
|
|
15148
|
-
/* @__PURE__ */ (0,
|
|
15149
|
-
/* @__PURE__ */ (0,
|
|
15150
|
-
/* @__PURE__ */ (0,
|
|
15151
|
-
/* @__PURE__ */ (0,
|
|
15152
|
-
/* @__PURE__ */ (0,
|
|
15267
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("section", { className: "space-y-4", children: [
|
|
15268
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
|
|
15269
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
15270
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "space-y-1", children: [
|
|
15271
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
|
|
15272
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15153
15273
|
"input",
|
|
15154
15274
|
{
|
|
15155
15275
|
id: "checkout-form-name",
|
|
@@ -15164,11 +15284,11 @@ function CheckoutForm({
|
|
|
15164
15284
|
)
|
|
15165
15285
|
}
|
|
15166
15286
|
),
|
|
15167
|
-
contactErrors?.name && /* @__PURE__ */ (0,
|
|
15287
|
+
contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
|
|
15168
15288
|
] }),
|
|
15169
|
-
/* @__PURE__ */ (0,
|
|
15170
|
-
/* @__PURE__ */ (0,
|
|
15171
|
-
/* @__PURE__ */ (0,
|
|
15289
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "space-y-1", children: [
|
|
15290
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
15291
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15172
15292
|
"input",
|
|
15173
15293
|
{
|
|
15174
15294
|
id: "checkout-form-email",
|
|
@@ -15183,9 +15303,9 @@ function CheckoutForm({
|
|
|
15183
15303
|
)
|
|
15184
15304
|
}
|
|
15185
15305
|
),
|
|
15186
|
-
contactErrors?.email && /* @__PURE__ */ (0,
|
|
15306
|
+
contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
|
|
15187
15307
|
] }),
|
|
15188
|
-
/* @__PURE__ */ (0,
|
|
15308
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15189
15309
|
import_phone_input.PhoneInput,
|
|
15190
15310
|
{
|
|
15191
15311
|
id: "checkout-form-phone",
|
|
@@ -15199,15 +15319,26 @@ function CheckoutForm({
|
|
|
15199
15319
|
] })
|
|
15200
15320
|
] }),
|
|
15201
15321
|
children2,
|
|
15202
|
-
generalError ? /* @__PURE__ */ (0,
|
|
15203
|
-
/* @__PURE__ */ (0,
|
|
15204
|
-
/* @__PURE__ */ (0,
|
|
15205
|
-
|
|
15206
|
-
|
|
15207
|
-
|
|
15208
|
-
|
|
15322
|
+
generalError ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
|
|
15323
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("section", { className: "space-y-3", children: [
|
|
15324
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
|
|
15325
|
+
autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
15326
|
+
"div",
|
|
15327
|
+
{
|
|
15328
|
+
className: "flex items-center gap-2 rounded-lg border border-green-200 bg-green-50 px-4 py-3 text-sm text-green-700 dark:border-green-800 dark:bg-green-900/20 dark:text-green-400",
|
|
15329
|
+
"data-slot": "checkout-staff-discount",
|
|
15330
|
+
children: [
|
|
15331
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "font-semibold", children: t.staffDiscountApplied }),
|
|
15332
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
|
|
15333
|
+
]
|
|
15334
|
+
}
|
|
15335
|
+
) : null,
|
|
15336
|
+
appliedDiscount && !autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime22.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: [
|
|
15337
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
|
|
15338
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "font-semibold", children: appliedDiscount.code }),
|
|
15339
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
|
|
15209
15340
|
] }),
|
|
15210
|
-
/* @__PURE__ */ (0,
|
|
15341
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15211
15342
|
"button",
|
|
15212
15343
|
{
|
|
15213
15344
|
type: "button",
|
|
@@ -15217,9 +15348,9 @@ function CheckoutForm({
|
|
|
15217
15348
|
children: t.removeDiscount
|
|
15218
15349
|
}
|
|
15219
15350
|
)
|
|
15220
|
-
] }) : /* @__PURE__ */ (0,
|
|
15221
|
-
/* @__PURE__ */ (0,
|
|
15222
|
-
/* @__PURE__ */ (0,
|
|
15351
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "flex gap-2", children: [
|
|
15352
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
|
|
15353
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15223
15354
|
"input",
|
|
15224
15355
|
{
|
|
15225
15356
|
id: "checkout-form-discount-code",
|
|
@@ -15231,7 +15362,7 @@ function CheckoutForm({
|
|
|
15231
15362
|
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"
|
|
15232
15363
|
}
|
|
15233
15364
|
),
|
|
15234
|
-
/* @__PURE__ */ (0,
|
|
15365
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15235
15366
|
"button",
|
|
15236
15367
|
{
|
|
15237
15368
|
type: "button",
|
|
@@ -15242,9 +15373,9 @@ function CheckoutForm({
|
|
|
15242
15373
|
}
|
|
15243
15374
|
)
|
|
15244
15375
|
] }),
|
|
15245
|
-
discountError && /* @__PURE__ */ (0,
|
|
15376
|
+
discountError && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-xs text-destructive", children: discountError })
|
|
15246
15377
|
] }),
|
|
15247
|
-
/* @__PURE__ */ (0,
|
|
15378
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15248
15379
|
"button",
|
|
15249
15380
|
{
|
|
15250
15381
|
type: "submit",
|
|
@@ -15267,7 +15398,7 @@ var import_utils22 = require("@reblu/site-ui/utils");
|
|
|
15267
15398
|
|
|
15268
15399
|
// src/components/order-invoice-link.tsx
|
|
15269
15400
|
var import_utils21 = require("@reblu/site-ui/utils");
|
|
15270
|
-
var
|
|
15401
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
15271
15402
|
var DEFAULT_LABELS8 = {
|
|
15272
15403
|
linkLabel: "Descargar la factura {number}",
|
|
15273
15404
|
signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
|
|
@@ -15275,8 +15406,8 @@ var DEFAULT_LABELS8 = {
|
|
|
15275
15406
|
function OrderInvoiceLink({ invoice, labels, className }) {
|
|
15276
15407
|
if (!invoice) return null;
|
|
15277
15408
|
const t = { ...DEFAULT_LABELS8, ...labels };
|
|
15278
|
-
return /* @__PURE__ */ (0,
|
|
15279
|
-
/* @__PURE__ */ (0,
|
|
15409
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: (0, import_utils21.cn)("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
|
|
15410
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
15280
15411
|
"a",
|
|
15281
15412
|
{
|
|
15282
15413
|
href: invoice.url,
|
|
@@ -15284,17 +15415,19 @@ function OrderInvoiceLink({ invoice, labels, className }) {
|
|
|
15284
15415
|
children: t.linkLabel.replace("{number}", invoice.number)
|
|
15285
15416
|
}
|
|
15286
15417
|
),
|
|
15287
|
-
/* @__PURE__ */ (0,
|
|
15418
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "text-muted-foreground", children: t.signInHint })
|
|
15288
15419
|
] });
|
|
15289
15420
|
}
|
|
15290
15421
|
|
|
15291
15422
|
// src/components/order-confirmation.tsx
|
|
15292
|
-
var
|
|
15423
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
15293
15424
|
var DEFAULT_LABELS9 = {
|
|
15294
15425
|
pollingTitle: "Confirmando tu pedido\u2026",
|
|
15295
15426
|
pollingDescription: "Estamos procesando el pago, un momento\u2026",
|
|
15296
15427
|
foundTitle: "\xA1Pedido confirmado!",
|
|
15297
|
-
|
|
15428
|
+
// REB-1085: every buyer gets a customer account; the order email carries
|
|
15429
|
+
// the access link. Files are never served from this page.
|
|
15430
|
+
foundDescription: "Te hemos enviado un email con tu acceso.",
|
|
15298
15431
|
timeoutTitle: "Pago recibido",
|
|
15299
15432
|
timeoutDescription: "Tu pago se ha procesado. Recibir\xE1s un email de confirmaci\xF3n en breve.",
|
|
15300
15433
|
orderNumberLabel: "Pedido confirmado",
|
|
@@ -15353,43 +15486,43 @@ function OrderConfirmation({
|
|
|
15353
15486
|
const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
|
|
15354
15487
|
const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
|
|
15355
15488
|
const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
|
|
15356
|
-
return /* @__PURE__ */ (0,
|
|
15357
|
-
/* @__PURE__ */ (0,
|
|
15358
|
-
/* @__PURE__ */ (0,
|
|
15359
|
-
showFullOrderSummary && order && /* @__PURE__ */ (0,
|
|
15360
|
-
/* @__PURE__ */ (0,
|
|
15361
|
-
/* @__PURE__ */ (0,
|
|
15362
|
-
/* @__PURE__ */ (0,
|
|
15489
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: (0, import_utils22.cn)("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
|
|
15490
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h1", { className: "text-3xl font-bold", children: title }),
|
|
15491
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-lg text-muted-foreground", children: description }),
|
|
15492
|
+
showFullOrderSummary && order && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-6", children: [
|
|
15493
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
15494
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
|
|
15495
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
15363
15496
|
] }),
|
|
15364
|
-
/* @__PURE__ */ (0,
|
|
15365
|
-
order.items.map((item, idx) => /* @__PURE__ */ (0,
|
|
15497
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
|
|
15498
|
+
order.items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
|
|
15366
15499
|
"div",
|
|
15367
15500
|
{
|
|
15368
15501
|
className: "flex justify-between gap-4 text-sm",
|
|
15369
15502
|
children: [
|
|
15370
|
-
/* @__PURE__ */ (0,
|
|
15503
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
|
|
15371
15504
|
item.product.name,
|
|
15372
15505
|
item.variant ? ` (${item.variant.name})` : "",
|
|
15373
15506
|
" x",
|
|
15374
15507
|
item.quantity
|
|
15375
15508
|
] }),
|
|
15376
|
-
/* @__PURE__ */ (0,
|
|
15509
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
|
|
15377
15510
|
]
|
|
15378
15511
|
},
|
|
15379
15512
|
idx
|
|
15380
15513
|
)),
|
|
15381
|
-
/* @__PURE__ */ (0,
|
|
15382
|
-
/* @__PURE__ */ (0,
|
|
15383
|
-
/* @__PURE__ */ (0,
|
|
15514
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
|
|
15515
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: t.totalLabel }),
|
|
15516
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: formatPrice(order.total, currencyCode, locale) })
|
|
15384
15517
|
] }) })
|
|
15385
15518
|
] }),
|
|
15386
|
-
/* @__PURE__ */ (0,
|
|
15519
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
|
|
15387
15520
|
t.confirmationEmailPrefix,
|
|
15388
15521
|
" ",
|
|
15389
|
-
/* @__PURE__ */ (0,
|
|
15522
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
|
|
15390
15523
|
"."
|
|
15391
15524
|
] }),
|
|
15392
|
-
/* @__PURE__ */ (0,
|
|
15525
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15393
15526
|
OrderInvoiceLink,
|
|
15394
15527
|
{
|
|
15395
15528
|
invoice: order.invoice,
|
|
@@ -15397,11 +15530,11 @@ function OrderConfirmation({
|
|
|
15397
15530
|
}
|
|
15398
15531
|
)
|
|
15399
15532
|
] }),
|
|
15400
|
-
showOrderReference && order && /* @__PURE__ */ (0,
|
|
15401
|
-
/* @__PURE__ */ (0,
|
|
15402
|
-
/* @__PURE__ */ (0,
|
|
15533
|
+
showOrderReference && order && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
15534
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
|
|
15535
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
15403
15536
|
] }),
|
|
15404
|
-
status === "failed" && cartHref && /* @__PURE__ */ (0,
|
|
15537
|
+
status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15405
15538
|
"a",
|
|
15406
15539
|
{
|
|
15407
15540
|
href: cartHref,
|
|
@@ -15409,7 +15542,7 @@ function OrderConfirmation({
|
|
|
15409
15542
|
children: t.backToCartLabel
|
|
15410
15543
|
}
|
|
15411
15544
|
),
|
|
15412
|
-
showRecheck && /* @__PURE__ */ (0,
|
|
15545
|
+
showRecheck && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15413
15546
|
"button",
|
|
15414
15547
|
{
|
|
15415
15548
|
type: "button",
|
|
@@ -15418,16 +15551,16 @@ function OrderConfirmation({
|
|
|
15418
15551
|
children: t.recheckLabel
|
|
15419
15552
|
}
|
|
15420
15553
|
),
|
|
15421
|
-
showSessionReference && /* @__PURE__ */ (0,
|
|
15422
|
-
/* @__PURE__ */ (0,
|
|
15423
|
-
/* @__PURE__ */ (0,
|
|
15554
|
+
showSessionReference && /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
15555
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
|
|
15556
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
|
|
15424
15557
|
] })
|
|
15425
15558
|
] });
|
|
15426
15559
|
}
|
|
15427
15560
|
|
|
15428
15561
|
// src/components/full-invoice-fields.tsx
|
|
15429
15562
|
var import_utils23 = require("@reblu/site-ui/utils");
|
|
15430
|
-
var
|
|
15563
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
15431
15564
|
var EMPTY_FULL_INVOICE_VALUE = {
|
|
15432
15565
|
wantsFullInvoice: false,
|
|
15433
15566
|
billingIdType: "NIF",
|
|
@@ -15544,12 +15677,12 @@ function FullInvoiceFields({
|
|
|
15544
15677
|
const showFields = value.wantsFullInvoice || overCap;
|
|
15545
15678
|
const isSpanishNif = value.billingIdType === "NIF";
|
|
15546
15679
|
const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
|
|
15547
|
-
const error = (key2) => errors[key2] ? /* @__PURE__ */ (0,
|
|
15680
|
+
const error = (key2) => errors[key2] ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
|
|
15548
15681
|
const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
|
|
15549
|
-
return /* @__PURE__ */ (0,
|
|
15550
|
-
overCap ? /* @__PURE__ */ (0,
|
|
15551
|
-
/* @__PURE__ */ (0,
|
|
15552
|
-
/* @__PURE__ */ (0,
|
|
15682
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("section", { className: (0, import_utils23.cn)("space-y-4", className), "data-slot": "full-invoice-fields", children: [
|
|
15683
|
+
overCap ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-1", children: [
|
|
15684
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
|
|
15685
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15553
15686
|
"input",
|
|
15554
15687
|
{
|
|
15555
15688
|
type: "checkbox",
|
|
@@ -15559,12 +15692,12 @@ function FullInvoiceFields({
|
|
|
15559
15692
|
),
|
|
15560
15693
|
t.toggle
|
|
15561
15694
|
] }),
|
|
15562
|
-
/* @__PURE__ */ (0,
|
|
15695
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
|
|
15563
15696
|
] }),
|
|
15564
|
-
showFields && /* @__PURE__ */ (0,
|
|
15565
|
-
/* @__PURE__ */ (0,
|
|
15566
|
-
/* @__PURE__ */ (0,
|
|
15567
|
-
/* @__PURE__ */ (0,
|
|
15697
|
+
showFields && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
15698
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-1", children: [
|
|
15699
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
|
|
15700
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15568
15701
|
"select",
|
|
15569
15702
|
{
|
|
15570
15703
|
id: "full-invoice-id-type",
|
|
@@ -15573,14 +15706,14 @@ function FullInvoiceFields({
|
|
|
15573
15706
|
value: value.billingIdType,
|
|
15574
15707
|
onChange: (e) => set("billingIdType", e.target.value),
|
|
15575
15708
|
...invalid2("billingIdType"),
|
|
15576
|
-
children: ID_TYPES.map((type) => /* @__PURE__ */ (0,
|
|
15709
|
+
children: ID_TYPES.map((type) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("option", { value: type, children: t.idTypeOptions[type] }, type))
|
|
15577
15710
|
}
|
|
15578
15711
|
),
|
|
15579
15712
|
error("billingIdType")
|
|
15580
15713
|
] }),
|
|
15581
|
-
!isSpanishNif && /* @__PURE__ */ (0,
|
|
15582
|
-
/* @__PURE__ */ (0,
|
|
15583
|
-
/* @__PURE__ */ (0,
|
|
15714
|
+
!isSpanishNif && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-1", children: [
|
|
15715
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
|
|
15716
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
15584
15717
|
"select",
|
|
15585
15718
|
{
|
|
15586
15719
|
id: "full-invoice-id-country",
|
|
@@ -15590,16 +15723,16 @@ function FullInvoiceFields({
|
|
|
15590
15723
|
onChange: (e) => set("billingIdCountry", e.target.value),
|
|
15591
15724
|
...invalid2("billingIdCountry"),
|
|
15592
15725
|
children: [
|
|
15593
|
-
/* @__PURE__ */ (0,
|
|
15594
|
-
countries.map((c) => /* @__PURE__ */ (0,
|
|
15726
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("option", { value: "", disabled: true, children: t.chooseCountry }),
|
|
15727
|
+
countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("option", { value: c.code, children: c.name }, c.code))
|
|
15595
15728
|
]
|
|
15596
15729
|
}
|
|
15597
15730
|
),
|
|
15598
15731
|
error("billingIdCountry")
|
|
15599
15732
|
] }),
|
|
15600
|
-
/* @__PURE__ */ (0,
|
|
15601
|
-
/* @__PURE__ */ (0,
|
|
15602
|
-
/* @__PURE__ */ (0,
|
|
15733
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-1", children: [
|
|
15734
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
|
|
15735
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15603
15736
|
"input",
|
|
15604
15737
|
{
|
|
15605
15738
|
id: "full-invoice-nif",
|
|
@@ -15612,9 +15745,9 @@ function FullInvoiceFields({
|
|
|
15612
15745
|
),
|
|
15613
15746
|
error("billingNif")
|
|
15614
15747
|
] }),
|
|
15615
|
-
/* @__PURE__ */ (0,
|
|
15616
|
-
/* @__PURE__ */ (0,
|
|
15617
|
-
/* @__PURE__ */ (0,
|
|
15748
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-1", children: [
|
|
15749
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
|
|
15750
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15618
15751
|
"input",
|
|
15619
15752
|
{
|
|
15620
15753
|
id: "full-invoice-name",
|
|
@@ -15627,9 +15760,9 @@ function FullInvoiceFields({
|
|
|
15627
15760
|
),
|
|
15628
15761
|
error("billingName")
|
|
15629
15762
|
] }),
|
|
15630
|
-
/* @__PURE__ */ (0,
|
|
15631
|
-
/* @__PURE__ */ (0,
|
|
15632
|
-
/* @__PURE__ */ (0,
|
|
15763
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-1 sm:col-span-2", children: [
|
|
15764
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
|
|
15765
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15633
15766
|
"input",
|
|
15634
15767
|
{
|
|
15635
15768
|
id: "full-invoice-street",
|
|
@@ -15641,9 +15774,9 @@ function FullInvoiceFields({
|
|
|
15641
15774
|
}
|
|
15642
15775
|
)
|
|
15643
15776
|
] }),
|
|
15644
|
-
/* @__PURE__ */ (0,
|
|
15645
|
-
/* @__PURE__ */ (0,
|
|
15646
|
-
/* @__PURE__ */ (0,
|
|
15777
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-1", children: [
|
|
15778
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
|
|
15779
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15647
15780
|
"input",
|
|
15648
15781
|
{
|
|
15649
15782
|
id: "full-invoice-postal-code",
|
|
@@ -15654,9 +15787,9 @@ function FullInvoiceFields({
|
|
|
15654
15787
|
}
|
|
15655
15788
|
)
|
|
15656
15789
|
] }),
|
|
15657
|
-
/* @__PURE__ */ (0,
|
|
15658
|
-
/* @__PURE__ */ (0,
|
|
15659
|
-
/* @__PURE__ */ (0,
|
|
15790
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-1", children: [
|
|
15791
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
|
|
15792
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15660
15793
|
"input",
|
|
15661
15794
|
{
|
|
15662
15795
|
id: "full-invoice-city",
|
|
@@ -15667,9 +15800,9 @@ function FullInvoiceFields({
|
|
|
15667
15800
|
}
|
|
15668
15801
|
)
|
|
15669
15802
|
] }),
|
|
15670
|
-
/* @__PURE__ */ (0,
|
|
15671
|
-
/* @__PURE__ */ (0,
|
|
15672
|
-
/* @__PURE__ */ (0,
|
|
15803
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-1", children: [
|
|
15804
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
|
|
15805
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15673
15806
|
"select",
|
|
15674
15807
|
{
|
|
15675
15808
|
id: "full-invoice-country",
|
|
@@ -15677,11 +15810,11 @@ function FullInvoiceFields({
|
|
|
15677
15810
|
required: true,
|
|
15678
15811
|
value: value.country,
|
|
15679
15812
|
onChange: (e) => set("country", e.target.value),
|
|
15680
|
-
children: countries.map((c) => /* @__PURE__ */ (0,
|
|
15813
|
+
children: countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("option", { value: c.code, children: c.name }, c.code))
|
|
15681
15814
|
}
|
|
15682
15815
|
)
|
|
15683
15816
|
] }),
|
|
15684
|
-
/* @__PURE__ */ (0,
|
|
15817
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "sm:col-span-2", children: error("address") })
|
|
15685
15818
|
] })
|
|
15686
15819
|
] });
|
|
15687
15820
|
}
|
|
@@ -15700,6 +15833,7 @@ var import_site_contracts = require("@reblu/site-contracts");
|
|
|
15700
15833
|
CourseDescription,
|
|
15701
15834
|
DATA_REQUEST_TYPES,
|
|
15702
15835
|
DEFAULT_INVOICE_COUNTRIES,
|
|
15836
|
+
DEFAULT_LESSON_PREVIEW_LABELS,
|
|
15703
15837
|
DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,
|
|
15704
15838
|
DEFAULT_SHOP_ERROR_MESSAGES,
|
|
15705
15839
|
DEFAULT_SHOP_PRICE_BANDS,
|
|
@@ -15709,6 +15843,7 @@ var import_site_contracts = require("@reblu/site-contracts");
|
|
|
15709
15843
|
EMPTY_FULL_INVOICE_VALUE,
|
|
15710
15844
|
FaqAccordion,
|
|
15711
15845
|
FullInvoiceFields,
|
|
15846
|
+
LessonPreview,
|
|
15712
15847
|
MarkdownRenderer,
|
|
15713
15848
|
OrderConfirmation,
|
|
15714
15849
|
OrderInvoiceLink,
|