@reblu/site-blocks 0.25.0 → 0.26.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 +20 -0
- package/README.md +99 -0
- 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 +379 -332
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +38 -1
- package/dist/index.d.ts +38 -1
- package/dist/index.js +378 -332
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
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,
|
|
@@ -13594,8 +13595,53 @@ function CoursePurchaseTerms({
|
|
|
13594
13595
|
);
|
|
13595
13596
|
}
|
|
13596
13597
|
|
|
13597
|
-
// src/components/
|
|
13598
|
+
// src/components/legal-document.tsx
|
|
13598
13599
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
13600
|
+
function isVisiblyEmpty2(html5) {
|
|
13601
|
+
if (/<(img|iframe|hr)\b/i.test(html5)) return false;
|
|
13602
|
+
return html5.replace(/<[^>]*>/g, "").trim() === "";
|
|
13603
|
+
}
|
|
13604
|
+
function LegalDocument({
|
|
13605
|
+
content,
|
|
13606
|
+
title,
|
|
13607
|
+
fallback,
|
|
13608
|
+
titleId = "legal-document-title",
|
|
13609
|
+
className,
|
|
13610
|
+
titleClassName,
|
|
13611
|
+
contentClassName
|
|
13612
|
+
}) {
|
|
13613
|
+
const html5 = markdownToSafeHtml(typeof content === "string" ? content : null);
|
|
13614
|
+
const isEmpty = !html5 || isVisiblyEmpty2(html5);
|
|
13615
|
+
const hasFallback = fallback !== void 0 && fallback !== null && fallback !== false;
|
|
13616
|
+
if (isEmpty && !hasFallback) return null;
|
|
13617
|
+
const hasTitle = title !== void 0 && title !== null && title !== "";
|
|
13618
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
13619
|
+
"article",
|
|
13620
|
+
{
|
|
13621
|
+
"data-slot": "legal-document",
|
|
13622
|
+
"aria-labelledby": hasTitle ? titleId : void 0,
|
|
13623
|
+
className: slotClassName("space-y-6", "", className),
|
|
13624
|
+
children: [
|
|
13625
|
+
hasTitle && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h1", { id: titleId, className: slotClassName("", "text-3xl font-bold", titleClassName), children: title }),
|
|
13626
|
+
isEmpty ? fallback : (
|
|
13627
|
+
// `html` is already sanitised by `markdownToSafeHtml` — SafeHtml only maps it.
|
|
13628
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
13629
|
+
SafeHtml,
|
|
13630
|
+
{
|
|
13631
|
+
html: html5,
|
|
13632
|
+
headingOffset: hasTitle ? 1 : 0,
|
|
13633
|
+
normalizeHeadings: hasTitle,
|
|
13634
|
+
className: contentClassName
|
|
13635
|
+
}
|
|
13636
|
+
)
|
|
13637
|
+
)
|
|
13638
|
+
]
|
|
13639
|
+
}
|
|
13640
|
+
);
|
|
13641
|
+
}
|
|
13642
|
+
|
|
13643
|
+
// src/components/lesson-preview.tsx
|
|
13644
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
13599
13645
|
var DEFAULT_LESSON_PREVIEW_LABELS = {
|
|
13600
13646
|
badge: "Vista previa gratuita",
|
|
13601
13647
|
player: "V\xEDdeo",
|
|
@@ -13619,7 +13665,7 @@ function clock(seconds) {
|
|
|
13619
13665
|
iso: `PT${h2 > 0 ? `${h2}H` : ""}${m2}M${s2}S`
|
|
13620
13666
|
};
|
|
13621
13667
|
}
|
|
13622
|
-
function
|
|
13668
|
+
function isVisiblyEmpty3(html5) {
|
|
13623
13669
|
if (/<(img|iframe|hr)\b/i.test(html5)) return false;
|
|
13624
13670
|
return html5.replace(/<[^>]*>/g, "").trim() === "";
|
|
13625
13671
|
}
|
|
@@ -13636,17 +13682,17 @@ function LessonPreview({
|
|
|
13636
13682
|
const Tag = `h${headingLevel}`;
|
|
13637
13683
|
const video = lesson.video && isEmbeddable(lesson.video.embedUrl) ? lesson.video : null;
|
|
13638
13684
|
const html5 = markdownToSafeHtml(lesson.content);
|
|
13639
|
-
const hasBody = html5 !== null && html5 !== "" && !
|
|
13685
|
+
const hasBody = html5 !== null && html5 !== "" && !isVisiblyEmpty3(html5);
|
|
13640
13686
|
const duration = typeof lesson.durationSeconds === "number" && lesson.durationSeconds > 0 ? clock(lesson.durationSeconds) : null;
|
|
13641
|
-
return /* @__PURE__ */ (0,
|
|
13687
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
13642
13688
|
"article",
|
|
13643
13689
|
{
|
|
13644
13690
|
"data-slot": "lesson-preview",
|
|
13645
13691
|
"aria-labelledby": headingId,
|
|
13646
13692
|
className: slotClassName("space-y-6", "", className),
|
|
13647
13693
|
children: [
|
|
13648
|
-
/* @__PURE__ */ (0,
|
|
13649
|
-
/* @__PURE__ */ (0,
|
|
13694
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("header", { className: "space-y-2", children: [
|
|
13695
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
13650
13696
|
"span",
|
|
13651
13697
|
{
|
|
13652
13698
|
"data-slot": "lesson-preview-badge",
|
|
@@ -13654,7 +13700,7 @@ function LessonPreview({
|
|
|
13654
13700
|
children: labels.badge
|
|
13655
13701
|
}
|
|
13656
13702
|
),
|
|
13657
|
-
/* @__PURE__ */ (0,
|
|
13703
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
13658
13704
|
Tag,
|
|
13659
13705
|
{
|
|
13660
13706
|
id: headingId,
|
|
@@ -13662,12 +13708,12 @@ function LessonPreview({
|
|
|
13662
13708
|
children: lesson.title
|
|
13663
13709
|
}
|
|
13664
13710
|
),
|
|
13665
|
-
duration && /* @__PURE__ */ (0,
|
|
13666
|
-
/* @__PURE__ */ (0,
|
|
13711
|
+
duration && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
|
|
13712
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("span", { className: "sr-only", children: [
|
|
13667
13713
|
labels.duration,
|
|
13668
13714
|
": "
|
|
13669
13715
|
] }),
|
|
13670
|
-
/* @__PURE__ */ (0,
|
|
13716
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
13671
13717
|
"time",
|
|
13672
13718
|
{
|
|
13673
13719
|
"data-slot": "lesson-preview-duration",
|
|
@@ -13678,12 +13724,12 @@ function LessonPreview({
|
|
|
13678
13724
|
)
|
|
13679
13725
|
] })
|
|
13680
13726
|
] }),
|
|
13681
|
-
video && /* @__PURE__ */ (0,
|
|
13727
|
+
video && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
13682
13728
|
"div",
|
|
13683
13729
|
{
|
|
13684
13730
|
"data-slot": "lesson-preview-player",
|
|
13685
13731
|
className: "aspect-video w-full overflow-hidden rounded-xl border border-border bg-black",
|
|
13686
|
-
children: /* @__PURE__ */ (0,
|
|
13732
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
13687
13733
|
"iframe",
|
|
13688
13734
|
{
|
|
13689
13735
|
src: video.embedUrl,
|
|
@@ -13697,7 +13743,7 @@ function LessonPreview({
|
|
|
13697
13743
|
)
|
|
13698
13744
|
}
|
|
13699
13745
|
),
|
|
13700
|
-
hasBody && /* @__PURE__ */ (0,
|
|
13746
|
+
hasBody && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { "data-slot": "lesson-preview-content", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
13701
13747
|
SafeHtml,
|
|
13702
13748
|
{
|
|
13703
13749
|
html: html5,
|
|
@@ -13716,7 +13762,7 @@ var import_utils3 = require("@reblu/site-ui/utils");
|
|
|
13716
13762
|
// src/components/_page-parts.tsx
|
|
13717
13763
|
var import_utils2 = require("@reblu/site-ui/utils");
|
|
13718
13764
|
var import_button_variants = require("@reblu/site-ui/button-variants");
|
|
13719
|
-
var
|
|
13765
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
13720
13766
|
var KNOWN_BUTTON_VARIANTS = /* @__PURE__ */ new Set([
|
|
13721
13767
|
"default",
|
|
13722
13768
|
"destructive",
|
|
@@ -13729,11 +13775,11 @@ function toButtonVariant(variant) {
|
|
|
13729
13775
|
return variant && KNOWN_BUTTON_VARIANTS.has(variant) ? variant : "default";
|
|
13730
13776
|
}
|
|
13731
13777
|
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,
|
|
13778
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("header", { className: "space-y-4", children: [
|
|
13779
|
+
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 }),
|
|
13780
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h1", { className: "text-4xl font-bold tracking-tight", children: page.title }),
|
|
13781
|
+
page.subtitle && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("p", { className: "text-lg text-muted-foreground", children: page.subtitle }),
|
|
13782
|
+
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
13783
|
"img",
|
|
13738
13784
|
{
|
|
13739
13785
|
src: page.coverImageUrl,
|
|
@@ -13747,7 +13793,7 @@ function PageHero({ page }) {
|
|
|
13747
13793
|
function SectionCta({ section }) {
|
|
13748
13794
|
if (!section.ctaLabel || !section.ctaUrl) return null;
|
|
13749
13795
|
const variant = toButtonVariant(section.ctaVariant);
|
|
13750
|
-
return /* @__PURE__ */ (0,
|
|
13796
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
13751
13797
|
"a",
|
|
13752
13798
|
{
|
|
13753
13799
|
href: section.ctaUrl,
|
|
@@ -13762,46 +13808,46 @@ function SectionCta({ section }) {
|
|
|
13762
13808
|
}
|
|
13763
13809
|
function SectionImages({ section }) {
|
|
13764
13810
|
if (section.images.length === 0) return null;
|
|
13765
|
-
return /* @__PURE__ */ (0,
|
|
13766
|
-
/* @__PURE__ */ (0,
|
|
13767
|
-
img.caption && /* @__PURE__ */ (0,
|
|
13811
|
+
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: [
|
|
13812
|
+
/* @__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" }) }),
|
|
13813
|
+
img.caption && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
|
|
13768
13814
|
] }, `${img.url}-${img.order}`)) });
|
|
13769
13815
|
}
|
|
13770
13816
|
function PageSectionBlock({ section }) {
|
|
13771
13817
|
const imageFirst = section.layout === "IMAGE_TEXT";
|
|
13772
13818
|
const sideBySide = section.layout === "TEXT_IMAGE" || section.layout === "IMAGE_TEXT";
|
|
13773
13819
|
const hasImages = section.images.length > 0;
|
|
13774
|
-
const body3 = /* @__PURE__ */ (0,
|
|
13775
|
-
section.heading && /* @__PURE__ */ (0,
|
|
13776
|
-
/* @__PURE__ */ (0,
|
|
13777
|
-
/* @__PURE__ */ (0,
|
|
13820
|
+
const body3 = /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { className: "space-y-4", children: [
|
|
13821
|
+
section.heading && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("h2", { className: "text-2xl font-bold", children: section.heading }),
|
|
13822
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SafeHtml, { html: sanitizeHtml(section.contentHtml), headingOffset: 2 }),
|
|
13823
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionCta, { section })
|
|
13778
13824
|
] });
|
|
13779
13825
|
if (sideBySide && hasImages) {
|
|
13780
|
-
return /* @__PURE__ */ (0,
|
|
13781
|
-
/* @__PURE__ */ (0,
|
|
13826
|
+
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: [
|
|
13827
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionImages, { section }),
|
|
13782
13828
|
body3
|
|
13783
|
-
] }) : /* @__PURE__ */ (0,
|
|
13829
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
|
|
13784
13830
|
body3,
|
|
13785
|
-
/* @__PURE__ */ (0,
|
|
13831
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionImages, { section })
|
|
13786
13832
|
] }) });
|
|
13787
13833
|
}
|
|
13788
|
-
return /* @__PURE__ */ (0,
|
|
13834
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("section", { className: "space-y-4", children: [
|
|
13789
13835
|
body3,
|
|
13790
|
-
/* @__PURE__ */ (0,
|
|
13836
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(SectionImages, { section })
|
|
13791
13837
|
] });
|
|
13792
13838
|
}
|
|
13793
13839
|
function PageSectionList({ sections }) {
|
|
13794
13840
|
if (sections.length === 0) return null;
|
|
13795
13841
|
const ordered = sections.slice().sort((a, b2) => a.order - b2.order);
|
|
13796
|
-
return /* @__PURE__ */ (0,
|
|
13842
|
+
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
13843
|
}
|
|
13798
13844
|
|
|
13799
13845
|
// src/components/treatment.tsx
|
|
13800
|
-
var
|
|
13846
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
13801
13847
|
function Treatment({ page, className }) {
|
|
13802
|
-
return /* @__PURE__ */ (0,
|
|
13803
|
-
/* @__PURE__ */ (0,
|
|
13804
|
-
/* @__PURE__ */ (0,
|
|
13848
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("article", { className: (0, import_utils3.cn)("space-y-12", className), "data-slot": "treatment", children: [
|
|
13849
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PageHero, { page }),
|
|
13850
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PageSectionList, { sections: page.sections })
|
|
13805
13851
|
] });
|
|
13806
13852
|
}
|
|
13807
13853
|
|
|
@@ -13810,11 +13856,11 @@ var import_utils5 = require("@reblu/site-ui/utils");
|
|
|
13810
13856
|
|
|
13811
13857
|
// src/components/page-card-grid.tsx
|
|
13812
13858
|
var import_utils4 = require("@reblu/site-ui/utils");
|
|
13813
|
-
var
|
|
13859
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
13814
13860
|
var defaultPageHref = (page) => `/${page.slug}`;
|
|
13815
13861
|
var pageKey = (page) => `${page.category?.slug ?? ""}/${page.slug}`;
|
|
13816
13862
|
function PageCardGrid(props) {
|
|
13817
|
-
return /* @__PURE__ */ (0,
|
|
13863
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PageCardGridSection, { ...props });
|
|
13818
13864
|
}
|
|
13819
13865
|
function PageCardGridSection({
|
|
13820
13866
|
pages,
|
|
@@ -13825,15 +13871,15 @@ function PageCardGridSection({
|
|
|
13825
13871
|
}) {
|
|
13826
13872
|
if (pages.length === 0) return null;
|
|
13827
13873
|
const showHeading = keepEmptyHeading ? heading !== void 0 : !!heading;
|
|
13828
|
-
return /* @__PURE__ */ (0,
|
|
13829
|
-
showHeading && /* @__PURE__ */ (0,
|
|
13830
|
-
/* @__PURE__ */ (0,
|
|
13874
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("section", { className: (0, import_utils4.cn)("space-y-6", className), children: [
|
|
13875
|
+
showHeading && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h2", { className: "text-2xl font-bold", children: heading }),
|
|
13876
|
+
/* @__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
13877
|
"a",
|
|
13832
13878
|
{
|
|
13833
13879
|
href: pageHref(page),
|
|
13834
13880
|
className: "group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
|
|
13835
13881
|
children: [
|
|
13836
|
-
page.coverImageUrl && /* @__PURE__ */ (0,
|
|
13882
|
+
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
13883
|
"img",
|
|
13838
13884
|
{
|
|
13839
13885
|
src: page.coverImageUrl,
|
|
@@ -13842,9 +13888,9 @@ function PageCardGridSection({
|
|
|
13842
13888
|
className: "h-full w-full object-cover transition-transform group-hover:scale-105"
|
|
13843
13889
|
}
|
|
13844
13890
|
) }),
|
|
13845
|
-
/* @__PURE__ */ (0,
|
|
13846
|
-
/* @__PURE__ */ (0,
|
|
13847
|
-
page.excerpt && /* @__PURE__ */ (0,
|
|
13891
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
|
|
13892
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
|
|
13893
|
+
page.excerpt && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
|
|
13848
13894
|
] })
|
|
13849
13895
|
]
|
|
13850
13896
|
}
|
|
@@ -13853,7 +13899,7 @@ function PageCardGridSection({
|
|
|
13853
13899
|
}
|
|
13854
13900
|
|
|
13855
13901
|
// src/components/parent-page.tsx
|
|
13856
|
-
var
|
|
13902
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
13857
13903
|
var defaultChildPageHref = (slug) => `/${slug}`;
|
|
13858
13904
|
function ParentPage({
|
|
13859
13905
|
page,
|
|
@@ -13868,10 +13914,10 @@ function ParentPage({
|
|
|
13868
13914
|
const pages = childPages ?? treatments ?? [];
|
|
13869
13915
|
const hrefFor = childPageHref ?? treatmentHref ?? defaultChildPageHref;
|
|
13870
13916
|
const label = childPagesLabel ?? treatmentsLabel ?? "Treatments";
|
|
13871
|
-
return /* @__PURE__ */ (0,
|
|
13872
|
-
/* @__PURE__ */ (0,
|
|
13873
|
-
/* @__PURE__ */ (0,
|
|
13874
|
-
/* @__PURE__ */ (0,
|
|
13917
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("article", { className: (0, import_utils5.cn)("space-y-12", className), "data-slot": "specialty", children: [
|
|
13918
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PageHero, { page }),
|
|
13919
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PageSectionList, { sections: page.sections }),
|
|
13920
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
13875
13921
|
PageCardGridSection,
|
|
13876
13922
|
{
|
|
13877
13923
|
pages,
|
|
@@ -13891,7 +13937,7 @@ var import_utils7 = require("@reblu/site-ui/utils");
|
|
|
13891
13937
|
|
|
13892
13938
|
// src/components/professional-fields.tsx
|
|
13893
13939
|
var import_utils6 = require("@reblu/site-ui/utils");
|
|
13894
|
-
var
|
|
13940
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
13895
13941
|
function ProfessionalFields({
|
|
13896
13942
|
fields,
|
|
13897
13943
|
variant = "profile",
|
|
@@ -13899,7 +13945,7 @@ function ProfessionalFields({
|
|
|
13899
13945
|
}) {
|
|
13900
13946
|
const shown = (fields ?? []).filter((f) => variant !== "card" || f.showOnCard);
|
|
13901
13947
|
if (shown.length === 0) return null;
|
|
13902
|
-
return /* @__PURE__ */ (0,
|
|
13948
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
13903
13949
|
"dl",
|
|
13904
13950
|
{
|
|
13905
13951
|
className: (0, import_utils6.cn)(
|
|
@@ -13909,13 +13955,13 @@ function ProfessionalFields({
|
|
|
13909
13955
|
),
|
|
13910
13956
|
"data-slot": "professional-fields",
|
|
13911
13957
|
"data-variant": variant,
|
|
13912
|
-
children: shown.map((field, index) => /* @__PURE__ */ (0,
|
|
13958
|
+
children: shown.map((field, index) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
13913
13959
|
"div",
|
|
13914
13960
|
{
|
|
13915
13961
|
className: variant === "card" ? "flex justify-center gap-1" : "contents",
|
|
13916
13962
|
children: [
|
|
13917
|
-
/* @__PURE__ */ (0,
|
|
13918
|
-
/* @__PURE__ */ (0,
|
|
13963
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dt", { className: "text-muted-foreground", children: field.label }),
|
|
13964
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("dd", { className: "m-0 font-medium", children: field.value })
|
|
13919
13965
|
]
|
|
13920
13966
|
},
|
|
13921
13967
|
`${field.label}-${index}`
|
|
@@ -13925,7 +13971,7 @@ function ProfessionalFields({
|
|
|
13925
13971
|
}
|
|
13926
13972
|
|
|
13927
13973
|
// src/components/profile-card.tsx
|
|
13928
|
-
var
|
|
13974
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
13929
13975
|
function initials(name) {
|
|
13930
13976
|
return name.split(/\s+/).filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
|
|
13931
13977
|
}
|
|
@@ -13940,7 +13986,7 @@ function ProfileCard({
|
|
|
13940
13986
|
className
|
|
13941
13987
|
}) {
|
|
13942
13988
|
const NameTag = href ? "a" : "span";
|
|
13943
|
-
return /* @__PURE__ */ (0,
|
|
13989
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
13944
13990
|
"article",
|
|
13945
13991
|
{
|
|
13946
13992
|
className: (0, import_utils7.cn)(
|
|
@@ -13949,7 +13995,7 @@ function ProfileCard({
|
|
|
13949
13995
|
),
|
|
13950
13996
|
"data-slot": "profile-card",
|
|
13951
13997
|
children: [
|
|
13952
|
-
/* @__PURE__ */ (0,
|
|
13998
|
+
/* @__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
13999
|
"span",
|
|
13954
14000
|
{
|
|
13955
14001
|
className: "flex h-full w-full items-center justify-center text-2xl font-semibold text-muted-foreground",
|
|
@@ -13957,12 +14003,12 @@ function ProfileCard({
|
|
|
13957
14003
|
children: initials(name)
|
|
13958
14004
|
}
|
|
13959
14005
|
) }),
|
|
13960
|
-
/* @__PURE__ */ (0,
|
|
13961
|
-
/* @__PURE__ */ (0,
|
|
13962
|
-
role && /* @__PURE__ */ (0,
|
|
14006
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "space-y-1", children: [
|
|
14007
|
+
/* @__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 }) }),
|
|
14008
|
+
role && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "text-sm text-muted-foreground", children: role })
|
|
13963
14009
|
] }),
|
|
13964
|
-
/* @__PURE__ */ (0,
|
|
13965
|
-
specialties.length > 0 && /* @__PURE__ */ (0,
|
|
14010
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ProfessionalFields, { fields, variant: "card" }),
|
|
14011
|
+
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
14012
|
"li",
|
|
13967
14013
|
{
|
|
13968
14014
|
className: "inline-flex items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground",
|
|
@@ -13970,7 +14016,7 @@ function ProfileCard({
|
|
|
13970
14016
|
},
|
|
13971
14017
|
s2
|
|
13972
14018
|
)) }),
|
|
13973
|
-
bio && /* @__PURE__ */ (0,
|
|
14019
|
+
bio && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "text-sm text-muted-foreground", children: bio })
|
|
13974
14020
|
]
|
|
13975
14021
|
}
|
|
13976
14022
|
);
|
|
@@ -13978,11 +14024,11 @@ function ProfileCard({
|
|
|
13978
14024
|
|
|
13979
14025
|
// src/components/product-card.tsx
|
|
13980
14026
|
var import_utils8 = require("@reblu/site-ui/utils");
|
|
13981
|
-
var
|
|
14027
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
13982
14028
|
function ProductCard({ product, href, currencyCode = "EUR", locale, className }) {
|
|
13983
14029
|
const image = product.images.find((i) => i.isPrimary) ?? product.images[0];
|
|
13984
14030
|
const hasDiscount = product.comparePrice != null && product.comparePrice > product.price;
|
|
13985
|
-
return /* @__PURE__ */ (0,
|
|
14031
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
13986
14032
|
"article",
|
|
13987
14033
|
{
|
|
13988
14034
|
className: (0, import_utils8.cn)(
|
|
@@ -13991,7 +14037,7 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
|
|
|
13991
14037
|
),
|
|
13992
14038
|
"data-slot": "product-card",
|
|
13993
14039
|
children: [
|
|
13994
|
-
/* @__PURE__ */ (0,
|
|
14040
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
13995
14041
|
"img",
|
|
13996
14042
|
{
|
|
13997
14043
|
src: image.url,
|
|
@@ -13999,14 +14045,14 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
|
|
|
13999
14045
|
loading: "lazy",
|
|
14000
14046
|
className: "h-full w-full object-cover transition-transform group-hover:scale-105"
|
|
14001
14047
|
}
|
|
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,
|
|
14048
|
+
) : /* @__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" }) }),
|
|
14049
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
|
|
14050
|
+
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 }),
|
|
14051
|
+
/* @__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 }),
|
|
14052
|
+
product.shortDescription && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
|
|
14053
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
|
|
14054
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
|
|
14055
|
+
hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
|
|
14010
14056
|
] })
|
|
14011
14057
|
] })
|
|
14012
14058
|
]
|
|
@@ -14208,7 +14254,7 @@ var __iconNode8 = [
|
|
|
14208
14254
|
var Truck = createLucideIcon("truck", __iconNode8);
|
|
14209
14255
|
|
|
14210
14256
|
// src/components/product-trust-items.tsx
|
|
14211
|
-
var
|
|
14257
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
14212
14258
|
var DEFAULT_TRUST_ICONS = Object.freeze({
|
|
14213
14259
|
shipping: Truck,
|
|
14214
14260
|
returns: RotateCcw,
|
|
@@ -14242,9 +14288,9 @@ function ProductTrustItems({
|
|
|
14242
14288
|
return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
|
|
14243
14289
|
});
|
|
14244
14290
|
if (rows.length === 0) return null;
|
|
14245
|
-
return /* @__PURE__ */ (0,
|
|
14246
|
-
/* @__PURE__ */ (0,
|
|
14247
|
-
/* @__PURE__ */ (0,
|
|
14291
|
+
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: [
|
|
14292
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
|
|
14293
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: text3 })
|
|
14248
14294
|
] }, key2)) });
|
|
14249
14295
|
}
|
|
14250
14296
|
|
|
@@ -14252,7 +14298,7 @@ function ProductTrustItems({
|
|
|
14252
14298
|
var import_utils11 = require("@reblu/site-ui/utils");
|
|
14253
14299
|
|
|
14254
14300
|
// src/components/_heading.tsx
|
|
14255
|
-
var
|
|
14301
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
14256
14302
|
function nextHeadingLevel(level) {
|
|
14257
14303
|
return Math.min(level + 1, 6);
|
|
14258
14304
|
}
|
|
@@ -14262,11 +14308,11 @@ function Heading({
|
|
|
14262
14308
|
children: children2
|
|
14263
14309
|
}) {
|
|
14264
14310
|
const Tag = `h${level}`;
|
|
14265
|
-
return /* @__PURE__ */ (0,
|
|
14311
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Tag, { className, children: children2 });
|
|
14266
14312
|
}
|
|
14267
14313
|
|
|
14268
14314
|
// src/components/faq-accordion.tsx
|
|
14269
|
-
var
|
|
14315
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
14270
14316
|
function FaqAccordion({
|
|
14271
14317
|
items,
|
|
14272
14318
|
heading,
|
|
@@ -14277,18 +14323,18 @@ function FaqAccordion({
|
|
|
14277
14323
|
}) {
|
|
14278
14324
|
const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
|
|
14279
14325
|
if (visible.length === 0) return null;
|
|
14280
|
-
return /* @__PURE__ */ (0,
|
|
14281
|
-
heading && /* @__PURE__ */ (0,
|
|
14282
|
-
/* @__PURE__ */ (0,
|
|
14326
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: (0, import_utils11.cn)("space-y-4", className), "data-slot": "faq-accordion", children: [
|
|
14327
|
+
heading && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
|
|
14328
|
+
/* @__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
14329
|
"details",
|
|
14284
14330
|
{
|
|
14285
14331
|
className: "group px-4",
|
|
14286
14332
|
"data-slot": "faq-item",
|
|
14287
14333
|
...defaultOpen.includes(index) ? { open: true } : {},
|
|
14288
14334
|
children: [
|
|
14289
|
-
/* @__PURE__ */ (0,
|
|
14290
|
-
questionHeadingLevel ? /* @__PURE__ */ (0,
|
|
14291
|
-
/* @__PURE__ */ (0,
|
|
14335
|
+
/* @__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: [
|
|
14336
|
+
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 }),
|
|
14337
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
14292
14338
|
"span",
|
|
14293
14339
|
{
|
|
14294
14340
|
"aria-hidden": "true",
|
|
@@ -14297,7 +14343,7 @@ function FaqAccordion({
|
|
|
14297
14343
|
}
|
|
14298
14344
|
)
|
|
14299
14345
|
] }),
|
|
14300
|
-
/* @__PURE__ */ (0,
|
|
14346
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
|
|
14301
14347
|
]
|
|
14302
14348
|
},
|
|
14303
14349
|
index
|
|
@@ -14307,7 +14353,7 @@ function FaqAccordion({
|
|
|
14307
14353
|
|
|
14308
14354
|
// src/components/trust-badges.tsx
|
|
14309
14355
|
var import_utils12 = require("@reblu/site-ui/utils");
|
|
14310
|
-
var
|
|
14356
|
+
var import_jsx_runtime16 = (
|
|
14311
14357
|
// eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
|
|
14312
14358
|
require("react/jsx-runtime")
|
|
14313
14359
|
);
|
|
@@ -14350,7 +14396,7 @@ function safeLogoSrc(url) {
|
|
|
14350
14396
|
function BadgeContent({ badge, logoClassName }) {
|
|
14351
14397
|
const src = safeLogoSrc(badge.logoUrl);
|
|
14352
14398
|
if (src) {
|
|
14353
|
-
return /* @__PURE__ */ (0,
|
|
14399
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14354
14400
|
"img",
|
|
14355
14401
|
{
|
|
14356
14402
|
src,
|
|
@@ -14360,7 +14406,7 @@ function BadgeContent({ badge, logoClassName }) {
|
|
|
14360
14406
|
}
|
|
14361
14407
|
);
|
|
14362
14408
|
}
|
|
14363
|
-
return /* @__PURE__ */ (0,
|
|
14409
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "text-sm font-medium", children: badge.name });
|
|
14364
14410
|
}
|
|
14365
14411
|
function TrustBadges({
|
|
14366
14412
|
badges,
|
|
@@ -14388,14 +14434,14 @@ function TrustBadges({
|
|
|
14388
14434
|
if (groups.length === 0) return null;
|
|
14389
14435
|
const hasHeading = heading !== void 0 && heading !== null && heading !== "";
|
|
14390
14436
|
const groupHeadingLevel = hasHeading ? nextHeadingLevel(headingLevel) : headingLevel;
|
|
14391
|
-
const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ (0,
|
|
14437
|
+
const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
14392
14438
|
"div",
|
|
14393
14439
|
{
|
|
14394
14440
|
"data-slot": "trust-badge-group",
|
|
14395
14441
|
"data-type": type,
|
|
14396
14442
|
className: (0, import_utils12.cn)("space-y-3", groupClassName),
|
|
14397
14443
|
children: [
|
|
14398
|
-
groupHeading ? /* @__PURE__ */ (0,
|
|
14444
|
+
groupHeading ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14399
14445
|
Heading,
|
|
14400
14446
|
{
|
|
14401
14447
|
level: groupHeadingLevel,
|
|
@@ -14407,30 +14453,30 @@ function TrustBadges({
|
|
|
14407
14453
|
children: groupHeading
|
|
14408
14454
|
}
|
|
14409
14455
|
) : null,
|
|
14410
|
-
/* @__PURE__ */ (0,
|
|
14456
|
+
/* @__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
14457
|
const href = safeHref(badge.url);
|
|
14412
|
-
return /* @__PURE__ */ (0,
|
|
14413
|
-
/* @__PURE__ */ (0,
|
|
14458
|
+
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: [
|
|
14459
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(BadgeContent, { badge, logoClassName }),
|
|
14414
14460
|
" ",
|
|
14415
|
-
/* @__PURE__ */ (0,
|
|
14416
|
-
] }) : /* @__PURE__ */ (0,
|
|
14461
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "sr-only", children: newWindowLabel })
|
|
14462
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(BadgeContent, { badge, logoClassName }) }, badge.id);
|
|
14417
14463
|
}) })
|
|
14418
14464
|
]
|
|
14419
14465
|
},
|
|
14420
14466
|
type
|
|
14421
14467
|
));
|
|
14422
14468
|
if (!hasHeading) {
|
|
14423
|
-
return /* @__PURE__ */ (0,
|
|
14469
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { "data-slot": "trust-badges", className: (0, import_utils12.cn)("space-y-6", className), children: content });
|
|
14424
14470
|
}
|
|
14425
14471
|
const Tag = `h${headingLevel}`;
|
|
14426
|
-
return /* @__PURE__ */ (0,
|
|
14472
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
14427
14473
|
"section",
|
|
14428
14474
|
{
|
|
14429
14475
|
"data-slot": "trust-badges",
|
|
14430
14476
|
"aria-labelledby": headingId,
|
|
14431
14477
|
className: (0, import_utils12.cn)("space-y-6", className),
|
|
14432
14478
|
children: [
|
|
14433
|
-
/* @__PURE__ */ (0,
|
|
14479
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
14434
14480
|
Tag,
|
|
14435
14481
|
{
|
|
14436
14482
|
id: headingId,
|
|
@@ -14447,38 +14493,38 @@ function TrustBadges({
|
|
|
14447
14493
|
// src/components/page-blocks.tsx
|
|
14448
14494
|
var import_utils13 = require("@reblu/site-ui/utils");
|
|
14449
14495
|
var import_button_variants2 = require("@reblu/site-ui/button-variants");
|
|
14450
|
-
var
|
|
14496
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
14451
14497
|
var ALIASES = {
|
|
14452
14498
|
doctor_embed: "profile_embed",
|
|
14453
14499
|
specialty_embed: "page_embed"
|
|
14454
14500
|
};
|
|
14455
14501
|
function HeroBlock({ block, headingLevel }) {
|
|
14456
14502
|
const { title, subtitle, imageUrl } = block.data;
|
|
14457
|
-
return /* @__PURE__ */ (0,
|
|
14458
|
-
/* @__PURE__ */ (0,
|
|
14459
|
-
subtitle && /* @__PURE__ */ (0,
|
|
14460
|
-
imageUrl && /* @__PURE__ */ (0,
|
|
14503
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "space-y-4", children: [
|
|
14504
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
|
|
14505
|
+
subtitle && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-lg opacity-80", children: subtitle }),
|
|
14506
|
+
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
14507
|
] });
|
|
14462
14508
|
}
|
|
14463
14509
|
function RichtextBlock({ block, headingLevel }) {
|
|
14464
|
-
return /* @__PURE__ */ (0,
|
|
14510
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
|
|
14465
14511
|
}
|
|
14466
14512
|
function FaqBlock({ block }) {
|
|
14467
|
-
return /* @__PURE__ */ (0,
|
|
14513
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(FaqAccordion, { items: block.data.items });
|
|
14468
14514
|
}
|
|
14469
14515
|
function StatsBlock({ block }) {
|
|
14470
|
-
return /* @__PURE__ */ (0,
|
|
14471
|
-
/* @__PURE__ */ (0,
|
|
14472
|
-
/* @__PURE__ */ (0,
|
|
14516
|
+
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: [
|
|
14517
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("dt", { className: "text-sm opacity-80", children: item.label }),
|
|
14518
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("dd", { className: "text-3xl font-bold", children: item.value })
|
|
14473
14519
|
] }, i)) });
|
|
14474
14520
|
}
|
|
14475
14521
|
function TestimonialBlock({ block }) {
|
|
14476
14522
|
const { quote, author, role, avatarUrl } = block.data;
|
|
14477
|
-
return /* @__PURE__ */ (0,
|
|
14478
|
-
/* @__PURE__ */ (0,
|
|
14479
|
-
/* @__PURE__ */ (0,
|
|
14523
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("figure", { className: "space-y-4", children: [
|
|
14524
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { children: quote }) }),
|
|
14525
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("figcaption", { className: "flex items-center gap-3", children: [
|
|
14480
14526
|
avatarUrl && // eslint-disable-next-line @next/next/no-img-element
|
|
14481
|
-
/* @__PURE__ */ (0,
|
|
14527
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14482
14528
|
"img",
|
|
14483
14529
|
{
|
|
14484
14530
|
src: avatarUrl,
|
|
@@ -14487,9 +14533,9 @@ function TestimonialBlock({ block }) {
|
|
|
14487
14533
|
className: "h-10 w-10 rounded-full object-cover"
|
|
14488
14534
|
}
|
|
14489
14535
|
),
|
|
14490
|
-
/* @__PURE__ */ (0,
|
|
14491
|
-
/* @__PURE__ */ (0,
|
|
14492
|
-
role && /* @__PURE__ */ (0,
|
|
14536
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("span", { children: [
|
|
14537
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "font-semibold", children: author }),
|
|
14538
|
+
role && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "block text-sm opacity-80", children: role })
|
|
14493
14539
|
] })
|
|
14494
14540
|
] })
|
|
14495
14541
|
] });
|
|
@@ -14498,19 +14544,19 @@ function CtaSlotBlock(_props) {
|
|
|
14498
14544
|
return null;
|
|
14499
14545
|
}
|
|
14500
14546
|
function FeatureListBlock({ block }) {
|
|
14501
|
-
return /* @__PURE__ */ (0,
|
|
14547
|
+
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
14548
|
}
|
|
14503
14549
|
function GalleryBlock({ block }) {
|
|
14504
14550
|
const { images } = block.data;
|
|
14505
|
-
return /* @__PURE__ */ (0,
|
|
14551
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14506
14552
|
"div",
|
|
14507
14553
|
{
|
|
14508
14554
|
className: (0, import_utils13.cn)(
|
|
14509
14555
|
"grid gap-4",
|
|
14510
14556
|
images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
|
|
14511
14557
|
),
|
|
14512
|
-
children: images.map((img, i) => /* @__PURE__ */ (0,
|
|
14513
|
-
/* @__PURE__ */ (0,
|
|
14558
|
+
children: images.map((img, i) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("figure", { className: "space-y-1", children: [
|
|
14559
|
+
/* @__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
14560
|
"img",
|
|
14515
14561
|
{
|
|
14516
14562
|
src: img.url,
|
|
@@ -14519,7 +14565,7 @@ function GalleryBlock({ block }) {
|
|
|
14519
14565
|
className: "h-full w-full object-cover"
|
|
14520
14566
|
}
|
|
14521
14567
|
) }),
|
|
14522
|
-
img.caption && /* @__PURE__ */ (0,
|
|
14568
|
+
img.caption && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
|
|
14523
14569
|
] }, `${img.url}-${i}`))
|
|
14524
14570
|
}
|
|
14525
14571
|
);
|
|
@@ -14529,13 +14575,13 @@ function EmbedCard({
|
|
|
14529
14575
|
headingLevel,
|
|
14530
14576
|
embedHref
|
|
14531
14577
|
}) {
|
|
14532
|
-
return /* @__PURE__ */ (0,
|
|
14578
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
14533
14579
|
"a",
|
|
14534
14580
|
{
|
|
14535
14581
|
href: embedHref(resolved),
|
|
14536
14582
|
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
14583
|
children: [
|
|
14538
|
-
resolved.coverImageUrl && /* @__PURE__ */ (0,
|
|
14584
|
+
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
14585
|
"img",
|
|
14540
14586
|
{
|
|
14541
14587
|
src: resolved.coverImageUrl,
|
|
@@ -14544,24 +14590,24 @@ function EmbedCard({
|
|
|
14544
14590
|
className: "h-full w-full object-cover"
|
|
14545
14591
|
}
|
|
14546
14592
|
) }),
|
|
14547
|
-
/* @__PURE__ */ (0,
|
|
14548
|
-
/* @__PURE__ */ (0,
|
|
14549
|
-
resolved.role && /* @__PURE__ */ (0,
|
|
14550
|
-
resolved.excerpt && /* @__PURE__ */ (0,
|
|
14593
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "space-y-1 p-4", children: [
|
|
14594
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
|
|
14595
|
+
resolved.role && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
|
|
14596
|
+
resolved.excerpt && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "text-muted-foreground", children: resolved.excerpt })
|
|
14551
14597
|
] })
|
|
14552
14598
|
]
|
|
14553
14599
|
}
|
|
14554
14600
|
);
|
|
14555
14601
|
}
|
|
14556
14602
|
function PageEmbedBlock({ block, headingLevel, embedHref }) {
|
|
14557
|
-
return /* @__PURE__ */ (0,
|
|
14603
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
14558
14604
|
}
|
|
14559
14605
|
function ProfileEmbedBlock({
|
|
14560
14606
|
block,
|
|
14561
14607
|
headingLevel,
|
|
14562
14608
|
embedHref
|
|
14563
14609
|
}) {
|
|
14564
|
-
return /* @__PURE__ */ (0,
|
|
14610
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
14565
14611
|
}
|
|
14566
14612
|
var DEFAULT_RENDERERS = {
|
|
14567
14613
|
hero: HeroBlock,
|
|
@@ -14618,7 +14664,7 @@ function toIdFragment(value) {
|
|
|
14618
14664
|
function SectionCta2({ cta }) {
|
|
14619
14665
|
if (!hasUsableCta(cta)) return null;
|
|
14620
14666
|
const variant = toButtonVariant(cta.variant);
|
|
14621
|
-
return /* @__PURE__ */ (0,
|
|
14667
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14622
14668
|
"a",
|
|
14623
14669
|
{
|
|
14624
14670
|
href: cta.url,
|
|
@@ -14651,7 +14697,7 @@ function PageBlocks({
|
|
|
14651
14697
|
const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
|
|
14652
14698
|
const background = block.backgroundColor;
|
|
14653
14699
|
return [
|
|
14654
|
-
/* @__PURE__ */ (0,
|
|
14700
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
14655
14701
|
"section",
|
|
14656
14702
|
{
|
|
14657
14703
|
"data-slot": "page-block",
|
|
@@ -14660,8 +14706,8 @@ function PageBlocks({
|
|
|
14660
14706
|
style: surfaceStyle(background),
|
|
14661
14707
|
className: (0, import_utils13.cn)("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
|
|
14662
14708
|
children: [
|
|
14663
|
-
block.heading && /* @__PURE__ */ (0,
|
|
14664
|
-
/* @__PURE__ */ (0,
|
|
14709
|
+
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 }) }),
|
|
14710
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14665
14711
|
Renderer,
|
|
14666
14712
|
{
|
|
14667
14713
|
block,
|
|
@@ -14669,7 +14715,7 @@ function PageBlocks({
|
|
|
14669
14715
|
embedHref
|
|
14670
14716
|
}
|
|
14671
14717
|
),
|
|
14672
|
-
/* @__PURE__ */ (0,
|
|
14718
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SectionCta2, { cta: block.cta })
|
|
14673
14719
|
]
|
|
14674
14720
|
},
|
|
14675
14721
|
block.id
|
|
@@ -14677,12 +14723,12 @@ function PageBlocks({
|
|
|
14677
14723
|
];
|
|
14678
14724
|
});
|
|
14679
14725
|
if (sections.length === 0) return null;
|
|
14680
|
-
return /* @__PURE__ */ (0,
|
|
14726
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: (0, import_utils13.cn)("space-y-12", className), "data-slot": "page-blocks", children: sections });
|
|
14681
14727
|
}
|
|
14682
14728
|
|
|
14683
14729
|
// src/components/shop-filters.tsx
|
|
14684
14730
|
var import_utils14 = require("@reblu/site-ui/utils");
|
|
14685
|
-
var
|
|
14731
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
14686
14732
|
var DEFAULT_SHOP_PRICE_BANDS = [
|
|
14687
14733
|
{ max: 2500 },
|
|
14688
14734
|
{ min: 2500, max: 5e3 },
|
|
@@ -14726,7 +14772,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
|
|
|
14726
14772
|
return "";
|
|
14727
14773
|
}
|
|
14728
14774
|
function OptionLink({ href, active, label, onActivate }) {
|
|
14729
|
-
return /* @__PURE__ */ (0,
|
|
14775
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14730
14776
|
"a",
|
|
14731
14777
|
{
|
|
14732
14778
|
href,
|
|
@@ -14744,9 +14790,9 @@ function OptionLink({ href, active, label, onActivate }) {
|
|
|
14744
14790
|
);
|
|
14745
14791
|
}
|
|
14746
14792
|
function FilterFieldset({ legend, children: children2 }) {
|
|
14747
|
-
return /* @__PURE__ */ (0,
|
|
14748
|
-
/* @__PURE__ */ (0,
|
|
14749
|
-
/* @__PURE__ */ (0,
|
|
14793
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("fieldset", { className: "space-y-2", children: [
|
|
14794
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("legend", { className: "text-sm font-medium text-foreground", children: legend }),
|
|
14795
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "flex flex-wrap gap-2", children: children2 })
|
|
14750
14796
|
] });
|
|
14751
14797
|
}
|
|
14752
14798
|
function ShopFilters({
|
|
@@ -14769,11 +14815,11 @@ function ShopFilters({
|
|
|
14769
14815
|
if (!shouldRenderShopFilters(facets, active)) {
|
|
14770
14816
|
return null;
|
|
14771
14817
|
}
|
|
14772
|
-
return /* @__PURE__ */ (0,
|
|
14818
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: (0, import_utils14.cn)("space-y-6", className), "data-slot": "shop-filters", children: [
|
|
14773
14819
|
visibleTaxonomies.map((axis) => {
|
|
14774
14820
|
const activeSlug = active.taxonomy?.[axis.key];
|
|
14775
|
-
return /* @__PURE__ */ (0,
|
|
14776
|
-
/* @__PURE__ */ (0,
|
|
14821
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(FilterFieldset, { legend: axis.label, children: [
|
|
14822
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14777
14823
|
OptionLink,
|
|
14778
14824
|
{
|
|
14779
14825
|
href: hrefs.taxonomy(axis.key, void 0),
|
|
@@ -14788,7 +14834,7 @@ function ShopFilters({
|
|
|
14788
14834
|
),
|
|
14789
14835
|
axis.terms.map((term) => {
|
|
14790
14836
|
const isActive = activeSlug === term.slug;
|
|
14791
|
-
return /* @__PURE__ */ (0,
|
|
14837
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14792
14838
|
OptionLink,
|
|
14793
14839
|
{
|
|
14794
14840
|
href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
|
|
@@ -14808,9 +14854,9 @@ function ShopFilters({
|
|
|
14808
14854
|
}),
|
|
14809
14855
|
visibleAttributes.map((attr) => {
|
|
14810
14856
|
const activeValues = toValueArray(active.attr?.[attr.key]);
|
|
14811
|
-
return /* @__PURE__ */ (0,
|
|
14857
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
|
|
14812
14858
|
const isActive = activeValues.includes(opt.value);
|
|
14813
|
-
return /* @__PURE__ */ (0,
|
|
14859
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14814
14860
|
OptionLink,
|
|
14815
14861
|
{
|
|
14816
14862
|
href: hrefs.attr(attr.key, opt.value),
|
|
@@ -14828,11 +14874,11 @@ function ShopFilters({
|
|
|
14828
14874
|
);
|
|
14829
14875
|
}) }, attr.key);
|
|
14830
14876
|
}),
|
|
14831
|
-
showPriceGroup && /* @__PURE__ */ (0,
|
|
14877
|
+
showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
|
|
14832
14878
|
const isActive = active.priceMin === band.min && active.priceMax === band.max;
|
|
14833
14879
|
const nextMin = isActive ? void 0 : band.min;
|
|
14834
14880
|
const nextMax = isActive ? void 0 : band.max;
|
|
14835
|
-
return /* @__PURE__ */ (0,
|
|
14881
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14836
14882
|
OptionLink,
|
|
14837
14883
|
{
|
|
14838
14884
|
href: hrefs.price(nextMin, nextMax),
|
|
@@ -14843,7 +14889,7 @@ function ShopFilters({
|
|
|
14843
14889
|
i
|
|
14844
14890
|
);
|
|
14845
14891
|
}) }),
|
|
14846
|
-
hasOnSale && /* @__PURE__ */ (0,
|
|
14892
|
+
hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14847
14893
|
OptionLink,
|
|
14848
14894
|
{
|
|
14849
14895
|
href: hrefs.onSale(!active.onSale),
|
|
@@ -14852,7 +14898,7 @@ function ShopFilters({
|
|
|
14852
14898
|
onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
|
|
14853
14899
|
}
|
|
14854
14900
|
),
|
|
14855
|
-
/* @__PURE__ */ (0,
|
|
14901
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14856
14902
|
"a",
|
|
14857
14903
|
{
|
|
14858
14904
|
href: hrefs.clearAll(),
|
|
@@ -14869,7 +14915,7 @@ function ShopFilters({
|
|
|
14869
14915
|
|
|
14870
14916
|
// src/components/course-catalog-filters.tsx
|
|
14871
14917
|
var import_utils15 = require("@reblu/site-ui/utils");
|
|
14872
|
-
var
|
|
14918
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
14873
14919
|
var DEFAULT_COURSE_PRICE_BANDS = [
|
|
14874
14920
|
{ max: 5e3 },
|
|
14875
14921
|
{ min: 5e3, max: 15e3 },
|
|
@@ -14922,9 +14968,9 @@ function CourseCatalogFilters({
|
|
|
14922
14968
|
const showPrice = enabled.price !== false;
|
|
14923
14969
|
const isFree = Boolean(active.free);
|
|
14924
14970
|
if (!showCategories && !showInstructors && !showPrice) return null;
|
|
14925
|
-
return /* @__PURE__ */ (0,
|
|
14926
|
-
showCategories && /* @__PURE__ */ (0,
|
|
14927
|
-
/* @__PURE__ */ (0,
|
|
14971
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: (0, import_utils15.cn)("space-y-6", className), "data-slot": "course-catalog-filters", children: [
|
|
14972
|
+
showCategories && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(FilterFieldset, { legend: t.category, children: [
|
|
14973
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14928
14974
|
OptionLink,
|
|
14929
14975
|
{
|
|
14930
14976
|
href: categoryHref(void 0),
|
|
@@ -14936,7 +14982,7 @@ function CourseCatalogFilters({
|
|
|
14936
14982
|
sortedCategories.map((category) => {
|
|
14937
14983
|
const isActive = active.category === category.slug;
|
|
14938
14984
|
const next2 = isActive ? void 0 : category.slug;
|
|
14939
|
-
return /* @__PURE__ */ (0,
|
|
14985
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14940
14986
|
OptionLink,
|
|
14941
14987
|
{
|
|
14942
14988
|
href: categoryHref(next2),
|
|
@@ -14948,8 +14994,8 @@ function CourseCatalogFilters({
|
|
|
14948
14994
|
);
|
|
14949
14995
|
})
|
|
14950
14996
|
] }),
|
|
14951
|
-
showInstructors && /* @__PURE__ */ (0,
|
|
14952
|
-
/* @__PURE__ */ (0,
|
|
14997
|
+
showInstructors && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(FilterFieldset, { legend: t.instructor, children: [
|
|
14998
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14953
14999
|
OptionLink,
|
|
14954
15000
|
{
|
|
14955
15001
|
href: hrefs.instructor(void 0),
|
|
@@ -14961,7 +15007,7 @@ function CourseCatalogFilters({
|
|
|
14961
15007
|
named.map((instructor) => {
|
|
14962
15008
|
const isActive = active.instructor === instructor.id;
|
|
14963
15009
|
const next2 = isActive ? void 0 : instructor.id;
|
|
14964
|
-
return /* @__PURE__ */ (0,
|
|
15010
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14965
15011
|
OptionLink,
|
|
14966
15012
|
{
|
|
14967
15013
|
href: hrefs.instructor(next2),
|
|
@@ -14973,8 +15019,8 @@ function CourseCatalogFilters({
|
|
|
14973
15019
|
);
|
|
14974
15020
|
})
|
|
14975
15021
|
] }),
|
|
14976
|
-
showPrice && /* @__PURE__ */ (0,
|
|
14977
|
-
/* @__PURE__ */ (0,
|
|
15022
|
+
showPrice && /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(FilterFieldset, { legend: t.price, children: [
|
|
15023
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14978
15024
|
OptionLink,
|
|
14979
15025
|
{
|
|
14980
15026
|
href: hrefs.free(!isFree),
|
|
@@ -14989,7 +15035,7 @@ function CourseCatalogFilters({
|
|
|
14989
15035
|
const isActive = !isFree && active.priceMin === band.min && active.priceMax === band.max;
|
|
14990
15036
|
const nextMin = isActive ? void 0 : band.min;
|
|
14991
15037
|
const nextMax = isActive ? void 0 : band.max;
|
|
14992
|
-
return /* @__PURE__ */ (0,
|
|
15038
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14993
15039
|
OptionLink,
|
|
14994
15040
|
{
|
|
14995
15041
|
href: hrefs.price(nextMin, nextMax),
|
|
@@ -15001,7 +15047,7 @@ function CourseCatalogFilters({
|
|
|
15001
15047
|
);
|
|
15002
15048
|
})
|
|
15003
15049
|
] }),
|
|
15004
|
-
/* @__PURE__ */ (0,
|
|
15050
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
15005
15051
|
"a",
|
|
15006
15052
|
{
|
|
15007
15053
|
href: hrefs.clearAll(),
|
|
@@ -15024,7 +15070,7 @@ function CourseCatalogFilters({
|
|
|
15024
15070
|
|
|
15025
15071
|
// src/components/cart-line-list.tsx
|
|
15026
15072
|
var import_utils16 = require("@reblu/site-ui/utils");
|
|
15027
|
-
var
|
|
15073
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
15028
15074
|
var DEFAULT_LABELS2 = {
|
|
15029
15075
|
quantityLabel: "Cantidad",
|
|
15030
15076
|
decrease: "Reducir cantidad",
|
|
@@ -15050,9 +15096,9 @@ function CartLineList({
|
|
|
15050
15096
|
}) {
|
|
15051
15097
|
const t = { ...DEFAULT_LABELS2, ...labels };
|
|
15052
15098
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
15053
|
-
return /* @__PURE__ */ (0,
|
|
15054
|
-
/* @__PURE__ */ (0,
|
|
15055
|
-
noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0,
|
|
15099
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: (0, import_utils16.cn)("space-y-4", className), "data-slot": "cart-line-list", children: [
|
|
15100
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
|
|
15101
|
+
noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
15056
15102
|
"div",
|
|
15057
15103
|
{
|
|
15058
15104
|
role: "status",
|
|
@@ -15061,33 +15107,33 @@ function CartLineList({
|
|
|
15061
15107
|
children: noticeContent
|
|
15062
15108
|
}
|
|
15063
15109
|
),
|
|
15064
|
-
/* @__PURE__ */ (0,
|
|
15110
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
|
|
15065
15111
|
const maxQty = item.maxStock ?? Infinity;
|
|
15066
15112
|
const atMax = item.quantity >= maxQty;
|
|
15067
15113
|
const atMin = item.quantity <= 1;
|
|
15068
15114
|
const message = lineMessage?.(item);
|
|
15069
|
-
return /* @__PURE__ */ (0,
|
|
15115
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
15070
15116
|
"li",
|
|
15071
15117
|
{
|
|
15072
15118
|
className: "flex gap-4 rounded-xl border border-border bg-card p-4",
|
|
15073
15119
|
children: [
|
|
15074
|
-
/* @__PURE__ */ (0,
|
|
15075
|
-
/* @__PURE__ */ (0,
|
|
15076
|
-
/* @__PURE__ */ (0,
|
|
15077
|
-
item.variantName && /* @__PURE__ */ (0,
|
|
15078
|
-
/* @__PURE__ */ (0,
|
|
15120
|
+
/* @__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 }),
|
|
15121
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
15122
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
|
|
15123
|
+
item.variantName && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
|
|
15124
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("p", { className: "mt-1 text-sm text-muted-foreground", children: [
|
|
15079
15125
|
formatPrice(item.unitPrice, currencyCode, locale),
|
|
15080
15126
|
" ",
|
|
15081
15127
|
t.unitPriceSuffix
|
|
15082
15128
|
] }),
|
|
15083
|
-
/* @__PURE__ */ (0,
|
|
15129
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
15084
15130
|
"div",
|
|
15085
15131
|
{
|
|
15086
15132
|
role: "group",
|
|
15087
15133
|
"aria-label": t.quantityLabel,
|
|
15088
15134
|
className: "mt-3 flex items-center gap-3",
|
|
15089
15135
|
children: [
|
|
15090
|
-
/* @__PURE__ */ (0,
|
|
15136
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
15091
15137
|
"button",
|
|
15092
15138
|
{
|
|
15093
15139
|
type: "button",
|
|
@@ -15098,8 +15144,8 @@ function CartLineList({
|
|
|
15098
15144
|
children: "\u2212"
|
|
15099
15145
|
}
|
|
15100
15146
|
),
|
|
15101
|
-
/* @__PURE__ */ (0,
|
|
15102
|
-
/* @__PURE__ */ (0,
|
|
15147
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
|
|
15148
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
15103
15149
|
"button",
|
|
15104
15150
|
{
|
|
15105
15151
|
type: "button",
|
|
@@ -15110,7 +15156,7 @@ function CartLineList({
|
|
|
15110
15156
|
children: "+"
|
|
15111
15157
|
}
|
|
15112
15158
|
),
|
|
15113
|
-
onRemove && /* @__PURE__ */ (0,
|
|
15159
|
+
onRemove && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
15114
15160
|
"button",
|
|
15115
15161
|
{
|
|
15116
15162
|
type: "button",
|
|
@@ -15123,7 +15169,7 @@ function CartLineList({
|
|
|
15123
15169
|
]
|
|
15124
15170
|
}
|
|
15125
15171
|
),
|
|
15126
|
-
message != null && message !== false && /* @__PURE__ */ (0,
|
|
15172
|
+
message != null && message !== false && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
15127
15173
|
"p",
|
|
15128
15174
|
{
|
|
15129
15175
|
className: "mt-2 text-sm text-destructive",
|
|
@@ -15132,7 +15178,7 @@ function CartLineList({
|
|
|
15132
15178
|
}
|
|
15133
15179
|
)
|
|
15134
15180
|
] }),
|
|
15135
|
-
/* @__PURE__ */ (0,
|
|
15181
|
+
/* @__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
15182
|
]
|
|
15137
15183
|
},
|
|
15138
15184
|
lineKey(item.productId, item.variantId)
|
|
@@ -15143,7 +15189,7 @@ function CartLineList({
|
|
|
15143
15189
|
|
|
15144
15190
|
// src/components/cart-summary.tsx
|
|
15145
15191
|
var import_utils17 = require("@reblu/site-ui/utils");
|
|
15146
|
-
var
|
|
15192
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
15147
15193
|
var DEFAULT_LABELS3 = {
|
|
15148
15194
|
subtotal: "Subtotal",
|
|
15149
15195
|
discountPrefix: "Descuento",
|
|
@@ -15173,37 +15219,37 @@ function CartSummary({
|
|
|
15173
15219
|
const hasDiscount = Boolean(discountAmount && discountAmount > 0);
|
|
15174
15220
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
15175
15221
|
const hasNotice = noticeContent != null && noticeContent !== false;
|
|
15176
|
-
const breakdown = /* @__PURE__ */ (0,
|
|
15222
|
+
const breakdown = /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
15177
15223
|
"dl",
|
|
15178
15224
|
{
|
|
15179
15225
|
className: (0, import_utils17.cn)("space-y-2 text-sm", !hasNotice && className),
|
|
15180
15226
|
"data-slot": "cart-summary",
|
|
15181
15227
|
children: [
|
|
15182
|
-
/* @__PURE__ */ (0,
|
|
15183
|
-
/* @__PURE__ */ (0,
|
|
15184
|
-
/* @__PURE__ */ (0,
|
|
15228
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
15229
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dt", { children: t.subtotal }),
|
|
15230
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dd", { children: formatPrice(subtotal, currencyCode, locale) })
|
|
15185
15231
|
] }),
|
|
15186
|
-
hasDiscount && /* @__PURE__ */ (0,
|
|
15187
|
-
/* @__PURE__ */ (0,
|
|
15188
|
-
/* @__PURE__ */ (0,
|
|
15232
|
+
hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
|
|
15233
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
|
|
15234
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("dd", { children: [
|
|
15189
15235
|
"-",
|
|
15190
15236
|
formatPrice(discountAmount, currencyCode, locale)
|
|
15191
15237
|
] })
|
|
15192
15238
|
] }),
|
|
15193
|
-
shippingEnabled && /* @__PURE__ */ (0,
|
|
15194
|
-
/* @__PURE__ */ (0,
|
|
15195
|
-
/* @__PURE__ */ (0,
|
|
15239
|
+
shippingEnabled && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
15240
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dt", { children: t.shipping }),
|
|
15241
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
|
|
15196
15242
|
] }),
|
|
15197
|
-
/* @__PURE__ */ (0,
|
|
15198
|
-
/* @__PURE__ */ (0,
|
|
15199
|
-
/* @__PURE__ */ (0,
|
|
15243
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
|
|
15244
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dt", { children: t.total }),
|
|
15245
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("dd", { children: formatPrice(total, currencyCode, locale) })
|
|
15200
15246
|
] })
|
|
15201
15247
|
]
|
|
15202
15248
|
}
|
|
15203
15249
|
);
|
|
15204
15250
|
if (!hasNotice) return breakdown;
|
|
15205
|
-
return /* @__PURE__ */ (0,
|
|
15206
|
-
/* @__PURE__ */ (0,
|
|
15251
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: (0, import_utils17.cn)("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
|
|
15252
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15207
15253
|
"div",
|
|
15208
15254
|
{
|
|
15209
15255
|
role: "status",
|
|
@@ -15218,7 +15264,7 @@ function CartSummary({
|
|
|
15218
15264
|
|
|
15219
15265
|
// src/components/cart-adjustments-notice.tsx
|
|
15220
15266
|
var import_utils18 = require("@reblu/site-ui/utils");
|
|
15221
|
-
var
|
|
15267
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
15222
15268
|
var DEFAULT_LABELS4 = {
|
|
15223
15269
|
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
15270
|
quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
|
|
@@ -15252,20 +15298,20 @@ function CartAdjustmentsNotice({
|
|
|
15252
15298
|
);
|
|
15253
15299
|
}
|
|
15254
15300
|
if (messages.length === 0) return null;
|
|
15255
|
-
return /* @__PURE__ */ (0,
|
|
15301
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15256
15302
|
"div",
|
|
15257
15303
|
{
|
|
15258
15304
|
role: "status",
|
|
15259
15305
|
className: (0, import_utils18.cn)("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
|
|
15260
15306
|
"data-slot": "cart-adjustments-notice",
|
|
15261
|
-
children: messages.length === 1 ? /* @__PURE__ */ (0,
|
|
15307
|
+
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
15308
|
}
|
|
15263
15309
|
);
|
|
15264
15310
|
}
|
|
15265
15311
|
|
|
15266
15312
|
// src/components/added-to-cart-toast.tsx
|
|
15267
15313
|
var import_utils19 = require("@reblu/site-ui/utils");
|
|
15268
|
-
var
|
|
15314
|
+
var import_jsx_runtime23 = (
|
|
15269
15315
|
// eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
|
|
15270
15316
|
require("react/jsx-runtime")
|
|
15271
15317
|
);
|
|
@@ -15288,7 +15334,7 @@ function AddedToCartToast({
|
|
|
15288
15334
|
const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
|
|
15289
15335
|
const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
|
|
15290
15336
|
const variant = status === "success" ? "success" : "error";
|
|
15291
|
-
return /* @__PURE__ */ (0,
|
|
15337
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
15292
15338
|
"div",
|
|
15293
15339
|
{
|
|
15294
15340
|
"data-slot": "added-to-cart-toast",
|
|
@@ -15300,12 +15346,12 @@ function AddedToCartToast({
|
|
|
15300
15346
|
className
|
|
15301
15347
|
),
|
|
15302
15348
|
children: [
|
|
15303
|
-
hasThumbnail && /* @__PURE__ */ (0,
|
|
15304
|
-
/* @__PURE__ */ (0,
|
|
15305
|
-
/* @__PURE__ */ (0,
|
|
15306
|
-
/* @__PURE__ */ (0,
|
|
15349
|
+
hasThumbnail && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
|
|
15350
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
15351
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "truncate font-semibold text-foreground", children: productName }),
|
|
15352
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
|
|
15307
15353
|
] }),
|
|
15308
|
-
/* @__PURE__ */ (0,
|
|
15354
|
+
/* @__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
15355
|
]
|
|
15310
15356
|
}
|
|
15311
15357
|
);
|
|
@@ -15313,7 +15359,7 @@ function AddedToCartToast({
|
|
|
15313
15359
|
|
|
15314
15360
|
// src/components/checkout-login-prompt.tsx
|
|
15315
15361
|
var import_utils20 = require("@reblu/site-ui/utils");
|
|
15316
|
-
var
|
|
15362
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
15317
15363
|
var DEFAULT_LABELS6 = {
|
|
15318
15364
|
title: "Identificaci\xF3n",
|
|
15319
15365
|
description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
|
|
@@ -15340,9 +15386,9 @@ function CheckoutLoginPrompt({
|
|
|
15340
15386
|
if (!open) return null;
|
|
15341
15387
|
const t = { ...DEFAULT_LABELS6, ...labels };
|
|
15342
15388
|
const isValidEmail = EMAIL_PATTERN.test(email.trim());
|
|
15343
|
-
return /* @__PURE__ */ (0,
|
|
15344
|
-
/* @__PURE__ */ (0,
|
|
15345
|
-
/* @__PURE__ */ (0,
|
|
15389
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment, { children: [
|
|
15390
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
|
|
15391
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
|
|
15346
15392
|
"div",
|
|
15347
15393
|
{
|
|
15348
15394
|
role: "dialog",
|
|
@@ -15354,12 +15400,12 @@ function CheckoutLoginPrompt({
|
|
|
15354
15400
|
className
|
|
15355
15401
|
),
|
|
15356
15402
|
children: [
|
|
15357
|
-
/* @__PURE__ */ (0,
|
|
15358
|
-
/* @__PURE__ */ (0,
|
|
15359
|
-
/* @__PURE__ */ (0,
|
|
15360
|
-
/* @__PURE__ */ (0,
|
|
15403
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
|
|
15404
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { children: [
|
|
15405
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
|
|
15406
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
|
|
15361
15407
|
] }),
|
|
15362
|
-
/* @__PURE__ */ (0,
|
|
15408
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15363
15409
|
"button",
|
|
15364
15410
|
{
|
|
15365
15411
|
type: "button",
|
|
@@ -15370,9 +15416,9 @@ function CheckoutLoginPrompt({
|
|
|
15370
15416
|
}
|
|
15371
15417
|
)
|
|
15372
15418
|
] }),
|
|
15373
|
-
/* @__PURE__ */ (0,
|
|
15374
|
-
/* @__PURE__ */ (0,
|
|
15375
|
-
/* @__PURE__ */ (0,
|
|
15419
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-2", children: [
|
|
15420
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
15421
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15376
15422
|
"input",
|
|
15377
15423
|
{
|
|
15378
15424
|
id: "checkout-login-prompt-email",
|
|
@@ -15387,10 +15433,10 @@ function CheckoutLoginPrompt({
|
|
|
15387
15433
|
)
|
|
15388
15434
|
}
|
|
15389
15435
|
),
|
|
15390
|
-
error && /* @__PURE__ */ (0,
|
|
15436
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-xs text-destructive", children: error })
|
|
15391
15437
|
] }),
|
|
15392
|
-
/* @__PURE__ */ (0,
|
|
15393
|
-
/* @__PURE__ */ (0,
|
|
15438
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "space-y-2", children: [
|
|
15439
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15394
15440
|
"button",
|
|
15395
15441
|
{
|
|
15396
15442
|
type: "button",
|
|
@@ -15403,7 +15449,7 @@ function CheckoutLoginPrompt({
|
|
|
15403
15449
|
children: checking ? t.checking : t.continueWithEmail
|
|
15404
15450
|
}
|
|
15405
15451
|
),
|
|
15406
|
-
/* @__PURE__ */ (0,
|
|
15452
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15407
15453
|
"button",
|
|
15408
15454
|
{
|
|
15409
15455
|
type: "button",
|
|
@@ -15422,7 +15468,7 @@ function CheckoutLoginPrompt({
|
|
|
15422
15468
|
// src/components/checkout-form.tsx
|
|
15423
15469
|
var import_utils21 = require("@reblu/site-ui/utils");
|
|
15424
15470
|
var import_phone_input = require("@reblu/site-ui/phone-input");
|
|
15425
|
-
var
|
|
15471
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
15426
15472
|
var DEFAULT_LABELS7 = {
|
|
15427
15473
|
contactTitle: "Datos de contacto",
|
|
15428
15474
|
nameLabel: "Nombre completo",
|
|
@@ -15478,9 +15524,9 @@ function CheckoutForm({
|
|
|
15478
15524
|
event.preventDefault();
|
|
15479
15525
|
if (discountCode.trim() && !discountApplying) onApplyDiscount();
|
|
15480
15526
|
}
|
|
15481
|
-
return /* @__PURE__ */ (0,
|
|
15527
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
|
|
15482
15528
|
loginPrompt,
|
|
15483
|
-
/* @__PURE__ */ (0,
|
|
15529
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
15484
15530
|
"form",
|
|
15485
15531
|
{
|
|
15486
15532
|
"data-testid": "checkout-form",
|
|
@@ -15488,12 +15534,12 @@ function CheckoutForm({
|
|
|
15488
15534
|
className: (0, import_utils21.cn)("space-y-8", className),
|
|
15489
15535
|
"data-slot": "checkout-form",
|
|
15490
15536
|
children: [
|
|
15491
|
-
/* @__PURE__ */ (0,
|
|
15492
|
-
/* @__PURE__ */ (0,
|
|
15493
|
-
/* @__PURE__ */ (0,
|
|
15494
|
-
/* @__PURE__ */ (0,
|
|
15495
|
-
/* @__PURE__ */ (0,
|
|
15496
|
-
/* @__PURE__ */ (0,
|
|
15537
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("section", { className: "space-y-4", children: [
|
|
15538
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
|
|
15539
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
15540
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-1", children: [
|
|
15541
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
|
|
15542
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15497
15543
|
"input",
|
|
15498
15544
|
{
|
|
15499
15545
|
id: "checkout-form-name",
|
|
@@ -15508,11 +15554,11 @@ function CheckoutForm({
|
|
|
15508
15554
|
)
|
|
15509
15555
|
}
|
|
15510
15556
|
),
|
|
15511
|
-
contactErrors?.name && /* @__PURE__ */ (0,
|
|
15557
|
+
contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
|
|
15512
15558
|
] }),
|
|
15513
|
-
/* @__PURE__ */ (0,
|
|
15514
|
-
/* @__PURE__ */ (0,
|
|
15515
|
-
/* @__PURE__ */ (0,
|
|
15559
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "space-y-1", children: [
|
|
15560
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
15561
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15516
15562
|
"input",
|
|
15517
15563
|
{
|
|
15518
15564
|
id: "checkout-form-email",
|
|
@@ -15527,9 +15573,9 @@ function CheckoutForm({
|
|
|
15527
15573
|
)
|
|
15528
15574
|
}
|
|
15529
15575
|
),
|
|
15530
|
-
contactErrors?.email && /* @__PURE__ */ (0,
|
|
15576
|
+
contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
|
|
15531
15577
|
] }),
|
|
15532
|
-
/* @__PURE__ */ (0,
|
|
15578
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15533
15579
|
import_phone_input.PhoneInput,
|
|
15534
15580
|
{
|
|
15535
15581
|
id: "checkout-form-phone",
|
|
@@ -15543,26 +15589,26 @@ function CheckoutForm({
|
|
|
15543
15589
|
] })
|
|
15544
15590
|
] }),
|
|
15545
15591
|
children2,
|
|
15546
|
-
generalError ? /* @__PURE__ */ (0,
|
|
15547
|
-
/* @__PURE__ */ (0,
|
|
15548
|
-
/* @__PURE__ */ (0,
|
|
15549
|
-
autoDiscount ? /* @__PURE__ */ (0,
|
|
15592
|
+
generalError ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
|
|
15593
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("section", { className: "space-y-3", children: [
|
|
15594
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
|
|
15595
|
+
autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
15550
15596
|
"div",
|
|
15551
15597
|
{
|
|
15552
15598
|
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
15599
|
"data-slot": "checkout-staff-discount",
|
|
15554
15600
|
children: [
|
|
15555
|
-
/* @__PURE__ */ (0,
|
|
15556
|
-
/* @__PURE__ */ (0,
|
|
15601
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "font-semibold", children: t.staffDiscountApplied }),
|
|
15602
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
|
|
15557
15603
|
]
|
|
15558
15604
|
}
|
|
15559
15605
|
) : null,
|
|
15560
|
-
appliedDiscount && !autoDiscount ? /* @__PURE__ */ (0,
|
|
15561
|
-
/* @__PURE__ */ (0,
|
|
15562
|
-
/* @__PURE__ */ (0,
|
|
15563
|
-
/* @__PURE__ */ (0,
|
|
15606
|
+
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: [
|
|
15607
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
|
|
15608
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "font-semibold", children: appliedDiscount.code }),
|
|
15609
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
|
|
15564
15610
|
] }),
|
|
15565
|
-
/* @__PURE__ */ (0,
|
|
15611
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15566
15612
|
"button",
|
|
15567
15613
|
{
|
|
15568
15614
|
type: "button",
|
|
@@ -15572,9 +15618,9 @@ function CheckoutForm({
|
|
|
15572
15618
|
children: t.removeDiscount
|
|
15573
15619
|
}
|
|
15574
15620
|
)
|
|
15575
|
-
] }) : /* @__PURE__ */ (0,
|
|
15576
|
-
/* @__PURE__ */ (0,
|
|
15577
|
-
/* @__PURE__ */ (0,
|
|
15621
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex gap-2", children: [
|
|
15622
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
|
|
15623
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15578
15624
|
"input",
|
|
15579
15625
|
{
|
|
15580
15626
|
id: "checkout-form-discount-code",
|
|
@@ -15586,7 +15632,7 @@ function CheckoutForm({
|
|
|
15586
15632
|
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
15633
|
}
|
|
15588
15634
|
),
|
|
15589
|
-
/* @__PURE__ */ (0,
|
|
15635
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15590
15636
|
"button",
|
|
15591
15637
|
{
|
|
15592
15638
|
type: "button",
|
|
@@ -15597,9 +15643,9 @@ function CheckoutForm({
|
|
|
15597
15643
|
}
|
|
15598
15644
|
)
|
|
15599
15645
|
] }),
|
|
15600
|
-
discountError && /* @__PURE__ */ (0,
|
|
15646
|
+
discountError && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-xs text-destructive", children: discountError })
|
|
15601
15647
|
] }),
|
|
15602
|
-
/* @__PURE__ */ (0,
|
|
15648
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15603
15649
|
"button",
|
|
15604
15650
|
{
|
|
15605
15651
|
type: "submit",
|
|
@@ -15622,7 +15668,7 @@ var import_utils23 = require("@reblu/site-ui/utils");
|
|
|
15622
15668
|
|
|
15623
15669
|
// src/components/order-invoice-link.tsx
|
|
15624
15670
|
var import_utils22 = require("@reblu/site-ui/utils");
|
|
15625
|
-
var
|
|
15671
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
15626
15672
|
var DEFAULT_LABELS8 = {
|
|
15627
15673
|
linkLabel: "Descargar la factura {number}",
|
|
15628
15674
|
signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
|
|
@@ -15630,8 +15676,8 @@ var DEFAULT_LABELS8 = {
|
|
|
15630
15676
|
function OrderInvoiceLink({ invoice, labels, className }) {
|
|
15631
15677
|
if (!invoice) return null;
|
|
15632
15678
|
const t = { ...DEFAULT_LABELS8, ...labels };
|
|
15633
|
-
return /* @__PURE__ */ (0,
|
|
15634
|
-
/* @__PURE__ */ (0,
|
|
15679
|
+
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: [
|
|
15680
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
15635
15681
|
"a",
|
|
15636
15682
|
{
|
|
15637
15683
|
href: invoice.url,
|
|
@@ -15639,12 +15685,12 @@ function OrderInvoiceLink({ invoice, labels, className }) {
|
|
|
15639
15685
|
children: t.linkLabel.replace("{number}", invoice.number)
|
|
15640
15686
|
}
|
|
15641
15687
|
),
|
|
15642
|
-
/* @__PURE__ */ (0,
|
|
15688
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-muted-foreground", children: t.signInHint })
|
|
15643
15689
|
] });
|
|
15644
15690
|
}
|
|
15645
15691
|
|
|
15646
15692
|
// src/components/order-confirmation.tsx
|
|
15647
|
-
var
|
|
15693
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
15648
15694
|
var DEFAULT_LABELS9 = {
|
|
15649
15695
|
pollingTitle: "Confirmando tu pedido\u2026",
|
|
15650
15696
|
pollingDescription: "Estamos procesando el pago, un momento\u2026",
|
|
@@ -15710,43 +15756,43 @@ function OrderConfirmation({
|
|
|
15710
15756
|
const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
|
|
15711
15757
|
const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
|
|
15712
15758
|
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,
|
|
15759
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: (0, import_utils23.cn)("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
|
|
15760
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("h1", { className: "text-3xl font-bold", children: title }),
|
|
15761
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "text-lg text-muted-foreground", children: description }),
|
|
15762
|
+
showFullOrderSummary && order && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "space-y-6", children: [
|
|
15763
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
15764
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
|
|
15765
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
15720
15766
|
] }),
|
|
15721
|
-
/* @__PURE__ */ (0,
|
|
15722
|
-
order.items.map((item, idx) => /* @__PURE__ */ (0,
|
|
15767
|
+
/* @__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: [
|
|
15768
|
+
order.items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
15723
15769
|
"div",
|
|
15724
15770
|
{
|
|
15725
15771
|
className: "flex justify-between gap-4 text-sm",
|
|
15726
15772
|
children: [
|
|
15727
|
-
/* @__PURE__ */ (0,
|
|
15773
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
|
|
15728
15774
|
item.product.name,
|
|
15729
15775
|
item.variant ? ` (${item.variant.name})` : "",
|
|
15730
15776
|
" x",
|
|
15731
15777
|
item.quantity
|
|
15732
15778
|
] }),
|
|
15733
|
-
/* @__PURE__ */ (0,
|
|
15779
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
|
|
15734
15780
|
]
|
|
15735
15781
|
},
|
|
15736
15782
|
idx
|
|
15737
15783
|
)),
|
|
15738
|
-
/* @__PURE__ */ (0,
|
|
15739
|
-
/* @__PURE__ */ (0,
|
|
15740
|
-
/* @__PURE__ */ (0,
|
|
15784
|
+
/* @__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: [
|
|
15785
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: t.totalLabel }),
|
|
15786
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: formatPrice(order.total, currencyCode, locale) })
|
|
15741
15787
|
] }) })
|
|
15742
15788
|
] }),
|
|
15743
|
-
/* @__PURE__ */ (0,
|
|
15789
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
|
|
15744
15790
|
t.confirmationEmailPrefix,
|
|
15745
15791
|
" ",
|
|
15746
|
-
/* @__PURE__ */ (0,
|
|
15792
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
|
|
15747
15793
|
"."
|
|
15748
15794
|
] }),
|
|
15749
|
-
/* @__PURE__ */ (0,
|
|
15795
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15750
15796
|
OrderInvoiceLink,
|
|
15751
15797
|
{
|
|
15752
15798
|
invoice: order.invoice,
|
|
@@ -15754,11 +15800,11 @@ function OrderConfirmation({
|
|
|
15754
15800
|
}
|
|
15755
15801
|
)
|
|
15756
15802
|
] }),
|
|
15757
|
-
showOrderReference && order && /* @__PURE__ */ (0,
|
|
15758
|
-
/* @__PURE__ */ (0,
|
|
15759
|
-
/* @__PURE__ */ (0,
|
|
15803
|
+
showOrderReference && order && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
15804
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
|
|
15805
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
15760
15806
|
] }),
|
|
15761
|
-
status === "failed" && cartHref && /* @__PURE__ */ (0,
|
|
15807
|
+
status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15762
15808
|
"a",
|
|
15763
15809
|
{
|
|
15764
15810
|
href: cartHref,
|
|
@@ -15766,7 +15812,7 @@ function OrderConfirmation({
|
|
|
15766
15812
|
children: t.backToCartLabel
|
|
15767
15813
|
}
|
|
15768
15814
|
),
|
|
15769
|
-
showRecheck && /* @__PURE__ */ (0,
|
|
15815
|
+
showRecheck && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15770
15816
|
"button",
|
|
15771
15817
|
{
|
|
15772
15818
|
type: "button",
|
|
@@ -15775,16 +15821,16 @@ function OrderConfirmation({
|
|
|
15775
15821
|
children: t.recheckLabel
|
|
15776
15822
|
}
|
|
15777
15823
|
),
|
|
15778
|
-
showSessionReference && /* @__PURE__ */ (0,
|
|
15779
|
-
/* @__PURE__ */ (0,
|
|
15780
|
-
/* @__PURE__ */ (0,
|
|
15824
|
+
showSessionReference && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
15825
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
|
|
15826
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
|
|
15781
15827
|
] })
|
|
15782
15828
|
] });
|
|
15783
15829
|
}
|
|
15784
15830
|
|
|
15785
15831
|
// src/components/full-invoice-fields.tsx
|
|
15786
15832
|
var import_utils24 = require("@reblu/site-ui/utils");
|
|
15787
|
-
var
|
|
15833
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
15788
15834
|
var EMPTY_FULL_INVOICE_VALUE = {
|
|
15789
15835
|
wantsFullInvoice: false,
|
|
15790
15836
|
billingIdType: "NIF",
|
|
@@ -15901,12 +15947,12 @@ function FullInvoiceFields({
|
|
|
15901
15947
|
const showFields = value.wantsFullInvoice || overCap;
|
|
15902
15948
|
const isSpanishNif = value.billingIdType === "NIF";
|
|
15903
15949
|
const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
|
|
15904
|
-
const error = (key2) => errors[key2] ? /* @__PURE__ */ (0,
|
|
15950
|
+
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
15951
|
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,
|
|
15952
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("section", { className: (0, import_utils24.cn)("space-y-4", className), "data-slot": "full-invoice-fields", children: [
|
|
15953
|
+
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: [
|
|
15954
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
|
|
15955
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
15910
15956
|
"input",
|
|
15911
15957
|
{
|
|
15912
15958
|
type: "checkbox",
|
|
@@ -15916,12 +15962,12 @@ function FullInvoiceFields({
|
|
|
15916
15962
|
),
|
|
15917
15963
|
t.toggle
|
|
15918
15964
|
] }),
|
|
15919
|
-
/* @__PURE__ */ (0,
|
|
15965
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
|
|
15920
15966
|
] }),
|
|
15921
|
-
showFields && /* @__PURE__ */ (0,
|
|
15922
|
-
/* @__PURE__ */ (0,
|
|
15923
|
-
/* @__PURE__ */ (0,
|
|
15924
|
-
/* @__PURE__ */ (0,
|
|
15967
|
+
showFields && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
15968
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
|
|
15969
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
|
|
15970
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
15925
15971
|
"select",
|
|
15926
15972
|
{
|
|
15927
15973
|
id: "full-invoice-id-type",
|
|
@@ -15930,14 +15976,14 @@ function FullInvoiceFields({
|
|
|
15930
15976
|
value: value.billingIdType,
|
|
15931
15977
|
onChange: (e) => set("billingIdType", e.target.value),
|
|
15932
15978
|
...invalid2("billingIdType"),
|
|
15933
|
-
children: ID_TYPES.map((type) => /* @__PURE__ */ (0,
|
|
15979
|
+
children: ID_TYPES.map((type) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("option", { value: type, children: t.idTypeOptions[type] }, type))
|
|
15934
15980
|
}
|
|
15935
15981
|
),
|
|
15936
15982
|
error("billingIdType")
|
|
15937
15983
|
] }),
|
|
15938
|
-
!isSpanishNif && /* @__PURE__ */ (0,
|
|
15939
|
-
/* @__PURE__ */ (0,
|
|
15940
|
-
/* @__PURE__ */ (0,
|
|
15984
|
+
!isSpanishNif && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
|
|
15985
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
|
|
15986
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
15941
15987
|
"select",
|
|
15942
15988
|
{
|
|
15943
15989
|
id: "full-invoice-id-country",
|
|
@@ -15947,16 +15993,16 @@ function FullInvoiceFields({
|
|
|
15947
15993
|
onChange: (e) => set("billingIdCountry", e.target.value),
|
|
15948
15994
|
...invalid2("billingIdCountry"),
|
|
15949
15995
|
children: [
|
|
15950
|
-
/* @__PURE__ */ (0,
|
|
15951
|
-
countries.map((c) => /* @__PURE__ */ (0,
|
|
15996
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("option", { value: "", disabled: true, children: t.chooseCountry }),
|
|
15997
|
+
countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("option", { value: c.code, children: c.name }, c.code))
|
|
15952
15998
|
]
|
|
15953
15999
|
}
|
|
15954
16000
|
),
|
|
15955
16001
|
error("billingIdCountry")
|
|
15956
16002
|
] }),
|
|
15957
|
-
/* @__PURE__ */ (0,
|
|
15958
|
-
/* @__PURE__ */ (0,
|
|
15959
|
-
/* @__PURE__ */ (0,
|
|
16003
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
|
|
16004
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
|
|
16005
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
15960
16006
|
"input",
|
|
15961
16007
|
{
|
|
15962
16008
|
id: "full-invoice-nif",
|
|
@@ -15969,9 +16015,9 @@ function FullInvoiceFields({
|
|
|
15969
16015
|
),
|
|
15970
16016
|
error("billingNif")
|
|
15971
16017
|
] }),
|
|
15972
|
-
/* @__PURE__ */ (0,
|
|
15973
|
-
/* @__PURE__ */ (0,
|
|
15974
|
-
/* @__PURE__ */ (0,
|
|
16018
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
|
|
16019
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
|
|
16020
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
15975
16021
|
"input",
|
|
15976
16022
|
{
|
|
15977
16023
|
id: "full-invoice-name",
|
|
@@ -15984,9 +16030,9 @@ function FullInvoiceFields({
|
|
|
15984
16030
|
),
|
|
15985
16031
|
error("billingName")
|
|
15986
16032
|
] }),
|
|
15987
|
-
/* @__PURE__ */ (0,
|
|
15988
|
-
/* @__PURE__ */ (0,
|
|
15989
|
-
/* @__PURE__ */ (0,
|
|
16033
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1 sm:col-span-2", children: [
|
|
16034
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
|
|
16035
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
15990
16036
|
"input",
|
|
15991
16037
|
{
|
|
15992
16038
|
id: "full-invoice-street",
|
|
@@ -15998,9 +16044,9 @@ function FullInvoiceFields({
|
|
|
15998
16044
|
}
|
|
15999
16045
|
)
|
|
16000
16046
|
] }),
|
|
16001
|
-
/* @__PURE__ */ (0,
|
|
16002
|
-
/* @__PURE__ */ (0,
|
|
16003
|
-
/* @__PURE__ */ (0,
|
|
16047
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
|
|
16048
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
|
|
16049
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
16004
16050
|
"input",
|
|
16005
16051
|
{
|
|
16006
16052
|
id: "full-invoice-postal-code",
|
|
@@ -16011,9 +16057,9 @@ function FullInvoiceFields({
|
|
|
16011
16057
|
}
|
|
16012
16058
|
)
|
|
16013
16059
|
] }),
|
|
16014
|
-
/* @__PURE__ */ (0,
|
|
16015
|
-
/* @__PURE__ */ (0,
|
|
16016
|
-
/* @__PURE__ */ (0,
|
|
16060
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
|
|
16061
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
|
|
16062
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
16017
16063
|
"input",
|
|
16018
16064
|
{
|
|
16019
16065
|
id: "full-invoice-city",
|
|
@@ -16024,9 +16070,9 @@ function FullInvoiceFields({
|
|
|
16024
16070
|
}
|
|
16025
16071
|
)
|
|
16026
16072
|
] }),
|
|
16027
|
-
/* @__PURE__ */ (0,
|
|
16028
|
-
/* @__PURE__ */ (0,
|
|
16029
|
-
/* @__PURE__ */ (0,
|
|
16073
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "space-y-1", children: [
|
|
16074
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
|
|
16075
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
16030
16076
|
"select",
|
|
16031
16077
|
{
|
|
16032
16078
|
id: "full-invoice-country",
|
|
@@ -16034,18 +16080,18 @@ function FullInvoiceFields({
|
|
|
16034
16080
|
required: true,
|
|
16035
16081
|
value: value.country,
|
|
16036
16082
|
onChange: (e) => set("country", e.target.value),
|
|
16037
|
-
children: countries.map((c) => /* @__PURE__ */ (0,
|
|
16083
|
+
children: countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("option", { value: c.code, children: c.name }, c.code))
|
|
16038
16084
|
}
|
|
16039
16085
|
)
|
|
16040
16086
|
] }),
|
|
16041
|
-
/* @__PURE__ */ (0,
|
|
16087
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "sm:col-span-2", children: error("address") })
|
|
16042
16088
|
] })
|
|
16043
16089
|
] });
|
|
16044
16090
|
}
|
|
16045
16091
|
|
|
16046
16092
|
// src/components/contact-interest-field.tsx
|
|
16047
16093
|
var import_utils25 = require("@reblu/site-ui/utils");
|
|
16048
|
-
var
|
|
16094
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
16049
16095
|
function ContactInterestField({
|
|
16050
16096
|
interest,
|
|
16051
16097
|
value,
|
|
@@ -16062,18 +16108,18 @@ function ContactInterestField({
|
|
|
16062
16108
|
else next2.delete(option2);
|
|
16063
16109
|
onChange(interest.options.filter((candidate) => next2.has(candidate)));
|
|
16064
16110
|
};
|
|
16065
|
-
return /* @__PURE__ */ (0,
|
|
16066
|
-
/* @__PURE__ */ (0,
|
|
16067
|
-
/* @__PURE__ */ (0,
|
|
16111
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("fieldset", { "data-slot": "contact-interest", className: (0, import_utils25.cn)("space-y-2", className), children: [
|
|
16112
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("legend", { className: "text-sm font-medium", children: interest.label }),
|
|
16113
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
|
|
16068
16114
|
const id = `${idPrefix}-${index}`;
|
|
16069
|
-
return /* @__PURE__ */ (0,
|
|
16115
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
|
|
16070
16116
|
"label",
|
|
16071
16117
|
{
|
|
16072
16118
|
htmlFor: id,
|
|
16073
16119
|
"data-slot": "contact-interest-option",
|
|
16074
16120
|
className: "flex items-center gap-2 text-sm",
|
|
16075
16121
|
children: [
|
|
16076
|
-
/* @__PURE__ */ (0,
|
|
16122
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
16077
16123
|
"input",
|
|
16078
16124
|
{
|
|
16079
16125
|
id,
|
|
@@ -16122,6 +16168,7 @@ var import_site_contracts = require("@reblu/site-contracts");
|
|
|
16122
16168
|
EMPTY_FULL_INVOICE_VALUE,
|
|
16123
16169
|
FaqAccordion,
|
|
16124
16170
|
FullInvoiceFields,
|
|
16171
|
+
LegalDocument,
|
|
16125
16172
|
LessonPreview,
|
|
16126
16173
|
MarkdownRenderer,
|
|
16127
16174
|
OrderConfirmation,
|