@reblu/site-blocks 0.34.0 → 0.35.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 +13 -0
- package/README.md +44 -0
- package/dist/index.cjs +569 -491
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +48 -1
- package/dist/index.d.ts +48 -1
- package/dist/index.js +568 -492
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -42,6 +42,7 @@ __export(src_exports, {
|
|
|
42
42
|
CourseCatalogFilters: () => CourseCatalogFilters,
|
|
43
43
|
CourseDescription: () => CourseDescription,
|
|
44
44
|
CoursePurchaseTerms: () => CoursePurchaseTerms,
|
|
45
|
+
CourseSchedule: () => CourseSchedule,
|
|
45
46
|
DATA_REQUEST_TYPES: () => import_site_contracts.DATA_REQUEST_TYPES,
|
|
46
47
|
DEFAULT_BEFORE_AFTER_LABELS: () => DEFAULT_BEFORE_AFTER_LABELS,
|
|
47
48
|
DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS: () => DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS,
|
|
@@ -50,6 +51,7 @@ __export(src_exports, {
|
|
|
50
51
|
DEFAULT_COURSE_CATALOG_FILTERS_LABELS: () => DEFAULT_COURSE_CATALOG_FILTERS_LABELS,
|
|
51
52
|
DEFAULT_COURSE_PRICE_BANDS: () => DEFAULT_COURSE_PRICE_BANDS,
|
|
52
53
|
DEFAULT_COURSE_PURCHASE_TERMS_LABELS: () => DEFAULT_COURSE_PURCHASE_TERMS_LABELS,
|
|
54
|
+
DEFAULT_COURSE_SCHEDULE_LABELS: () => DEFAULT_COURSE_SCHEDULE_LABELS,
|
|
53
55
|
DEFAULT_INVOICE_COUNTRIES: () => DEFAULT_INVOICE_COUNTRIES,
|
|
54
56
|
DEFAULT_LESSON_PREVIEW_LABELS: () => DEFAULT_LESSON_PREVIEW_LABELS,
|
|
55
57
|
DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE: () => DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,
|
|
@@ -13644,8 +13646,82 @@ function CoursePurchaseTerms({
|
|
|
13644
13646
|
);
|
|
13645
13647
|
}
|
|
13646
13648
|
|
|
13647
|
-
// src/components/
|
|
13649
|
+
// src/components/course-schedule.tsx
|
|
13648
13650
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
13651
|
+
function formatSession(session, timeZone, locale) {
|
|
13652
|
+
const day = new Intl.DateTimeFormat(locale, { weekday: "long", day: "numeric", month: "long", year: "numeric", timeZone });
|
|
13653
|
+
const time = new Intl.DateTimeFormat(locale, {
|
|
13654
|
+
hour: "2-digit",
|
|
13655
|
+
minute: "2-digit",
|
|
13656
|
+
hour12: false,
|
|
13657
|
+
timeZone,
|
|
13658
|
+
timeZoneName: "short"
|
|
13659
|
+
});
|
|
13660
|
+
const parts = (date) => {
|
|
13661
|
+
const p2 = time.formatToParts(date);
|
|
13662
|
+
const hhmm = p2.filter((x2) => x2.type === "hour" || x2.type === "minute").map((x2) => x2.value).join(":");
|
|
13663
|
+
return { hhmm, zone: p2.find((x2) => x2.type === "timeZoneName")?.value ?? timeZone };
|
|
13664
|
+
};
|
|
13665
|
+
const start = new Date(session.startsAt);
|
|
13666
|
+
const from = parts(start);
|
|
13667
|
+
if (!session.endsAt) return `${day.format(start)}, a las ${from.hhmm} (${from.zone})`;
|
|
13668
|
+
const end = new Date(session.endsAt);
|
|
13669
|
+
const to = parts(end);
|
|
13670
|
+
if (day.format(start) === day.format(end)) {
|
|
13671
|
+
return `${day.format(start)}, de ${from.hhmm} a ${to.hhmm} (${from.zone})`;
|
|
13672
|
+
}
|
|
13673
|
+
return `del ${day.format(start)}, ${from.hhmm} al ${day.format(end)}, ${to.hhmm} (${from.zone})`;
|
|
13674
|
+
}
|
|
13675
|
+
var DEFAULT_COURSE_SCHEDULE_LABELS = {
|
|
13676
|
+
modality: { IN_PERSON: "Presencial", WEBINAR: "Webinar, online y en directo" },
|
|
13677
|
+
dates: "Fechas",
|
|
13678
|
+
place: "Lugar",
|
|
13679
|
+
session: formatSession
|
|
13680
|
+
};
|
|
13681
|
+
function CourseSchedule({
|
|
13682
|
+
course,
|
|
13683
|
+
heading,
|
|
13684
|
+
headingLevel = 2,
|
|
13685
|
+
headingId = "course-schedule-heading",
|
|
13686
|
+
labels,
|
|
13687
|
+
locale = "es-ES",
|
|
13688
|
+
className,
|
|
13689
|
+
headingClassName,
|
|
13690
|
+
bodyClassName
|
|
13691
|
+
}) {
|
|
13692
|
+
const schedule = course.schedule;
|
|
13693
|
+
if (!schedule) return null;
|
|
13694
|
+
const text3 = { ...DEFAULT_COURSE_SCHEDULE_LABELS, ...labels };
|
|
13695
|
+
const place = [schedule.locationName, schedule.locationAddress].filter(Boolean).join(", ");
|
|
13696
|
+
const hasHeading = heading !== void 0 && heading !== null && heading !== "";
|
|
13697
|
+
const Tag = `h${headingLevel}`;
|
|
13698
|
+
const body3 = slotClassName("", "text-sm", bodyClassName);
|
|
13699
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
13700
|
+
"section",
|
|
13701
|
+
{
|
|
13702
|
+
"data-slot": "course-schedule",
|
|
13703
|
+
"data-modality": schedule.modality,
|
|
13704
|
+
"aria-labelledby": hasHeading ? headingId : void 0,
|
|
13705
|
+
className: slotClassName("space-y-3", "", className),
|
|
13706
|
+
children: [
|
|
13707
|
+
hasHeading ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Tag, { id: headingId, className: slotClassName("", "text-lg font-semibold", headingClassName), children: heading }) : null,
|
|
13708
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { "data-slot": "course-schedule-modality", className: body3, children: text3.modality[schedule.modality] }),
|
|
13709
|
+
schedule.sessions.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { "data-slot": "course-schedule-dates", className: body3, children: [
|
|
13710
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "font-medium", children: text3.dates }),
|
|
13711
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { className: "list-disc space-y-1 pl-5", children: schedule.sessions.map((session) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("li", { "data-slot": "course-schedule-session", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("time", { dateTime: session.startsAt, children: text3.session(session, schedule.timeZone, locale) }) }, session.startsAt)) })
|
|
13712
|
+
] }) : null,
|
|
13713
|
+
place ? /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { "data-slot": "course-schedule-place", className: body3, children: [
|
|
13714
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "font-medium", children: text3.place }),
|
|
13715
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("address", { className: "not-italic", children: place })
|
|
13716
|
+
] }) : null,
|
|
13717
|
+
schedule.attendanceNotes ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { "data-slot": "course-schedule-notes", className: slotClassName("whitespace-pre-line", "text-sm", bodyClassName), children: schedule.attendanceNotes }) : null
|
|
13718
|
+
]
|
|
13719
|
+
}
|
|
13720
|
+
);
|
|
13721
|
+
}
|
|
13722
|
+
|
|
13723
|
+
// src/components/legal-document.tsx
|
|
13724
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
13649
13725
|
function isVisiblyEmpty2(html5) {
|
|
13650
13726
|
if (/<(img|iframe|hr)\b/i.test(html5)) return false;
|
|
13651
13727
|
return html5.replace(/<[^>]*>/g, "").trim() === "";
|
|
@@ -13664,17 +13740,17 @@ function LegalDocument({
|
|
|
13664
13740
|
const hasFallback = fallback !== void 0 && fallback !== null && fallback !== false;
|
|
13665
13741
|
if (isEmpty && !hasFallback) return null;
|
|
13666
13742
|
const hasTitle = title !== void 0 && title !== null && title !== "";
|
|
13667
|
-
return /* @__PURE__ */ (0,
|
|
13743
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
13668
13744
|
"article",
|
|
13669
13745
|
{
|
|
13670
13746
|
"data-slot": "legal-document",
|
|
13671
13747
|
"aria-labelledby": hasTitle ? titleId : void 0,
|
|
13672
13748
|
className: slotClassName("space-y-6", "", className),
|
|
13673
13749
|
children: [
|
|
13674
|
-
hasTitle && /* @__PURE__ */ (0,
|
|
13750
|
+
hasTitle && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("h1", { id: titleId, className: slotClassName("", "text-3xl font-bold", titleClassName), children: title }),
|
|
13675
13751
|
isEmpty ? fallback : (
|
|
13676
13752
|
// `html` is already sanitised by `markdownToSafeHtml` — SafeHtml only maps it.
|
|
13677
|
-
/* @__PURE__ */ (0,
|
|
13753
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
13678
13754
|
SafeHtml,
|
|
13679
13755
|
{
|
|
13680
13756
|
html: html5,
|
|
@@ -13690,7 +13766,7 @@ function LegalDocument({
|
|
|
13690
13766
|
}
|
|
13691
13767
|
|
|
13692
13768
|
// src/components/lesson-preview.tsx
|
|
13693
|
-
var
|
|
13769
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
13694
13770
|
var DEFAULT_LESSON_PREVIEW_LABELS = {
|
|
13695
13771
|
badge: "Vista previa gratuita",
|
|
13696
13772
|
player: "V\xEDdeo",
|
|
@@ -13733,15 +13809,15 @@ function LessonPreview({
|
|
|
13733
13809
|
const html5 = markdownToSafeHtml(lesson.content);
|
|
13734
13810
|
const hasBody = html5 !== null && html5 !== "" && !isVisiblyEmpty3(html5);
|
|
13735
13811
|
const duration = typeof lesson.durationSeconds === "number" && lesson.durationSeconds > 0 ? clock(lesson.durationSeconds) : null;
|
|
13736
|
-
return /* @__PURE__ */ (0,
|
|
13812
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
13737
13813
|
"article",
|
|
13738
13814
|
{
|
|
13739
13815
|
"data-slot": "lesson-preview",
|
|
13740
13816
|
"aria-labelledby": headingId,
|
|
13741
13817
|
className: slotClassName("space-y-6", "", className),
|
|
13742
13818
|
children: [
|
|
13743
|
-
/* @__PURE__ */ (0,
|
|
13744
|
-
/* @__PURE__ */ (0,
|
|
13819
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("header", { className: "space-y-2", children: [
|
|
13820
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
13745
13821
|
"span",
|
|
13746
13822
|
{
|
|
13747
13823
|
"data-slot": "lesson-preview-badge",
|
|
@@ -13749,7 +13825,7 @@ function LessonPreview({
|
|
|
13749
13825
|
children: labels.badge
|
|
13750
13826
|
}
|
|
13751
13827
|
),
|
|
13752
|
-
/* @__PURE__ */ (0,
|
|
13828
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
13753
13829
|
Tag,
|
|
13754
13830
|
{
|
|
13755
13831
|
id: headingId,
|
|
@@ -13757,12 +13833,12 @@ function LessonPreview({
|
|
|
13757
13833
|
children: lesson.title
|
|
13758
13834
|
}
|
|
13759
13835
|
),
|
|
13760
|
-
duration && /* @__PURE__ */ (0,
|
|
13761
|
-
/* @__PURE__ */ (0,
|
|
13836
|
+
duration && /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("p", { className: "text-sm text-muted-foreground", children: [
|
|
13837
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "sr-only", children: [
|
|
13762
13838
|
labels.duration,
|
|
13763
13839
|
": "
|
|
13764
13840
|
] }),
|
|
13765
|
-
/* @__PURE__ */ (0,
|
|
13841
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
13766
13842
|
"time",
|
|
13767
13843
|
{
|
|
13768
13844
|
"data-slot": "lesson-preview-duration",
|
|
@@ -13773,12 +13849,12 @@ function LessonPreview({
|
|
|
13773
13849
|
)
|
|
13774
13850
|
] })
|
|
13775
13851
|
] }),
|
|
13776
|
-
video && /* @__PURE__ */ (0,
|
|
13852
|
+
video && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
13777
13853
|
"div",
|
|
13778
13854
|
{
|
|
13779
13855
|
"data-slot": "lesson-preview-player",
|
|
13780
13856
|
className: "aspect-video w-full overflow-hidden rounded-xl border border-border bg-black",
|
|
13781
|
-
children: /* @__PURE__ */ (0,
|
|
13857
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
13782
13858
|
"iframe",
|
|
13783
13859
|
{
|
|
13784
13860
|
src: video.embedUrl,
|
|
@@ -13792,7 +13868,7 @@ function LessonPreview({
|
|
|
13792
13868
|
)
|
|
13793
13869
|
}
|
|
13794
13870
|
),
|
|
13795
|
-
hasBody && /* @__PURE__ */ (0,
|
|
13871
|
+
hasBody && /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { "data-slot": "lesson-preview-content", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
13796
13872
|
SafeHtml,
|
|
13797
13873
|
{
|
|
13798
13874
|
html: html5,
|
|
@@ -13811,7 +13887,7 @@ var import_utils3 = require("@reblu/site-ui/utils");
|
|
|
13811
13887
|
// src/components/_page-parts.tsx
|
|
13812
13888
|
var import_utils2 = require("@reblu/site-ui/utils");
|
|
13813
13889
|
var import_button_variants = require("@reblu/site-ui/button-variants");
|
|
13814
|
-
var
|
|
13890
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
13815
13891
|
var KNOWN_BUTTON_VARIANTS = /* @__PURE__ */ new Set([
|
|
13816
13892
|
"default",
|
|
13817
13893
|
"destructive",
|
|
@@ -13824,11 +13900,11 @@ function toButtonVariant(variant) {
|
|
|
13824
13900
|
return variant && KNOWN_BUTTON_VARIANTS.has(variant) ? variant : "default";
|
|
13825
13901
|
}
|
|
13826
13902
|
function PageHero({ page }) {
|
|
13827
|
-
return /* @__PURE__ */ (0,
|
|
13828
|
-
page.category && /* @__PURE__ */ (0,
|
|
13829
|
-
/* @__PURE__ */ (0,
|
|
13830
|
-
page.subtitle && /* @__PURE__ */ (0,
|
|
13831
|
-
page.coverImageUrl && /* @__PURE__ */ (0,
|
|
13903
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("header", { className: "space-y-4", children: [
|
|
13904
|
+
page.category && /* @__PURE__ */ (0, import_jsx_runtime7.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 }),
|
|
13905
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h1", { className: "text-4xl font-bold tracking-tight", children: page.title }),
|
|
13906
|
+
page.subtitle && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "text-lg text-muted-foreground", children: page.subtitle }),
|
|
13907
|
+
page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
13832
13908
|
"img",
|
|
13833
13909
|
{
|
|
13834
13910
|
src: page.coverImageUrl,
|
|
@@ -13842,7 +13918,7 @@ function PageHero({ page }) {
|
|
|
13842
13918
|
function SectionCta({ section }) {
|
|
13843
13919
|
if (!section.ctaLabel || !section.ctaUrl) return null;
|
|
13844
13920
|
const variant = toButtonVariant(section.ctaVariant);
|
|
13845
|
-
return /* @__PURE__ */ (0,
|
|
13921
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
13846
13922
|
"a",
|
|
13847
13923
|
{
|
|
13848
13924
|
href: section.ctaUrl,
|
|
@@ -13857,46 +13933,46 @@ function SectionCta({ section }) {
|
|
|
13857
13933
|
}
|
|
13858
13934
|
function SectionImages({ section }) {
|
|
13859
13935
|
if (section.images.length === 0) return null;
|
|
13860
|
-
return /* @__PURE__ */ (0,
|
|
13861
|
-
/* @__PURE__ */ (0,
|
|
13862
|
-
img.caption && /* @__PURE__ */ (0,
|
|
13936
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.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_runtime7.jsxs)("figure", { className: "space-y-1", children: [
|
|
13937
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("img", { src: img.url, alt: img.alt, loading: "lazy", className: "h-full w-full object-cover" }) }),
|
|
13938
|
+
img.caption && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
|
|
13863
13939
|
] }, `${img.url}-${img.order}`)) });
|
|
13864
13940
|
}
|
|
13865
13941
|
function PageSectionBlock({ section }) {
|
|
13866
13942
|
const imageFirst = section.layout === "IMAGE_TEXT";
|
|
13867
13943
|
const sideBySide = section.layout === "TEXT_IMAGE" || section.layout === "IMAGE_TEXT";
|
|
13868
13944
|
const hasImages = section.images.length > 0;
|
|
13869
|
-
const body3 = /* @__PURE__ */ (0,
|
|
13870
|
-
section.heading && /* @__PURE__ */ (0,
|
|
13871
|
-
/* @__PURE__ */ (0,
|
|
13872
|
-
/* @__PURE__ */ (0,
|
|
13945
|
+
const body3 = /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "space-y-4", children: [
|
|
13946
|
+
section.heading && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("h2", { className: "text-2xl font-bold", children: section.heading }),
|
|
13947
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SafeHtml, { html: sanitizeHtml(section.contentHtml), headingOffset: 2 }),
|
|
13948
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SectionCta, { section })
|
|
13873
13949
|
] });
|
|
13874
13950
|
if (sideBySide && hasImages) {
|
|
13875
|
-
return /* @__PURE__ */ (0,
|
|
13876
|
-
/* @__PURE__ */ (0,
|
|
13951
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("section", { className: "grid items-center gap-8 md:grid-cols-2", children: imageFirst ? /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
|
|
13952
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SectionImages, { section }),
|
|
13877
13953
|
body3
|
|
13878
|
-
] }) : /* @__PURE__ */ (0,
|
|
13954
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_jsx_runtime7.Fragment, { children: [
|
|
13879
13955
|
body3,
|
|
13880
|
-
/* @__PURE__ */ (0,
|
|
13956
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SectionImages, { section })
|
|
13881
13957
|
] }) });
|
|
13882
13958
|
}
|
|
13883
|
-
return /* @__PURE__ */ (0,
|
|
13959
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("section", { className: "space-y-4", children: [
|
|
13884
13960
|
body3,
|
|
13885
|
-
/* @__PURE__ */ (0,
|
|
13961
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SectionImages, { section })
|
|
13886
13962
|
] });
|
|
13887
13963
|
}
|
|
13888
13964
|
function PageSectionList({ sections }) {
|
|
13889
13965
|
if (sections.length === 0) return null;
|
|
13890
13966
|
const ordered = sections.slice().sort((a, b2) => a.order - b2.order);
|
|
13891
|
-
return /* @__PURE__ */ (0,
|
|
13967
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "space-y-12", children: ordered.map((section) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(PageSectionBlock, { section }, section.id)) });
|
|
13892
13968
|
}
|
|
13893
13969
|
|
|
13894
13970
|
// src/components/treatment.tsx
|
|
13895
|
-
var
|
|
13971
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
13896
13972
|
function Treatment({ page, className }) {
|
|
13897
|
-
return /* @__PURE__ */ (0,
|
|
13898
|
-
/* @__PURE__ */ (0,
|
|
13899
|
-
/* @__PURE__ */ (0,
|
|
13973
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("article", { className: (0, import_utils3.cn)("space-y-12", className), "data-slot": "treatment", children: [
|
|
13974
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PageHero, { page }),
|
|
13975
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(PageSectionList, { sections: page.sections })
|
|
13900
13976
|
] });
|
|
13901
13977
|
}
|
|
13902
13978
|
|
|
@@ -13905,11 +13981,11 @@ var import_utils5 = require("@reblu/site-ui/utils");
|
|
|
13905
13981
|
|
|
13906
13982
|
// src/components/page-card-grid.tsx
|
|
13907
13983
|
var import_utils4 = require("@reblu/site-ui/utils");
|
|
13908
|
-
var
|
|
13984
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
13909
13985
|
var defaultPageHref = (page) => `/${page.slug}`;
|
|
13910
13986
|
var pageKey = (page) => `${page.category?.slug ?? ""}/${page.slug}`;
|
|
13911
13987
|
function PageCardGrid(props) {
|
|
13912
|
-
return /* @__PURE__ */ (0,
|
|
13988
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(PageCardGridSection, { ...props });
|
|
13913
13989
|
}
|
|
13914
13990
|
function PageCardGridSection({
|
|
13915
13991
|
pages,
|
|
@@ -13920,15 +13996,15 @@ function PageCardGridSection({
|
|
|
13920
13996
|
}) {
|
|
13921
13997
|
if (pages.length === 0) return null;
|
|
13922
13998
|
const showHeading = keepEmptyHeading ? heading !== void 0 : !!heading;
|
|
13923
|
-
return /* @__PURE__ */ (0,
|
|
13924
|
-
showHeading && /* @__PURE__ */ (0,
|
|
13925
|
-
/* @__PURE__ */ (0,
|
|
13999
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("section", { className: (0, import_utils4.cn)("space-y-6", className), children: [
|
|
14000
|
+
showHeading && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h2", { className: "text-2xl font-bold", children: heading }),
|
|
14001
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.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_runtime9.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
|
13926
14002
|
"a",
|
|
13927
14003
|
{
|
|
13928
14004
|
href: pageHref(page),
|
|
13929
14005
|
className: "group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
|
|
13930
14006
|
children: [
|
|
13931
|
-
page.coverImageUrl && /* @__PURE__ */ (0,
|
|
14007
|
+
page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
13932
14008
|
"img",
|
|
13933
14009
|
{
|
|
13934
14010
|
src: page.coverImageUrl,
|
|
@@ -13937,9 +14013,9 @@ function PageCardGridSection({
|
|
|
13937
14013
|
className: "h-full w-full object-cover transition-transform group-hover:scale-105"
|
|
13938
14014
|
}
|
|
13939
14015
|
) }),
|
|
13940
|
-
/* @__PURE__ */ (0,
|
|
13941
|
-
/* @__PURE__ */ (0,
|
|
13942
|
-
page.excerpt && /* @__PURE__ */ (0,
|
|
14016
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
|
|
14017
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
|
|
14018
|
+
page.excerpt && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
|
|
13943
14019
|
] })
|
|
13944
14020
|
]
|
|
13945
14021
|
}
|
|
@@ -13948,7 +14024,7 @@ function PageCardGridSection({
|
|
|
13948
14024
|
}
|
|
13949
14025
|
|
|
13950
14026
|
// src/components/parent-page.tsx
|
|
13951
|
-
var
|
|
14027
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
13952
14028
|
var defaultChildPageHref = (slug) => `/${slug}`;
|
|
13953
14029
|
function ParentPage({
|
|
13954
14030
|
page,
|
|
@@ -13963,10 +14039,10 @@ function ParentPage({
|
|
|
13963
14039
|
const pages = childPages ?? treatments ?? [];
|
|
13964
14040
|
const hrefFor = childPageHref ?? treatmentHref ?? defaultChildPageHref;
|
|
13965
14041
|
const label = childPagesLabel ?? treatmentsLabel ?? "Treatments";
|
|
13966
|
-
return /* @__PURE__ */ (0,
|
|
13967
|
-
/* @__PURE__ */ (0,
|
|
13968
|
-
/* @__PURE__ */ (0,
|
|
13969
|
-
/* @__PURE__ */ (0,
|
|
14042
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("article", { className: (0, import_utils5.cn)("space-y-12", className), "data-slot": "specialty", children: [
|
|
14043
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(PageHero, { page }),
|
|
14044
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(PageSectionList, { sections: page.sections }),
|
|
14045
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
13970
14046
|
PageCardGridSection,
|
|
13971
14047
|
{
|
|
13972
14048
|
pages,
|
|
@@ -13986,7 +14062,7 @@ var import_utils7 = require("@reblu/site-ui/utils");
|
|
|
13986
14062
|
|
|
13987
14063
|
// src/components/professional-fields.tsx
|
|
13988
14064
|
var import_utils6 = require("@reblu/site-ui/utils");
|
|
13989
|
-
var
|
|
14065
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
13990
14066
|
function ProfessionalFields({
|
|
13991
14067
|
fields,
|
|
13992
14068
|
variant = "profile",
|
|
@@ -13994,7 +14070,7 @@ function ProfessionalFields({
|
|
|
13994
14070
|
}) {
|
|
13995
14071
|
const shown = (fields ?? []).filter((f) => variant !== "card" || f.showOnCard);
|
|
13996
14072
|
if (shown.length === 0) return null;
|
|
13997
|
-
return /* @__PURE__ */ (0,
|
|
14073
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
13998
14074
|
"dl",
|
|
13999
14075
|
{
|
|
14000
14076
|
className: (0, import_utils6.cn)(
|
|
@@ -14004,13 +14080,13 @@ function ProfessionalFields({
|
|
|
14004
14080
|
),
|
|
14005
14081
|
"data-slot": "professional-fields",
|
|
14006
14082
|
"data-variant": variant,
|
|
14007
|
-
children: shown.map((field, index) => /* @__PURE__ */ (0,
|
|
14083
|
+
children: shown.map((field, index) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
14008
14084
|
"div",
|
|
14009
14085
|
{
|
|
14010
14086
|
className: variant === "card" ? "flex justify-center gap-1" : "contents",
|
|
14011
14087
|
children: [
|
|
14012
|
-
/* @__PURE__ */ (0,
|
|
14013
|
-
/* @__PURE__ */ (0,
|
|
14088
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("dt", { className: "text-muted-foreground", children: field.label }),
|
|
14089
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("dd", { className: "m-0 font-medium", children: field.value })
|
|
14014
14090
|
]
|
|
14015
14091
|
},
|
|
14016
14092
|
`${field.label}-${index}`
|
|
@@ -14020,7 +14096,7 @@ function ProfessionalFields({
|
|
|
14020
14096
|
}
|
|
14021
14097
|
|
|
14022
14098
|
// src/components/profile-card.tsx
|
|
14023
|
-
var
|
|
14099
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
14024
14100
|
function initials(name) {
|
|
14025
14101
|
return name.split(/\s+/).filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
|
|
14026
14102
|
}
|
|
@@ -14035,7 +14111,7 @@ function ProfileCard({
|
|
|
14035
14111
|
className
|
|
14036
14112
|
}) {
|
|
14037
14113
|
const NameTag = href ? "a" : "span";
|
|
14038
|
-
return /* @__PURE__ */ (0,
|
|
14114
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
14039
14115
|
"article",
|
|
14040
14116
|
{
|
|
14041
14117
|
className: (0, import_utils7.cn)(
|
|
@@ -14044,7 +14120,7 @@ function ProfileCard({
|
|
|
14044
14120
|
),
|
|
14045
14121
|
"data-slot": "profile-card",
|
|
14046
14122
|
children: [
|
|
14047
|
-
/* @__PURE__ */ (0,
|
|
14123
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "relative h-24 w-24 overflow-hidden rounded-full bg-muted", children: imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("img", { src: imageUrl, alt: name, loading: "lazy", className: "h-full w-full object-cover" }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
14048
14124
|
"span",
|
|
14049
14125
|
{
|
|
14050
14126
|
className: "flex h-full w-full items-center justify-center text-2xl font-semibold text-muted-foreground",
|
|
@@ -14052,12 +14128,12 @@ function ProfileCard({
|
|
|
14052
14128
|
children: initials(name)
|
|
14053
14129
|
}
|
|
14054
14130
|
) }),
|
|
14055
|
-
/* @__PURE__ */ (0,
|
|
14056
|
-
/* @__PURE__ */ (0,
|
|
14057
|
-
role && /* @__PURE__ */ (0,
|
|
14131
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "space-y-1", children: [
|
|
14132
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(NameTag, { ...href ? { href, className: "transition-colors hover:text-primary" } : {}, children: name }) }),
|
|
14133
|
+
role && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "text-sm text-muted-foreground", children: role })
|
|
14058
14134
|
] }),
|
|
14059
|
-
/* @__PURE__ */ (0,
|
|
14060
|
-
specialties.length > 0 && /* @__PURE__ */ (0,
|
|
14135
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ProfessionalFields, { fields, variant: "card" }),
|
|
14136
|
+
specialties.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
14061
14137
|
"li",
|
|
14062
14138
|
{
|
|
14063
14139
|
className: "inline-flex items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground",
|
|
@@ -14065,7 +14141,7 @@ function ProfileCard({
|
|
|
14065
14141
|
},
|
|
14066
14142
|
s2
|
|
14067
14143
|
)) }),
|
|
14068
|
-
bio && /* @__PURE__ */ (0,
|
|
14144
|
+
bio && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "text-sm text-muted-foreground", children: bio })
|
|
14069
14145
|
]
|
|
14070
14146
|
}
|
|
14071
14147
|
);
|
|
@@ -14094,7 +14170,7 @@ function filterByLink(items, key2) {
|
|
|
14094
14170
|
}
|
|
14095
14171
|
|
|
14096
14172
|
// src/components/linked-pages.tsx
|
|
14097
|
-
var
|
|
14173
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
14098
14174
|
function LinkedPagesGrid({
|
|
14099
14175
|
pages,
|
|
14100
14176
|
pageHref = (page) => `/${page.slug}`,
|
|
@@ -14102,15 +14178,15 @@ function LinkedPagesGrid({
|
|
|
14102
14178
|
className
|
|
14103
14179
|
}) {
|
|
14104
14180
|
if (!pages || pages.length === 0) return null;
|
|
14105
|
-
return /* @__PURE__ */ (0,
|
|
14106
|
-
heading && /* @__PURE__ */ (0,
|
|
14107
|
-
/* @__PURE__ */ (0,
|
|
14181
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("section", { className: (0, import_utils8.cn)("space-y-6", className), "data-slot": "linked-pages", children: [
|
|
14182
|
+
heading && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("h2", { className: "text-2xl font-bold", children: heading }),
|
|
14183
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.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_runtime13.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
14108
14184
|
"a",
|
|
14109
14185
|
{
|
|
14110
14186
|
href: pageHref(page),
|
|
14111
14187
|
className: "group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
|
|
14112
14188
|
children: [
|
|
14113
|
-
page.coverImageUrl && /* @__PURE__ */ (0,
|
|
14189
|
+
page.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
14114
14190
|
"img",
|
|
14115
14191
|
{
|
|
14116
14192
|
src: page.coverImageUrl,
|
|
@@ -14119,9 +14195,9 @@ function LinkedPagesGrid({
|
|
|
14119
14195
|
className: "h-full w-full object-cover transition-transform group-hover:scale-105"
|
|
14120
14196
|
}
|
|
14121
14197
|
) }),
|
|
14122
|
-
/* @__PURE__ */ (0,
|
|
14123
|
-
/* @__PURE__ */ (0,
|
|
14124
|
-
page.excerpt && /* @__PURE__ */ (0,
|
|
14198
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
|
|
14199
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
|
|
14200
|
+
page.excerpt && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
|
|
14125
14201
|
] })
|
|
14126
14202
|
]
|
|
14127
14203
|
}
|
|
@@ -14135,9 +14211,9 @@ function TeamGrid({
|
|
|
14135
14211
|
className
|
|
14136
14212
|
}) {
|
|
14137
14213
|
if (!members || members.length === 0) return null;
|
|
14138
|
-
return /* @__PURE__ */ (0,
|
|
14139
|
-
heading && /* @__PURE__ */ (0,
|
|
14140
|
-
/* @__PURE__ */ (0,
|
|
14214
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("section", { className: (0, import_utils8.cn)("space-y-6", className), "data-slot": "team-grid", children: [
|
|
14215
|
+
heading && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("h2", { className: "text-2xl font-bold", children: heading }),
|
|
14216
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("ul", { className: "grid list-none grid-cols-1 gap-6 p-0 sm:grid-cols-2 lg:grid-cols-3", children: members.map((member) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
14141
14217
|
ProfileCard,
|
|
14142
14218
|
{
|
|
14143
14219
|
name: member.title,
|
|
@@ -14152,11 +14228,11 @@ function TeamGrid({
|
|
|
14152
14228
|
|
|
14153
14229
|
// src/components/product-card.tsx
|
|
14154
14230
|
var import_utils9 = require("@reblu/site-ui/utils");
|
|
14155
|
-
var
|
|
14231
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
14156
14232
|
function ProductCard({ product, href, currencyCode = "EUR", locale, className }) {
|
|
14157
14233
|
const image = product.images.find((i) => i.isPrimary) ?? product.images[0];
|
|
14158
14234
|
const hasDiscount = product.comparePrice != null && product.comparePrice > product.price;
|
|
14159
|
-
return /* @__PURE__ */ (0,
|
|
14235
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
14160
14236
|
"article",
|
|
14161
14237
|
{
|
|
14162
14238
|
className: (0, import_utils9.cn)(
|
|
@@ -14165,7 +14241,7 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
|
|
|
14165
14241
|
),
|
|
14166
14242
|
"data-slot": "product-card",
|
|
14167
14243
|
children: [
|
|
14168
|
-
/* @__PURE__ */ (0,
|
|
14244
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
14169
14245
|
"img",
|
|
14170
14246
|
{
|
|
14171
14247
|
src: image.url,
|
|
@@ -14173,14 +14249,14 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
|
|
|
14173
14249
|
loading: "lazy",
|
|
14174
14250
|
className: "h-full w-full object-cover transition-transform group-hover:scale-105"
|
|
14175
14251
|
}
|
|
14176
|
-
) : /* @__PURE__ */ (0,
|
|
14177
|
-
/* @__PURE__ */ (0,
|
|
14178
|
-
product.category && /* @__PURE__ */ (0,
|
|
14179
|
-
/* @__PURE__ */ (0,
|
|
14180
|
-
product.shortDescription && /* @__PURE__ */ (0,
|
|
14181
|
-
/* @__PURE__ */ (0,
|
|
14182
|
-
/* @__PURE__ */ (0,
|
|
14183
|
-
hasDiscount && /* @__PURE__ */ (0,
|
|
14252
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
|
|
14253
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
|
|
14254
|
+
product.category && /* @__PURE__ */ (0, import_jsx_runtime14.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 }),
|
|
14255
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
|
|
14256
|
+
product.shortDescription && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
|
|
14257
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
|
|
14258
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
|
|
14259
|
+
hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
|
|
14184
14260
|
] })
|
|
14185
14261
|
] })
|
|
14186
14262
|
]
|
|
@@ -14382,7 +14458,7 @@ var __iconNode8 = [
|
|
|
14382
14458
|
var Truck = createLucideIcon("truck", __iconNode8);
|
|
14383
14459
|
|
|
14384
14460
|
// src/components/product-trust-items.tsx
|
|
14385
|
-
var
|
|
14461
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
14386
14462
|
var DEFAULT_TRUST_ICONS = Object.freeze({
|
|
14387
14463
|
shipping: Truck,
|
|
14388
14464
|
returns: RotateCcw,
|
|
@@ -14416,9 +14492,9 @@ function ProductTrustItems({
|
|
|
14416
14492
|
return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
|
|
14417
14493
|
});
|
|
14418
14494
|
if (rows.length === 0) return null;
|
|
14419
|
-
return /* @__PURE__ */ (0,
|
|
14420
|
-
/* @__PURE__ */ (0,
|
|
14421
|
-
/* @__PURE__ */ (0,
|
|
14495
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.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_runtime15.jsxs)("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
|
|
14496
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
|
|
14497
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { children: text3 })
|
|
14422
14498
|
] }, key2)) });
|
|
14423
14499
|
}
|
|
14424
14500
|
|
|
@@ -14426,7 +14502,7 @@ function ProductTrustItems({
|
|
|
14426
14502
|
var import_utils12 = require("@reblu/site-ui/utils");
|
|
14427
14503
|
|
|
14428
14504
|
// src/components/_heading.tsx
|
|
14429
|
-
var
|
|
14505
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
14430
14506
|
function nextHeadingLevel(level) {
|
|
14431
14507
|
return Math.min(level + 1, 6);
|
|
14432
14508
|
}
|
|
@@ -14436,11 +14512,11 @@ function Heading({
|
|
|
14436
14512
|
children: children2
|
|
14437
14513
|
}) {
|
|
14438
14514
|
const Tag = `h${level}`;
|
|
14439
|
-
return /* @__PURE__ */ (0,
|
|
14515
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Tag, { className, children: children2 });
|
|
14440
14516
|
}
|
|
14441
14517
|
|
|
14442
14518
|
// src/components/faq-accordion.tsx
|
|
14443
|
-
var
|
|
14519
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
14444
14520
|
function FaqAccordion({
|
|
14445
14521
|
items,
|
|
14446
14522
|
heading,
|
|
@@ -14451,18 +14527,18 @@ function FaqAccordion({
|
|
|
14451
14527
|
}) {
|
|
14452
14528
|
const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
|
|
14453
14529
|
if (visible.length === 0) return null;
|
|
14454
|
-
return /* @__PURE__ */ (0,
|
|
14455
|
-
heading && /* @__PURE__ */ (0,
|
|
14456
|
-
/* @__PURE__ */ (0,
|
|
14530
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: (0, import_utils12.cn)("space-y-4", className), "data-slot": "faq-accordion", children: [
|
|
14531
|
+
heading && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
|
|
14532
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
14457
14533
|
"details",
|
|
14458
14534
|
{
|
|
14459
14535
|
className: "group px-4",
|
|
14460
14536
|
"data-slot": "faq-item",
|
|
14461
14537
|
...defaultOpen.includes(index) ? { open: true } : {},
|
|
14462
14538
|
children: [
|
|
14463
|
-
/* @__PURE__ */ (0,
|
|
14464
|
-
questionHeadingLevel ? /* @__PURE__ */ (0,
|
|
14465
|
-
/* @__PURE__ */ (0,
|
|
14539
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.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: [
|
|
14540
|
+
questionHeadingLevel ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: item.q }),
|
|
14541
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
14466
14542
|
"span",
|
|
14467
14543
|
{
|
|
14468
14544
|
"aria-hidden": "true",
|
|
@@ -14471,7 +14547,7 @@ function FaqAccordion({
|
|
|
14471
14547
|
}
|
|
14472
14548
|
)
|
|
14473
14549
|
] }),
|
|
14474
|
-
/* @__PURE__ */ (0,
|
|
14550
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
|
|
14475
14551
|
]
|
|
14476
14552
|
},
|
|
14477
14553
|
index
|
|
@@ -14508,7 +14584,7 @@ function trustBadgeAlt(badge, numberLabel = DEFAULT_ADHESION_NUMBER_LABEL) {
|
|
|
14508
14584
|
}
|
|
14509
14585
|
|
|
14510
14586
|
// src/components/trust-badges.tsx
|
|
14511
|
-
var
|
|
14587
|
+
var import_jsx_runtime18 = (
|
|
14512
14588
|
// eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
|
|
14513
14589
|
require("react/jsx-runtime")
|
|
14514
14590
|
);
|
|
@@ -14538,7 +14614,7 @@ function isUsable(value) {
|
|
|
14538
14614
|
function BadgeContent({ badge, logoClassName }) {
|
|
14539
14615
|
const src = safeLogoSrc(badge.logoUrl);
|
|
14540
14616
|
if (src) {
|
|
14541
|
-
return /* @__PURE__ */ (0,
|
|
14617
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14542
14618
|
"img",
|
|
14543
14619
|
{
|
|
14544
14620
|
src,
|
|
@@ -14548,7 +14624,7 @@ function BadgeContent({ badge, logoClassName }) {
|
|
|
14548
14624
|
}
|
|
14549
14625
|
);
|
|
14550
14626
|
}
|
|
14551
|
-
return /* @__PURE__ */ (0,
|
|
14627
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "text-sm font-medium", children: badge.name });
|
|
14552
14628
|
}
|
|
14553
14629
|
function TrustBadges({
|
|
14554
14630
|
badges,
|
|
@@ -14576,14 +14652,14 @@ function TrustBadges({
|
|
|
14576
14652
|
if (groups.length === 0) return null;
|
|
14577
14653
|
const hasHeading = heading !== void 0 && heading !== null && heading !== "";
|
|
14578
14654
|
const groupHeadingLevel = hasHeading ? nextHeadingLevel(headingLevel) : headingLevel;
|
|
14579
|
-
const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ (0,
|
|
14655
|
+
const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
14580
14656
|
"div",
|
|
14581
14657
|
{
|
|
14582
14658
|
"data-slot": "trust-badge-group",
|
|
14583
14659
|
"data-type": type,
|
|
14584
14660
|
className: (0, import_utils13.cn)("space-y-3", groupClassName),
|
|
14585
14661
|
children: [
|
|
14586
|
-
groupHeading ? /* @__PURE__ */ (0,
|
|
14662
|
+
groupHeading ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14587
14663
|
Heading,
|
|
14588
14664
|
{
|
|
14589
14665
|
level: groupHeadingLevel,
|
|
@@ -14595,30 +14671,30 @@ function TrustBadges({
|
|
|
14595
14671
|
children: groupHeading
|
|
14596
14672
|
}
|
|
14597
14673
|
) : null,
|
|
14598
|
-
/* @__PURE__ */ (0,
|
|
14674
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("ul", { className: (0, import_utils13.cn)("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
|
|
14599
14675
|
const href = safeHref(badge.url);
|
|
14600
|
-
return /* @__PURE__ */ (0,
|
|
14601
|
-
/* @__PURE__ */ (0,
|
|
14676
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("li", { children: href ? /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
|
|
14677
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(BadgeContent, { badge, logoClassName }),
|
|
14602
14678
|
" ",
|
|
14603
|
-
/* @__PURE__ */ (0,
|
|
14604
|
-
] }) : /* @__PURE__ */ (0,
|
|
14679
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "sr-only", children: newWindowLabel })
|
|
14680
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(BadgeContent, { badge, logoClassName }) }, badge.id);
|
|
14605
14681
|
}) })
|
|
14606
14682
|
]
|
|
14607
14683
|
},
|
|
14608
14684
|
type
|
|
14609
14685
|
));
|
|
14610
14686
|
if (!hasHeading) {
|
|
14611
|
-
return /* @__PURE__ */ (0,
|
|
14687
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { "data-slot": "trust-badges", className: (0, import_utils13.cn)("space-y-6", className), children: content });
|
|
14612
14688
|
}
|
|
14613
14689
|
const Tag = `h${headingLevel}`;
|
|
14614
|
-
return /* @__PURE__ */ (0,
|
|
14690
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
14615
14691
|
"section",
|
|
14616
14692
|
{
|
|
14617
14693
|
"data-slot": "trust-badges",
|
|
14618
14694
|
"aria-labelledby": headingId,
|
|
14619
14695
|
className: (0, import_utils13.cn)("space-y-6", className),
|
|
14620
14696
|
children: [
|
|
14621
|
-
/* @__PURE__ */ (0,
|
|
14697
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14622
14698
|
Tag,
|
|
14623
14699
|
{
|
|
14624
14700
|
id: headingId,
|
|
@@ -14634,7 +14710,7 @@ function TrustBadges({
|
|
|
14634
14710
|
|
|
14635
14711
|
// src/components/arbitration-badge.tsx
|
|
14636
14712
|
var import_utils14 = require("@reblu/site-ui/utils");
|
|
14637
|
-
var
|
|
14713
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
14638
14714
|
function isArbitrationBadge(value) {
|
|
14639
14715
|
if (typeof value !== "object" || value === null) return false;
|
|
14640
14716
|
const entry = value;
|
|
@@ -14652,7 +14728,7 @@ function ArbitrationBadge({
|
|
|
14652
14728
|
if (!Array.isArray(badges)) return null;
|
|
14653
14729
|
const items = badges.filter(isArbitrationBadge);
|
|
14654
14730
|
if (items.length === 0) return null;
|
|
14655
|
-
return /* @__PURE__ */ (0,
|
|
14731
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14656
14732
|
"ul",
|
|
14657
14733
|
{
|
|
14658
14734
|
"data-slot": "arbitration-badges",
|
|
@@ -14661,11 +14737,11 @@ function ArbitrationBadge({
|
|
|
14661
14737
|
const src = safeLogoSrc(badge.logoUrl);
|
|
14662
14738
|
const href = safeHref(badge.url);
|
|
14663
14739
|
const number2 = adhesionNumberOf(badge);
|
|
14664
|
-
const caption = number2 && (showNumber || !src) ? /* @__PURE__ */ (0,
|
|
14665
|
-
const content = /* @__PURE__ */ (0,
|
|
14740
|
+
const caption = number2 && (showNumber || !src) ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: (0, import_utils14.cn)("text-xs", numberClassName), "aria-hidden": src ? "true" : void 0, children: `${numberLabel} ${number2}` }) : null;
|
|
14741
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { className: "inline-flex flex-col items-center gap-1 text-center", children: [
|
|
14666
14742
|
src ? (
|
|
14667
14743
|
// eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
|
|
14668
|
-
/* @__PURE__ */ (0,
|
|
14744
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14669
14745
|
"img",
|
|
14670
14746
|
{
|
|
14671
14747
|
src,
|
|
@@ -14674,13 +14750,13 @@ function ArbitrationBadge({
|
|
|
14674
14750
|
className: (0, import_utils14.cn)("h-16 w-auto object-contain", logoClassName)
|
|
14675
14751
|
}
|
|
14676
14752
|
)
|
|
14677
|
-
) : /* @__PURE__ */ (0,
|
|
14753
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "text-sm font-medium", children: badge.name }),
|
|
14678
14754
|
caption
|
|
14679
14755
|
] });
|
|
14680
|
-
return /* @__PURE__ */ (0,
|
|
14756
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("li", { "data-slot": "arbitration-badge", children: href ? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
|
|
14681
14757
|
content,
|
|
14682
14758
|
" ",
|
|
14683
|
-
/* @__PURE__ */ (0,
|
|
14759
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "sr-only", children: newWindowLabel })
|
|
14684
14760
|
] }) : content }, badge.id);
|
|
14685
14761
|
})
|
|
14686
14762
|
}
|
|
@@ -14692,7 +14768,7 @@ var import_utils16 = require("@reblu/site-ui/utils");
|
|
|
14692
14768
|
|
|
14693
14769
|
// src/components/_review-card.tsx
|
|
14694
14770
|
var import_utils15 = require("@reblu/site-ui/utils");
|
|
14695
|
-
var
|
|
14771
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
14696
14772
|
function isHttps(value) {
|
|
14697
14773
|
if (typeof value !== "string") return false;
|
|
14698
14774
|
try {
|
|
@@ -14715,7 +14791,7 @@ function formatDay(day, locale) {
|
|
|
14715
14791
|
}
|
|
14716
14792
|
var STAR_PATH = "M12 2.5l2.9 5.9 6.5.9-4.7 4.6 1.1 6.5L12 17.3l-5.8 3.1 1.1-6.5L2.6 9.3l6.5-.9z";
|
|
14717
14793
|
function Stars({ rating }) {
|
|
14718
|
-
return /* @__PURE__ */ (0,
|
|
14794
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { role: "img", "aria-label": `${rating} de 5 estrellas`, className: "flex gap-0.5", children: [1, 2, 3, 4, 5].map((n) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
14719
14795
|
"svg",
|
|
14720
14796
|
{
|
|
14721
14797
|
"aria-hidden": "true",
|
|
@@ -14727,7 +14803,7 @@ function Stars({ rating }) {
|
|
|
14727
14803
|
stroke: "currentColor",
|
|
14728
14804
|
strokeWidth: "1.5",
|
|
14729
14805
|
strokeLinejoin: "round",
|
|
14730
|
-
children: /* @__PURE__ */ (0,
|
|
14806
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("path", { d: STAR_PATH })
|
|
14731
14807
|
},
|
|
14732
14808
|
n
|
|
14733
14809
|
)) });
|
|
@@ -14743,19 +14819,19 @@ function ReviewCard({
|
|
|
14743
14819
|
className
|
|
14744
14820
|
}) {
|
|
14745
14821
|
const date = formatDay(review.reviewDate, locale);
|
|
14746
|
-
return /* @__PURE__ */ (0,
|
|
14822
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
14747
14823
|
"article",
|
|
14748
14824
|
{
|
|
14749
14825
|
"data-slot": "review",
|
|
14750
14826
|
"data-source": review.source,
|
|
14751
14827
|
className: (0, import_utils15.cn)("flex h-full flex-col gap-3 rounded-lg border p-5", className),
|
|
14752
14828
|
children: [
|
|
14753
|
-
/* @__PURE__ */ (0,
|
|
14754
|
-
review.text && review.text.trim() !== "" ? /* @__PURE__ */ (0,
|
|
14755
|
-
/* @__PURE__ */ (0,
|
|
14756
|
-
/* @__PURE__ */ (0,
|
|
14757
|
-
date ? /* @__PURE__ */ (0,
|
|
14758
|
-
/* @__PURE__ */ (0,
|
|
14829
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Stars, { rating: review.rating }),
|
|
14830
|
+
review.text && review.text.trim() !== "" ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("blockquote", { className: "flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { children: review.text }) }) : null,
|
|
14831
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("footer", { className: "mt-auto space-y-1 text-sm", children: [
|
|
14832
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "font-semibold", children: review.authorName }),
|
|
14833
|
+
date ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("time", { dateTime: review.reviewDate, className: "block text-muted-foreground", children: date }) : null,
|
|
14834
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
14759
14835
|
"a",
|
|
14760
14836
|
{
|
|
14761
14837
|
href: review.sourceUrl,
|
|
@@ -14765,7 +14841,7 @@ function ReviewCard({
|
|
|
14765
14841
|
children: [
|
|
14766
14842
|
linkLabel(review.sourceName),
|
|
14767
14843
|
" ",
|
|
14768
|
-
/* @__PURE__ */ (0,
|
|
14844
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "sr-only", children: newWindowLabel })
|
|
14769
14845
|
]
|
|
14770
14846
|
}
|
|
14771
14847
|
)
|
|
@@ -14776,7 +14852,7 @@ function ReviewCard({
|
|
|
14776
14852
|
}
|
|
14777
14853
|
|
|
14778
14854
|
// src/components/reviews.tsx
|
|
14779
|
-
var
|
|
14855
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
14780
14856
|
function Reviews({
|
|
14781
14857
|
reviews,
|
|
14782
14858
|
heading,
|
|
@@ -14796,7 +14872,7 @@ function Reviews({
|
|
|
14796
14872
|
const usable = usableReviews(reviews);
|
|
14797
14873
|
if (usable.length === 0) return null;
|
|
14798
14874
|
const hasNotice = notice !== void 0 && notice !== null && notice !== "";
|
|
14799
|
-
const noticeNode = hasNotice ? /* @__PURE__ */ (0,
|
|
14875
|
+
const noticeNode = hasNotice ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
14800
14876
|
"p",
|
|
14801
14877
|
{
|
|
14802
14878
|
"data-slot": "reviews-notice",
|
|
@@ -14804,13 +14880,13 @@ function Reviews({
|
|
|
14804
14880
|
children: notice
|
|
14805
14881
|
}
|
|
14806
14882
|
) : null;
|
|
14807
|
-
const grid = /* @__PURE__ */ (0,
|
|
14883
|
+
const grid = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
14808
14884
|
"ul",
|
|
14809
14885
|
{
|
|
14810
14886
|
"data-slot": "reviews-grid",
|
|
14811
14887
|
className: slotClassName("grid gap-6", "sm:grid-cols-2 lg:grid-cols-3", gridClassName),
|
|
14812
14888
|
children: usable.map((review) => {
|
|
14813
|
-
return /* @__PURE__ */ (0,
|
|
14889
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
14814
14890
|
ReviewCard,
|
|
14815
14891
|
{
|
|
14816
14892
|
review,
|
|
@@ -14823,18 +14899,18 @@ function Reviews({
|
|
|
14823
14899
|
})
|
|
14824
14900
|
}
|
|
14825
14901
|
);
|
|
14826
|
-
const body3 = /* @__PURE__ */ (0,
|
|
14902
|
+
const body3 = /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_jsx_runtime21.Fragment, { children: [
|
|
14827
14903
|
noticePosition === "above" ? noticeNode : null,
|
|
14828
14904
|
grid,
|
|
14829
14905
|
noticePosition === "below" ? noticeNode : null
|
|
14830
14906
|
] });
|
|
14831
14907
|
const hasHeading = heading !== void 0 && heading !== null && heading !== "";
|
|
14832
14908
|
if (!hasHeading) {
|
|
14833
|
-
return /* @__PURE__ */ (0,
|
|
14909
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { "data-slot": "reviews", className: (0, import_utils16.cn)("space-y-4", className), children: body3 });
|
|
14834
14910
|
}
|
|
14835
14911
|
const Tag = `h${headingLevel}`;
|
|
14836
|
-
return /* @__PURE__ */ (0,
|
|
14837
|
-
/* @__PURE__ */ (0,
|
|
14912
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("section", { "data-slot": "reviews", "aria-labelledby": headingId, className: (0, import_utils16.cn)("space-y-4", className), children: [
|
|
14913
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Tag, { id: headingId, className: slotClassName("", "text-xl font-semibold", headingClassName), children: heading }),
|
|
14838
14914
|
body3
|
|
14839
14915
|
] });
|
|
14840
14916
|
}
|
|
@@ -15007,11 +15083,11 @@ var CARD_ICON_NODES = {
|
|
|
15007
15083
|
};
|
|
15008
15084
|
|
|
15009
15085
|
// src/components/content-blocks.tsx
|
|
15010
|
-
var
|
|
15086
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
15011
15087
|
var DEFAULT_BEFORE_AFTER_LABELS = Object.freeze({ before: "Antes", after: "Despu\xE9s" });
|
|
15012
15088
|
function PairImage({ url, alt, label }) {
|
|
15013
|
-
return /* @__PURE__ */ (0,
|
|
15014
|
-
/* @__PURE__ */ (0,
|
|
15089
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("figure", { className: "space-y-2", children: [
|
|
15090
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15015
15091
|
"img",
|
|
15016
15092
|
{
|
|
15017
15093
|
src: url,
|
|
@@ -15021,7 +15097,7 @@ function PairImage({ url, alt, label }) {
|
|
|
15021
15097
|
className: "h-full w-full object-cover"
|
|
15022
15098
|
}
|
|
15023
15099
|
) }),
|
|
15024
|
-
/* @__PURE__ */ (0,
|
|
15100
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("figcaption", { className: "text-sm font-semibold", children: label })
|
|
15025
15101
|
] });
|
|
15026
15102
|
}
|
|
15027
15103
|
function BeforeAfterPairs({
|
|
@@ -15033,26 +15109,26 @@ function BeforeAfterPairs({
|
|
|
15033
15109
|
}) {
|
|
15034
15110
|
const visibleCaption = showCaption && caption && caption.trim() !== "" ? caption : null;
|
|
15035
15111
|
if (pairs.length === 0 && !visibleCaption) return null;
|
|
15036
|
-
return /* @__PURE__ */ (0,
|
|
15037
|
-
pairs.length > 0 && /* @__PURE__ */ (0,
|
|
15112
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { "data-slot": "before-after", className: (0, import_utils17.cn)("space-y-4", className), children: [
|
|
15113
|
+
pairs.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("ul", { className: "grid gap-6 lg:grid-cols-2", children: pairs.map((pair, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
15038
15114
|
"li",
|
|
15039
15115
|
{
|
|
15040
15116
|
"data-slot": "before-after-pair",
|
|
15041
15117
|
className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
|
|
15042
15118
|
children: [
|
|
15043
|
-
/* @__PURE__ */ (0,
|
|
15044
|
-
/* @__PURE__ */ (0,
|
|
15119
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(PairImage, { url: pair.beforeUrl, alt: pair.alt ?? "", label: labels.before }),
|
|
15120
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(PairImage, { url: pair.afterUrl, alt: pair.alt ?? "", label: labels.after })
|
|
15045
15121
|
]
|
|
15046
15122
|
},
|
|
15047
15123
|
`${pair.beforeUrl}-${pair.afterUrl}-${i}`
|
|
15048
15124
|
)) }),
|
|
15049
|
-
visibleCaption && /* @__PURE__ */ (0,
|
|
15125
|
+
visibleCaption && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { "data-slot": "before-after-caption", className: "whitespace-pre-line text-sm opacity-80", children: visibleCaption })
|
|
15050
15126
|
] });
|
|
15051
15127
|
}
|
|
15052
15128
|
function ChipList({ items, className }) {
|
|
15053
15129
|
const visible = items.filter((item) => item.trim() !== "");
|
|
15054
15130
|
if (visible.length === 0) return null;
|
|
15055
|
-
return /* @__PURE__ */ (0,
|
|
15131
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("ul", { "data-slot": "chip-list", className: (0, import_utils17.cn)("flex flex-wrap gap-3", className), children: visible.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15056
15132
|
"li",
|
|
15057
15133
|
{
|
|
15058
15134
|
"data-slot": "chip",
|
|
@@ -15068,7 +15144,7 @@ function hasCardIcon(icon) {
|
|
|
15068
15144
|
}
|
|
15069
15145
|
function CardIconSvg({ icon, className }) {
|
|
15070
15146
|
if (!hasCardIcon(icon)) return null;
|
|
15071
|
-
return /* @__PURE__ */ (0,
|
|
15147
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15072
15148
|
"svg",
|
|
15073
15149
|
{
|
|
15074
15150
|
xmlns: "http://www.w3.org/2000/svg",
|
|
@@ -15082,29 +15158,29 @@ function CardIconSvg({ icon, className }) {
|
|
|
15082
15158
|
focusable: "false",
|
|
15083
15159
|
"data-icon": icon,
|
|
15084
15160
|
className: (0, import_utils17.cn)("h-5 w-5", className),
|
|
15085
|
-
children: CARD_ICON_NODES[icon].map(([Tag, attrs], i) => /* @__PURE__ */ (0,
|
|
15161
|
+
children: CARD_ICON_NODES[icon].map(([Tag, attrs], i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Tag, { ...attrs }, i))
|
|
15086
15162
|
}
|
|
15087
15163
|
);
|
|
15088
15164
|
}
|
|
15089
15165
|
function IconCardGrid({ items, intro, headingLevel = 3, className }) {
|
|
15090
15166
|
const hasIntro = !!intro && intro.trim() !== "";
|
|
15091
15167
|
if (items.length === 0 && !hasIntro) return null;
|
|
15092
|
-
return /* @__PURE__ */ (0,
|
|
15093
|
-
hasIntro && /* @__PURE__ */ (0,
|
|
15094
|
-
items.length > 0 && /* @__PURE__ */ (0,
|
|
15168
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { "data-slot": "icon-cards", className: (0, import_utils17.cn)("space-y-6", className), children: [
|
|
15169
|
+
hasIntro && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "max-w-prose text-lg opacity-80", children: intro }),
|
|
15170
|
+
items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15095
15171
|
"ul",
|
|
15096
15172
|
{
|
|
15097
15173
|
"data-slot": "icon-card-grid",
|
|
15098
15174
|
className: "grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3",
|
|
15099
|
-
children: items.map((item, i) => /* @__PURE__ */ (0,
|
|
15175
|
+
children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
15100
15176
|
"li",
|
|
15101
15177
|
{
|
|
15102
15178
|
"data-slot": "icon-card",
|
|
15103
15179
|
className: "space-y-3 rounded-xl border border-border bg-card p-6 text-card-foreground",
|
|
15104
15180
|
children: [
|
|
15105
|
-
hasCardIcon(item.icon) && /* @__PURE__ */ (0,
|
|
15106
|
-
/* @__PURE__ */ (0,
|
|
15107
|
-
item.text && /* @__PURE__ */ (0,
|
|
15181
|
+
hasCardIcon(item.icon) && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "inline-flex h-12 w-12 items-center justify-center rounded-xl bg-primary/10 text-primary", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(CardIconSvg, { icon: item.icon }) }),
|
|
15182
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: item.title }),
|
|
15183
|
+
item.text && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-muted-foreground", children: item.text })
|
|
15108
15184
|
]
|
|
15109
15185
|
},
|
|
15110
15186
|
`${item.title}-${i}`
|
|
@@ -15130,19 +15206,19 @@ function ImageTextSplit({
|
|
|
15130
15206
|
const imageRight = imageSide === "right";
|
|
15131
15207
|
const hasKicker = !!kicker && kicker.trim() !== "";
|
|
15132
15208
|
const bodyOffset = heading ? headingLevel : headingLevel - 1;
|
|
15133
|
-
return /* @__PURE__ */ (0,
|
|
15209
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
15134
15210
|
"div",
|
|
15135
15211
|
{
|
|
15136
15212
|
"data-slot": "image-text",
|
|
15137
15213
|
"data-image-side": imageRight ? "right" : "left",
|
|
15138
15214
|
className: (0, import_utils17.cn)("grid grid-cols-1 items-center gap-8 md:grid-cols-2", className),
|
|
15139
15215
|
children: [
|
|
15140
|
-
/* @__PURE__ */ (0,
|
|
15216
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15141
15217
|
"div",
|
|
15142
15218
|
{
|
|
15143
15219
|
"data-slot": "image-text-media",
|
|
15144
15220
|
className: (0, import_utils17.cn)(textFirst ? "order-2" : "order-1", imageRight ? "md:order-2" : "md:order-1"),
|
|
15145
|
-
children: /* @__PURE__ */ (0,
|
|
15221
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15146
15222
|
"img",
|
|
15147
15223
|
{
|
|
15148
15224
|
src: imageUrl,
|
|
@@ -15154,7 +15230,7 @@ function ImageTextSplit({
|
|
|
15154
15230
|
) })
|
|
15155
15231
|
}
|
|
15156
15232
|
),
|
|
15157
|
-
/* @__PURE__ */ (0,
|
|
15233
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
15158
15234
|
"div",
|
|
15159
15235
|
{
|
|
15160
15236
|
"data-slot": "image-text-body",
|
|
@@ -15164,11 +15240,11 @@ function ImageTextSplit({
|
|
|
15164
15240
|
imageRight ? "md:order-1" : "md:order-2"
|
|
15165
15241
|
),
|
|
15166
15242
|
children: [
|
|
15167
|
-
(hasKicker || heading) && /* @__PURE__ */ (0,
|
|
15168
|
-
hasKicker && /* @__PURE__ */ (0,
|
|
15169
|
-
heading && /* @__PURE__ */ (0,
|
|
15243
|
+
(hasKicker || heading) && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "space-y-2", children: [
|
|
15244
|
+
hasKicker && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { "data-slot": "page-block-kicker", className: KICKER_CLASS_NAME, children: kicker }),
|
|
15245
|
+
heading && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { id: headingId, children: heading }) })
|
|
15170
15246
|
] }),
|
|
15171
|
-
html5 && /* @__PURE__ */ (0,
|
|
15247
|
+
html5 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(SafeHtml, { html: sanitizeHtml(html5), headingOffset: bodyOffset })
|
|
15172
15248
|
]
|
|
15173
15249
|
}
|
|
15174
15250
|
)
|
|
@@ -15178,38 +15254,38 @@ function ImageTextSplit({
|
|
|
15178
15254
|
}
|
|
15179
15255
|
|
|
15180
15256
|
// src/components/page-blocks.tsx
|
|
15181
|
-
var
|
|
15257
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
15182
15258
|
var ALIASES = {
|
|
15183
15259
|
doctor_embed: "profile_embed",
|
|
15184
15260
|
specialty_embed: "page_embed"
|
|
15185
15261
|
};
|
|
15186
15262
|
function HeroBlock({ block, headingLevel }) {
|
|
15187
15263
|
const { title, subtitle, imageUrl } = block.data;
|
|
15188
|
-
return /* @__PURE__ */ (0,
|
|
15189
|
-
/* @__PURE__ */ (0,
|
|
15190
|
-
subtitle && /* @__PURE__ */ (0,
|
|
15191
|
-
imageUrl && /* @__PURE__ */ (0,
|
|
15264
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-4", children: [
|
|
15265
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
|
|
15266
|
+
subtitle && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "text-lg opacity-80", children: subtitle }),
|
|
15267
|
+
imageUrl && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
|
|
15192
15268
|
] });
|
|
15193
15269
|
}
|
|
15194
15270
|
function RichtextBlock({ block, headingLevel }) {
|
|
15195
|
-
return /* @__PURE__ */ (0,
|
|
15271
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
|
|
15196
15272
|
}
|
|
15197
15273
|
function FaqBlock({ block }) {
|
|
15198
|
-
return /* @__PURE__ */ (0,
|
|
15274
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(FaqAccordion, { items: block.data.items });
|
|
15199
15275
|
}
|
|
15200
15276
|
function StatsBlock({ block }) {
|
|
15201
|
-
return /* @__PURE__ */ (0,
|
|
15202
|
-
/* @__PURE__ */ (0,
|
|
15203
|
-
/* @__PURE__ */ (0,
|
|
15277
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.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_runtime23.jsxs)("div", { className: "flex flex-col-reverse gap-1", children: [
|
|
15278
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("dt", { className: "text-sm opacity-80", children: item.label }),
|
|
15279
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("dd", { className: "text-3xl font-bold", children: item.value })
|
|
15204
15280
|
] }, i)) });
|
|
15205
15281
|
}
|
|
15206
15282
|
function TestimonialBlock({ block }) {
|
|
15207
15283
|
const { quote, author, role, avatarUrl } = block.data;
|
|
15208
|
-
return /* @__PURE__ */ (0,
|
|
15209
|
-
/* @__PURE__ */ (0,
|
|
15210
|
-
/* @__PURE__ */ (0,
|
|
15284
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("figure", { className: "space-y-4", children: [
|
|
15285
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { children: quote }) }),
|
|
15286
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("figcaption", { className: "flex items-center gap-3", children: [
|
|
15211
15287
|
avatarUrl && // eslint-disable-next-line @next/next/no-img-element
|
|
15212
|
-
/* @__PURE__ */ (0,
|
|
15288
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
15213
15289
|
"img",
|
|
15214
15290
|
{
|
|
15215
15291
|
src: avatarUrl,
|
|
@@ -15218,9 +15294,9 @@ function TestimonialBlock({ block }) {
|
|
|
15218
15294
|
className: "h-10 w-10 rounded-full object-cover"
|
|
15219
15295
|
}
|
|
15220
15296
|
),
|
|
15221
|
-
/* @__PURE__ */ (0,
|
|
15222
|
-
/* @__PURE__ */ (0,
|
|
15223
|
-
role && /* @__PURE__ */ (0,
|
|
15297
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("span", { children: [
|
|
15298
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "font-semibold", children: author }),
|
|
15299
|
+
role && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "block text-sm opacity-80", children: role })
|
|
15224
15300
|
] })
|
|
15225
15301
|
] })
|
|
15226
15302
|
] });
|
|
@@ -15229,19 +15305,19 @@ function CtaSlotBlock(_props) {
|
|
|
15229
15305
|
return null;
|
|
15230
15306
|
}
|
|
15231
15307
|
function FeatureListBlock({ block }) {
|
|
15232
|
-
return /* @__PURE__ */ (0,
|
|
15308
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.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_runtime23.jsx)("li", { children: item.text }, i)) });
|
|
15233
15309
|
}
|
|
15234
15310
|
function GalleryBlock({ block }) {
|
|
15235
15311
|
const { images } = block.data;
|
|
15236
|
-
return /* @__PURE__ */ (0,
|
|
15312
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
15237
15313
|
"div",
|
|
15238
15314
|
{
|
|
15239
15315
|
className: (0, import_utils18.cn)(
|
|
15240
15316
|
"grid gap-4",
|
|
15241
15317
|
images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
|
|
15242
15318
|
),
|
|
15243
|
-
children: images.map((img, i) => /* @__PURE__ */ (0,
|
|
15244
|
-
/* @__PURE__ */ (0,
|
|
15319
|
+
children: images.map((img, i) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("figure", { className: "space-y-1", children: [
|
|
15320
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
15245
15321
|
"img",
|
|
15246
15322
|
{
|
|
15247
15323
|
src: img.url,
|
|
@@ -15250,7 +15326,7 @@ function GalleryBlock({ block }) {
|
|
|
15250
15326
|
className: "h-full w-full object-cover"
|
|
15251
15327
|
}
|
|
15252
15328
|
) }),
|
|
15253
|
-
img.caption && /* @__PURE__ */ (0,
|
|
15329
|
+
img.caption && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
|
|
15254
15330
|
] }, `${img.url}-${i}`))
|
|
15255
15331
|
}
|
|
15256
15332
|
);
|
|
@@ -15260,13 +15336,13 @@ function EmbedCard({
|
|
|
15260
15336
|
headingLevel,
|
|
15261
15337
|
embedHref
|
|
15262
15338
|
}) {
|
|
15263
|
-
return /* @__PURE__ */ (0,
|
|
15339
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
15264
15340
|
"a",
|
|
15265
15341
|
{
|
|
15266
15342
|
href: embedHref(resolved),
|
|
15267
15343
|
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",
|
|
15268
15344
|
children: [
|
|
15269
|
-
resolved.coverImageUrl && /* @__PURE__ */ (0,
|
|
15345
|
+
resolved.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
15270
15346
|
"img",
|
|
15271
15347
|
{
|
|
15272
15348
|
src: resolved.coverImageUrl,
|
|
@@ -15275,35 +15351,35 @@ function EmbedCard({
|
|
|
15275
15351
|
className: "h-full w-full object-cover"
|
|
15276
15352
|
}
|
|
15277
15353
|
) }),
|
|
15278
|
-
/* @__PURE__ */ (0,
|
|
15279
|
-
/* @__PURE__ */ (0,
|
|
15280
|
-
resolved.role && /* @__PURE__ */ (0,
|
|
15281
|
-
resolved.excerpt && /* @__PURE__ */ (0,
|
|
15354
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "space-y-1 p-4", children: [
|
|
15355
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
|
|
15356
|
+
resolved.role && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
|
|
15357
|
+
resolved.excerpt && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "text-muted-foreground", children: resolved.excerpt })
|
|
15282
15358
|
] })
|
|
15283
15359
|
]
|
|
15284
15360
|
}
|
|
15285
15361
|
);
|
|
15286
15362
|
}
|
|
15287
15363
|
function PageEmbedBlock({ block, headingLevel, embedHref }) {
|
|
15288
|
-
return /* @__PURE__ */ (0,
|
|
15364
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
15289
15365
|
}
|
|
15290
15366
|
function ProfileEmbedBlock({
|
|
15291
15367
|
block,
|
|
15292
15368
|
headingLevel,
|
|
15293
15369
|
embedHref
|
|
15294
15370
|
}) {
|
|
15295
|
-
return /* @__PURE__ */ (0,
|
|
15371
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
15296
15372
|
}
|
|
15297
15373
|
function BeforeAfterBlock({ block }) {
|
|
15298
15374
|
const { pairs, showCaption, caption } = block.data;
|
|
15299
|
-
return /* @__PURE__ */ (0,
|
|
15375
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(BeforeAfterPairs, { pairs, showCaption, caption });
|
|
15300
15376
|
}
|
|
15301
15377
|
function ChipsBlock({ block }) {
|
|
15302
|
-
return /* @__PURE__ */ (0,
|
|
15378
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ChipList, { items: block.data.items });
|
|
15303
15379
|
}
|
|
15304
15380
|
function ImageTextBlock({ block, headingLevel, headingId }) {
|
|
15305
15381
|
const { kicker, imageUrl, alt, imageSide, mobileOrder, html: html5 } = block.data;
|
|
15306
|
-
return /* @__PURE__ */ (0,
|
|
15382
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
15307
15383
|
ImageTextSplit,
|
|
15308
15384
|
{
|
|
15309
15385
|
imageUrl,
|
|
@@ -15319,11 +15395,11 @@ function ImageTextBlock({ block, headingLevel, headingId }) {
|
|
|
15319
15395
|
);
|
|
15320
15396
|
}
|
|
15321
15397
|
function IconCardsBlock({ block, headingLevel }) {
|
|
15322
|
-
return /* @__PURE__ */ (0,
|
|
15398
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(IconCardGrid, { items: block.data.items, intro: block.data.intro, headingLevel });
|
|
15323
15399
|
}
|
|
15324
15400
|
function ReviewsBlock({ block }) {
|
|
15325
15401
|
const { layout, notice } = block.data;
|
|
15326
|
-
return /* @__PURE__ */ (0,
|
|
15402
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { "data-slot": "reviews-block", "data-reviews-layout": layout ?? "grid", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
15327
15403
|
Reviews,
|
|
15328
15404
|
{
|
|
15329
15405
|
reviews: block.reviews,
|
|
@@ -15404,7 +15480,7 @@ function toIdFragment(value) {
|
|
|
15404
15480
|
function SectionCta2({ cta }) {
|
|
15405
15481
|
if (!hasUsableCta(cta)) return null;
|
|
15406
15482
|
const variant = toButtonVariant(cta.variant);
|
|
15407
|
-
return /* @__PURE__ */ (0,
|
|
15483
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
15408
15484
|
"a",
|
|
15409
15485
|
{
|
|
15410
15486
|
href: cta.url,
|
|
@@ -15441,7 +15517,7 @@ function PageBlocks({
|
|
|
15441
15517
|
const kicker = kickerOf(type, block);
|
|
15442
15518
|
const ownsHeading = OWN_HEADING_TYPES.has(type);
|
|
15443
15519
|
return [
|
|
15444
|
-
/* @__PURE__ */ (0,
|
|
15520
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
15445
15521
|
"section",
|
|
15446
15522
|
{
|
|
15447
15523
|
"data-slot": "page-block",
|
|
@@ -15450,9 +15526,9 @@ function PageBlocks({
|
|
|
15450
15526
|
style: surfaceStyle(background),
|
|
15451
15527
|
className: (0, import_utils18.cn)("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
|
|
15452
15528
|
children: [
|
|
15453
|
-
kicker && /* @__PURE__ */ (0,
|
|
15454
|
-
block.heading && !ownsHeading && /* @__PURE__ */ (0,
|
|
15455
|
-
ownsHeading ? /* @__PURE__ */ (0,
|
|
15529
|
+
kicker && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { "data-slot": "page-block-kicker", className: (0, import_utils18.cn)("-mb-4", KICKER_CLASS_NAME), children: kicker }),
|
|
15530
|
+
block.heading && !ownsHeading && /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { id: headingId, children: block.heading }) }),
|
|
15531
|
+
ownsHeading ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
15456
15532
|
Renderer,
|
|
15457
15533
|
{
|
|
15458
15534
|
block,
|
|
@@ -15460,7 +15536,7 @@ function PageBlocks({
|
|
|
15460
15536
|
embedHref,
|
|
15461
15537
|
headingId
|
|
15462
15538
|
}
|
|
15463
|
-
) : /* @__PURE__ */ (0,
|
|
15539
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
15464
15540
|
Renderer,
|
|
15465
15541
|
{
|
|
15466
15542
|
block,
|
|
@@ -15468,7 +15544,7 @@ function PageBlocks({
|
|
|
15468
15544
|
embedHref
|
|
15469
15545
|
}
|
|
15470
15546
|
),
|
|
15471
|
-
/* @__PURE__ */ (0,
|
|
15547
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SectionCta2, { cta: block.cta })
|
|
15472
15548
|
]
|
|
15473
15549
|
},
|
|
15474
15550
|
block.id
|
|
@@ -15476,12 +15552,12 @@ function PageBlocks({
|
|
|
15476
15552
|
];
|
|
15477
15553
|
});
|
|
15478
15554
|
if (sections.length === 0) return null;
|
|
15479
|
-
return /* @__PURE__ */ (0,
|
|
15555
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: (0, import_utils18.cn)("space-y-12", className), "data-slot": "page-blocks", children: sections });
|
|
15480
15556
|
}
|
|
15481
15557
|
|
|
15482
15558
|
// src/components/shop-filters.tsx
|
|
15483
15559
|
var import_utils19 = require("@reblu/site-ui/utils");
|
|
15484
|
-
var
|
|
15560
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
15485
15561
|
var DEFAULT_SHOP_PRICE_BANDS = [
|
|
15486
15562
|
{ max: 2500 },
|
|
15487
15563
|
{ min: 2500, max: 5e3 },
|
|
@@ -15525,7 +15601,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
|
|
|
15525
15601
|
return "";
|
|
15526
15602
|
}
|
|
15527
15603
|
function OptionLink({ href, active, label, onActivate }) {
|
|
15528
|
-
return /* @__PURE__ */ (0,
|
|
15604
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15529
15605
|
"a",
|
|
15530
15606
|
{
|
|
15531
15607
|
href,
|
|
@@ -15543,9 +15619,9 @@ function OptionLink({ href, active, label, onActivate }) {
|
|
|
15543
15619
|
);
|
|
15544
15620
|
}
|
|
15545
15621
|
function FilterFieldset({ legend, children: children2 }) {
|
|
15546
|
-
return /* @__PURE__ */ (0,
|
|
15547
|
-
/* @__PURE__ */ (0,
|
|
15548
|
-
/* @__PURE__ */ (0,
|
|
15622
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("fieldset", { className: "space-y-2", children: [
|
|
15623
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("legend", { className: "text-sm font-medium text-foreground", children: legend }),
|
|
15624
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex flex-wrap gap-2", children: children2 })
|
|
15549
15625
|
] });
|
|
15550
15626
|
}
|
|
15551
15627
|
function ShopFilters({
|
|
@@ -15568,11 +15644,11 @@ function ShopFilters({
|
|
|
15568
15644
|
if (!shouldRenderShopFilters(facets, active)) {
|
|
15569
15645
|
return null;
|
|
15570
15646
|
}
|
|
15571
|
-
return /* @__PURE__ */ (0,
|
|
15647
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: (0, import_utils19.cn)("space-y-6", className), "data-slot": "shop-filters", children: [
|
|
15572
15648
|
visibleTaxonomies.map((axis) => {
|
|
15573
15649
|
const activeSlug = active.taxonomy?.[axis.key];
|
|
15574
|
-
return /* @__PURE__ */ (0,
|
|
15575
|
-
/* @__PURE__ */ (0,
|
|
15650
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(FilterFieldset, { legend: axis.label, children: [
|
|
15651
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15576
15652
|
OptionLink,
|
|
15577
15653
|
{
|
|
15578
15654
|
href: hrefs.taxonomy(axis.key, void 0),
|
|
@@ -15587,7 +15663,7 @@ function ShopFilters({
|
|
|
15587
15663
|
),
|
|
15588
15664
|
axis.terms.map((term) => {
|
|
15589
15665
|
const isActive = activeSlug === term.slug;
|
|
15590
|
-
return /* @__PURE__ */ (0,
|
|
15666
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15591
15667
|
OptionLink,
|
|
15592
15668
|
{
|
|
15593
15669
|
href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
|
|
@@ -15607,9 +15683,9 @@ function ShopFilters({
|
|
|
15607
15683
|
}),
|
|
15608
15684
|
visibleAttributes.map((attr) => {
|
|
15609
15685
|
const activeValues = toValueArray(active.attr?.[attr.key]);
|
|
15610
|
-
return /* @__PURE__ */ (0,
|
|
15686
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
|
|
15611
15687
|
const isActive = activeValues.includes(opt.value);
|
|
15612
|
-
return /* @__PURE__ */ (0,
|
|
15688
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15613
15689
|
OptionLink,
|
|
15614
15690
|
{
|
|
15615
15691
|
href: hrefs.attr(attr.key, opt.value),
|
|
@@ -15627,11 +15703,11 @@ function ShopFilters({
|
|
|
15627
15703
|
);
|
|
15628
15704
|
}) }, attr.key);
|
|
15629
15705
|
}),
|
|
15630
|
-
showPriceGroup && /* @__PURE__ */ (0,
|
|
15706
|
+
showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
|
|
15631
15707
|
const isActive = active.priceMin === band.min && active.priceMax === band.max;
|
|
15632
15708
|
const nextMin = isActive ? void 0 : band.min;
|
|
15633
15709
|
const nextMax = isActive ? void 0 : band.max;
|
|
15634
|
-
return /* @__PURE__ */ (0,
|
|
15710
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15635
15711
|
OptionLink,
|
|
15636
15712
|
{
|
|
15637
15713
|
href: hrefs.price(nextMin, nextMax),
|
|
@@ -15642,7 +15718,7 @@ function ShopFilters({
|
|
|
15642
15718
|
i
|
|
15643
15719
|
);
|
|
15644
15720
|
}) }),
|
|
15645
|
-
hasOnSale && /* @__PURE__ */ (0,
|
|
15721
|
+
hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15646
15722
|
OptionLink,
|
|
15647
15723
|
{
|
|
15648
15724
|
href: hrefs.onSale(!active.onSale),
|
|
@@ -15651,7 +15727,7 @@ function ShopFilters({
|
|
|
15651
15727
|
onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
|
|
15652
15728
|
}
|
|
15653
15729
|
),
|
|
15654
|
-
/* @__PURE__ */ (0,
|
|
15730
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15655
15731
|
"a",
|
|
15656
15732
|
{
|
|
15657
15733
|
href: hrefs.clearAll(),
|
|
@@ -15668,7 +15744,7 @@ function ShopFilters({
|
|
|
15668
15744
|
|
|
15669
15745
|
// src/components/course-catalog-filters.tsx
|
|
15670
15746
|
var import_utils20 = require("@reblu/site-ui/utils");
|
|
15671
|
-
var
|
|
15747
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
15672
15748
|
var DEFAULT_COURSE_PRICE_BANDS = [
|
|
15673
15749
|
{ max: 5e3 },
|
|
15674
15750
|
{ min: 5e3, max: 15e3 },
|
|
@@ -15721,9 +15797,9 @@ function CourseCatalogFilters({
|
|
|
15721
15797
|
const showPrice = enabled.price !== false;
|
|
15722
15798
|
const isFree = Boolean(active.free);
|
|
15723
15799
|
if (!showCategories && !showInstructors && !showPrice) return null;
|
|
15724
|
-
return /* @__PURE__ */ (0,
|
|
15725
|
-
showCategories && /* @__PURE__ */ (0,
|
|
15726
|
-
/* @__PURE__ */ (0,
|
|
15800
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: (0, import_utils20.cn)("space-y-6", className), "data-slot": "course-catalog-filters", children: [
|
|
15801
|
+
showCategories && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(FilterFieldset, { legend: t.category, children: [
|
|
15802
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15727
15803
|
OptionLink,
|
|
15728
15804
|
{
|
|
15729
15805
|
href: categoryHref(void 0),
|
|
@@ -15735,7 +15811,7 @@ function CourseCatalogFilters({
|
|
|
15735
15811
|
sortedCategories.map((category) => {
|
|
15736
15812
|
const isActive = active.category === category.slug;
|
|
15737
15813
|
const next2 = isActive ? void 0 : category.slug;
|
|
15738
|
-
return /* @__PURE__ */ (0,
|
|
15814
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15739
15815
|
OptionLink,
|
|
15740
15816
|
{
|
|
15741
15817
|
href: categoryHref(next2),
|
|
@@ -15747,8 +15823,8 @@ function CourseCatalogFilters({
|
|
|
15747
15823
|
);
|
|
15748
15824
|
})
|
|
15749
15825
|
] }),
|
|
15750
|
-
showInstructors && /* @__PURE__ */ (0,
|
|
15751
|
-
/* @__PURE__ */ (0,
|
|
15826
|
+
showInstructors && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(FilterFieldset, { legend: t.instructor, children: [
|
|
15827
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15752
15828
|
OptionLink,
|
|
15753
15829
|
{
|
|
15754
15830
|
href: hrefs.instructor(void 0),
|
|
@@ -15760,7 +15836,7 @@ function CourseCatalogFilters({
|
|
|
15760
15836
|
named.map((instructor) => {
|
|
15761
15837
|
const isActive = active.instructor === instructor.id;
|
|
15762
15838
|
const next2 = isActive ? void 0 : instructor.id;
|
|
15763
|
-
return /* @__PURE__ */ (0,
|
|
15839
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15764
15840
|
OptionLink,
|
|
15765
15841
|
{
|
|
15766
15842
|
href: hrefs.instructor(next2),
|
|
@@ -15772,8 +15848,8 @@ function CourseCatalogFilters({
|
|
|
15772
15848
|
);
|
|
15773
15849
|
})
|
|
15774
15850
|
] }),
|
|
15775
|
-
showPrice && /* @__PURE__ */ (0,
|
|
15776
|
-
/* @__PURE__ */ (0,
|
|
15851
|
+
showPrice && /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(FilterFieldset, { legend: t.price, children: [
|
|
15852
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15777
15853
|
OptionLink,
|
|
15778
15854
|
{
|
|
15779
15855
|
href: hrefs.free(!isFree),
|
|
@@ -15788,7 +15864,7 @@ function CourseCatalogFilters({
|
|
|
15788
15864
|
const isActive = !isFree && active.priceMin === band.min && active.priceMax === band.max;
|
|
15789
15865
|
const nextMin = isActive ? void 0 : band.min;
|
|
15790
15866
|
const nextMax = isActive ? void 0 : band.max;
|
|
15791
|
-
return /* @__PURE__ */ (0,
|
|
15867
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15792
15868
|
OptionLink,
|
|
15793
15869
|
{
|
|
15794
15870
|
href: hrefs.price(nextMin, nextMax),
|
|
@@ -15800,7 +15876,7 @@ function CourseCatalogFilters({
|
|
|
15800
15876
|
);
|
|
15801
15877
|
})
|
|
15802
15878
|
] }),
|
|
15803
|
-
/* @__PURE__ */ (0,
|
|
15879
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
15804
15880
|
"a",
|
|
15805
15881
|
{
|
|
15806
15882
|
href: hrefs.clearAll(),
|
|
@@ -15823,7 +15899,7 @@ function CourseCatalogFilters({
|
|
|
15823
15899
|
|
|
15824
15900
|
// src/components/cart-line-list.tsx
|
|
15825
15901
|
var import_utils21 = require("@reblu/site-ui/utils");
|
|
15826
|
-
var
|
|
15902
|
+
var import_jsx_runtime26 = (
|
|
15827
15903
|
// eslint-disable-next-line react/no-array-index-key -- entries are positional, SITE-built rows
|
|
15828
15904
|
require("react/jsx-runtime")
|
|
15829
15905
|
);
|
|
@@ -15839,17 +15915,17 @@ var DEFAULT_LABELS2 = {
|
|
|
15839
15915
|
function CartLineIncludes({ entries, note, className }) {
|
|
15840
15916
|
const hasNote = note != null && note !== false && note !== "";
|
|
15841
15917
|
if (entries.length === 0 && !hasNote) return null;
|
|
15842
|
-
return /* @__PURE__ */ (0,
|
|
15918
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
15843
15919
|
"div",
|
|
15844
15920
|
{
|
|
15845
15921
|
className: (0, import_utils21.cn)("mt-2 space-y-2 rounded-lg bg-muted px-4 py-3 text-sm", className),
|
|
15846
15922
|
"data-slot": "cart-line-includes",
|
|
15847
15923
|
children: [
|
|
15848
|
-
entries.length > 0 && /* @__PURE__ */ (0,
|
|
15849
|
-
/* @__PURE__ */ (0,
|
|
15850
|
-
/* @__PURE__ */ (0,
|
|
15924
|
+
entries.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("dl", { className: "grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1.5", children: entries.map((entry, idx) => /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "contents", children: [
|
|
15925
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("dt", { className: "font-semibold text-muted-foreground", children: entry.label }),
|
|
15926
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("dd", { className: "m-0", children: entry.value })
|
|
15851
15927
|
] }, idx)) }),
|
|
15852
|
-
hasNote && /* @__PURE__ */ (0,
|
|
15928
|
+
hasNote && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-muted-foreground", children: note })
|
|
15853
15929
|
]
|
|
15854
15930
|
}
|
|
15855
15931
|
);
|
|
@@ -15878,9 +15954,9 @@ function CartLineList({
|
|
|
15878
15954
|
}) {
|
|
15879
15955
|
const t = { ...DEFAULT_LABELS2, ...labels };
|
|
15880
15956
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
15881
|
-
return /* @__PURE__ */ (0,
|
|
15882
|
-
/* @__PURE__ */ (0,
|
|
15883
|
-
noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0,
|
|
15957
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: (0, import_utils21.cn)("space-y-4", className), "data-slot": "cart-line-list", children: [
|
|
15958
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
|
|
15959
|
+
noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
15884
15960
|
"div",
|
|
15885
15961
|
{
|
|
15886
15962
|
role: "status",
|
|
@@ -15889,34 +15965,34 @@ function CartLineList({
|
|
|
15889
15965
|
children: noticeContent
|
|
15890
15966
|
}
|
|
15891
15967
|
),
|
|
15892
|
-
/* @__PURE__ */ (0,
|
|
15968
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
|
|
15893
15969
|
const maxQty = item.maxStock ?? Infinity;
|
|
15894
15970
|
const atMax = item.quantity >= maxQty;
|
|
15895
15971
|
const atMin = item.quantity <= 1;
|
|
15896
15972
|
const message = lineMessage?.(item);
|
|
15897
15973
|
const includes = lineIncludes?.(item);
|
|
15898
|
-
return /* @__PURE__ */ (0,
|
|
15974
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
15899
15975
|
"li",
|
|
15900
15976
|
{
|
|
15901
15977
|
className: "flex gap-4 rounded-xl border border-border bg-card p-4",
|
|
15902
15978
|
children: [
|
|
15903
|
-
/* @__PURE__ */ (0,
|
|
15904
|
-
/* @__PURE__ */ (0,
|
|
15905
|
-
/* @__PURE__ */ (0,
|
|
15906
|
-
item.variantName && /* @__PURE__ */ (0,
|
|
15907
|
-
/* @__PURE__ */ (0,
|
|
15979
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
|
|
15980
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
15981
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
|
|
15982
|
+
item.variantName && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
|
|
15983
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("p", { className: "mt-1 text-sm text-muted-foreground", children: [
|
|
15908
15984
|
formatPrice(item.unitPrice, currencyCode, locale),
|
|
15909
15985
|
" ",
|
|
15910
15986
|
t.unitPriceSuffix
|
|
15911
15987
|
] }),
|
|
15912
|
-
/* @__PURE__ */ (0,
|
|
15988
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
15913
15989
|
"div",
|
|
15914
15990
|
{
|
|
15915
15991
|
role: "group",
|
|
15916
15992
|
"aria-label": t.quantityLabel,
|
|
15917
15993
|
className: "mt-3 flex items-center gap-3",
|
|
15918
15994
|
children: [
|
|
15919
|
-
/* @__PURE__ */ (0,
|
|
15995
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
15920
15996
|
"button",
|
|
15921
15997
|
{
|
|
15922
15998
|
type: "button",
|
|
@@ -15927,8 +16003,8 @@ function CartLineList({
|
|
|
15927
16003
|
children: "\u2212"
|
|
15928
16004
|
}
|
|
15929
16005
|
),
|
|
15930
|
-
/* @__PURE__ */ (0,
|
|
15931
|
-
/* @__PURE__ */ (0,
|
|
16006
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
|
|
16007
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
15932
16008
|
"button",
|
|
15933
16009
|
{
|
|
15934
16010
|
type: "button",
|
|
@@ -15939,7 +16015,7 @@ function CartLineList({
|
|
|
15939
16015
|
children: "+"
|
|
15940
16016
|
}
|
|
15941
16017
|
),
|
|
15942
|
-
onRemove && /* @__PURE__ */ (0,
|
|
16018
|
+
onRemove && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
15943
16019
|
"button",
|
|
15944
16020
|
{
|
|
15945
16021
|
type: "button",
|
|
@@ -15952,7 +16028,7 @@ function CartLineList({
|
|
|
15952
16028
|
]
|
|
15953
16029
|
}
|
|
15954
16030
|
),
|
|
15955
|
-
message != null && message !== false && /* @__PURE__ */ (0,
|
|
16031
|
+
message != null && message !== false && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
15956
16032
|
"p",
|
|
15957
16033
|
{
|
|
15958
16034
|
className: "mt-2 text-sm text-destructive",
|
|
@@ -15960,12 +16036,12 @@ function CartLineList({
|
|
|
15960
16036
|
children: message
|
|
15961
16037
|
}
|
|
15962
16038
|
),
|
|
15963
|
-
includes != null && includes !== false && /* @__PURE__ */ (0,
|
|
15964
|
-
/* @__PURE__ */ (0,
|
|
16039
|
+
includes != null && includes !== false && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("details", { className: "mt-2", "data-slot": "cart-line-list-includes", children: [
|
|
16040
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("summary", { className: "cursor-pointer text-sm font-semibold text-primary", children: t.includesSummary }),
|
|
15965
16041
|
includes
|
|
15966
16042
|
] })
|
|
15967
16043
|
] }),
|
|
15968
|
-
/* @__PURE__ */ (0,
|
|
16044
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
|
|
15969
16045
|
]
|
|
15970
16046
|
},
|
|
15971
16047
|
lineKey(item.productId, item.variantId)
|
|
@@ -15976,7 +16052,7 @@ function CartLineList({
|
|
|
15976
16052
|
|
|
15977
16053
|
// src/components/cart-summary.tsx
|
|
15978
16054
|
var import_utils22 = require("@reblu/site-ui/utils");
|
|
15979
|
-
var
|
|
16055
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
15980
16056
|
var DEFAULT_LABELS3 = {
|
|
15981
16057
|
subtotal: "Subtotal",
|
|
15982
16058
|
discountPrefix: "Descuento",
|
|
@@ -16006,37 +16082,37 @@ function CartSummary({
|
|
|
16006
16082
|
const hasDiscount = Boolean(discountAmount && discountAmount > 0);
|
|
16007
16083
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
16008
16084
|
const hasNotice = noticeContent != null && noticeContent !== false;
|
|
16009
|
-
const breakdown = /* @__PURE__ */ (0,
|
|
16085
|
+
const breakdown = /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
16010
16086
|
"dl",
|
|
16011
16087
|
{
|
|
16012
16088
|
className: (0, import_utils22.cn)("space-y-2 text-sm", !hasNotice && className),
|
|
16013
16089
|
"data-slot": "cart-summary",
|
|
16014
16090
|
children: [
|
|
16015
|
-
/* @__PURE__ */ (0,
|
|
16016
|
-
/* @__PURE__ */ (0,
|
|
16017
|
-
/* @__PURE__ */ (0,
|
|
16091
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
16092
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("dt", { children: t.subtotal }),
|
|
16093
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("dd", { children: formatPrice(subtotal, currencyCode, locale) })
|
|
16018
16094
|
] }),
|
|
16019
|
-
hasDiscount && /* @__PURE__ */ (0,
|
|
16020
|
-
/* @__PURE__ */ (0,
|
|
16021
|
-
/* @__PURE__ */ (0,
|
|
16095
|
+
hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
|
|
16096
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
|
|
16097
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("dd", { children: [
|
|
16022
16098
|
"-",
|
|
16023
16099
|
formatPrice(discountAmount, currencyCode, locale)
|
|
16024
16100
|
] })
|
|
16025
16101
|
] }),
|
|
16026
|
-
shippingEnabled && /* @__PURE__ */ (0,
|
|
16027
|
-
/* @__PURE__ */ (0,
|
|
16028
|
-
/* @__PURE__ */ (0,
|
|
16102
|
+
shippingEnabled && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
16103
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("dt", { children: t.shipping }),
|
|
16104
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
|
|
16029
16105
|
] }),
|
|
16030
|
-
/* @__PURE__ */ (0,
|
|
16031
|
-
/* @__PURE__ */ (0,
|
|
16032
|
-
/* @__PURE__ */ (0,
|
|
16106
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
|
|
16107
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("dt", { children: t.total }),
|
|
16108
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("dd", { children: formatPrice(total, currencyCode, locale) })
|
|
16033
16109
|
] })
|
|
16034
16110
|
]
|
|
16035
16111
|
}
|
|
16036
16112
|
);
|
|
16037
16113
|
if (!hasNotice) return breakdown;
|
|
16038
|
-
return /* @__PURE__ */ (0,
|
|
16039
|
-
/* @__PURE__ */ (0,
|
|
16114
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: (0, import_utils22.cn)("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
|
|
16115
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
16040
16116
|
"div",
|
|
16041
16117
|
{
|
|
16042
16118
|
role: "status",
|
|
@@ -16051,7 +16127,7 @@ function CartSummary({
|
|
|
16051
16127
|
|
|
16052
16128
|
// src/components/cart-adjustments-notice.tsx
|
|
16053
16129
|
var import_utils23 = require("@reblu/site-ui/utils");
|
|
16054
|
-
var
|
|
16130
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
16055
16131
|
var DEFAULT_LABELS4 = {
|
|
16056
16132
|
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.`,
|
|
16057
16133
|
quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
|
|
@@ -16085,20 +16161,20 @@ function CartAdjustmentsNotice({
|
|
|
16085
16161
|
);
|
|
16086
16162
|
}
|
|
16087
16163
|
if (messages.length === 0) return null;
|
|
16088
|
-
return /* @__PURE__ */ (0,
|
|
16164
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
16089
16165
|
"div",
|
|
16090
16166
|
{
|
|
16091
16167
|
role: "status",
|
|
16092
16168
|
className: (0, import_utils23.cn)("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
|
|
16093
16169
|
"data-slot": "cart-adjustments-notice",
|
|
16094
|
-
children: messages.length === 1 ? /* @__PURE__ */ (0,
|
|
16170
|
+
children: messages.length === 1 ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { children: messages[0] }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("li", { children: message }, index)) })
|
|
16095
16171
|
}
|
|
16096
16172
|
);
|
|
16097
16173
|
}
|
|
16098
16174
|
|
|
16099
16175
|
// src/components/added-to-cart-toast.tsx
|
|
16100
16176
|
var import_utils24 = require("@reblu/site-ui/utils");
|
|
16101
|
-
var
|
|
16177
|
+
var import_jsx_runtime29 = (
|
|
16102
16178
|
// eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
|
|
16103
16179
|
require("react/jsx-runtime")
|
|
16104
16180
|
);
|
|
@@ -16121,7 +16197,7 @@ function AddedToCartToast({
|
|
|
16121
16197
|
const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
|
|
16122
16198
|
const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
|
|
16123
16199
|
const variant = status === "success" ? "success" : "error";
|
|
16124
|
-
return /* @__PURE__ */ (0,
|
|
16200
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
|
|
16125
16201
|
"div",
|
|
16126
16202
|
{
|
|
16127
16203
|
"data-slot": "added-to-cart-toast",
|
|
@@ -16133,12 +16209,12 @@ function AddedToCartToast({
|
|
|
16133
16209
|
className
|
|
16134
16210
|
),
|
|
16135
16211
|
children: [
|
|
16136
|
-
hasThumbnail && /* @__PURE__ */ (0,
|
|
16137
|
-
/* @__PURE__ */ (0,
|
|
16138
|
-
/* @__PURE__ */ (0,
|
|
16139
|
-
/* @__PURE__ */ (0,
|
|
16212
|
+
hasThumbnail && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
|
|
16213
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
16214
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "truncate font-semibold text-foreground", children: productName }),
|
|
16215
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
|
|
16140
16216
|
] }),
|
|
16141
|
-
/* @__PURE__ */ (0,
|
|
16217
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
|
|
16142
16218
|
]
|
|
16143
16219
|
}
|
|
16144
16220
|
);
|
|
@@ -16146,7 +16222,7 @@ function AddedToCartToast({
|
|
|
16146
16222
|
|
|
16147
16223
|
// src/components/checkout-login-prompt.tsx
|
|
16148
16224
|
var import_utils25 = require("@reblu/site-ui/utils");
|
|
16149
|
-
var
|
|
16225
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
16150
16226
|
var DEFAULT_LABELS6 = {
|
|
16151
16227
|
title: "Identificaci\xF3n",
|
|
16152
16228
|
description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
|
|
@@ -16173,9 +16249,9 @@ function CheckoutLoginPrompt({
|
|
|
16173
16249
|
if (!open) return null;
|
|
16174
16250
|
const t = { ...DEFAULT_LABELS6, ...labels };
|
|
16175
16251
|
const isValidEmail = EMAIL_PATTERN.test(email.trim());
|
|
16176
|
-
return /* @__PURE__ */ (0,
|
|
16177
|
-
/* @__PURE__ */ (0,
|
|
16178
|
-
/* @__PURE__ */ (0,
|
|
16252
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
|
|
16253
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
|
|
16254
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
|
|
16179
16255
|
"div",
|
|
16180
16256
|
{
|
|
16181
16257
|
role: "dialog",
|
|
@@ -16187,12 +16263,12 @@ function CheckoutLoginPrompt({
|
|
|
16187
16263
|
className
|
|
16188
16264
|
),
|
|
16189
16265
|
children: [
|
|
16190
|
-
/* @__PURE__ */ (0,
|
|
16191
|
-
/* @__PURE__ */ (0,
|
|
16192
|
-
/* @__PURE__ */ (0,
|
|
16193
|
-
/* @__PURE__ */ (0,
|
|
16266
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
|
|
16267
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { children: [
|
|
16268
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
|
|
16269
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
|
|
16194
16270
|
] }),
|
|
16195
|
-
/* @__PURE__ */ (0,
|
|
16271
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
16196
16272
|
"button",
|
|
16197
16273
|
{
|
|
16198
16274
|
type: "button",
|
|
@@ -16203,9 +16279,9 @@ function CheckoutLoginPrompt({
|
|
|
16203
16279
|
}
|
|
16204
16280
|
)
|
|
16205
16281
|
] }),
|
|
16206
|
-
/* @__PURE__ */ (0,
|
|
16207
|
-
/* @__PURE__ */ (0,
|
|
16208
|
-
/* @__PURE__ */ (0,
|
|
16282
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-2", children: [
|
|
16283
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
16284
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
16209
16285
|
"input",
|
|
16210
16286
|
{
|
|
16211
16287
|
id: "checkout-login-prompt-email",
|
|
@@ -16220,10 +16296,10 @@ function CheckoutLoginPrompt({
|
|
|
16220
16296
|
)
|
|
16221
16297
|
}
|
|
16222
16298
|
),
|
|
16223
|
-
error && /* @__PURE__ */ (0,
|
|
16299
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { className: "text-xs text-destructive", children: error })
|
|
16224
16300
|
] }),
|
|
16225
|
-
/* @__PURE__ */ (0,
|
|
16226
|
-
/* @__PURE__ */ (0,
|
|
16301
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-2", children: [
|
|
16302
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
16227
16303
|
"button",
|
|
16228
16304
|
{
|
|
16229
16305
|
type: "button",
|
|
@@ -16236,7 +16312,7 @@ function CheckoutLoginPrompt({
|
|
|
16236
16312
|
children: checking ? t.checking : t.continueWithEmail
|
|
16237
16313
|
}
|
|
16238
16314
|
),
|
|
16239
|
-
/* @__PURE__ */ (0,
|
|
16315
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
16240
16316
|
"button",
|
|
16241
16317
|
{
|
|
16242
16318
|
type: "button",
|
|
@@ -16255,7 +16331,7 @@ function CheckoutLoginPrompt({
|
|
|
16255
16331
|
// src/components/checkout-form.tsx
|
|
16256
16332
|
var import_utils26 = require("@reblu/site-ui/utils");
|
|
16257
16333
|
var import_phone_input = require("@reblu/site-ui/phone-input");
|
|
16258
|
-
var
|
|
16334
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
16259
16335
|
var DEFAULT_LABELS7 = {
|
|
16260
16336
|
contactTitle: "Datos de contacto",
|
|
16261
16337
|
nameLabel: "Nombre completo",
|
|
@@ -16311,9 +16387,9 @@ function CheckoutForm({
|
|
|
16311
16387
|
event.preventDefault();
|
|
16312
16388
|
if (discountCode.trim() && !discountApplying) onApplyDiscount();
|
|
16313
16389
|
}
|
|
16314
|
-
return /* @__PURE__ */ (0,
|
|
16390
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
|
|
16315
16391
|
loginPrompt,
|
|
16316
|
-
/* @__PURE__ */ (0,
|
|
16392
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
16317
16393
|
"form",
|
|
16318
16394
|
{
|
|
16319
16395
|
"data-testid": "checkout-form",
|
|
@@ -16321,12 +16397,12 @@ function CheckoutForm({
|
|
|
16321
16397
|
className: (0, import_utils26.cn)("space-y-8", className),
|
|
16322
16398
|
"data-slot": "checkout-form",
|
|
16323
16399
|
children: [
|
|
16324
|
-
/* @__PURE__ */ (0,
|
|
16325
|
-
/* @__PURE__ */ (0,
|
|
16326
|
-
/* @__PURE__ */ (0,
|
|
16327
|
-
/* @__PURE__ */ (0,
|
|
16328
|
-
/* @__PURE__ */ (0,
|
|
16329
|
-
/* @__PURE__ */ (0,
|
|
16400
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("section", { className: "space-y-4", children: [
|
|
16401
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
|
|
16402
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
16403
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "space-y-1", children: [
|
|
16404
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
|
|
16405
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
16330
16406
|
"input",
|
|
16331
16407
|
{
|
|
16332
16408
|
id: "checkout-form-name",
|
|
@@ -16341,11 +16417,11 @@ function CheckoutForm({
|
|
|
16341
16417
|
)
|
|
16342
16418
|
}
|
|
16343
16419
|
),
|
|
16344
|
-
contactErrors?.name && /* @__PURE__ */ (0,
|
|
16420
|
+
contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
|
|
16345
16421
|
] }),
|
|
16346
|
-
/* @__PURE__ */ (0,
|
|
16347
|
-
/* @__PURE__ */ (0,
|
|
16348
|
-
/* @__PURE__ */ (0,
|
|
16422
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "space-y-1", children: [
|
|
16423
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
16424
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
16349
16425
|
"input",
|
|
16350
16426
|
{
|
|
16351
16427
|
id: "checkout-form-email",
|
|
@@ -16360,9 +16436,9 @@ function CheckoutForm({
|
|
|
16360
16436
|
)
|
|
16361
16437
|
}
|
|
16362
16438
|
),
|
|
16363
|
-
contactErrors?.email && /* @__PURE__ */ (0,
|
|
16439
|
+
contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
|
|
16364
16440
|
] }),
|
|
16365
|
-
/* @__PURE__ */ (0,
|
|
16441
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
16366
16442
|
import_phone_input.PhoneInput,
|
|
16367
16443
|
{
|
|
16368
16444
|
id: "checkout-form-phone",
|
|
@@ -16376,26 +16452,26 @@ function CheckoutForm({
|
|
|
16376
16452
|
] })
|
|
16377
16453
|
] }),
|
|
16378
16454
|
children2,
|
|
16379
|
-
generalError ? /* @__PURE__ */ (0,
|
|
16380
|
-
/* @__PURE__ */ (0,
|
|
16381
|
-
/* @__PURE__ */ (0,
|
|
16382
|
-
autoDiscount ? /* @__PURE__ */ (0,
|
|
16455
|
+
generalError ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
|
|
16456
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("section", { className: "space-y-3", children: [
|
|
16457
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
|
|
16458
|
+
autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
16383
16459
|
"div",
|
|
16384
16460
|
{
|
|
16385
16461
|
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",
|
|
16386
16462
|
"data-slot": "checkout-staff-discount",
|
|
16387
16463
|
children: [
|
|
16388
|
-
/* @__PURE__ */ (0,
|
|
16389
|
-
/* @__PURE__ */ (0,
|
|
16464
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "font-semibold", children: t.staffDiscountApplied }),
|
|
16465
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
|
|
16390
16466
|
]
|
|
16391
16467
|
}
|
|
16392
16468
|
) : null,
|
|
16393
|
-
appliedDiscount && !autoDiscount ? /* @__PURE__ */ (0,
|
|
16394
|
-
/* @__PURE__ */ (0,
|
|
16395
|
-
/* @__PURE__ */ (0,
|
|
16396
|
-
/* @__PURE__ */ (0,
|
|
16469
|
+
appliedDiscount && !autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime31.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: [
|
|
16470
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
|
|
16471
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "font-semibold", children: appliedDiscount.code }),
|
|
16472
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
|
|
16397
16473
|
] }),
|
|
16398
|
-
/* @__PURE__ */ (0,
|
|
16474
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
16399
16475
|
"button",
|
|
16400
16476
|
{
|
|
16401
16477
|
type: "button",
|
|
@@ -16405,9 +16481,9 @@ function CheckoutForm({
|
|
|
16405
16481
|
children: t.removeDiscount
|
|
16406
16482
|
}
|
|
16407
16483
|
)
|
|
16408
|
-
] }) : /* @__PURE__ */ (0,
|
|
16409
|
-
/* @__PURE__ */ (0,
|
|
16410
|
-
/* @__PURE__ */ (0,
|
|
16484
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "flex gap-2", children: [
|
|
16485
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
|
|
16486
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
16411
16487
|
"input",
|
|
16412
16488
|
{
|
|
16413
16489
|
id: "checkout-form-discount-code",
|
|
@@ -16419,7 +16495,7 @@ function CheckoutForm({
|
|
|
16419
16495
|
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"
|
|
16420
16496
|
}
|
|
16421
16497
|
),
|
|
16422
|
-
/* @__PURE__ */ (0,
|
|
16498
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
16423
16499
|
"button",
|
|
16424
16500
|
{
|
|
16425
16501
|
type: "button",
|
|
@@ -16430,9 +16506,9 @@ function CheckoutForm({
|
|
|
16430
16506
|
}
|
|
16431
16507
|
)
|
|
16432
16508
|
] }),
|
|
16433
|
-
discountError && /* @__PURE__ */ (0,
|
|
16509
|
+
discountError && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { className: "text-xs text-destructive", children: discountError })
|
|
16434
16510
|
] }),
|
|
16435
|
-
/* @__PURE__ */ (0,
|
|
16511
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
16436
16512
|
"button",
|
|
16437
16513
|
{
|
|
16438
16514
|
type: "submit",
|
|
@@ -16455,7 +16531,7 @@ var import_utils28 = require("@reblu/site-ui/utils");
|
|
|
16455
16531
|
|
|
16456
16532
|
// src/components/order-invoice-link.tsx
|
|
16457
16533
|
var import_utils27 = require("@reblu/site-ui/utils");
|
|
16458
|
-
var
|
|
16534
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
16459
16535
|
var DEFAULT_LABELS8 = {
|
|
16460
16536
|
linkLabel: "Descargar la factura {number}",
|
|
16461
16537
|
signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
|
|
@@ -16463,8 +16539,8 @@ var DEFAULT_LABELS8 = {
|
|
|
16463
16539
|
function OrderInvoiceLink({ invoice, labels, className }) {
|
|
16464
16540
|
if (!invoice) return null;
|
|
16465
16541
|
const t = { ...DEFAULT_LABELS8, ...labels };
|
|
16466
|
-
return /* @__PURE__ */ (0,
|
|
16467
|
-
/* @__PURE__ */ (0,
|
|
16542
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: (0, import_utils27.cn)("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
|
|
16543
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
16468
16544
|
"a",
|
|
16469
16545
|
{
|
|
16470
16546
|
href: invoice.url,
|
|
@@ -16472,12 +16548,12 @@ function OrderInvoiceLink({ invoice, labels, className }) {
|
|
|
16472
16548
|
children: t.linkLabel.replace("{number}", invoice.number)
|
|
16473
16549
|
}
|
|
16474
16550
|
),
|
|
16475
|
-
/* @__PURE__ */ (0,
|
|
16551
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "text-muted-foreground", children: t.signInHint })
|
|
16476
16552
|
] });
|
|
16477
16553
|
}
|
|
16478
16554
|
|
|
16479
16555
|
// src/components/order-confirmation.tsx
|
|
16480
|
-
var
|
|
16556
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
16481
16557
|
var DEFAULT_LABELS9 = {
|
|
16482
16558
|
pollingTitle: "Confirmando tu pedido\u2026",
|
|
16483
16559
|
pollingDescription: "Estamos procesando el pago, un momento\u2026",
|
|
@@ -16552,60 +16628,60 @@ function OrderConfirmation({
|
|
|
16552
16628
|
const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
|
|
16553
16629
|
const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
|
|
16554
16630
|
const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
|
|
16555
|
-
return /* @__PURE__ */ (0,
|
|
16556
|
-
/* @__PURE__ */ (0,
|
|
16557
|
-
/* @__PURE__ */ (0,
|
|
16558
|
-
showFullOrderSummary && order && /* @__PURE__ */ (0,
|
|
16559
|
-
/* @__PURE__ */ (0,
|
|
16560
|
-
/* @__PURE__ */ (0,
|
|
16561
|
-
/* @__PURE__ */ (0,
|
|
16631
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: (0, import_utils28.cn)("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
|
|
16632
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("h1", { className: "text-3xl font-bold", children: title }),
|
|
16633
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "text-lg text-muted-foreground", children: description }),
|
|
16634
|
+
showFullOrderSummary && order && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "space-y-6", children: [
|
|
16635
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
16636
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
|
|
16637
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
16562
16638
|
] }),
|
|
16563
|
-
/* @__PURE__ */ (0,
|
|
16564
|
-
order.items.map((item, idx) => /* @__PURE__ */ (0,
|
|
16639
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
|
|
16640
|
+
order.items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
|
|
16565
16641
|
"div",
|
|
16566
16642
|
{
|
|
16567
16643
|
className: "flex justify-between gap-4 text-sm",
|
|
16568
16644
|
children: [
|
|
16569
|
-
/* @__PURE__ */ (0,
|
|
16645
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
|
|
16570
16646
|
item.product.name,
|
|
16571
16647
|
item.variant ? ` (${item.variant.name})` : "",
|
|
16572
16648
|
" x",
|
|
16573
16649
|
item.quantity
|
|
16574
16650
|
] }),
|
|
16575
|
-
/* @__PURE__ */ (0,
|
|
16651
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
|
|
16576
16652
|
]
|
|
16577
16653
|
},
|
|
16578
16654
|
idx
|
|
16579
16655
|
)),
|
|
16580
|
-
/* @__PURE__ */ (0,
|
|
16581
|
-
/* @__PURE__ */ (0,
|
|
16582
|
-
/* @__PURE__ */ (0,
|
|
16656
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
|
|
16657
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { children: t.totalLabel }),
|
|
16658
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { children: formatPrice(order.total, currencyCode, locale) })
|
|
16583
16659
|
] }) })
|
|
16584
16660
|
] }),
|
|
16585
|
-
showPurchaseTexts && order.purchaseTexts?.length ? /* @__PURE__ */ (0,
|
|
16661
|
+
showPurchaseTexts && order.purchaseTexts?.length ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "mx-auto max-w-sm space-y-3 text-left", "data-slot": "order-confirmation-purchase-texts", children: order.purchaseTexts.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
|
|
16586
16662
|
"div",
|
|
16587
16663
|
{
|
|
16588
16664
|
className: "rounded-xl border border-border bg-card p-4",
|
|
16589
16665
|
"data-slot": "order-confirmation-purchase-text",
|
|
16590
16666
|
"data-kind": entry.kind,
|
|
16591
16667
|
children: [
|
|
16592
|
-
/* @__PURE__ */ (0,
|
|
16593
|
-
entry.place ? /* @__PURE__ */ (0,
|
|
16594
|
-
entry.place.name ? /* @__PURE__ */ (0,
|
|
16595
|
-
entry.place.address.map((line) => /* @__PURE__ */ (0,
|
|
16668
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: entry.label }),
|
|
16669
|
+
entry.place ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("address", { className: "mb-2 text-sm not-italic", "data-slot": "order-confirmation-pickup-place", children: [
|
|
16670
|
+
entry.place.name ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "block font-medium", children: entry.place.name }) : null,
|
|
16671
|
+
entry.place.address.map((line) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "block", children: line }, line))
|
|
16596
16672
|
] }) : null,
|
|
16597
|
-
/* @__PURE__ */ (0,
|
|
16673
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "whitespace-pre-line text-sm", children: entry.text })
|
|
16598
16674
|
]
|
|
16599
16675
|
},
|
|
16600
16676
|
entry.kind
|
|
16601
16677
|
)) }) : null,
|
|
16602
|
-
t.foundDescription.includes("{email}") ? null : /* @__PURE__ */ (0,
|
|
16678
|
+
t.foundDescription.includes("{email}") ? null : /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
|
|
16603
16679
|
t.confirmationEmailPrefix,
|
|
16604
16680
|
" ",
|
|
16605
|
-
/* @__PURE__ */ (0,
|
|
16681
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
|
|
16606
16682
|
"."
|
|
16607
16683
|
] }),
|
|
16608
|
-
/* @__PURE__ */ (0,
|
|
16684
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
16609
16685
|
OrderInvoiceLink,
|
|
16610
16686
|
{
|
|
16611
16687
|
invoice: order.invoice,
|
|
@@ -16613,11 +16689,11 @@ function OrderConfirmation({
|
|
|
16613
16689
|
}
|
|
16614
16690
|
)
|
|
16615
16691
|
] }),
|
|
16616
|
-
showOrderReference && order && /* @__PURE__ */ (0,
|
|
16617
|
-
/* @__PURE__ */ (0,
|
|
16618
|
-
/* @__PURE__ */ (0,
|
|
16692
|
+
showOrderReference && order && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
16693
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
|
|
16694
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
16619
16695
|
] }),
|
|
16620
|
-
status === "failed" && cartHref && /* @__PURE__ */ (0,
|
|
16696
|
+
status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
16621
16697
|
"a",
|
|
16622
16698
|
{
|
|
16623
16699
|
href: cartHref,
|
|
@@ -16625,7 +16701,7 @@ function OrderConfirmation({
|
|
|
16625
16701
|
children: t.backToCartLabel
|
|
16626
16702
|
}
|
|
16627
16703
|
),
|
|
16628
|
-
showRecheck && /* @__PURE__ */ (0,
|
|
16704
|
+
showRecheck && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
16629
16705
|
"button",
|
|
16630
16706
|
{
|
|
16631
16707
|
type: "button",
|
|
@@ -16634,16 +16710,16 @@ function OrderConfirmation({
|
|
|
16634
16710
|
children: t.recheckLabel
|
|
16635
16711
|
}
|
|
16636
16712
|
),
|
|
16637
|
-
showSessionReference && /* @__PURE__ */ (0,
|
|
16638
|
-
/* @__PURE__ */ (0,
|
|
16639
|
-
/* @__PURE__ */ (0,
|
|
16713
|
+
showSessionReference && /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
16714
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
|
|
16715
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
|
|
16640
16716
|
] })
|
|
16641
16717
|
] });
|
|
16642
16718
|
}
|
|
16643
16719
|
|
|
16644
16720
|
// src/components/full-invoice-fields.tsx
|
|
16645
16721
|
var import_utils29 = require("@reblu/site-ui/utils");
|
|
16646
|
-
var
|
|
16722
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
16647
16723
|
var EMPTY_FULL_INVOICE_VALUE = {
|
|
16648
16724
|
wantsFullInvoice: false,
|
|
16649
16725
|
billingIdType: "NIF",
|
|
@@ -16760,12 +16836,12 @@ function FullInvoiceFields({
|
|
|
16760
16836
|
const showFields = value.wantsFullInvoice || overCap;
|
|
16761
16837
|
const isSpanishNif = value.billingIdType === "NIF";
|
|
16762
16838
|
const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
|
|
16763
|
-
const error = (key2) => errors[key2] ? /* @__PURE__ */ (0,
|
|
16839
|
+
const error = (key2) => errors[key2] ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
|
|
16764
16840
|
const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
|
|
16765
|
-
return /* @__PURE__ */ (0,
|
|
16766
|
-
overCap ? /* @__PURE__ */ (0,
|
|
16767
|
-
/* @__PURE__ */ (0,
|
|
16768
|
-
/* @__PURE__ */ (0,
|
|
16841
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("section", { className: (0, import_utils29.cn)("space-y-4", className), "data-slot": "full-invoice-fields", children: [
|
|
16842
|
+
overCap ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
|
|
16843
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
|
|
16844
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
16769
16845
|
"input",
|
|
16770
16846
|
{
|
|
16771
16847
|
type: "checkbox",
|
|
@@ -16775,12 +16851,12 @@ function FullInvoiceFields({
|
|
|
16775
16851
|
),
|
|
16776
16852
|
t.toggle
|
|
16777
16853
|
] }),
|
|
16778
|
-
/* @__PURE__ */ (0,
|
|
16854
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
|
|
16779
16855
|
] }),
|
|
16780
|
-
showFields && /* @__PURE__ */ (0,
|
|
16781
|
-
/* @__PURE__ */ (0,
|
|
16782
|
-
/* @__PURE__ */ (0,
|
|
16783
|
-
/* @__PURE__ */ (0,
|
|
16856
|
+
showFields && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
16857
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
|
|
16858
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
|
|
16859
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
16784
16860
|
"select",
|
|
16785
16861
|
{
|
|
16786
16862
|
id: "full-invoice-id-type",
|
|
@@ -16789,14 +16865,14 @@ function FullInvoiceFields({
|
|
|
16789
16865
|
value: value.billingIdType,
|
|
16790
16866
|
onChange: (e) => set("billingIdType", e.target.value),
|
|
16791
16867
|
...invalid2("billingIdType"),
|
|
16792
|
-
children: ID_TYPES.map((type) => /* @__PURE__ */ (0,
|
|
16868
|
+
children: ID_TYPES.map((type) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("option", { value: type, children: t.idTypeOptions[type] }, type))
|
|
16793
16869
|
}
|
|
16794
16870
|
),
|
|
16795
16871
|
error("billingIdType")
|
|
16796
16872
|
] }),
|
|
16797
|
-
!isSpanishNif && /* @__PURE__ */ (0,
|
|
16798
|
-
/* @__PURE__ */ (0,
|
|
16799
|
-
/* @__PURE__ */ (0,
|
|
16873
|
+
!isSpanishNif && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
|
|
16874
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
|
|
16875
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
|
|
16800
16876
|
"select",
|
|
16801
16877
|
{
|
|
16802
16878
|
id: "full-invoice-id-country",
|
|
@@ -16806,16 +16882,16 @@ function FullInvoiceFields({
|
|
|
16806
16882
|
onChange: (e) => set("billingIdCountry", e.target.value),
|
|
16807
16883
|
...invalid2("billingIdCountry"),
|
|
16808
16884
|
children: [
|
|
16809
|
-
/* @__PURE__ */ (0,
|
|
16810
|
-
countries.map((c) => /* @__PURE__ */ (0,
|
|
16885
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("option", { value: "", disabled: true, children: t.chooseCountry }),
|
|
16886
|
+
countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("option", { value: c.code, children: c.name }, c.code))
|
|
16811
16887
|
]
|
|
16812
16888
|
}
|
|
16813
16889
|
),
|
|
16814
16890
|
error("billingIdCountry")
|
|
16815
16891
|
] }),
|
|
16816
|
-
/* @__PURE__ */ (0,
|
|
16817
|
-
/* @__PURE__ */ (0,
|
|
16818
|
-
/* @__PURE__ */ (0,
|
|
16892
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
|
|
16893
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
|
|
16894
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
16819
16895
|
"input",
|
|
16820
16896
|
{
|
|
16821
16897
|
id: "full-invoice-nif",
|
|
@@ -16828,9 +16904,9 @@ function FullInvoiceFields({
|
|
|
16828
16904
|
),
|
|
16829
16905
|
error("billingNif")
|
|
16830
16906
|
] }),
|
|
16831
|
-
/* @__PURE__ */ (0,
|
|
16832
|
-
/* @__PURE__ */ (0,
|
|
16833
|
-
/* @__PURE__ */ (0,
|
|
16907
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
|
|
16908
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
|
|
16909
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
16834
16910
|
"input",
|
|
16835
16911
|
{
|
|
16836
16912
|
id: "full-invoice-name",
|
|
@@ -16843,9 +16919,9 @@ function FullInvoiceFields({
|
|
|
16843
16919
|
),
|
|
16844
16920
|
error("billingName")
|
|
16845
16921
|
] }),
|
|
16846
|
-
/* @__PURE__ */ (0,
|
|
16847
|
-
/* @__PURE__ */ (0,
|
|
16848
|
-
/* @__PURE__ */ (0,
|
|
16922
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1 sm:col-span-2", children: [
|
|
16923
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
|
|
16924
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
16849
16925
|
"input",
|
|
16850
16926
|
{
|
|
16851
16927
|
id: "full-invoice-street",
|
|
@@ -16857,9 +16933,9 @@ function FullInvoiceFields({
|
|
|
16857
16933
|
}
|
|
16858
16934
|
)
|
|
16859
16935
|
] }),
|
|
16860
|
-
/* @__PURE__ */ (0,
|
|
16861
|
-
/* @__PURE__ */ (0,
|
|
16862
|
-
/* @__PURE__ */ (0,
|
|
16936
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
|
|
16937
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
|
|
16938
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
16863
16939
|
"input",
|
|
16864
16940
|
{
|
|
16865
16941
|
id: "full-invoice-postal-code",
|
|
@@ -16870,9 +16946,9 @@ function FullInvoiceFields({
|
|
|
16870
16946
|
}
|
|
16871
16947
|
)
|
|
16872
16948
|
] }),
|
|
16873
|
-
/* @__PURE__ */ (0,
|
|
16874
|
-
/* @__PURE__ */ (0,
|
|
16875
|
-
/* @__PURE__ */ (0,
|
|
16949
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
|
|
16950
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
|
|
16951
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
16876
16952
|
"input",
|
|
16877
16953
|
{
|
|
16878
16954
|
id: "full-invoice-city",
|
|
@@ -16883,9 +16959,9 @@ function FullInvoiceFields({
|
|
|
16883
16959
|
}
|
|
16884
16960
|
)
|
|
16885
16961
|
] }),
|
|
16886
|
-
/* @__PURE__ */ (0,
|
|
16887
|
-
/* @__PURE__ */ (0,
|
|
16888
|
-
/* @__PURE__ */ (0,
|
|
16962
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "space-y-1", children: [
|
|
16963
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
|
|
16964
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
16889
16965
|
"select",
|
|
16890
16966
|
{
|
|
16891
16967
|
id: "full-invoice-country",
|
|
@@ -16893,18 +16969,18 @@ function FullInvoiceFields({
|
|
|
16893
16969
|
required: true,
|
|
16894
16970
|
value: value.country,
|
|
16895
16971
|
onChange: (e) => set("country", e.target.value),
|
|
16896
|
-
children: countries.map((c) => /* @__PURE__ */ (0,
|
|
16972
|
+
children: countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("option", { value: c.code, children: c.name }, c.code))
|
|
16897
16973
|
}
|
|
16898
16974
|
)
|
|
16899
16975
|
] }),
|
|
16900
|
-
/* @__PURE__ */ (0,
|
|
16976
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "sm:col-span-2", children: error("address") })
|
|
16901
16977
|
] })
|
|
16902
16978
|
] });
|
|
16903
16979
|
}
|
|
16904
16980
|
|
|
16905
16981
|
// src/components/checkout-delivery-choice.tsx
|
|
16906
16982
|
var import_utils30 = require("@reblu/site-ui/utils");
|
|
16907
|
-
var
|
|
16983
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
16908
16984
|
var EMPTY_CHECKOUT_ADDRESS = {
|
|
16909
16985
|
firstName: "",
|
|
16910
16986
|
lastName: "",
|
|
@@ -16967,17 +17043,17 @@ function CheckoutDeliveryChoice({
|
|
|
16967
17043
|
const isPickup = value?.type === "PICKUP";
|
|
16968
17044
|
const isShipping = value?.type === "SHIPPING";
|
|
16969
17045
|
const errorId = `${uid}-delivery-error`;
|
|
16970
|
-
return /* @__PURE__ */ (0,
|
|
17046
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
|
|
16971
17047
|
"fieldset",
|
|
16972
17048
|
{
|
|
16973
17049
|
"data-slot": "checkout-delivery",
|
|
16974
17050
|
"aria-describedby": error ? errorId : void 0,
|
|
16975
17051
|
className: (0, import_utils30.cn)("space-y-4", className),
|
|
16976
17052
|
children: [
|
|
16977
|
-
/* @__PURE__ */ (0,
|
|
16978
|
-
/* @__PURE__ */ (0,
|
|
16979
|
-
homeDelivery ? /* @__PURE__ */ (0,
|
|
16980
|
-
/* @__PURE__ */ (0,
|
|
17053
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("legend", { className: "mb-2 text-lg font-semibold", children: t.legend }),
|
|
17054
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "grid gap-3 sm:grid-cols-2", children: [
|
|
17055
|
+
homeDelivery ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
|
|
17056
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
16981
17057
|
"input",
|
|
16982
17058
|
{
|
|
16983
17059
|
type: "radio",
|
|
@@ -16987,16 +17063,16 @@ function CheckoutDeliveryChoice({
|
|
|
16987
17063
|
className: "mt-0.5 size-4 accent-primary"
|
|
16988
17064
|
}
|
|
16989
17065
|
),
|
|
16990
|
-
/* @__PURE__ */ (0,
|
|
16991
|
-
/* @__PURE__ */ (0,
|
|
16992
|
-
/* @__PURE__ */ (0,
|
|
16993
|
-
/* @__PURE__ */ (0,
|
|
17066
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "flex-1 space-y-1", children: [
|
|
17067
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "flex justify-between gap-2 font-medium", children: [
|
|
17068
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: copy.shippingOptionLabel }),
|
|
17069
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "tabular-nums", children: homeCost })
|
|
16994
17070
|
] }),
|
|
16995
|
-
delivery.estimatedDeliveryText ? /* @__PURE__ */ (0,
|
|
17071
|
+
delivery.estimatedDeliveryText ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "block text-sm text-muted-foreground", children: delivery.estimatedDeliveryText }) : null
|
|
16996
17072
|
] })
|
|
16997
17073
|
] }) : null,
|
|
16998
|
-
pickup ? /* @__PURE__ */ (0,
|
|
16999
|
-
/* @__PURE__ */ (0,
|
|
17074
|
+
pickup ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
|
|
17075
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
17000
17076
|
"input",
|
|
17001
17077
|
{
|
|
17002
17078
|
type: "radio",
|
|
@@ -17006,23 +17082,23 @@ function CheckoutDeliveryChoice({
|
|
|
17006
17082
|
className: "mt-0.5 size-4 accent-primary"
|
|
17007
17083
|
}
|
|
17008
17084
|
),
|
|
17009
|
-
/* @__PURE__ */ (0,
|
|
17010
|
-
/* @__PURE__ */ (0,
|
|
17011
|
-
/* @__PURE__ */ (0,
|
|
17085
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "flex flex-1 justify-between gap-2 font-medium", children: [
|
|
17086
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: copy.pickupOptionLabel }),
|
|
17087
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: t.free })
|
|
17012
17088
|
] })
|
|
17013
17089
|
] }) : null
|
|
17014
17090
|
] }),
|
|
17015
|
-
error ? /* @__PURE__ */ (0,
|
|
17016
|
-
isPickup ? /* @__PURE__ */ (0,
|
|
17017
|
-
/* @__PURE__ */ (0,
|
|
17091
|
+
error ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { id: errorId, role: "alert", className: "text-sm text-destructive", children: error }) : null,
|
|
17092
|
+
isPickup ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { role: "radiogroup", "aria-labelledby": `${uid}-points`, className: "space-y-2", children: [
|
|
17093
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { id: `${uid}-points`, className: "text-sm font-medium", children: t.pickupPointsLegend }),
|
|
17018
17094
|
delivery.pickupLocations.map((location2) => {
|
|
17019
17095
|
const descId = `${uid}-point-${location2.id}`;
|
|
17020
|
-
return /* @__PURE__ */ (0,
|
|
17096
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
|
|
17021
17097
|
"label",
|
|
17022
17098
|
{
|
|
17023
17099
|
className: "flex cursor-pointer items-start gap-3 rounded-lg border border-border p-3 has-[:checked]:border-primary",
|
|
17024
17100
|
children: [
|
|
17025
|
-
/* @__PURE__ */ (0,
|
|
17101
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
17026
17102
|
"input",
|
|
17027
17103
|
{
|
|
17028
17104
|
type: "radio",
|
|
@@ -17033,9 +17109,9 @@ function CheckoutDeliveryChoice({
|
|
|
17033
17109
|
className: "mt-0.5 size-4 accent-primary"
|
|
17034
17110
|
}
|
|
17035
17111
|
),
|
|
17036
|
-
/* @__PURE__ */ (0,
|
|
17037
|
-
/* @__PURE__ */ (0,
|
|
17038
|
-
/* @__PURE__ */ (0,
|
|
17112
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "space-y-0.5 text-sm", children: [
|
|
17113
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "block font-medium", children: location2.name }),
|
|
17114
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { id: descId, className: "block text-muted-foreground", children: pickupDescription(location2) })
|
|
17039
17115
|
] })
|
|
17040
17116
|
]
|
|
17041
17117
|
},
|
|
@@ -17043,14 +17119,14 @@ function CheckoutDeliveryChoice({
|
|
|
17043
17119
|
);
|
|
17044
17120
|
})
|
|
17045
17121
|
] }) : null,
|
|
17046
|
-
isShipping ? /* @__PURE__ */ (0,
|
|
17047
|
-
/* @__PURE__ */ (0,
|
|
17048
|
-
/* @__PURE__ */ (0,
|
|
17122
|
+
isShipping ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("fieldset", { className: "space-y-3", children: [
|
|
17123
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("legend", { className: "mb-2 text-sm font-medium", children: t.addressLegend }),
|
|
17124
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: ADDRESS_FIELDS.map(({ key: key2, autoComplete, required, wide }) => {
|
|
17049
17125
|
const fieldId = `${uid}-${key2}`;
|
|
17050
17126
|
const fieldError = addressErrors?.[key2];
|
|
17051
|
-
return /* @__PURE__ */ (0,
|
|
17052
|
-
/* @__PURE__ */ (0,
|
|
17053
|
-
/* @__PURE__ */ (0,
|
|
17127
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: (0, import_utils30.cn)("space-y-1", wide && "sm:col-span-2"), children: [
|
|
17128
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("label", { htmlFor: fieldId, className: "text-sm font-medium", children: t[key2] }),
|
|
17129
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
17054
17130
|
"input",
|
|
17055
17131
|
{
|
|
17056
17132
|
id: fieldId,
|
|
@@ -17067,7 +17143,7 @@ function CheckoutDeliveryChoice({
|
|
|
17067
17143
|
)
|
|
17068
17144
|
}
|
|
17069
17145
|
),
|
|
17070
|
-
fieldError ? /* @__PURE__ */ (0,
|
|
17146
|
+
fieldError ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { id: `${fieldId}-error`, className: "text-sm text-destructive", children: fieldError }) : null
|
|
17071
17147
|
] }, key2);
|
|
17072
17148
|
}) })
|
|
17073
17149
|
] }) : null
|
|
@@ -17110,7 +17186,7 @@ function toCheckoutFulfillmentFields(value, address, requiresDelivery = true) {
|
|
|
17110
17186
|
|
|
17111
17187
|
// src/components/checkout-quote-summary.tsx
|
|
17112
17188
|
var import_utils31 = require("@reblu/site-ui/utils");
|
|
17113
|
-
var
|
|
17189
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
17114
17190
|
var DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS = {
|
|
17115
17191
|
subtotal: "Subtotal",
|
|
17116
17192
|
discount: (codeOrLabel, isAutomatic) => isAutomatic ? codeOrLabel : `Descuento (${codeOrLabel})`,
|
|
@@ -17127,9 +17203,9 @@ function Row({
|
|
|
17127
17203
|
value,
|
|
17128
17204
|
className
|
|
17129
17205
|
}) {
|
|
17130
|
-
return /* @__PURE__ */ (0,
|
|
17131
|
-
/* @__PURE__ */ (0,
|
|
17132
|
-
/* @__PURE__ */ (0,
|
|
17206
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { "data-slot": "checkout-quote-row", className: (0, import_utils31.cn)("flex justify-between gap-4", className), children: [
|
|
17207
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("dt", { children: name }),
|
|
17208
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("dd", { className: "shrink-0 tabular-nums", children: value })
|
|
17133
17209
|
] });
|
|
17134
17210
|
}
|
|
17135
17211
|
function CheckoutQuoteSummary({
|
|
@@ -17145,22 +17221,22 @@ function CheckoutQuoteSummary({
|
|
|
17145
17221
|
const price = (cents) => formatPrice(cents, currencyCode, locale);
|
|
17146
17222
|
const { fulfillment, shipping, tax, discount } = quote;
|
|
17147
17223
|
const Tag = `h${headingLevel}`;
|
|
17148
|
-
return /* @__PURE__ */ (0,
|
|
17149
|
-
heading ? /* @__PURE__ */ (0,
|
|
17150
|
-
/* @__PURE__ */ (0,
|
|
17151
|
-
/* @__PURE__ */ (0,
|
|
17152
|
-
/* @__PURE__ */ (0,
|
|
17153
|
-
line.variantName ? /* @__PURE__ */ (0,
|
|
17154
|
-
/* @__PURE__ */ (0,
|
|
17155
|
-
line.kindLabel ? /* @__PURE__ */ (0,
|
|
17156
|
-
/* @__PURE__ */ (0,
|
|
17224
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("section", { "data-slot": "checkout-quote-summary", className: slotClassName("space-y-4", "", className), children: [
|
|
17225
|
+
heading ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Tag, { className: "text-lg font-semibold", children: heading }) : null,
|
|
17226
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("ul", { className: "space-y-3 text-sm", children: quote.lines.map((line) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("li", { className: "flex justify-between gap-4", children: [
|
|
17227
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "min-w-0 space-y-0.5", children: [
|
|
17228
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "font-medium", children: line.name }),
|
|
17229
|
+
line.variantName ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "text-muted-foreground", children: line.variantName }) : null,
|
|
17230
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("p", { className: "flex flex-wrap items-center gap-2 text-muted-foreground", children: [
|
|
17231
|
+
line.kindLabel ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { "data-slot": "checkout-quote-kind", className: "rounded-full border border-border px-2 py-0.5 text-xs font-medium text-foreground", children: line.kindLabel }) : null,
|
|
17232
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: t.quantityTimesUnit(line.quantity, price(line.unitPrice)) })
|
|
17157
17233
|
] })
|
|
17158
17234
|
] }),
|
|
17159
|
-
/* @__PURE__ */ (0,
|
|
17235
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "shrink-0 tabular-nums", children: price(line.total) })
|
|
17160
17236
|
] }, `${line.productId}-${line.variantId ?? ""}`)) }),
|
|
17161
|
-
/* @__PURE__ */ (0,
|
|
17162
|
-
/* @__PURE__ */ (0,
|
|
17163
|
-
discount && discount.amount > 0 ? /* @__PURE__ */ (0,
|
|
17237
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("dl", { className: "space-y-2 border-t border-border pt-3 text-sm", children: [
|
|
17238
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Row, { name: t.subtotal, value: price(quote.subtotal) }),
|
|
17239
|
+
discount && discount.amount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
17164
17240
|
Row,
|
|
17165
17241
|
{
|
|
17166
17242
|
className: "text-green-700 dark:text-green-400",
|
|
@@ -17168,17 +17244,17 @@ function CheckoutQuoteSummary({
|
|
|
17168
17244
|
value: `\u2212${price(discount.amount)}`
|
|
17169
17245
|
}
|
|
17170
17246
|
) : null,
|
|
17171
|
-
fulfillment.type ? /* @__PURE__ */ (0,
|
|
17247
|
+
fulfillment.type ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
17172
17248
|
Row,
|
|
17173
17249
|
{
|
|
17174
|
-
name: /* @__PURE__ */ (0,
|
|
17250
|
+
name: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
|
|
17175
17251
|
fulfillment.label ?? t.delivery,
|
|
17176
|
-
fulfillment.type === "PICKUP" && fulfillment.pickupLocation ? /* @__PURE__ */ (0,
|
|
17252
|
+
fulfillment.type === "PICKUP" && fulfillment.pickupLocation ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "block text-muted-foreground", children: fulfillment.pickupLocation.name }) : null
|
|
17177
17253
|
] }),
|
|
17178
17254
|
value: fulfillment.type === "PICKUP" || shipping.isFree ? t.free : price(shipping.cost)
|
|
17179
17255
|
}
|
|
17180
17256
|
) : null,
|
|
17181
|
-
tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ (0,
|
|
17257
|
+
tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
17182
17258
|
Row,
|
|
17183
17259
|
{
|
|
17184
17260
|
className: tax.isIncluded ? "text-muted-foreground" : void 0,
|
|
@@ -17187,13 +17263,13 @@ function CheckoutQuoteSummary({
|
|
|
17187
17263
|
},
|
|
17188
17264
|
entry.label
|
|
17189
17265
|
)) : null,
|
|
17190
|
-
/* @__PURE__ */ (0,
|
|
17266
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Row, { className: "border-t border-border pt-2 text-base font-bold", name: t.total, value: price(quote.total) })
|
|
17191
17267
|
] }),
|
|
17192
|
-
tax.isIncluded ? /* @__PURE__ */ (0,
|
|
17193
|
-
fulfillment.type === "SHIPPING" && !shipping.isFree && shipping.remainingForFree ? /* @__PURE__ */ (0,
|
|
17194
|
-
fulfillment.type && quote.deliveryEstimateText ? /* @__PURE__ */ (0,
|
|
17195
|
-
quote.discountError ? /* @__PURE__ */ (0,
|
|
17196
|
-
quote.blockingReason ? /* @__PURE__ */ (0,
|
|
17268
|
+
tax.isIncluded ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "text-sm text-muted-foreground", children: t.taxesIncludedNote }) : null,
|
|
17269
|
+
fulfillment.type === "SHIPPING" && !shipping.isFree && shipping.remainingForFree ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "text-sm text-muted-foreground", children: t.remainingForFree(price(shipping.remainingForFree)) }) : null,
|
|
17270
|
+
fulfillment.type && quote.deliveryEstimateText ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { "data-slot": "checkout-quote-estimate", className: "text-sm text-muted-foreground", children: quote.deliveryEstimateText }) : null,
|
|
17271
|
+
quote.discountError ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { role: "status", className: "text-sm text-destructive", children: quote.discountError.message }) : null,
|
|
17272
|
+
quote.blockingReason ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { role: "alert", className: "rounded-lg border border-destructive/50 bg-destructive/10 p-3 text-sm text-destructive", children: quote.blockingReason.message }) : null
|
|
17197
17273
|
] });
|
|
17198
17274
|
}
|
|
17199
17275
|
var DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS = {
|
|
@@ -17211,7 +17287,7 @@ function checkoutQuoteNotice({
|
|
|
17211
17287
|
function CheckoutQuoteNotice({ reason, labels, className }) {
|
|
17212
17288
|
if (!reason) return null;
|
|
17213
17289
|
const t = { ...DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS, ...labels };
|
|
17214
|
-
return /* @__PURE__ */ (0,
|
|
17290
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
17215
17291
|
"p",
|
|
17216
17292
|
{
|
|
17217
17293
|
role: "status",
|
|
@@ -17224,7 +17300,7 @@ function CheckoutQuoteNotice({ reason, labels, className }) {
|
|
|
17224
17300
|
|
|
17225
17301
|
// src/components/checkout-terms-acceptance.tsx
|
|
17226
17302
|
var import_utils32 = require("@reblu/site-ui/utils");
|
|
17227
|
-
var
|
|
17303
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
17228
17304
|
function splitTermsLabel(label) {
|
|
17229
17305
|
const at = label.indexOf("{terms}");
|
|
17230
17306
|
return at === -1 ? [`${label} `, ""] : [label.slice(0, at), label.slice(at + "{terms}".length)];
|
|
@@ -17246,9 +17322,9 @@ function CheckoutTermsAcceptance({
|
|
|
17246
17322
|
(part) => part.replaceAll("{tenant}", copy.tenantName)
|
|
17247
17323
|
);
|
|
17248
17324
|
const newTab = copy.isTermsLinkNewTab;
|
|
17249
|
-
return /* @__PURE__ */ (0,
|
|
17250
|
-
/* @__PURE__ */ (0,
|
|
17251
|
-
/* @__PURE__ */ (0,
|
|
17325
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { "data-slot": "checkout-terms", className: (0, import_utils32.cn)("space-y-1", className), children: [
|
|
17326
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex items-start gap-3", children: [
|
|
17327
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
17252
17328
|
"input",
|
|
17253
17329
|
{
|
|
17254
17330
|
id: boxId,
|
|
@@ -17261,9 +17337,9 @@ function CheckoutTermsAcceptance({
|
|
|
17261
17337
|
className: "mt-0.5 size-5 shrink-0 cursor-pointer accent-primary"
|
|
17262
17338
|
}
|
|
17263
17339
|
),
|
|
17264
|
-
/* @__PURE__ */ (0,
|
|
17340
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("label", { htmlFor: boxId, className: "text-sm leading-relaxed", children: [
|
|
17265
17341
|
before,
|
|
17266
|
-
/* @__PURE__ */ (0,
|
|
17342
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
|
|
17267
17343
|
"a",
|
|
17268
17344
|
{
|
|
17269
17345
|
href: copy.termsLinkUrl ?? termsHref,
|
|
@@ -17271,9 +17347,9 @@ function CheckoutTermsAcceptance({
|
|
|
17271
17347
|
className: "font-medium underline underline-offset-2 hover:text-primary",
|
|
17272
17348
|
children: [
|
|
17273
17349
|
copy.termsLinkText,
|
|
17274
|
-
newTab ? /* @__PURE__ */ (0,
|
|
17350
|
+
newTab ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_jsx_runtime37.Fragment, { children: [
|
|
17275
17351
|
" ",
|
|
17276
|
-
/* @__PURE__ */ (0,
|
|
17352
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "sr-only", children: newTabHint })
|
|
17277
17353
|
] }) : null
|
|
17278
17354
|
]
|
|
17279
17355
|
}
|
|
@@ -17281,7 +17357,7 @@ function CheckoutTermsAcceptance({
|
|
|
17281
17357
|
after
|
|
17282
17358
|
] })
|
|
17283
17359
|
] }),
|
|
17284
|
-
error ? /* @__PURE__ */ (0,
|
|
17360
|
+
error ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { id: errorId, className: "pl-8 text-sm text-destructive", children: error }) : null
|
|
17285
17361
|
] });
|
|
17286
17362
|
}
|
|
17287
17363
|
function toCheckoutTermsFields(copy, accepted) {
|
|
@@ -17291,7 +17367,7 @@ function toCheckoutTermsFields(copy, accepted) {
|
|
|
17291
17367
|
|
|
17292
17368
|
// src/components/checkout-pay-action.tsx
|
|
17293
17369
|
var import_utils33 = require("@reblu/site-ui/utils");
|
|
17294
|
-
var
|
|
17370
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
17295
17371
|
function CheckoutPayAction({
|
|
17296
17372
|
label,
|
|
17297
17373
|
notice,
|
|
@@ -17305,8 +17381,8 @@ function CheckoutPayAction({
|
|
|
17305
17381
|
}) {
|
|
17306
17382
|
const noticeId = `${id}-notice`;
|
|
17307
17383
|
const isDisabled = submitting || disabled;
|
|
17308
|
-
return /* @__PURE__ */ (0,
|
|
17309
|
-
/* @__PURE__ */ (0,
|
|
17384
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { "data-slot": "checkout-pay-action", className: (0, import_utils33.cn)("space-y-3", className), children: [
|
|
17385
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
17310
17386
|
"button",
|
|
17311
17387
|
{
|
|
17312
17388
|
type: "submit",
|
|
@@ -17320,7 +17396,7 @@ function CheckoutPayAction({
|
|
|
17320
17396
|
children: submitting ? submittingLabel : label
|
|
17321
17397
|
}
|
|
17322
17398
|
),
|
|
17323
|
-
notice ? /* @__PURE__ */ (0,
|
|
17399
|
+
notice ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("p", { id: noticeId, "data-slot": "checkout-pay-notice", className: noticeClassName ?? "text-sm text-muted-foreground", children: notice }) : null
|
|
17324
17400
|
] });
|
|
17325
17401
|
}
|
|
17326
17402
|
|
|
@@ -17348,7 +17424,7 @@ function toAcademyCheckoutInvoiceFields(value, overCap, issuesInvoices = true) {
|
|
|
17348
17424
|
|
|
17349
17425
|
// src/components/contact-interest-field.tsx
|
|
17350
17426
|
var import_utils34 = require("@reblu/site-ui/utils");
|
|
17351
|
-
var
|
|
17427
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
17352
17428
|
function ContactInterestField({
|
|
17353
17429
|
interest,
|
|
17354
17430
|
value,
|
|
@@ -17365,18 +17441,18 @@ function ContactInterestField({
|
|
|
17365
17441
|
else next2.delete(option2);
|
|
17366
17442
|
onChange(interest.options.filter((candidate) => next2.has(candidate)));
|
|
17367
17443
|
};
|
|
17368
|
-
return /* @__PURE__ */ (0,
|
|
17369
|
-
/* @__PURE__ */ (0,
|
|
17370
|
-
/* @__PURE__ */ (0,
|
|
17444
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("fieldset", { "data-slot": "contact-interest", className: (0, import_utils34.cn)("space-y-2", className), children: [
|
|
17445
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("legend", { className: "text-sm font-medium", children: interest.label }),
|
|
17446
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
|
|
17371
17447
|
const id = `${idPrefix}-${index}`;
|
|
17372
|
-
return /* @__PURE__ */ (0,
|
|
17448
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
|
|
17373
17449
|
"label",
|
|
17374
17450
|
{
|
|
17375
17451
|
htmlFor: id,
|
|
17376
17452
|
"data-slot": "contact-interest-option",
|
|
17377
17453
|
className: "flex items-center gap-2 text-sm",
|
|
17378
17454
|
children: [
|
|
17379
|
-
/* @__PURE__ */ (0,
|
|
17455
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
17380
17456
|
"input",
|
|
17381
17457
|
{
|
|
17382
17458
|
id,
|
|
@@ -17421,6 +17497,7 @@ var import_site_contracts = require("@reblu/site-contracts");
|
|
|
17421
17497
|
CourseCatalogFilters,
|
|
17422
17498
|
CourseDescription,
|
|
17423
17499
|
CoursePurchaseTerms,
|
|
17500
|
+
CourseSchedule,
|
|
17424
17501
|
DATA_REQUEST_TYPES,
|
|
17425
17502
|
DEFAULT_BEFORE_AFTER_LABELS,
|
|
17426
17503
|
DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS,
|
|
@@ -17429,6 +17506,7 @@ var import_site_contracts = require("@reblu/site-contracts");
|
|
|
17429
17506
|
DEFAULT_COURSE_CATALOG_FILTERS_LABELS,
|
|
17430
17507
|
DEFAULT_COURSE_PRICE_BANDS,
|
|
17431
17508
|
DEFAULT_COURSE_PURCHASE_TERMS_LABELS,
|
|
17509
|
+
DEFAULT_COURSE_SCHEDULE_LABELS,
|
|
17432
17510
|
DEFAULT_INVOICE_COUNTRIES,
|
|
17433
17511
|
DEFAULT_LESSON_PREVIEW_LABELS,
|
|
17434
17512
|
DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,
|