@reblu/site-blocks 0.25.0 → 0.27.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 +38 -0
- package/README.md +111 -3
- package/dist/client.cjs +277 -0
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +86 -2
- package/dist/client.d.ts +86 -2
- package/dist/client.js +274 -0
- package/dist/client.js.map +1 -1
- package/dist/index.cjs +397 -334
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +48 -5
- package/dist/index.d.ts +48 -5
- package/dist/index.js +397 -335
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -46,6 +46,7 @@ __export(src_exports, {
|
|
|
46
46
|
EMPTY_FULL_INVOICE_VALUE: () => EMPTY_FULL_INVOICE_VALUE,
|
|
47
47
|
FaqAccordion: () => FaqAccordion,
|
|
48
48
|
FullInvoiceFields: () => FullInvoiceFields,
|
|
49
|
+
LegalDocument: () => LegalDocument,
|
|
49
50
|
LessonPreview: () => LessonPreview,
|
|
50
51
|
MarkdownRenderer: () => MarkdownRenderer,
|
|
51
52
|
OrderConfirmation: () => OrderConfirmation,
|
|
@@ -13547,6 +13548,8 @@ function CourseDescription({
|
|
|
13547
13548
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
13548
13549
|
var DEFAULT_COURSE_PURCHASE_TERMS_LABELS = {
|
|
13549
13550
|
withdrawalWaiver: "El acceso empieza al comprar: al pagar pides el acceso inmediato y renuncias al derecho de desistimiento de 14 d\xEDas.",
|
|
13551
|
+
serviceStartRequest: "Al pagar pides expresamente que la formaci\xF3n empiece dentro del plazo de desistimiento de 14 d\xEDas.",
|
|
13552
|
+
consentText: (text3) => ` Texto de la casilla: \xAB${text3}\xBB`,
|
|
13550
13553
|
accessDuration: (months) => `Acceso durante ${months} ${months === 1 ? "mes" : "meses"} desde la inscripci\xF3n.`,
|
|
13551
13554
|
refundGuarantee: ({ basis, thresholdPercent, windowDays }) => {
|
|
13552
13555
|
const period = windowDays != null ? ` durante ${windowDays} d\xEDas desde el pago` : "";
|
|
@@ -13567,7 +13570,21 @@ function CoursePurchaseTerms({
|
|
|
13567
13570
|
}) {
|
|
13568
13571
|
const text3 = { ...DEFAULT_COURSE_PURCHASE_TERMS_LABELS, ...labels };
|
|
13569
13572
|
const items = [];
|
|
13570
|
-
if (course.
|
|
13573
|
+
if (course.withdrawalConsent !== void 0) {
|
|
13574
|
+
const consent = course.withdrawalConsent;
|
|
13575
|
+
if (consent) {
|
|
13576
|
+
const line = consent.kind === "SERVICE_START_REQUEST" ? text3.serviceStartRequest : text3.withdrawalWaiver;
|
|
13577
|
+
items.push({
|
|
13578
|
+
// The waiver keeps its REB-1199 slot (existing SITE styles target it).
|
|
13579
|
+
key: consent.kind === "SERVICE_START_REQUEST" ? "service-start-request" : "withdrawal-waiver",
|
|
13580
|
+
kind: consent.kind,
|
|
13581
|
+
node: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
|
|
13582
|
+
line,
|
|
13583
|
+
text3.consentText(consent.text)
|
|
13584
|
+
] })
|
|
13585
|
+
});
|
|
13586
|
+
}
|
|
13587
|
+
} else if (course.withdrawalWaiverRequired === true) {
|
|
13571
13588
|
items.push({ key: "withdrawal-waiver", node: text3.withdrawalWaiver });
|
|
13572
13589
|
}
|
|
13573
13590
|
if (typeof course.accessDurationMonths === "number") {
|
|
@@ -13578,7 +13595,7 @@ function CoursePurchaseTerms({
|
|
|
13578
13595
|
}
|
|
13579
13596
|
if (items.length === 0) return null;
|
|
13580
13597
|
const hasHeading = heading !== void 0 && heading !== null && heading !== "";
|
|
13581
|
-
const list = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("ul", { className: slotClassName("list-disc space-y-1 pl-5", "text-sm text-muted-foreground", listClassName), children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("li", { "data-slot": `course-purchase-terms-${item.key}`, children: item.node }, item.key)) });
|
|
13598
|
+
const list = /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("ul", { className: slotClassName("list-disc space-y-1 pl-5", "text-sm text-muted-foreground", listClassName), children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("li", { "data-slot": `course-purchase-terms-${item.key}`, "data-kind": item.kind, children: item.node }, item.key)) });
|
|
13582
13599
|
const Tag = `h${headingLevel}`;
|
|
13583
13600
|
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
13584
13601
|
"section",
|
|
@@ -13594,8 +13611,53 @@ function CoursePurchaseTerms({
|
|
|
13594
13611
|
);
|
|
13595
13612
|
}
|
|
13596
13613
|
|
|
13597
|
-
// src/components/
|
|
13614
|
+
// src/components/legal-document.tsx
|
|
13598
13615
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
13616
|
+
function isVisiblyEmpty2(html5) {
|
|
13617
|
+
if (/<(img|iframe|hr)\b/i.test(html5)) return false;
|
|
13618
|
+
return html5.replace(/<[^>]*>/g, "").trim() === "";
|
|
13619
|
+
}
|
|
13620
|
+
function LegalDocument({
|
|
13621
|
+
content,
|
|
13622
|
+
title,
|
|
13623
|
+
fallback,
|
|
13624
|
+
titleId = "legal-document-title",
|
|
13625
|
+
className,
|
|
13626
|
+
titleClassName,
|
|
13627
|
+
contentClassName
|
|
13628
|
+
}) {
|
|
13629
|
+
const html5 = markdownToSafeHtml(typeof content === "string" ? content : null);
|
|
13630
|
+
const isEmpty = !html5 || isVisiblyEmpty2(html5);
|
|
13631
|
+
const hasFallback = fallback !== void 0 && fallback !== null && fallback !== false;
|
|
13632
|
+
if (isEmpty && !hasFallback) return null;
|
|
13633
|
+
const hasTitle = title !== void 0 && title !== null && title !== "";
|
|
13634
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
13635
|
+
"article",
|
|
13636
|
+
{
|
|
13637
|
+
"data-slot": "legal-document",
|
|
13638
|
+
"aria-labelledby": hasTitle ? titleId : void 0,
|
|
13639
|
+
className: slotClassName("space-y-6", "", className),
|
|
13640
|
+
children: [
|
|
13641
|
+
hasTitle && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h1", { id: titleId, className: slotClassName("", "text-3xl font-bold", titleClassName), children: title }),
|
|
13642
|
+
isEmpty ? fallback : (
|
|
13643
|
+
// `html` is already sanitised by `markdownToSafeHtml` — SafeHtml only maps it.
|
|
13644
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
13645
|
+
SafeHtml,
|
|
13646
|
+
{
|
|
13647
|
+
html: html5,
|
|
13648
|
+
headingOffset: hasTitle ? 1 : 0,
|
|
13649
|
+
normalizeHeadings: hasTitle,
|
|
13650
|
+
className: contentClassName
|
|
13651
|
+
}
|
|
13652
|
+
)
|
|
13653
|
+
)
|
|
13654
|
+
]
|
|
13655
|
+
}
|
|
13656
|
+
);
|
|
13657
|
+
}
|
|
13658
|
+
|
|
13659
|
+
// src/components/lesson-preview.tsx
|
|
13660
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
13599
13661
|
var DEFAULT_LESSON_PREVIEW_LABELS = {
|
|
13600
13662
|
badge: "Vista previa gratuita",
|
|
13601
13663
|
player: "V\xEDdeo",
|
|
@@ -13619,7 +13681,7 @@ function clock(seconds) {
|
|
|
13619
13681
|
iso: `PT${h2 > 0 ? `${h2}H` : ""}${m2}M${s2}S`
|
|
13620
13682
|
};
|
|
13621
13683
|
}
|
|
13622
|
-
function
|
|
13684
|
+
function isVisiblyEmpty3(html5) {
|
|
13623
13685
|
if (/<(img|iframe|hr)\b/i.test(html5)) return false;
|
|
13624
13686
|
return html5.replace(/<[^>]*>/g, "").trim() === "";
|
|
13625
13687
|
}
|
|
@@ -13636,17 +13698,17 @@ function LessonPreview({
|
|
|
13636
13698
|
const Tag = `h${headingLevel}`;
|
|
13637
13699
|
const video = lesson.video && isEmbeddable(lesson.video.embedUrl) ? lesson.video : null;
|
|
13638
13700
|
const html5 = markdownToSafeHtml(lesson.content);
|
|
13639
|
-
const hasBody = html5 !== null && html5 !== "" && !
|
|
13701
|
+
const hasBody = html5 !== null && html5 !== "" && !isVisiblyEmpty3(html5);
|
|
13640
13702
|
const duration = typeof lesson.durationSeconds === "number" && lesson.durationSeconds > 0 ? clock(lesson.durationSeconds) : null;
|
|
13641
|
-
return /* @__PURE__ */ (0,
|
|
13703
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
13642
13704
|
"article",
|
|
13643
13705
|
{
|
|
13644
13706
|
"data-slot": "lesson-preview",
|
|
13645
13707
|
"aria-labelledby": headingId,
|
|
13646
13708
|
className: slotClassName("space-y-6", "", className),
|
|
13647
13709
|
children: [
|
|
13648
|
-
/* @__PURE__ */ (0,
|
|
13649
|
-
/* @__PURE__ */ (0,
|
|
13710
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("header", { className: "space-y-2", children: [
|
|
13711
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
13650
13712
|
"span",
|
|
13651
13713
|
{
|
|
13652
13714
|
"data-slot": "lesson-preview-badge",
|
|
@@ -13654,7 +13716,7 @@ function LessonPreview({
|
|
|
13654
13716
|
children: labels.badge
|
|
13655
13717
|
}
|
|
13656
13718
|
),
|
|
13657
|
-
/* @__PURE__ */ (0,
|
|
13719
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
13658
13720
|
Tag,
|
|
13659
13721
|
{
|
|
13660
13722
|
id: headingId,
|
|
@@ -13662,12 +13724,12 @@ function LessonPreview({
|
|
|
13662
13724
|
children: lesson.title
|
|
13663
13725
|
}
|
|
13664
13726
|
),
|
|
13665
|
-
duration && /* @__PURE__ */ (0,
|
|
13666
|
-
/* @__PURE__ */ (0,
|
|
13727
|
+
duration && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
|
|
13728
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "sr-only", children: [
|
|
13667
13729
|
labels.duration,
|
|
13668
13730
|
": "
|
|
13669
13731
|
] }),
|
|
13670
|
-
/* @__PURE__ */ (0,
|
|
13732
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
13671
13733
|
"time",
|
|
13672
13734
|
{
|
|
13673
13735
|
"data-slot": "lesson-preview-duration",
|
|
@@ -13678,12 +13740,12 @@ function LessonPreview({
|
|
|
13678
13740
|
)
|
|
13679
13741
|
] })
|
|
13680
13742
|
] }),
|
|
13681
|
-
video && /* @__PURE__ */ (0,
|
|
13743
|
+
video && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
13682
13744
|
"div",
|
|
13683
13745
|
{
|
|
13684
13746
|
"data-slot": "lesson-preview-player",
|
|
13685
13747
|
className: "aspect-video w-full overflow-hidden rounded-xl border border-border bg-black",
|
|
13686
|
-
children: /* @__PURE__ */ (0,
|
|
13748
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
13687
13749
|
"iframe",
|
|
13688
13750
|
{
|
|
13689
13751
|
src: video.embedUrl,
|
|
@@ -13697,7 +13759,7 @@ function LessonPreview({
|
|
|
13697
13759
|
)
|
|
13698
13760
|
}
|
|
13699
13761
|
),
|
|
13700
|
-
hasBody && /* @__PURE__ */ (0,
|
|
13762
|
+
hasBody && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { "data-slot": "lesson-preview-content", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
13701
13763
|
SafeHtml,
|
|
13702
13764
|
{
|
|
13703
13765
|
html: html5,
|
|
@@ -13716,7 +13778,7 @@ var import_utils3 = require("@reblu/site-ui/utils");
|
|
|
13716
13778
|
// src/components/_page-parts.tsx
|
|
13717
13779
|
var import_utils2 = require("@reblu/site-ui/utils");
|
|
13718
13780
|
var import_button_variants = require("@reblu/site-ui/button-variants");
|
|
13719
|
-
var
|
|
13781
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
13720
13782
|
var KNOWN_BUTTON_VARIANTS = /* @__PURE__ */ new Set([
|
|
13721
13783
|
"default",
|
|
13722
13784
|
"destructive",
|
|
@@ -13729,11 +13791,11 @@ function toButtonVariant(variant) {
|
|
|
13729
13791
|
return variant && KNOWN_BUTTON_VARIANTS.has(variant) ? variant : "default";
|
|
13730
13792
|
}
|
|
13731
13793
|
function PageHero({ page }) {
|
|
13732
|
-
return /* @__PURE__ */ (0,
|
|
13733
|
-
page.category && /* @__PURE__ */ (0,
|
|
13734
|
-
/* @__PURE__ */ (0,
|
|
13735
|
-
page.subtitle && /* @__PURE__ */ (0,
|
|
13736
|
-
page.coverImageUrl && /* @__PURE__ */ (0,
|
|
13794
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("header", { className: "space-y-4", children: [
|
|
13795
|
+
page.category && /* @__PURE__ */ (0, import_jsx_runtime6.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 }),
|
|
13796
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h1", { className: "text-4xl font-bold tracking-tight", children: page.title }),
|
|
13797
|
+
page.subtitle && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-lg text-muted-foreground", children: page.subtitle }),
|
|
13798
|
+
page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
13737
13799
|
"img",
|
|
13738
13800
|
{
|
|
13739
13801
|
src: page.coverImageUrl,
|
|
@@ -13747,7 +13809,7 @@ function PageHero({ page }) {
|
|
|
13747
13809
|
function SectionCta({ section }) {
|
|
13748
13810
|
if (!section.ctaLabel || !section.ctaUrl) return null;
|
|
13749
13811
|
const variant = toButtonVariant(section.ctaVariant);
|
|
13750
|
-
return /* @__PURE__ */ (0,
|
|
13812
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
13751
13813
|
"a",
|
|
13752
13814
|
{
|
|
13753
13815
|
href: section.ctaUrl,
|
|
@@ -13762,46 +13824,46 @@ function SectionCta({ section }) {
|
|
|
13762
13824
|
}
|
|
13763
13825
|
function SectionImages({ section }) {
|
|
13764
13826
|
if (section.images.length === 0) return null;
|
|
13765
|
-
return /* @__PURE__ */ (0,
|
|
13766
|
-
/* @__PURE__ */ (0,
|
|
13767
|
-
img.caption && /* @__PURE__ */ (0,
|
|
13827
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.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_runtime6.jsxs)("figure", { className: "space-y-1", children: [
|
|
13828
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("img", { src: img.url, alt: img.alt, loading: "lazy", className: "h-full w-full object-cover" }) }),
|
|
13829
|
+
img.caption && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
|
|
13768
13830
|
] }, `${img.url}-${img.order}`)) });
|
|
13769
13831
|
}
|
|
13770
13832
|
function PageSectionBlock({ section }) {
|
|
13771
13833
|
const imageFirst = section.layout === "IMAGE_TEXT";
|
|
13772
13834
|
const sideBySide = section.layout === "TEXT_IMAGE" || section.layout === "IMAGE_TEXT";
|
|
13773
13835
|
const hasImages = section.images.length > 0;
|
|
13774
|
-
const body3 = /* @__PURE__ */ (0,
|
|
13775
|
-
section.heading && /* @__PURE__ */ (0,
|
|
13776
|
-
/* @__PURE__ */ (0,
|
|
13777
|
-
/* @__PURE__ */ (0,
|
|
13836
|
+
const body3 = /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "space-y-4", children: [
|
|
13837
|
+
section.heading && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h2", { className: "text-2xl font-bold", children: section.heading }),
|
|
13838
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SafeHtml, { html: sanitizeHtml(section.contentHtml), headingOffset: 2 }),
|
|
13839
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionCta, { section })
|
|
13778
13840
|
] });
|
|
13779
13841
|
if (sideBySide && hasImages) {
|
|
13780
|
-
return /* @__PURE__ */ (0,
|
|
13781
|
-
/* @__PURE__ */ (0,
|
|
13842
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("section", { className: "grid items-center gap-8 md:grid-cols-2", children: imageFirst ? /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
|
|
13843
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionImages, { section }),
|
|
13782
13844
|
body3
|
|
13783
|
-
] }) : /* @__PURE__ */ (0,
|
|
13845
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
|
|
13784
13846
|
body3,
|
|
13785
|
-
/* @__PURE__ */ (0,
|
|
13847
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionImages, { section })
|
|
13786
13848
|
] }) });
|
|
13787
13849
|
}
|
|
13788
|
-
return /* @__PURE__ */ (0,
|
|
13850
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("section", { className: "space-y-4", children: [
|
|
13789
13851
|
body3,
|
|
13790
|
-
/* @__PURE__ */ (0,
|
|
13852
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionImages, { section })
|
|
13791
13853
|
] });
|
|
13792
13854
|
}
|
|
13793
13855
|
function PageSectionList({ sections }) {
|
|
13794
13856
|
if (sections.length === 0) return null;
|
|
13795
13857
|
const ordered = sections.slice().sort((a, b2) => a.order - b2.order);
|
|
13796
|
-
return /* @__PURE__ */ (0,
|
|
13858
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "space-y-12", children: ordered.map((section) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(PageSectionBlock, { section }, section.id)) });
|
|
13797
13859
|
}
|
|
13798
13860
|
|
|
13799
13861
|
// src/components/treatment.tsx
|
|
13800
|
-
var
|
|
13862
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
13801
13863
|
function Treatment({ page, className }) {
|
|
13802
|
-
return /* @__PURE__ */ (0,
|
|
13803
|
-
/* @__PURE__ */ (0,
|
|
13804
|
-
/* @__PURE__ */ (0,
|
|
13864
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("article", { className: (0, import_utils3.cn)("space-y-12", className), "data-slot": "treatment", children: [
|
|
13865
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PageHero, { page }),
|
|
13866
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PageSectionList, { sections: page.sections })
|
|
13805
13867
|
] });
|
|
13806
13868
|
}
|
|
13807
13869
|
|
|
@@ -13810,11 +13872,11 @@ var import_utils5 = require("@reblu/site-ui/utils");
|
|
|
13810
13872
|
|
|
13811
13873
|
// src/components/page-card-grid.tsx
|
|
13812
13874
|
var import_utils4 = require("@reblu/site-ui/utils");
|
|
13813
|
-
var
|
|
13875
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
13814
13876
|
var defaultPageHref = (page) => `/${page.slug}`;
|
|
13815
13877
|
var pageKey = (page) => `${page.category?.slug ?? ""}/${page.slug}`;
|
|
13816
13878
|
function PageCardGrid(props) {
|
|
13817
|
-
return /* @__PURE__ */ (0,
|
|
13879
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PageCardGridSection, { ...props });
|
|
13818
13880
|
}
|
|
13819
13881
|
function PageCardGridSection({
|
|
13820
13882
|
pages,
|
|
@@ -13825,15 +13887,15 @@ function PageCardGridSection({
|
|
|
13825
13887
|
}) {
|
|
13826
13888
|
if (pages.length === 0) return null;
|
|
13827
13889
|
const showHeading = keepEmptyHeading ? heading !== void 0 : !!heading;
|
|
13828
|
-
return /* @__PURE__ */ (0,
|
|
13829
|
-
showHeading && /* @__PURE__ */ (0,
|
|
13830
|
-
/* @__PURE__ */ (0,
|
|
13890
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("section", { className: (0, import_utils4.cn)("space-y-6", className), children: [
|
|
13891
|
+
showHeading && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h2", { className: "text-2xl font-bold", children: heading }),
|
|
13892
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.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_runtime8.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
13831
13893
|
"a",
|
|
13832
13894
|
{
|
|
13833
13895
|
href: pageHref(page),
|
|
13834
13896
|
className: "group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
|
|
13835
13897
|
children: [
|
|
13836
|
-
page.coverImageUrl && /* @__PURE__ */ (0,
|
|
13898
|
+
page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
13837
13899
|
"img",
|
|
13838
13900
|
{
|
|
13839
13901
|
src: page.coverImageUrl,
|
|
@@ -13842,9 +13904,9 @@ function PageCardGridSection({
|
|
|
13842
13904
|
className: "h-full w-full object-cover transition-transform group-hover:scale-105"
|
|
13843
13905
|
}
|
|
13844
13906
|
) }),
|
|
13845
|
-
/* @__PURE__ */ (0,
|
|
13846
|
-
/* @__PURE__ */ (0,
|
|
13847
|
-
page.excerpt && /* @__PURE__ */ (0,
|
|
13907
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
|
|
13908
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
|
|
13909
|
+
page.excerpt && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
|
|
13848
13910
|
] })
|
|
13849
13911
|
]
|
|
13850
13912
|
}
|
|
@@ -13853,7 +13915,7 @@ function PageCardGridSection({
|
|
|
13853
13915
|
}
|
|
13854
13916
|
|
|
13855
13917
|
// src/components/parent-page.tsx
|
|
13856
|
-
var
|
|
13918
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
13857
13919
|
var defaultChildPageHref = (slug) => `/${slug}`;
|
|
13858
13920
|
function ParentPage({
|
|
13859
13921
|
page,
|
|
@@ -13868,10 +13930,10 @@ function ParentPage({
|
|
|
13868
13930
|
const pages = childPages ?? treatments ?? [];
|
|
13869
13931
|
const hrefFor = childPageHref ?? treatmentHref ?? defaultChildPageHref;
|
|
13870
13932
|
const label = childPagesLabel ?? treatmentsLabel ?? "Treatments";
|
|
13871
|
-
return /* @__PURE__ */ (0,
|
|
13872
|
-
/* @__PURE__ */ (0,
|
|
13873
|
-
/* @__PURE__ */ (0,
|
|
13874
|
-
/* @__PURE__ */ (0,
|
|
13933
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("article", { className: (0, import_utils5.cn)("space-y-12", className), "data-slot": "specialty", children: [
|
|
13934
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PageHero, { page }),
|
|
13935
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PageSectionList, { sections: page.sections }),
|
|
13936
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
13875
13937
|
PageCardGridSection,
|
|
13876
13938
|
{
|
|
13877
13939
|
pages,
|
|
@@ -13891,7 +13953,7 @@ var import_utils7 = require("@reblu/site-ui/utils");
|
|
|
13891
13953
|
|
|
13892
13954
|
// src/components/professional-fields.tsx
|
|
13893
13955
|
var import_utils6 = require("@reblu/site-ui/utils");
|
|
13894
|
-
var
|
|
13956
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
13895
13957
|
function ProfessionalFields({
|
|
13896
13958
|
fields,
|
|
13897
13959
|
variant = "profile",
|
|
@@ -13899,7 +13961,7 @@ function ProfessionalFields({
|
|
|
13899
13961
|
}) {
|
|
13900
13962
|
const shown = (fields ?? []).filter((f) => variant !== "card" || f.showOnCard);
|
|
13901
13963
|
if (shown.length === 0) return null;
|
|
13902
|
-
return /* @__PURE__ */ (0,
|
|
13964
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
13903
13965
|
"dl",
|
|
13904
13966
|
{
|
|
13905
13967
|
className: (0, import_utils6.cn)(
|
|
@@ -13909,13 +13971,13 @@ function ProfessionalFields({
|
|
|
13909
13971
|
),
|
|
13910
13972
|
"data-slot": "professional-fields",
|
|
13911
13973
|
"data-variant": variant,
|
|
13912
|
-
children: shown.map((field, index) => /* @__PURE__ */ (0,
|
|
13974
|
+
children: shown.map((field, index) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
13913
13975
|
"div",
|
|
13914
13976
|
{
|
|
13915
13977
|
className: variant === "card" ? "flex justify-center gap-1" : "contents",
|
|
13916
13978
|
children: [
|
|
13917
|
-
/* @__PURE__ */ (0,
|
|
13918
|
-
/* @__PURE__ */ (0,
|
|
13979
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dt", { className: "text-muted-foreground", children: field.label }),
|
|
13980
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dd", { className: "m-0 font-medium", children: field.value })
|
|
13919
13981
|
]
|
|
13920
13982
|
},
|
|
13921
13983
|
`${field.label}-${index}`
|
|
@@ -13925,7 +13987,7 @@ function ProfessionalFields({
|
|
|
13925
13987
|
}
|
|
13926
13988
|
|
|
13927
13989
|
// src/components/profile-card.tsx
|
|
13928
|
-
var
|
|
13990
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
13929
13991
|
function initials(name) {
|
|
13930
13992
|
return name.split(/\s+/).filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
|
|
13931
13993
|
}
|
|
@@ -13940,7 +14002,7 @@ function ProfileCard({
|
|
|
13940
14002
|
className
|
|
13941
14003
|
}) {
|
|
13942
14004
|
const NameTag = href ? "a" : "span";
|
|
13943
|
-
return /* @__PURE__ */ (0,
|
|
14005
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
13944
14006
|
"article",
|
|
13945
14007
|
{
|
|
13946
14008
|
className: (0, import_utils7.cn)(
|
|
@@ -13949,7 +14011,7 @@ function ProfileCard({
|
|
|
13949
14011
|
),
|
|
13950
14012
|
"data-slot": "profile-card",
|
|
13951
14013
|
children: [
|
|
13952
|
-
/* @__PURE__ */ (0,
|
|
14014
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "relative h-24 w-24 overflow-hidden rounded-full bg-muted", children: imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("img", { src: imageUrl, alt: name, loading: "lazy", className: "h-full w-full object-cover" }) : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
13953
14015
|
"span",
|
|
13954
14016
|
{
|
|
13955
14017
|
className: "flex h-full w-full items-center justify-center text-2xl font-semibold text-muted-foreground",
|
|
@@ -13957,12 +14019,12 @@ function ProfileCard({
|
|
|
13957
14019
|
children: initials(name)
|
|
13958
14020
|
}
|
|
13959
14021
|
) }),
|
|
13960
|
-
/* @__PURE__ */ (0,
|
|
13961
|
-
/* @__PURE__ */ (0,
|
|
13962
|
-
role && /* @__PURE__ */ (0,
|
|
14022
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "space-y-1", children: [
|
|
14023
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(NameTag, { ...href ? { href, className: "transition-colors hover:text-primary" } : {}, children: name }) }),
|
|
14024
|
+
role && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "text-sm text-muted-foreground", children: role })
|
|
13963
14025
|
] }),
|
|
13964
|
-
/* @__PURE__ */ (0,
|
|
13965
|
-
specialties.length > 0 && /* @__PURE__ */ (0,
|
|
14026
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ProfessionalFields, { fields, variant: "card" }),
|
|
14027
|
+
specialties.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
13966
14028
|
"li",
|
|
13967
14029
|
{
|
|
13968
14030
|
className: "inline-flex items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground",
|
|
@@ -13970,7 +14032,7 @@ function ProfileCard({
|
|
|
13970
14032
|
},
|
|
13971
14033
|
s2
|
|
13972
14034
|
)) }),
|
|
13973
|
-
bio && /* @__PURE__ */ (0,
|
|
14035
|
+
bio && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "text-sm text-muted-foreground", children: bio })
|
|
13974
14036
|
]
|
|
13975
14037
|
}
|
|
13976
14038
|
);
|
|
@@ -13978,11 +14040,11 @@ function ProfileCard({
|
|
|
13978
14040
|
|
|
13979
14041
|
// src/components/product-card.tsx
|
|
13980
14042
|
var import_utils8 = require("@reblu/site-ui/utils");
|
|
13981
|
-
var
|
|
14043
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
13982
14044
|
function ProductCard({ product, href, currencyCode = "EUR", locale, className }) {
|
|
13983
14045
|
const image = product.images.find((i) => i.isPrimary) ?? product.images[0];
|
|
13984
14046
|
const hasDiscount = product.comparePrice != null && product.comparePrice > product.price;
|
|
13985
|
-
return /* @__PURE__ */ (0,
|
|
14047
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
13986
14048
|
"article",
|
|
13987
14049
|
{
|
|
13988
14050
|
className: (0, import_utils8.cn)(
|
|
@@ -13991,7 +14053,7 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
|
|
|
13991
14053
|
),
|
|
13992
14054
|
"data-slot": "product-card",
|
|
13993
14055
|
children: [
|
|
13994
|
-
/* @__PURE__ */ (0,
|
|
14056
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
13995
14057
|
"img",
|
|
13996
14058
|
{
|
|
13997
14059
|
src: image.url,
|
|
@@ -13999,14 +14061,14 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
|
|
|
13999
14061
|
loading: "lazy",
|
|
14000
14062
|
className: "h-full w-full object-cover transition-transform group-hover:scale-105"
|
|
14001
14063
|
}
|
|
14002
|
-
) : /* @__PURE__ */ (0,
|
|
14003
|
-
/* @__PURE__ */ (0,
|
|
14004
|
-
product.category && /* @__PURE__ */ (0,
|
|
14005
|
-
/* @__PURE__ */ (0,
|
|
14006
|
-
product.shortDescription && /* @__PURE__ */ (0,
|
|
14007
|
-
/* @__PURE__ */ (0,
|
|
14008
|
-
/* @__PURE__ */ (0,
|
|
14009
|
-
hasDiscount && /* @__PURE__ */ (0,
|
|
14064
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
|
|
14065
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
|
|
14066
|
+
product.category && /* @__PURE__ */ (0, import_jsx_runtime12.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 }),
|
|
14067
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
|
|
14068
|
+
product.shortDescription && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
|
|
14069
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
|
|
14070
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
|
|
14071
|
+
hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
|
|
14010
14072
|
] })
|
|
14011
14073
|
] })
|
|
14012
14074
|
]
|
|
@@ -14208,7 +14270,7 @@ var __iconNode8 = [
|
|
|
14208
14270
|
var Truck = createLucideIcon("truck", __iconNode8);
|
|
14209
14271
|
|
|
14210
14272
|
// src/components/product-trust-items.tsx
|
|
14211
|
-
var
|
|
14273
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
14212
14274
|
var DEFAULT_TRUST_ICONS = Object.freeze({
|
|
14213
14275
|
shipping: Truck,
|
|
14214
14276
|
returns: RotateCcw,
|
|
@@ -14242,9 +14304,9 @@ function ProductTrustItems({
|
|
|
14242
14304
|
return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
|
|
14243
14305
|
});
|
|
14244
14306
|
if (rows.length === 0) return null;
|
|
14245
|
-
return /* @__PURE__ */ (0,
|
|
14246
|
-
/* @__PURE__ */ (0,
|
|
14247
|
-
/* @__PURE__ */ (0,
|
|
14307
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.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_runtime13.jsxs)("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
|
|
14308
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
|
|
14309
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: text3 })
|
|
14248
14310
|
] }, key2)) });
|
|
14249
14311
|
}
|
|
14250
14312
|
|
|
@@ -14252,7 +14314,7 @@ function ProductTrustItems({
|
|
|
14252
14314
|
var import_utils11 = require("@reblu/site-ui/utils");
|
|
14253
14315
|
|
|
14254
14316
|
// src/components/_heading.tsx
|
|
14255
|
-
var
|
|
14317
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
14256
14318
|
function nextHeadingLevel(level) {
|
|
14257
14319
|
return Math.min(level + 1, 6);
|
|
14258
14320
|
}
|
|
@@ -14262,11 +14324,11 @@ function Heading({
|
|
|
14262
14324
|
children: children2
|
|
14263
14325
|
}) {
|
|
14264
14326
|
const Tag = `h${level}`;
|
|
14265
|
-
return /* @__PURE__ */ (0,
|
|
14327
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Tag, { className, children: children2 });
|
|
14266
14328
|
}
|
|
14267
14329
|
|
|
14268
14330
|
// src/components/faq-accordion.tsx
|
|
14269
|
-
var
|
|
14331
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
14270
14332
|
function FaqAccordion({
|
|
14271
14333
|
items,
|
|
14272
14334
|
heading,
|
|
@@ -14277,18 +14339,18 @@ function FaqAccordion({
|
|
|
14277
14339
|
}) {
|
|
14278
14340
|
const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
|
|
14279
14341
|
if (visible.length === 0) return null;
|
|
14280
|
-
return /* @__PURE__ */ (0,
|
|
14281
|
-
heading && /* @__PURE__ */ (0,
|
|
14282
|
-
/* @__PURE__ */ (0,
|
|
14342
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: (0, import_utils11.cn)("space-y-4", className), "data-slot": "faq-accordion", children: [
|
|
14343
|
+
heading && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
|
|
14344
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
|
|
14283
14345
|
"details",
|
|
14284
14346
|
{
|
|
14285
14347
|
className: "group px-4",
|
|
14286
14348
|
"data-slot": "faq-item",
|
|
14287
14349
|
...defaultOpen.includes(index) ? { open: true } : {},
|
|
14288
14350
|
children: [
|
|
14289
|
-
/* @__PURE__ */ (0,
|
|
14290
|
-
questionHeadingLevel ? /* @__PURE__ */ (0,
|
|
14291
|
-
/* @__PURE__ */ (0,
|
|
14351
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.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: [
|
|
14352
|
+
questionHeadingLevel ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { children: item.q }),
|
|
14353
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
14292
14354
|
"span",
|
|
14293
14355
|
{
|
|
14294
14356
|
"aria-hidden": "true",
|
|
@@ -14297,7 +14359,7 @@ function FaqAccordion({
|
|
|
14297
14359
|
}
|
|
14298
14360
|
)
|
|
14299
14361
|
] }),
|
|
14300
|
-
/* @__PURE__ */ (0,
|
|
14362
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
|
|
14301
14363
|
]
|
|
14302
14364
|
},
|
|
14303
14365
|
index
|
|
@@ -14307,7 +14369,7 @@ function FaqAccordion({
|
|
|
14307
14369
|
|
|
14308
14370
|
// src/components/trust-badges.tsx
|
|
14309
14371
|
var import_utils12 = require("@reblu/site-ui/utils");
|
|
14310
|
-
var
|
|
14372
|
+
var import_jsx_runtime16 = (
|
|
14311
14373
|
// eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
|
|
14312
14374
|
require("react/jsx-runtime")
|
|
14313
14375
|
);
|
|
@@ -14350,7 +14412,7 @@ function safeLogoSrc(url) {
|
|
|
14350
14412
|
function BadgeContent({ badge, logoClassName }) {
|
|
14351
14413
|
const src = safeLogoSrc(badge.logoUrl);
|
|
14352
14414
|
if (src) {
|
|
14353
|
-
return /* @__PURE__ */ (0,
|
|
14415
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14354
14416
|
"img",
|
|
14355
14417
|
{
|
|
14356
14418
|
src,
|
|
@@ -14360,7 +14422,7 @@ function BadgeContent({ badge, logoClassName }) {
|
|
|
14360
14422
|
}
|
|
14361
14423
|
);
|
|
14362
14424
|
}
|
|
14363
|
-
return /* @__PURE__ */ (0,
|
|
14425
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "text-sm font-medium", children: badge.name });
|
|
14364
14426
|
}
|
|
14365
14427
|
function TrustBadges({
|
|
14366
14428
|
badges,
|
|
@@ -14388,14 +14450,14 @@ function TrustBadges({
|
|
|
14388
14450
|
if (groups.length === 0) return null;
|
|
14389
14451
|
const hasHeading = heading !== void 0 && heading !== null && heading !== "";
|
|
14390
14452
|
const groupHeadingLevel = hasHeading ? nextHeadingLevel(headingLevel) : headingLevel;
|
|
14391
|
-
const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ (0,
|
|
14453
|
+
const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
14392
14454
|
"div",
|
|
14393
14455
|
{
|
|
14394
14456
|
"data-slot": "trust-badge-group",
|
|
14395
14457
|
"data-type": type,
|
|
14396
14458
|
className: (0, import_utils12.cn)("space-y-3", groupClassName),
|
|
14397
14459
|
children: [
|
|
14398
|
-
groupHeading ? /* @__PURE__ */ (0,
|
|
14460
|
+
groupHeading ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14399
14461
|
Heading,
|
|
14400
14462
|
{
|
|
14401
14463
|
level: groupHeadingLevel,
|
|
@@ -14407,30 +14469,30 @@ function TrustBadges({
|
|
|
14407
14469
|
children: groupHeading
|
|
14408
14470
|
}
|
|
14409
14471
|
) : null,
|
|
14410
|
-
/* @__PURE__ */ (0,
|
|
14472
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("ul", { className: (0, import_utils12.cn)("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
|
|
14411
14473
|
const href = safeHref(badge.url);
|
|
14412
|
-
return /* @__PURE__ */ (0,
|
|
14413
|
-
/* @__PURE__ */ (0,
|
|
14474
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("li", { children: href ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
|
|
14475
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(BadgeContent, { badge, logoClassName }),
|
|
14414
14476
|
" ",
|
|
14415
|
-
/* @__PURE__ */ (0,
|
|
14416
|
-
] }) : /* @__PURE__ */ (0,
|
|
14477
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "sr-only", children: newWindowLabel })
|
|
14478
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(BadgeContent, { badge, logoClassName }) }, badge.id);
|
|
14417
14479
|
}) })
|
|
14418
14480
|
]
|
|
14419
14481
|
},
|
|
14420
14482
|
type
|
|
14421
14483
|
));
|
|
14422
14484
|
if (!hasHeading) {
|
|
14423
|
-
return /* @__PURE__ */ (0,
|
|
14485
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { "data-slot": "trust-badges", className: (0, import_utils12.cn)("space-y-6", className), children: content });
|
|
14424
14486
|
}
|
|
14425
14487
|
const Tag = `h${headingLevel}`;
|
|
14426
|
-
return /* @__PURE__ */ (0,
|
|
14488
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
14427
14489
|
"section",
|
|
14428
14490
|
{
|
|
14429
14491
|
"data-slot": "trust-badges",
|
|
14430
14492
|
"aria-labelledby": headingId,
|
|
14431
14493
|
className: (0, import_utils12.cn)("space-y-6", className),
|
|
14432
14494
|
children: [
|
|
14433
|
-
/* @__PURE__ */ (0,
|
|
14495
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14434
14496
|
Tag,
|
|
14435
14497
|
{
|
|
14436
14498
|
id: headingId,
|
|
@@ -14447,38 +14509,38 @@ function TrustBadges({
|
|
|
14447
14509
|
// src/components/page-blocks.tsx
|
|
14448
14510
|
var import_utils13 = require("@reblu/site-ui/utils");
|
|
14449
14511
|
var import_button_variants2 = require("@reblu/site-ui/button-variants");
|
|
14450
|
-
var
|
|
14512
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
14451
14513
|
var ALIASES = {
|
|
14452
14514
|
doctor_embed: "profile_embed",
|
|
14453
14515
|
specialty_embed: "page_embed"
|
|
14454
14516
|
};
|
|
14455
14517
|
function HeroBlock({ block, headingLevel }) {
|
|
14456
14518
|
const { title, subtitle, imageUrl } = block.data;
|
|
14457
|
-
return /* @__PURE__ */ (0,
|
|
14458
|
-
/* @__PURE__ */ (0,
|
|
14459
|
-
subtitle && /* @__PURE__ */ (0,
|
|
14460
|
-
imageUrl && /* @__PURE__ */ (0,
|
|
14519
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "space-y-4", children: [
|
|
14520
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
|
|
14521
|
+
subtitle && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-lg opacity-80", children: subtitle }),
|
|
14522
|
+
imageUrl && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
|
|
14461
14523
|
] });
|
|
14462
14524
|
}
|
|
14463
14525
|
function RichtextBlock({ block, headingLevel }) {
|
|
14464
|
-
return /* @__PURE__ */ (0,
|
|
14526
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
|
|
14465
14527
|
}
|
|
14466
14528
|
function FaqBlock({ block }) {
|
|
14467
|
-
return /* @__PURE__ */ (0,
|
|
14529
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(FaqAccordion, { items: block.data.items });
|
|
14468
14530
|
}
|
|
14469
14531
|
function StatsBlock({ block }) {
|
|
14470
|
-
return /* @__PURE__ */ (0,
|
|
14471
|
-
/* @__PURE__ */ (0,
|
|
14472
|
-
/* @__PURE__ */ (0,
|
|
14532
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.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_runtime17.jsxs)("div", { className: "flex flex-col-reverse gap-1", children: [
|
|
14533
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("dt", { className: "text-sm opacity-80", children: item.label }),
|
|
14534
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("dd", { className: "text-3xl font-bold", children: item.value })
|
|
14473
14535
|
] }, i)) });
|
|
14474
14536
|
}
|
|
14475
14537
|
function TestimonialBlock({ block }) {
|
|
14476
14538
|
const { quote, author, role, avatarUrl } = block.data;
|
|
14477
|
-
return /* @__PURE__ */ (0,
|
|
14478
|
-
/* @__PURE__ */ (0,
|
|
14479
|
-
/* @__PURE__ */ (0,
|
|
14539
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("figure", { className: "space-y-4", children: [
|
|
14540
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { children: quote }) }),
|
|
14541
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("figcaption", { className: "flex items-center gap-3", children: [
|
|
14480
14542
|
avatarUrl && // eslint-disable-next-line @next/next/no-img-element
|
|
14481
|
-
/* @__PURE__ */ (0,
|
|
14543
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14482
14544
|
"img",
|
|
14483
14545
|
{
|
|
14484
14546
|
src: avatarUrl,
|
|
@@ -14487,9 +14549,9 @@ function TestimonialBlock({ block }) {
|
|
|
14487
14549
|
className: "h-10 w-10 rounded-full object-cover"
|
|
14488
14550
|
}
|
|
14489
14551
|
),
|
|
14490
|
-
/* @__PURE__ */ (0,
|
|
14491
|
-
/* @__PURE__ */ (0,
|
|
14492
|
-
role && /* @__PURE__ */ (0,
|
|
14552
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("span", { children: [
|
|
14553
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "font-semibold", children: author }),
|
|
14554
|
+
role && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "block text-sm opacity-80", children: role })
|
|
14493
14555
|
] })
|
|
14494
14556
|
] })
|
|
14495
14557
|
] });
|
|
@@ -14498,19 +14560,19 @@ function CtaSlotBlock(_props) {
|
|
|
14498
14560
|
return null;
|
|
14499
14561
|
}
|
|
14500
14562
|
function FeatureListBlock({ block }) {
|
|
14501
|
-
return /* @__PURE__ */ (0,
|
|
14563
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.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_runtime17.jsx)("li", { children: item.text }, i)) });
|
|
14502
14564
|
}
|
|
14503
14565
|
function GalleryBlock({ block }) {
|
|
14504
14566
|
const { images } = block.data;
|
|
14505
|
-
return /* @__PURE__ */ (0,
|
|
14567
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14506
14568
|
"div",
|
|
14507
14569
|
{
|
|
14508
14570
|
className: (0, import_utils13.cn)(
|
|
14509
14571
|
"grid gap-4",
|
|
14510
14572
|
images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
|
|
14511
14573
|
),
|
|
14512
|
-
children: images.map((img, i) => /* @__PURE__ */ (0,
|
|
14513
|
-
/* @__PURE__ */ (0,
|
|
14574
|
+
children: images.map((img, i) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("figure", { className: "space-y-1", children: [
|
|
14575
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14514
14576
|
"img",
|
|
14515
14577
|
{
|
|
14516
14578
|
src: img.url,
|
|
@@ -14519,7 +14581,7 @@ function GalleryBlock({ block }) {
|
|
|
14519
14581
|
className: "h-full w-full object-cover"
|
|
14520
14582
|
}
|
|
14521
14583
|
) }),
|
|
14522
|
-
img.caption && /* @__PURE__ */ (0,
|
|
14584
|
+
img.caption && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
|
|
14523
14585
|
] }, `${img.url}-${i}`))
|
|
14524
14586
|
}
|
|
14525
14587
|
);
|
|
@@ -14529,13 +14591,13 @@ function EmbedCard({
|
|
|
14529
14591
|
headingLevel,
|
|
14530
14592
|
embedHref
|
|
14531
14593
|
}) {
|
|
14532
|
-
return /* @__PURE__ */ (0,
|
|
14594
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
14533
14595
|
"a",
|
|
14534
14596
|
{
|
|
14535
14597
|
href: embedHref(resolved),
|
|
14536
14598
|
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",
|
|
14537
14599
|
children: [
|
|
14538
|
-
resolved.coverImageUrl && /* @__PURE__ */ (0,
|
|
14600
|
+
resolved.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14539
14601
|
"img",
|
|
14540
14602
|
{
|
|
14541
14603
|
src: resolved.coverImageUrl,
|
|
@@ -14544,24 +14606,24 @@ function EmbedCard({
|
|
|
14544
14606
|
className: "h-full w-full object-cover"
|
|
14545
14607
|
}
|
|
14546
14608
|
) }),
|
|
14547
|
-
/* @__PURE__ */ (0,
|
|
14548
|
-
/* @__PURE__ */ (0,
|
|
14549
|
-
resolved.role && /* @__PURE__ */ (0,
|
|
14550
|
-
resolved.excerpt && /* @__PURE__ */ (0,
|
|
14609
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "space-y-1 p-4", children: [
|
|
14610
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
|
|
14611
|
+
resolved.role && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
|
|
14612
|
+
resolved.excerpt && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-muted-foreground", children: resolved.excerpt })
|
|
14551
14613
|
] })
|
|
14552
14614
|
]
|
|
14553
14615
|
}
|
|
14554
14616
|
);
|
|
14555
14617
|
}
|
|
14556
14618
|
function PageEmbedBlock({ block, headingLevel, embedHref }) {
|
|
14557
|
-
return /* @__PURE__ */ (0,
|
|
14619
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
14558
14620
|
}
|
|
14559
14621
|
function ProfileEmbedBlock({
|
|
14560
14622
|
block,
|
|
14561
14623
|
headingLevel,
|
|
14562
14624
|
embedHref
|
|
14563
14625
|
}) {
|
|
14564
|
-
return /* @__PURE__ */ (0,
|
|
14626
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
14565
14627
|
}
|
|
14566
14628
|
var DEFAULT_RENDERERS = {
|
|
14567
14629
|
hero: HeroBlock,
|
|
@@ -14618,7 +14680,7 @@ function toIdFragment(value) {
|
|
|
14618
14680
|
function SectionCta2({ cta }) {
|
|
14619
14681
|
if (!hasUsableCta(cta)) return null;
|
|
14620
14682
|
const variant = toButtonVariant(cta.variant);
|
|
14621
|
-
return /* @__PURE__ */ (0,
|
|
14683
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14622
14684
|
"a",
|
|
14623
14685
|
{
|
|
14624
14686
|
href: cta.url,
|
|
@@ -14651,7 +14713,7 @@ function PageBlocks({
|
|
|
14651
14713
|
const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
|
|
14652
14714
|
const background = block.backgroundColor;
|
|
14653
14715
|
return [
|
|
14654
|
-
/* @__PURE__ */ (0,
|
|
14716
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
14655
14717
|
"section",
|
|
14656
14718
|
{
|
|
14657
14719
|
"data-slot": "page-block",
|
|
@@ -14660,8 +14722,8 @@ function PageBlocks({
|
|
|
14660
14722
|
style: surfaceStyle(background),
|
|
14661
14723
|
className: (0, import_utils13.cn)("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
|
|
14662
14724
|
children: [
|
|
14663
|
-
block.heading && /* @__PURE__ */ (0,
|
|
14664
|
-
/* @__PURE__ */ (0,
|
|
14725
|
+
block.heading && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { id: headingId, children: block.heading }) }),
|
|
14726
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14665
14727
|
Renderer,
|
|
14666
14728
|
{
|
|
14667
14729
|
block,
|
|
@@ -14669,7 +14731,7 @@ function PageBlocks({
|
|
|
14669
14731
|
embedHref
|
|
14670
14732
|
}
|
|
14671
14733
|
),
|
|
14672
|
-
/* @__PURE__ */ (0,
|
|
14734
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SectionCta2, { cta: block.cta })
|
|
14673
14735
|
]
|
|
14674
14736
|
},
|
|
14675
14737
|
block.id
|
|
@@ -14677,12 +14739,12 @@ function PageBlocks({
|
|
|
14677
14739
|
];
|
|
14678
14740
|
});
|
|
14679
14741
|
if (sections.length === 0) return null;
|
|
14680
|
-
return /* @__PURE__ */ (0,
|
|
14742
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: (0, import_utils13.cn)("space-y-12", className), "data-slot": "page-blocks", children: sections });
|
|
14681
14743
|
}
|
|
14682
14744
|
|
|
14683
14745
|
// src/components/shop-filters.tsx
|
|
14684
14746
|
var import_utils14 = require("@reblu/site-ui/utils");
|
|
14685
|
-
var
|
|
14747
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
14686
14748
|
var DEFAULT_SHOP_PRICE_BANDS = [
|
|
14687
14749
|
{ max: 2500 },
|
|
14688
14750
|
{ min: 2500, max: 5e3 },
|
|
@@ -14726,7 +14788,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
|
|
|
14726
14788
|
return "";
|
|
14727
14789
|
}
|
|
14728
14790
|
function OptionLink({ href, active, label, onActivate }) {
|
|
14729
|
-
return /* @__PURE__ */ (0,
|
|
14791
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14730
14792
|
"a",
|
|
14731
14793
|
{
|
|
14732
14794
|
href,
|
|
@@ -14744,9 +14806,9 @@ function OptionLink({ href, active, label, onActivate }) {
|
|
|
14744
14806
|
);
|
|
14745
14807
|
}
|
|
14746
14808
|
function FilterFieldset({ legend, children: children2 }) {
|
|
14747
|
-
return /* @__PURE__ */ (0,
|
|
14748
|
-
/* @__PURE__ */ (0,
|
|
14749
|
-
/* @__PURE__ */ (0,
|
|
14809
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("fieldset", { className: "space-y-2", children: [
|
|
14810
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("legend", { className: "text-sm font-medium text-foreground", children: legend }),
|
|
14811
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "flex flex-wrap gap-2", children: children2 })
|
|
14750
14812
|
] });
|
|
14751
14813
|
}
|
|
14752
14814
|
function ShopFilters({
|
|
@@ -14769,11 +14831,11 @@ function ShopFilters({
|
|
|
14769
14831
|
if (!shouldRenderShopFilters(facets, active)) {
|
|
14770
14832
|
return null;
|
|
14771
14833
|
}
|
|
14772
|
-
return /* @__PURE__ */ (0,
|
|
14834
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: (0, import_utils14.cn)("space-y-6", className), "data-slot": "shop-filters", children: [
|
|
14773
14835
|
visibleTaxonomies.map((axis) => {
|
|
14774
14836
|
const activeSlug = active.taxonomy?.[axis.key];
|
|
14775
|
-
return /* @__PURE__ */ (0,
|
|
14776
|
-
/* @__PURE__ */ (0,
|
|
14837
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(FilterFieldset, { legend: axis.label, children: [
|
|
14838
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14777
14839
|
OptionLink,
|
|
14778
14840
|
{
|
|
14779
14841
|
href: hrefs.taxonomy(axis.key, void 0),
|
|
@@ -14788,7 +14850,7 @@ function ShopFilters({
|
|
|
14788
14850
|
),
|
|
14789
14851
|
axis.terms.map((term) => {
|
|
14790
14852
|
const isActive = activeSlug === term.slug;
|
|
14791
|
-
return /* @__PURE__ */ (0,
|
|
14853
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14792
14854
|
OptionLink,
|
|
14793
14855
|
{
|
|
14794
14856
|
href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
|
|
@@ -14808,9 +14870,9 @@ function ShopFilters({
|
|
|
14808
14870
|
}),
|
|
14809
14871
|
visibleAttributes.map((attr) => {
|
|
14810
14872
|
const activeValues = toValueArray(active.attr?.[attr.key]);
|
|
14811
|
-
return /* @__PURE__ */ (0,
|
|
14873
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
|
|
14812
14874
|
const isActive = activeValues.includes(opt.value);
|
|
14813
|
-
return /* @__PURE__ */ (0,
|
|
14875
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14814
14876
|
OptionLink,
|
|
14815
14877
|
{
|
|
14816
14878
|
href: hrefs.attr(attr.key, opt.value),
|
|
@@ -14828,11 +14890,11 @@ function ShopFilters({
|
|
|
14828
14890
|
);
|
|
14829
14891
|
}) }, attr.key);
|
|
14830
14892
|
}),
|
|
14831
|
-
showPriceGroup && /* @__PURE__ */ (0,
|
|
14893
|
+
showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
|
|
14832
14894
|
const isActive = active.priceMin === band.min && active.priceMax === band.max;
|
|
14833
14895
|
const nextMin = isActive ? void 0 : band.min;
|
|
14834
14896
|
const nextMax = isActive ? void 0 : band.max;
|
|
14835
|
-
return /* @__PURE__ */ (0,
|
|
14897
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14836
14898
|
OptionLink,
|
|
14837
14899
|
{
|
|
14838
14900
|
href: hrefs.price(nextMin, nextMax),
|
|
@@ -14843,7 +14905,7 @@ function ShopFilters({
|
|
|
14843
14905
|
i
|
|
14844
14906
|
);
|
|
14845
14907
|
}) }),
|
|
14846
|
-
hasOnSale && /* @__PURE__ */ (0,
|
|
14908
|
+
hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14847
14909
|
OptionLink,
|
|
14848
14910
|
{
|
|
14849
14911
|
href: hrefs.onSale(!active.onSale),
|
|
@@ -14852,7 +14914,7 @@ function ShopFilters({
|
|
|
14852
14914
|
onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
|
|
14853
14915
|
}
|
|
14854
14916
|
),
|
|
14855
|
-
/* @__PURE__ */ (0,
|
|
14917
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14856
14918
|
"a",
|
|
14857
14919
|
{
|
|
14858
14920
|
href: hrefs.clearAll(),
|
|
@@ -14869,7 +14931,7 @@ function ShopFilters({
|
|
|
14869
14931
|
|
|
14870
14932
|
// src/components/course-catalog-filters.tsx
|
|
14871
14933
|
var import_utils15 = require("@reblu/site-ui/utils");
|
|
14872
|
-
var
|
|
14934
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
14873
14935
|
var DEFAULT_COURSE_PRICE_BANDS = [
|
|
14874
14936
|
{ max: 5e3 },
|
|
14875
14937
|
{ min: 5e3, max: 15e3 },
|
|
@@ -14922,9 +14984,9 @@ function CourseCatalogFilters({
|
|
|
14922
14984
|
const showPrice = enabled.price !== false;
|
|
14923
14985
|
const isFree = Boolean(active.free);
|
|
14924
14986
|
if (!showCategories && !showInstructors && !showPrice) return null;
|
|
14925
|
-
return /* @__PURE__ */ (0,
|
|
14926
|
-
showCategories && /* @__PURE__ */ (0,
|
|
14927
|
-
/* @__PURE__ */ (0,
|
|
14987
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: (0, import_utils15.cn)("space-y-6", className), "data-slot": "course-catalog-filters", children: [
|
|
14988
|
+
showCategories && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(FilterFieldset, { legend: t.category, children: [
|
|
14989
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14928
14990
|
OptionLink,
|
|
14929
14991
|
{
|
|
14930
14992
|
href: categoryHref(void 0),
|
|
@@ -14936,7 +14998,7 @@ function CourseCatalogFilters({
|
|
|
14936
14998
|
sortedCategories.map((category) => {
|
|
14937
14999
|
const isActive = active.category === category.slug;
|
|
14938
15000
|
const next2 = isActive ? void 0 : category.slug;
|
|
14939
|
-
return /* @__PURE__ */ (0,
|
|
15001
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14940
15002
|
OptionLink,
|
|
14941
15003
|
{
|
|
14942
15004
|
href: categoryHref(next2),
|
|
@@ -14948,8 +15010,8 @@ function CourseCatalogFilters({
|
|
|
14948
15010
|
);
|
|
14949
15011
|
})
|
|
14950
15012
|
] }),
|
|
14951
|
-
showInstructors && /* @__PURE__ */ (0,
|
|
14952
|
-
/* @__PURE__ */ (0,
|
|
15013
|
+
showInstructors && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(FilterFieldset, { legend: t.instructor, children: [
|
|
15014
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14953
15015
|
OptionLink,
|
|
14954
15016
|
{
|
|
14955
15017
|
href: hrefs.instructor(void 0),
|
|
@@ -14961,7 +15023,7 @@ function CourseCatalogFilters({
|
|
|
14961
15023
|
named.map((instructor) => {
|
|
14962
15024
|
const isActive = active.instructor === instructor.id;
|
|
14963
15025
|
const next2 = isActive ? void 0 : instructor.id;
|
|
14964
|
-
return /* @__PURE__ */ (0,
|
|
15026
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14965
15027
|
OptionLink,
|
|
14966
15028
|
{
|
|
14967
15029
|
href: hrefs.instructor(next2),
|
|
@@ -14973,8 +15035,8 @@ function CourseCatalogFilters({
|
|
|
14973
15035
|
);
|
|
14974
15036
|
})
|
|
14975
15037
|
] }),
|
|
14976
|
-
showPrice && /* @__PURE__ */ (0,
|
|
14977
|
-
/* @__PURE__ */ (0,
|
|
15038
|
+
showPrice && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(FilterFieldset, { legend: t.price, children: [
|
|
15039
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14978
15040
|
OptionLink,
|
|
14979
15041
|
{
|
|
14980
15042
|
href: hrefs.free(!isFree),
|
|
@@ -14989,7 +15051,7 @@ function CourseCatalogFilters({
|
|
|
14989
15051
|
const isActive = !isFree && active.priceMin === band.min && active.priceMax === band.max;
|
|
14990
15052
|
const nextMin = isActive ? void 0 : band.min;
|
|
14991
15053
|
const nextMax = isActive ? void 0 : band.max;
|
|
14992
|
-
return /* @__PURE__ */ (0,
|
|
15054
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14993
15055
|
OptionLink,
|
|
14994
15056
|
{
|
|
14995
15057
|
href: hrefs.price(nextMin, nextMax),
|
|
@@ -15001,7 +15063,7 @@ function CourseCatalogFilters({
|
|
|
15001
15063
|
);
|
|
15002
15064
|
})
|
|
15003
15065
|
] }),
|
|
15004
|
-
/* @__PURE__ */ (0,
|
|
15066
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
15005
15067
|
"a",
|
|
15006
15068
|
{
|
|
15007
15069
|
href: hrefs.clearAll(),
|
|
@@ -15024,7 +15086,7 @@ function CourseCatalogFilters({
|
|
|
15024
15086
|
|
|
15025
15087
|
// src/components/cart-line-list.tsx
|
|
15026
15088
|
var import_utils16 = require("@reblu/site-ui/utils");
|
|
15027
|
-
var
|
|
15089
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
15028
15090
|
var DEFAULT_LABELS2 = {
|
|
15029
15091
|
quantityLabel: "Cantidad",
|
|
15030
15092
|
decrease: "Reducir cantidad",
|
|
@@ -15050,9 +15112,9 @@ function CartLineList({
|
|
|
15050
15112
|
}) {
|
|
15051
15113
|
const t = { ...DEFAULT_LABELS2, ...labels };
|
|
15052
15114
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
15053
|
-
return /* @__PURE__ */ (0,
|
|
15054
|
-
/* @__PURE__ */ (0,
|
|
15055
|
-
noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0,
|
|
15115
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: (0, import_utils16.cn)("space-y-4", className), "data-slot": "cart-line-list", children: [
|
|
15116
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
|
|
15117
|
+
noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
15056
15118
|
"div",
|
|
15057
15119
|
{
|
|
15058
15120
|
role: "status",
|
|
@@ -15061,33 +15123,33 @@ function CartLineList({
|
|
|
15061
15123
|
children: noticeContent
|
|
15062
15124
|
}
|
|
15063
15125
|
),
|
|
15064
|
-
/* @__PURE__ */ (0,
|
|
15126
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
|
|
15065
15127
|
const maxQty = item.maxStock ?? Infinity;
|
|
15066
15128
|
const atMax = item.quantity >= maxQty;
|
|
15067
15129
|
const atMin = item.quantity <= 1;
|
|
15068
15130
|
const message = lineMessage?.(item);
|
|
15069
|
-
return /* @__PURE__ */ (0,
|
|
15131
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
15070
15132
|
"li",
|
|
15071
15133
|
{
|
|
15072
15134
|
className: "flex gap-4 rounded-xl border border-border bg-card p-4",
|
|
15073
15135
|
children: [
|
|
15074
|
-
/* @__PURE__ */ (0,
|
|
15075
|
-
/* @__PURE__ */ (0,
|
|
15076
|
-
/* @__PURE__ */ (0,
|
|
15077
|
-
item.variantName && /* @__PURE__ */ (0,
|
|
15078
|
-
/* @__PURE__ */ (0,
|
|
15136
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
|
|
15137
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
15138
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
|
|
15139
|
+
item.variantName && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
|
|
15140
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("p", { className: "mt-1 text-sm text-muted-foreground", children: [
|
|
15079
15141
|
formatPrice(item.unitPrice, currencyCode, locale),
|
|
15080
15142
|
" ",
|
|
15081
15143
|
t.unitPriceSuffix
|
|
15082
15144
|
] }),
|
|
15083
|
-
/* @__PURE__ */ (0,
|
|
15145
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
15084
15146
|
"div",
|
|
15085
15147
|
{
|
|
15086
15148
|
role: "group",
|
|
15087
15149
|
"aria-label": t.quantityLabel,
|
|
15088
15150
|
className: "mt-3 flex items-center gap-3",
|
|
15089
15151
|
children: [
|
|
15090
|
-
/* @__PURE__ */ (0,
|
|
15152
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
15091
15153
|
"button",
|
|
15092
15154
|
{
|
|
15093
15155
|
type: "button",
|
|
@@ -15098,8 +15160,8 @@ function CartLineList({
|
|
|
15098
15160
|
children: "\u2212"
|
|
15099
15161
|
}
|
|
15100
15162
|
),
|
|
15101
|
-
/* @__PURE__ */ (0,
|
|
15102
|
-
/* @__PURE__ */ (0,
|
|
15163
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
|
|
15164
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
15103
15165
|
"button",
|
|
15104
15166
|
{
|
|
15105
15167
|
type: "button",
|
|
@@ -15110,7 +15172,7 @@ function CartLineList({
|
|
|
15110
15172
|
children: "+"
|
|
15111
15173
|
}
|
|
15112
15174
|
),
|
|
15113
|
-
onRemove && /* @__PURE__ */ (0,
|
|
15175
|
+
onRemove && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
15114
15176
|
"button",
|
|
15115
15177
|
{
|
|
15116
15178
|
type: "button",
|
|
@@ -15123,7 +15185,7 @@ function CartLineList({
|
|
|
15123
15185
|
]
|
|
15124
15186
|
}
|
|
15125
15187
|
),
|
|
15126
|
-
message != null && message !== false && /* @__PURE__ */ (0,
|
|
15188
|
+
message != null && message !== false && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
15127
15189
|
"p",
|
|
15128
15190
|
{
|
|
15129
15191
|
className: "mt-2 text-sm text-destructive",
|
|
@@ -15132,7 +15194,7 @@ function CartLineList({
|
|
|
15132
15194
|
}
|
|
15133
15195
|
)
|
|
15134
15196
|
] }),
|
|
15135
|
-
/* @__PURE__ */ (0,
|
|
15197
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
|
|
15136
15198
|
]
|
|
15137
15199
|
},
|
|
15138
15200
|
lineKey(item.productId, item.variantId)
|
|
@@ -15143,7 +15205,7 @@ function CartLineList({
|
|
|
15143
15205
|
|
|
15144
15206
|
// src/components/cart-summary.tsx
|
|
15145
15207
|
var import_utils17 = require("@reblu/site-ui/utils");
|
|
15146
|
-
var
|
|
15208
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
15147
15209
|
var DEFAULT_LABELS3 = {
|
|
15148
15210
|
subtotal: "Subtotal",
|
|
15149
15211
|
discountPrefix: "Descuento",
|
|
@@ -15173,37 +15235,37 @@ function CartSummary({
|
|
|
15173
15235
|
const hasDiscount = Boolean(discountAmount && discountAmount > 0);
|
|
15174
15236
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
15175
15237
|
const hasNotice = noticeContent != null && noticeContent !== false;
|
|
15176
|
-
const breakdown = /* @__PURE__ */ (0,
|
|
15238
|
+
const breakdown = /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
15177
15239
|
"dl",
|
|
15178
15240
|
{
|
|
15179
15241
|
className: (0, import_utils17.cn)("space-y-2 text-sm", !hasNotice && className),
|
|
15180
15242
|
"data-slot": "cart-summary",
|
|
15181
15243
|
children: [
|
|
15182
|
-
/* @__PURE__ */ (0,
|
|
15183
|
-
/* @__PURE__ */ (0,
|
|
15184
|
-
/* @__PURE__ */ (0,
|
|
15244
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
15245
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dt", { children: t.subtotal }),
|
|
15246
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dd", { children: formatPrice(subtotal, currencyCode, locale) })
|
|
15185
15247
|
] }),
|
|
15186
|
-
hasDiscount && /* @__PURE__ */ (0,
|
|
15187
|
-
/* @__PURE__ */ (0,
|
|
15188
|
-
/* @__PURE__ */ (0,
|
|
15248
|
+
hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
|
|
15249
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
|
|
15250
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("dd", { children: [
|
|
15189
15251
|
"-",
|
|
15190
15252
|
formatPrice(discountAmount, currencyCode, locale)
|
|
15191
15253
|
] })
|
|
15192
15254
|
] }),
|
|
15193
|
-
shippingEnabled && /* @__PURE__ */ (0,
|
|
15194
|
-
/* @__PURE__ */ (0,
|
|
15195
|
-
/* @__PURE__ */ (0,
|
|
15255
|
+
shippingEnabled && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
15256
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dt", { children: t.shipping }),
|
|
15257
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
|
|
15196
15258
|
] }),
|
|
15197
|
-
/* @__PURE__ */ (0,
|
|
15198
|
-
/* @__PURE__ */ (0,
|
|
15199
|
-
/* @__PURE__ */ (0,
|
|
15259
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
|
|
15260
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dt", { children: t.total }),
|
|
15261
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dd", { children: formatPrice(total, currencyCode, locale) })
|
|
15200
15262
|
] })
|
|
15201
15263
|
]
|
|
15202
15264
|
}
|
|
15203
15265
|
);
|
|
15204
15266
|
if (!hasNotice) return breakdown;
|
|
15205
|
-
return /* @__PURE__ */ (0,
|
|
15206
|
-
/* @__PURE__ */ (0,
|
|
15267
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: (0, import_utils17.cn)("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
|
|
15268
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15207
15269
|
"div",
|
|
15208
15270
|
{
|
|
15209
15271
|
role: "status",
|
|
@@ -15218,7 +15280,7 @@ function CartSummary({
|
|
|
15218
15280
|
|
|
15219
15281
|
// src/components/cart-adjustments-notice.tsx
|
|
15220
15282
|
var import_utils18 = require("@reblu/site-ui/utils");
|
|
15221
|
-
var
|
|
15283
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
15222
15284
|
var DEFAULT_LABELS4 = {
|
|
15223
15285
|
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.`,
|
|
15224
15286
|
quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
|
|
@@ -15252,20 +15314,20 @@ function CartAdjustmentsNotice({
|
|
|
15252
15314
|
);
|
|
15253
15315
|
}
|
|
15254
15316
|
if (messages.length === 0) return null;
|
|
15255
|
-
return /* @__PURE__ */ (0,
|
|
15317
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15256
15318
|
"div",
|
|
15257
15319
|
{
|
|
15258
15320
|
role: "status",
|
|
15259
15321
|
className: (0, import_utils18.cn)("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
|
|
15260
15322
|
"data-slot": "cart-adjustments-notice",
|
|
15261
|
-
children: messages.length === 1 ? /* @__PURE__ */ (0,
|
|
15323
|
+
children: messages.length === 1 ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { children: messages[0] }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("li", { children: message }, index)) })
|
|
15262
15324
|
}
|
|
15263
15325
|
);
|
|
15264
15326
|
}
|
|
15265
15327
|
|
|
15266
15328
|
// src/components/added-to-cart-toast.tsx
|
|
15267
15329
|
var import_utils19 = require("@reblu/site-ui/utils");
|
|
15268
|
-
var
|
|
15330
|
+
var import_jsx_runtime23 = (
|
|
15269
15331
|
// eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
|
|
15270
15332
|
require("react/jsx-runtime")
|
|
15271
15333
|
);
|
|
@@ -15288,7 +15350,7 @@ function AddedToCartToast({
|
|
|
15288
15350
|
const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
|
|
15289
15351
|
const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
|
|
15290
15352
|
const variant = status === "success" ? "success" : "error";
|
|
15291
|
-
return /* @__PURE__ */ (0,
|
|
15353
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
15292
15354
|
"div",
|
|
15293
15355
|
{
|
|
15294
15356
|
"data-slot": "added-to-cart-toast",
|
|
@@ -15300,12 +15362,12 @@ function AddedToCartToast({
|
|
|
15300
15362
|
className
|
|
15301
15363
|
),
|
|
15302
15364
|
children: [
|
|
15303
|
-
hasThumbnail && /* @__PURE__ */ (0,
|
|
15304
|
-
/* @__PURE__ */ (0,
|
|
15305
|
-
/* @__PURE__ */ (0,
|
|
15306
|
-
/* @__PURE__ */ (0,
|
|
15365
|
+
hasThumbnail && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
|
|
15366
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
15367
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "truncate font-semibold text-foreground", children: productName }),
|
|
15368
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
|
|
15307
15369
|
] }),
|
|
15308
|
-
/* @__PURE__ */ (0,
|
|
15370
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
|
|
15309
15371
|
]
|
|
15310
15372
|
}
|
|
15311
15373
|
);
|
|
@@ -15313,7 +15375,7 @@ function AddedToCartToast({
|
|
|
15313
15375
|
|
|
15314
15376
|
// src/components/checkout-login-prompt.tsx
|
|
15315
15377
|
var import_utils20 = require("@reblu/site-ui/utils");
|
|
15316
|
-
var
|
|
15378
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
15317
15379
|
var DEFAULT_LABELS6 = {
|
|
15318
15380
|
title: "Identificaci\xF3n",
|
|
15319
15381
|
description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
|
|
@@ -15340,9 +15402,9 @@ function CheckoutLoginPrompt({
|
|
|
15340
15402
|
if (!open) return null;
|
|
15341
15403
|
const t = { ...DEFAULT_LABELS6, ...labels };
|
|
15342
15404
|
const isValidEmail = EMAIL_PATTERN.test(email.trim());
|
|
15343
|
-
return /* @__PURE__ */ (0,
|
|
15344
|
-
/* @__PURE__ */ (0,
|
|
15345
|
-
/* @__PURE__ */ (0,
|
|
15405
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment, { children: [
|
|
15406
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
|
|
15407
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
|
|
15346
15408
|
"div",
|
|
15347
15409
|
{
|
|
15348
15410
|
role: "dialog",
|
|
@@ -15354,12 +15416,12 @@ function CheckoutLoginPrompt({
|
|
|
15354
15416
|
className
|
|
15355
15417
|
),
|
|
15356
15418
|
children: [
|
|
15357
|
-
/* @__PURE__ */ (0,
|
|
15358
|
-
/* @__PURE__ */ (0,
|
|
15359
|
-
/* @__PURE__ */ (0,
|
|
15360
|
-
/* @__PURE__ */ (0,
|
|
15419
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
|
|
15420
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { children: [
|
|
15421
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
|
|
15422
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
|
|
15361
15423
|
] }),
|
|
15362
|
-
/* @__PURE__ */ (0,
|
|
15424
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15363
15425
|
"button",
|
|
15364
15426
|
{
|
|
15365
15427
|
type: "button",
|
|
@@ -15370,9 +15432,9 @@ function CheckoutLoginPrompt({
|
|
|
15370
15432
|
}
|
|
15371
15433
|
)
|
|
15372
15434
|
] }),
|
|
15373
|
-
/* @__PURE__ */ (0,
|
|
15374
|
-
/* @__PURE__ */ (0,
|
|
15375
|
-
/* @__PURE__ */ (0,
|
|
15435
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-2", children: [
|
|
15436
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
15437
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15376
15438
|
"input",
|
|
15377
15439
|
{
|
|
15378
15440
|
id: "checkout-login-prompt-email",
|
|
@@ -15387,10 +15449,10 @@ function CheckoutLoginPrompt({
|
|
|
15387
15449
|
)
|
|
15388
15450
|
}
|
|
15389
15451
|
),
|
|
15390
|
-
error && /* @__PURE__ */ (0,
|
|
15452
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-xs text-destructive", children: error })
|
|
15391
15453
|
] }),
|
|
15392
|
-
/* @__PURE__ */ (0,
|
|
15393
|
-
/* @__PURE__ */ (0,
|
|
15454
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-2", children: [
|
|
15455
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15394
15456
|
"button",
|
|
15395
15457
|
{
|
|
15396
15458
|
type: "button",
|
|
@@ -15403,7 +15465,7 @@ function CheckoutLoginPrompt({
|
|
|
15403
15465
|
children: checking ? t.checking : t.continueWithEmail
|
|
15404
15466
|
}
|
|
15405
15467
|
),
|
|
15406
|
-
/* @__PURE__ */ (0,
|
|
15468
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15407
15469
|
"button",
|
|
15408
15470
|
{
|
|
15409
15471
|
type: "button",
|
|
@@ -15422,7 +15484,7 @@ function CheckoutLoginPrompt({
|
|
|
15422
15484
|
// src/components/checkout-form.tsx
|
|
15423
15485
|
var import_utils21 = require("@reblu/site-ui/utils");
|
|
15424
15486
|
var import_phone_input = require("@reblu/site-ui/phone-input");
|
|
15425
|
-
var
|
|
15487
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
15426
15488
|
var DEFAULT_LABELS7 = {
|
|
15427
15489
|
contactTitle: "Datos de contacto",
|
|
15428
15490
|
nameLabel: "Nombre completo",
|
|
@@ -15478,9 +15540,9 @@ function CheckoutForm({
|
|
|
15478
15540
|
event.preventDefault();
|
|
15479
15541
|
if (discountCode.trim() && !discountApplying) onApplyDiscount();
|
|
15480
15542
|
}
|
|
15481
|
-
return /* @__PURE__ */ (0,
|
|
15543
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
|
|
15482
15544
|
loginPrompt,
|
|
15483
|
-
/* @__PURE__ */ (0,
|
|
15545
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
15484
15546
|
"form",
|
|
15485
15547
|
{
|
|
15486
15548
|
"data-testid": "checkout-form",
|
|
@@ -15488,12 +15550,12 @@ function CheckoutForm({
|
|
|
15488
15550
|
className: (0, import_utils21.cn)("space-y-8", className),
|
|
15489
15551
|
"data-slot": "checkout-form",
|
|
15490
15552
|
children: [
|
|
15491
|
-
/* @__PURE__ */ (0,
|
|
15492
|
-
/* @__PURE__ */ (0,
|
|
15493
|
-
/* @__PURE__ */ (0,
|
|
15494
|
-
/* @__PURE__ */ (0,
|
|
15495
|
-
/* @__PURE__ */ (0,
|
|
15496
|
-
/* @__PURE__ */ (0,
|
|
15553
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("section", { className: "space-y-4", children: [
|
|
15554
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
|
|
15555
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
15556
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-1", children: [
|
|
15557
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
|
|
15558
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15497
15559
|
"input",
|
|
15498
15560
|
{
|
|
15499
15561
|
id: "checkout-form-name",
|
|
@@ -15508,11 +15570,11 @@ function CheckoutForm({
|
|
|
15508
15570
|
)
|
|
15509
15571
|
}
|
|
15510
15572
|
),
|
|
15511
|
-
contactErrors?.name && /* @__PURE__ */ (0,
|
|
15573
|
+
contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
|
|
15512
15574
|
] }),
|
|
15513
|
-
/* @__PURE__ */ (0,
|
|
15514
|
-
/* @__PURE__ */ (0,
|
|
15515
|
-
/* @__PURE__ */ (0,
|
|
15575
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-1", children: [
|
|
15576
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
15577
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15516
15578
|
"input",
|
|
15517
15579
|
{
|
|
15518
15580
|
id: "checkout-form-email",
|
|
@@ -15527,9 +15589,9 @@ function CheckoutForm({
|
|
|
15527
15589
|
)
|
|
15528
15590
|
}
|
|
15529
15591
|
),
|
|
15530
|
-
contactErrors?.email && /* @__PURE__ */ (0,
|
|
15592
|
+
contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
|
|
15531
15593
|
] }),
|
|
15532
|
-
/* @__PURE__ */ (0,
|
|
15594
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15533
15595
|
import_phone_input.PhoneInput,
|
|
15534
15596
|
{
|
|
15535
15597
|
id: "checkout-form-phone",
|
|
@@ -15543,26 +15605,26 @@ function CheckoutForm({
|
|
|
15543
15605
|
] })
|
|
15544
15606
|
] }),
|
|
15545
15607
|
children2,
|
|
15546
|
-
generalError ? /* @__PURE__ */ (0,
|
|
15547
|
-
/* @__PURE__ */ (0,
|
|
15548
|
-
/* @__PURE__ */ (0,
|
|
15549
|
-
autoDiscount ? /* @__PURE__ */ (0,
|
|
15608
|
+
generalError ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
|
|
15609
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("section", { className: "space-y-3", children: [
|
|
15610
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
|
|
15611
|
+
autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
15550
15612
|
"div",
|
|
15551
15613
|
{
|
|
15552
15614
|
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",
|
|
15553
15615
|
"data-slot": "checkout-staff-discount",
|
|
15554
15616
|
children: [
|
|
15555
|
-
/* @__PURE__ */ (0,
|
|
15556
|
-
/* @__PURE__ */ (0,
|
|
15617
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "font-semibold", children: t.staffDiscountApplied }),
|
|
15618
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
|
|
15557
15619
|
]
|
|
15558
15620
|
}
|
|
15559
15621
|
) : null,
|
|
15560
|
-
appliedDiscount && !autoDiscount ? /* @__PURE__ */ (0,
|
|
15561
|
-
/* @__PURE__ */ (0,
|
|
15562
|
-
/* @__PURE__ */ (0,
|
|
15563
|
-
/* @__PURE__ */ (0,
|
|
15622
|
+
appliedDiscount && !autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime25.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: [
|
|
15623
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
|
|
15624
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "font-semibold", children: appliedDiscount.code }),
|
|
15625
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
|
|
15564
15626
|
] }),
|
|
15565
|
-
/* @__PURE__ */ (0,
|
|
15627
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15566
15628
|
"button",
|
|
15567
15629
|
{
|
|
15568
15630
|
type: "button",
|
|
@@ -15572,9 +15634,9 @@ function CheckoutForm({
|
|
|
15572
15634
|
children: t.removeDiscount
|
|
15573
15635
|
}
|
|
15574
15636
|
)
|
|
15575
|
-
] }) : /* @__PURE__ */ (0,
|
|
15576
|
-
/* @__PURE__ */ (0,
|
|
15577
|
-
/* @__PURE__ */ (0,
|
|
15637
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex gap-2", children: [
|
|
15638
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
|
|
15639
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15578
15640
|
"input",
|
|
15579
15641
|
{
|
|
15580
15642
|
id: "checkout-form-discount-code",
|
|
@@ -15586,7 +15648,7 @@ function CheckoutForm({
|
|
|
15586
15648
|
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"
|
|
15587
15649
|
}
|
|
15588
15650
|
),
|
|
15589
|
-
/* @__PURE__ */ (0,
|
|
15651
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15590
15652
|
"button",
|
|
15591
15653
|
{
|
|
15592
15654
|
type: "button",
|
|
@@ -15597,9 +15659,9 @@ function CheckoutForm({
|
|
|
15597
15659
|
}
|
|
15598
15660
|
)
|
|
15599
15661
|
] }),
|
|
15600
|
-
discountError && /* @__PURE__ */ (0,
|
|
15662
|
+
discountError && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-xs text-destructive", children: discountError })
|
|
15601
15663
|
] }),
|
|
15602
|
-
/* @__PURE__ */ (0,
|
|
15664
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15603
15665
|
"button",
|
|
15604
15666
|
{
|
|
15605
15667
|
type: "submit",
|
|
@@ -15622,7 +15684,7 @@ var import_utils23 = require("@reblu/site-ui/utils");
|
|
|
15622
15684
|
|
|
15623
15685
|
// src/components/order-invoice-link.tsx
|
|
15624
15686
|
var import_utils22 = require("@reblu/site-ui/utils");
|
|
15625
|
-
var
|
|
15687
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
15626
15688
|
var DEFAULT_LABELS8 = {
|
|
15627
15689
|
linkLabel: "Descargar la factura {number}",
|
|
15628
15690
|
signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
|
|
@@ -15630,8 +15692,8 @@ var DEFAULT_LABELS8 = {
|
|
|
15630
15692
|
function OrderInvoiceLink({ invoice, labels, className }) {
|
|
15631
15693
|
if (!invoice) return null;
|
|
15632
15694
|
const t = { ...DEFAULT_LABELS8, ...labels };
|
|
15633
|
-
return /* @__PURE__ */ (0,
|
|
15634
|
-
/* @__PURE__ */ (0,
|
|
15695
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: (0, import_utils22.cn)("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
|
|
15696
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
15635
15697
|
"a",
|
|
15636
15698
|
{
|
|
15637
15699
|
href: invoice.url,
|
|
@@ -15639,12 +15701,12 @@ function OrderInvoiceLink({ invoice, labels, className }) {
|
|
|
15639
15701
|
children: t.linkLabel.replace("{number}", invoice.number)
|
|
15640
15702
|
}
|
|
15641
15703
|
),
|
|
15642
|
-
/* @__PURE__ */ (0,
|
|
15704
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-muted-foreground", children: t.signInHint })
|
|
15643
15705
|
] });
|
|
15644
15706
|
}
|
|
15645
15707
|
|
|
15646
15708
|
// src/components/order-confirmation.tsx
|
|
15647
|
-
var
|
|
15709
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
15648
15710
|
var DEFAULT_LABELS9 = {
|
|
15649
15711
|
pollingTitle: "Confirmando tu pedido\u2026",
|
|
15650
15712
|
pollingDescription: "Estamos procesando el pago, un momento\u2026",
|
|
@@ -15710,43 +15772,43 @@ function OrderConfirmation({
|
|
|
15710
15772
|
const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
|
|
15711
15773
|
const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
|
|
15712
15774
|
const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
|
|
15713
|
-
return /* @__PURE__ */ (0,
|
|
15714
|
-
/* @__PURE__ */ (0,
|
|
15715
|
-
/* @__PURE__ */ (0,
|
|
15716
|
-
showFullOrderSummary && order && /* @__PURE__ */ (0,
|
|
15717
|
-
/* @__PURE__ */ (0,
|
|
15718
|
-
/* @__PURE__ */ (0,
|
|
15719
|
-
/* @__PURE__ */ (0,
|
|
15775
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: (0, import_utils23.cn)("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
|
|
15776
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("h1", { className: "text-3xl font-bold", children: title }),
|
|
15777
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "text-lg text-muted-foreground", children: description }),
|
|
15778
|
+
showFullOrderSummary && order && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "space-y-6", children: [
|
|
15779
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
15780
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
|
|
15781
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
15720
15782
|
] }),
|
|
15721
|
-
/* @__PURE__ */ (0,
|
|
15722
|
-
order.items.map((item, idx) => /* @__PURE__ */ (0,
|
|
15783
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
|
|
15784
|
+
order.items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
15723
15785
|
"div",
|
|
15724
15786
|
{
|
|
15725
15787
|
className: "flex justify-between gap-4 text-sm",
|
|
15726
15788
|
children: [
|
|
15727
|
-
/* @__PURE__ */ (0,
|
|
15789
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
|
|
15728
15790
|
item.product.name,
|
|
15729
15791
|
item.variant ? ` (${item.variant.name})` : "",
|
|
15730
15792
|
" x",
|
|
15731
15793
|
item.quantity
|
|
15732
15794
|
] }),
|
|
15733
|
-
/* @__PURE__ */ (0,
|
|
15795
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
|
|
15734
15796
|
]
|
|
15735
15797
|
},
|
|
15736
15798
|
idx
|
|
15737
15799
|
)),
|
|
15738
|
-
/* @__PURE__ */ (0,
|
|
15739
|
-
/* @__PURE__ */ (0,
|
|
15740
|
-
/* @__PURE__ */ (0,
|
|
15800
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
|
|
15801
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: t.totalLabel }),
|
|
15802
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: formatPrice(order.total, currencyCode, locale) })
|
|
15741
15803
|
] }) })
|
|
15742
15804
|
] }),
|
|
15743
|
-
/* @__PURE__ */ (0,
|
|
15805
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
|
|
15744
15806
|
t.confirmationEmailPrefix,
|
|
15745
15807
|
" ",
|
|
15746
|
-
/* @__PURE__ */ (0,
|
|
15808
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
|
|
15747
15809
|
"."
|
|
15748
15810
|
] }),
|
|
15749
|
-
/* @__PURE__ */ (0,
|
|
15811
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15750
15812
|
OrderInvoiceLink,
|
|
15751
15813
|
{
|
|
15752
15814
|
invoice: order.invoice,
|
|
@@ -15754,11 +15816,11 @@ function OrderConfirmation({
|
|
|
15754
15816
|
}
|
|
15755
15817
|
)
|
|
15756
15818
|
] }),
|
|
15757
|
-
showOrderReference && order && /* @__PURE__ */ (0,
|
|
15758
|
-
/* @__PURE__ */ (0,
|
|
15759
|
-
/* @__PURE__ */ (0,
|
|
15819
|
+
showOrderReference && order && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
15820
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
|
|
15821
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
15760
15822
|
] }),
|
|
15761
|
-
status === "failed" && cartHref && /* @__PURE__ */ (0,
|
|
15823
|
+
status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15762
15824
|
"a",
|
|
15763
15825
|
{
|
|
15764
15826
|
href: cartHref,
|
|
@@ -15766,7 +15828,7 @@ function OrderConfirmation({
|
|
|
15766
15828
|
children: t.backToCartLabel
|
|
15767
15829
|
}
|
|
15768
15830
|
),
|
|
15769
|
-
showRecheck && /* @__PURE__ */ (0,
|
|
15831
|
+
showRecheck && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15770
15832
|
"button",
|
|
15771
15833
|
{
|
|
15772
15834
|
type: "button",
|
|
@@ -15775,16 +15837,16 @@ function OrderConfirmation({
|
|
|
15775
15837
|
children: t.recheckLabel
|
|
15776
15838
|
}
|
|
15777
15839
|
),
|
|
15778
|
-
showSessionReference && /* @__PURE__ */ (0,
|
|
15779
|
-
/* @__PURE__ */ (0,
|
|
15780
|
-
/* @__PURE__ */ (0,
|
|
15840
|
+
showSessionReference && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
15841
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
|
|
15842
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
|
|
15781
15843
|
] })
|
|
15782
15844
|
] });
|
|
15783
15845
|
}
|
|
15784
15846
|
|
|
15785
15847
|
// src/components/full-invoice-fields.tsx
|
|
15786
15848
|
var import_utils24 = require("@reblu/site-ui/utils");
|
|
15787
|
-
var
|
|
15849
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
15788
15850
|
var EMPTY_FULL_INVOICE_VALUE = {
|
|
15789
15851
|
wantsFullInvoice: false,
|
|
15790
15852
|
billingIdType: "NIF",
|
|
@@ -15901,12 +15963,12 @@ function FullInvoiceFields({
|
|
|
15901
15963
|
const showFields = value.wantsFullInvoice || overCap;
|
|
15902
15964
|
const isSpanishNif = value.billingIdType === "NIF";
|
|
15903
15965
|
const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
|
|
15904
|
-
const error = (key2) => errors[key2] ? /* @__PURE__ */ (0,
|
|
15966
|
+
const error = (key2) => errors[key2] ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
|
|
15905
15967
|
const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
|
|
15906
|
-
return /* @__PURE__ */ (0,
|
|
15907
|
-
overCap ? /* @__PURE__ */ (0,
|
|
15908
|
-
/* @__PURE__ */ (0,
|
|
15909
|
-
/* @__PURE__ */ (0,
|
|
15968
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("section", { className: (0, import_utils24.cn)("space-y-4", className), "data-slot": "full-invoice-fields", children: [
|
|
15969
|
+
overCap ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
|
|
15970
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
|
|
15971
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
15910
15972
|
"input",
|
|
15911
15973
|
{
|
|
15912
15974
|
type: "checkbox",
|
|
@@ -15916,12 +15978,12 @@ function FullInvoiceFields({
|
|
|
15916
15978
|
),
|
|
15917
15979
|
t.toggle
|
|
15918
15980
|
] }),
|
|
15919
|
-
/* @__PURE__ */ (0,
|
|
15981
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
|
|
15920
15982
|
] }),
|
|
15921
|
-
showFields && /* @__PURE__ */ (0,
|
|
15922
|
-
/* @__PURE__ */ (0,
|
|
15923
|
-
/* @__PURE__ */ (0,
|
|
15924
|
-
/* @__PURE__ */ (0,
|
|
15983
|
+
showFields && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
15984
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
|
|
15985
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
|
|
15986
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
15925
15987
|
"select",
|
|
15926
15988
|
{
|
|
15927
15989
|
id: "full-invoice-id-type",
|
|
@@ -15930,14 +15992,14 @@ function FullInvoiceFields({
|
|
|
15930
15992
|
value: value.billingIdType,
|
|
15931
15993
|
onChange: (e) => set("billingIdType", e.target.value),
|
|
15932
15994
|
...invalid2("billingIdType"),
|
|
15933
|
-
children: ID_TYPES.map((type) => /* @__PURE__ */ (0,
|
|
15995
|
+
children: ID_TYPES.map((type) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("option", { value: type, children: t.idTypeOptions[type] }, type))
|
|
15934
15996
|
}
|
|
15935
15997
|
),
|
|
15936
15998
|
error("billingIdType")
|
|
15937
15999
|
] }),
|
|
15938
|
-
!isSpanishNif && /* @__PURE__ */ (0,
|
|
15939
|
-
/* @__PURE__ */ (0,
|
|
15940
|
-
/* @__PURE__ */ (0,
|
|
16000
|
+
!isSpanishNif && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
|
|
16001
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
|
|
16002
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
15941
16003
|
"select",
|
|
15942
16004
|
{
|
|
15943
16005
|
id: "full-invoice-id-country",
|
|
@@ -15947,16 +16009,16 @@ function FullInvoiceFields({
|
|
|
15947
16009
|
onChange: (e) => set("billingIdCountry", e.target.value),
|
|
15948
16010
|
...invalid2("billingIdCountry"),
|
|
15949
16011
|
children: [
|
|
15950
|
-
/* @__PURE__ */ (0,
|
|
15951
|
-
countries.map((c) => /* @__PURE__ */ (0,
|
|
16012
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("option", { value: "", disabled: true, children: t.chooseCountry }),
|
|
16013
|
+
countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("option", { value: c.code, children: c.name }, c.code))
|
|
15952
16014
|
]
|
|
15953
16015
|
}
|
|
15954
16016
|
),
|
|
15955
16017
|
error("billingIdCountry")
|
|
15956
16018
|
] }),
|
|
15957
|
-
/* @__PURE__ */ (0,
|
|
15958
|
-
/* @__PURE__ */ (0,
|
|
15959
|
-
/* @__PURE__ */ (0,
|
|
16019
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
|
|
16020
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
|
|
16021
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
15960
16022
|
"input",
|
|
15961
16023
|
{
|
|
15962
16024
|
id: "full-invoice-nif",
|
|
@@ -15969,9 +16031,9 @@ function FullInvoiceFields({
|
|
|
15969
16031
|
),
|
|
15970
16032
|
error("billingNif")
|
|
15971
16033
|
] }),
|
|
15972
|
-
/* @__PURE__ */ (0,
|
|
15973
|
-
/* @__PURE__ */ (0,
|
|
15974
|
-
/* @__PURE__ */ (0,
|
|
16034
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
|
|
16035
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
|
|
16036
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
15975
16037
|
"input",
|
|
15976
16038
|
{
|
|
15977
16039
|
id: "full-invoice-name",
|
|
@@ -15984,9 +16046,9 @@ function FullInvoiceFields({
|
|
|
15984
16046
|
),
|
|
15985
16047
|
error("billingName")
|
|
15986
16048
|
] }),
|
|
15987
|
-
/* @__PURE__ */ (0,
|
|
15988
|
-
/* @__PURE__ */ (0,
|
|
15989
|
-
/* @__PURE__ */ (0,
|
|
16049
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1 sm:col-span-2", children: [
|
|
16050
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
|
|
16051
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
15990
16052
|
"input",
|
|
15991
16053
|
{
|
|
15992
16054
|
id: "full-invoice-street",
|
|
@@ -15998,9 +16060,9 @@ function FullInvoiceFields({
|
|
|
15998
16060
|
}
|
|
15999
16061
|
)
|
|
16000
16062
|
] }),
|
|
16001
|
-
/* @__PURE__ */ (0,
|
|
16002
|
-
/* @__PURE__ */ (0,
|
|
16003
|
-
/* @__PURE__ */ (0,
|
|
16063
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
|
|
16064
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
|
|
16065
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
16004
16066
|
"input",
|
|
16005
16067
|
{
|
|
16006
16068
|
id: "full-invoice-postal-code",
|
|
@@ -16011,9 +16073,9 @@ function FullInvoiceFields({
|
|
|
16011
16073
|
}
|
|
16012
16074
|
)
|
|
16013
16075
|
] }),
|
|
16014
|
-
/* @__PURE__ */ (0,
|
|
16015
|
-
/* @__PURE__ */ (0,
|
|
16016
|
-
/* @__PURE__ */ (0,
|
|
16076
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
|
|
16077
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
|
|
16078
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
16017
16079
|
"input",
|
|
16018
16080
|
{
|
|
16019
16081
|
id: "full-invoice-city",
|
|
@@ -16024,9 +16086,9 @@ function FullInvoiceFields({
|
|
|
16024
16086
|
}
|
|
16025
16087
|
)
|
|
16026
16088
|
] }),
|
|
16027
|
-
/* @__PURE__ */ (0,
|
|
16028
|
-
/* @__PURE__ */ (0,
|
|
16029
|
-
/* @__PURE__ */ (0,
|
|
16089
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
|
|
16090
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
|
|
16091
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
16030
16092
|
"select",
|
|
16031
16093
|
{
|
|
16032
16094
|
id: "full-invoice-country",
|
|
@@ -16034,18 +16096,18 @@ function FullInvoiceFields({
|
|
|
16034
16096
|
required: true,
|
|
16035
16097
|
value: value.country,
|
|
16036
16098
|
onChange: (e) => set("country", e.target.value),
|
|
16037
|
-
children: countries.map((c) => /* @__PURE__ */ (0,
|
|
16099
|
+
children: countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("option", { value: c.code, children: c.name }, c.code))
|
|
16038
16100
|
}
|
|
16039
16101
|
)
|
|
16040
16102
|
] }),
|
|
16041
|
-
/* @__PURE__ */ (0,
|
|
16103
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "sm:col-span-2", children: error("address") })
|
|
16042
16104
|
] })
|
|
16043
16105
|
] });
|
|
16044
16106
|
}
|
|
16045
16107
|
|
|
16046
16108
|
// src/components/contact-interest-field.tsx
|
|
16047
16109
|
var import_utils25 = require("@reblu/site-ui/utils");
|
|
16048
|
-
var
|
|
16110
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
16049
16111
|
function ContactInterestField({
|
|
16050
16112
|
interest,
|
|
16051
16113
|
value,
|
|
@@ -16062,18 +16124,18 @@ function ContactInterestField({
|
|
|
16062
16124
|
else next2.delete(option2);
|
|
16063
16125
|
onChange(interest.options.filter((candidate) => next2.has(candidate)));
|
|
16064
16126
|
};
|
|
16065
|
-
return /* @__PURE__ */ (0,
|
|
16066
|
-
/* @__PURE__ */ (0,
|
|
16067
|
-
/* @__PURE__ */ (0,
|
|
16127
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("fieldset", { "data-slot": "contact-interest", className: (0, import_utils25.cn)("space-y-2", className), children: [
|
|
16128
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("legend", { className: "text-sm font-medium", children: interest.label }),
|
|
16129
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
|
|
16068
16130
|
const id = `${idPrefix}-${index}`;
|
|
16069
|
-
return /* @__PURE__ */ (0,
|
|
16131
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
|
|
16070
16132
|
"label",
|
|
16071
16133
|
{
|
|
16072
16134
|
htmlFor: id,
|
|
16073
16135
|
"data-slot": "contact-interest-option",
|
|
16074
16136
|
className: "flex items-center gap-2 text-sm",
|
|
16075
16137
|
children: [
|
|
16076
|
-
/* @__PURE__ */ (0,
|
|
16138
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
16077
16139
|
"input",
|
|
16078
16140
|
{
|
|
16079
16141
|
id,
|
|
@@ -16122,6 +16184,7 @@ var import_site_contracts = require("@reblu/site-contracts");
|
|
|
16122
16184
|
EMPTY_FULL_INVOICE_VALUE,
|
|
16123
16185
|
FaqAccordion,
|
|
16124
16186
|
FullInvoiceFields,
|
|
16187
|
+
LegalDocument,
|
|
16125
16188
|
LessonPreview,
|
|
16126
16189
|
MarkdownRenderer,
|
|
16127
16190
|
OrderConfirmation,
|