@reblu/site-blocks 0.20.0 → 0.22.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 +35 -0
- package/README.md +209 -14
- package/dist/client.cjs +218 -83
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +40 -13
- package/dist/client.d.ts +40 -13
- package/dist/client.js +221 -86
- package/dist/client.js.map +1 -1
- package/dist/index.cjs +620 -321
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +144 -2
- package/dist/index.d.ts +144 -2
- package/dist/index.js +614 -321
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -50,7 +50,9 @@ var DEFAULT_SHOP_ERROR_MESSAGES = {
|
|
|
50
50
|
// REB-73 — checkout refusals before any payment.
|
|
51
51
|
BILLING_DATA_REQUIRED: "Para emitir tu factura necesitamos tu NIF/NIE o un documento de identificaci\xF3n, tu nombre y tu direcci\xF3n de facturaci\xF3n.",
|
|
52
52
|
INVOICING_NOT_READY: "No se puede completar la compra en este momento. Int\xE9ntalo m\xE1s tarde.",
|
|
53
|
-
FULL_INVOICE_UNAVAILABLE: "Esta tienda no emite facturas completas: contin\xFAa sin solicitarla."
|
|
53
|
+
FULL_INVOICE_UNAVAILABLE: "Esta tienda no emite facturas completas: contin\xFAa sin solicitarla.",
|
|
54
|
+
// REB-912 — the code used up its total uses; refused before any payment.
|
|
55
|
+
DISCOUNT_LIMIT_REACHED: "Este c\xF3digo ya ha alcanzado su l\xEDmite de usos"
|
|
54
56
|
};
|
|
55
57
|
var DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE = "No se ha podido completar la operaci\xF3n. Int\xE9ntalo de nuevo.";
|
|
56
58
|
function getShopErrorMessage(code, overrides, fallback = DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE) {
|
|
@@ -13460,13 +13462,129 @@ function CourseDescription({
|
|
|
13460
13462
|
);
|
|
13461
13463
|
}
|
|
13462
13464
|
|
|
13465
|
+
// src/components/lesson-preview.tsx
|
|
13466
|
+
import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
13467
|
+
var DEFAULT_LESSON_PREVIEW_LABELS = {
|
|
13468
|
+
badge: "Vista previa gratuita",
|
|
13469
|
+
player: "V\xEDdeo",
|
|
13470
|
+
duration: "Duraci\xF3n"
|
|
13471
|
+
};
|
|
13472
|
+
function isEmbeddable(url) {
|
|
13473
|
+
try {
|
|
13474
|
+
return new URL(url).protocol === "https:";
|
|
13475
|
+
} catch {
|
|
13476
|
+
return false;
|
|
13477
|
+
}
|
|
13478
|
+
}
|
|
13479
|
+
function clock(seconds) {
|
|
13480
|
+
const whole = Math.round(seconds);
|
|
13481
|
+
const h2 = Math.floor(whole / 3600);
|
|
13482
|
+
const m2 = Math.floor(whole % 3600 / 60);
|
|
13483
|
+
const s2 = whole % 60;
|
|
13484
|
+
const ss = String(s2).padStart(2, "0");
|
|
13485
|
+
return {
|
|
13486
|
+
text: h2 > 0 ? `${h2}:${String(m2).padStart(2, "0")}:${ss}` : `${m2}:${ss}`,
|
|
13487
|
+
iso: `PT${h2 > 0 ? `${h2}H` : ""}${m2}M${s2}S`
|
|
13488
|
+
};
|
|
13489
|
+
}
|
|
13490
|
+
function isVisiblyEmpty2(html5) {
|
|
13491
|
+
if (/<(img|iframe|hr)\b/i.test(html5)) return false;
|
|
13492
|
+
return html5.replace(/<[^>]*>/g, "").trim() === "";
|
|
13493
|
+
}
|
|
13494
|
+
function LessonPreview({
|
|
13495
|
+
lesson,
|
|
13496
|
+
labels: labelOverrides,
|
|
13497
|
+
headingLevel = 2,
|
|
13498
|
+
headingId = "lesson-preview-heading",
|
|
13499
|
+
headingClassName,
|
|
13500
|
+
contentClassName,
|
|
13501
|
+
className
|
|
13502
|
+
}) {
|
|
13503
|
+
const labels = { ...DEFAULT_LESSON_PREVIEW_LABELS, ...labelOverrides };
|
|
13504
|
+
const Tag = `h${headingLevel}`;
|
|
13505
|
+
const video = lesson.video && isEmbeddable(lesson.video.embedUrl) ? lesson.video : null;
|
|
13506
|
+
const html5 = markdownToSafeHtml(lesson.content);
|
|
13507
|
+
const hasBody = html5 !== null && html5 !== "" && !isVisiblyEmpty2(html5);
|
|
13508
|
+
const duration = typeof lesson.durationSeconds === "number" && lesson.durationSeconds > 0 ? clock(lesson.durationSeconds) : null;
|
|
13509
|
+
return /* @__PURE__ */ jsxs3(
|
|
13510
|
+
"article",
|
|
13511
|
+
{
|
|
13512
|
+
"data-slot": "lesson-preview",
|
|
13513
|
+
"aria-labelledby": headingId,
|
|
13514
|
+
className: slotClassName("space-y-6", "", className),
|
|
13515
|
+
children: [
|
|
13516
|
+
/* @__PURE__ */ jsxs3("header", { className: "space-y-2", children: [
|
|
13517
|
+
/* @__PURE__ */ jsx3(
|
|
13518
|
+
"span",
|
|
13519
|
+
{
|
|
13520
|
+
"data-slot": "lesson-preview-badge",
|
|
13521
|
+
className: "inline-flex items-center rounded-full bg-primary/10 px-3 py-1 text-xs font-semibold text-primary",
|
|
13522
|
+
children: labels.badge
|
|
13523
|
+
}
|
|
13524
|
+
),
|
|
13525
|
+
/* @__PURE__ */ jsx3(
|
|
13526
|
+
Tag,
|
|
13527
|
+
{
|
|
13528
|
+
id: headingId,
|
|
13529
|
+
className: slotClassName("", "text-2xl font-semibold leading-tight", headingClassName),
|
|
13530
|
+
children: lesson.title
|
|
13531
|
+
}
|
|
13532
|
+
),
|
|
13533
|
+
duration && /* @__PURE__ */ jsxs3("p", { className: "text-sm text-muted-foreground", children: [
|
|
13534
|
+
/* @__PURE__ */ jsxs3("span", { className: "sr-only", children: [
|
|
13535
|
+
labels.duration,
|
|
13536
|
+
": "
|
|
13537
|
+
] }),
|
|
13538
|
+
/* @__PURE__ */ jsx3(
|
|
13539
|
+
"time",
|
|
13540
|
+
{
|
|
13541
|
+
"data-slot": "lesson-preview-duration",
|
|
13542
|
+
dateTime: duration.iso,
|
|
13543
|
+
className: "tabular-nums",
|
|
13544
|
+
children: duration.text
|
|
13545
|
+
}
|
|
13546
|
+
)
|
|
13547
|
+
] })
|
|
13548
|
+
] }),
|
|
13549
|
+
video && /* @__PURE__ */ jsx3(
|
|
13550
|
+
"div",
|
|
13551
|
+
{
|
|
13552
|
+
"data-slot": "lesson-preview-player",
|
|
13553
|
+
className: "aspect-video w-full overflow-hidden rounded-xl border border-border bg-black",
|
|
13554
|
+
children: /* @__PURE__ */ jsx3(
|
|
13555
|
+
"iframe",
|
|
13556
|
+
{
|
|
13557
|
+
src: video.embedUrl,
|
|
13558
|
+
title: `${labels.player}: ${lesson.title}`,
|
|
13559
|
+
allow: "accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture; fullscreen",
|
|
13560
|
+
allowFullScreen: true,
|
|
13561
|
+
loading: "lazy",
|
|
13562
|
+
referrerPolicy: "strict-origin-when-cross-origin",
|
|
13563
|
+
className: "size-full border-0"
|
|
13564
|
+
}
|
|
13565
|
+
)
|
|
13566
|
+
}
|
|
13567
|
+
),
|
|
13568
|
+
hasBody && /* @__PURE__ */ jsx3("div", { "data-slot": "lesson-preview-content", children: /* @__PURE__ */ jsx3(
|
|
13569
|
+
SafeHtml,
|
|
13570
|
+
{
|
|
13571
|
+
html: html5,
|
|
13572
|
+
headingOffset: headingLevel,
|
|
13573
|
+
className: slotClassName("", "text-muted-foreground", contentClassName)
|
|
13574
|
+
}
|
|
13575
|
+
) })
|
|
13576
|
+
]
|
|
13577
|
+
}
|
|
13578
|
+
);
|
|
13579
|
+
}
|
|
13580
|
+
|
|
13463
13581
|
// src/components/treatment.tsx
|
|
13464
13582
|
import { cn as cn3 } from "@reblu/site-ui/utils";
|
|
13465
13583
|
|
|
13466
13584
|
// src/components/_page-parts.tsx
|
|
13467
13585
|
import { cn as cn2 } from "@reblu/site-ui/utils";
|
|
13468
13586
|
import { buttonVariants } from "@reblu/site-ui/button-variants";
|
|
13469
|
-
import { Fragment as Fragment2, jsx as
|
|
13587
|
+
import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
13470
13588
|
var KNOWN_BUTTON_VARIANTS = /* @__PURE__ */ new Set([
|
|
13471
13589
|
"default",
|
|
13472
13590
|
"destructive",
|
|
@@ -13479,11 +13597,11 @@ function toButtonVariant(variant) {
|
|
|
13479
13597
|
return variant && KNOWN_BUTTON_VARIANTS.has(variant) ? variant : "default";
|
|
13480
13598
|
}
|
|
13481
13599
|
function PageHero({ page }) {
|
|
13482
|
-
return /* @__PURE__ */
|
|
13483
|
-
page.category && /* @__PURE__ */
|
|
13484
|
-
/* @__PURE__ */
|
|
13485
|
-
page.subtitle && /* @__PURE__ */
|
|
13486
|
-
page.coverImageUrl && /* @__PURE__ */
|
|
13600
|
+
return /* @__PURE__ */ jsxs4("header", { className: "space-y-4", children: [
|
|
13601
|
+
page.category && /* @__PURE__ */ jsx4("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 }),
|
|
13602
|
+
/* @__PURE__ */ jsx4("h1", { className: "text-4xl font-bold tracking-tight", children: page.title }),
|
|
13603
|
+
page.subtitle && /* @__PURE__ */ jsx4("p", { className: "text-lg text-muted-foreground", children: page.subtitle }),
|
|
13604
|
+
page.coverImageUrl && /* @__PURE__ */ jsx4("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx4(
|
|
13487
13605
|
"img",
|
|
13488
13606
|
{
|
|
13489
13607
|
src: page.coverImageUrl,
|
|
@@ -13497,7 +13615,7 @@ function PageHero({ page }) {
|
|
|
13497
13615
|
function SectionCta({ section }) {
|
|
13498
13616
|
if (!section.ctaLabel || !section.ctaUrl) return null;
|
|
13499
13617
|
const variant = toButtonVariant(section.ctaVariant);
|
|
13500
|
-
return /* @__PURE__ */
|
|
13618
|
+
return /* @__PURE__ */ jsx4("div", { className: "pt-2", children: /* @__PURE__ */ jsx4(
|
|
13501
13619
|
"a",
|
|
13502
13620
|
{
|
|
13503
13621
|
href: section.ctaUrl,
|
|
@@ -13512,46 +13630,46 @@ function SectionCta({ section }) {
|
|
|
13512
13630
|
}
|
|
13513
13631
|
function SectionImages({ section }) {
|
|
13514
13632
|
if (section.images.length === 0) return null;
|
|
13515
|
-
return /* @__PURE__ */
|
|
13516
|
-
/* @__PURE__ */
|
|
13517
|
-
img.caption && /* @__PURE__ */
|
|
13633
|
+
return /* @__PURE__ */ jsx4("div", { className: cn2("grid gap-4", section.images.length > 1 ? "sm:grid-cols-2" : "grid-cols-1"), children: section.images.map((img) => /* @__PURE__ */ jsxs4("figure", { className: "space-y-1", children: [
|
|
13634
|
+
/* @__PURE__ */ jsx4("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx4("img", { src: img.url, alt: img.alt, loading: "lazy", className: "h-full w-full object-cover" }) }),
|
|
13635
|
+
img.caption && /* @__PURE__ */ jsx4("figcaption", { className: "text-sm text-muted-foreground", children: img.caption })
|
|
13518
13636
|
] }, `${img.url}-${img.order}`)) });
|
|
13519
13637
|
}
|
|
13520
13638
|
function PageSectionBlock({ section }) {
|
|
13521
13639
|
const imageFirst = section.layout === "IMAGE_TEXT";
|
|
13522
13640
|
const sideBySide = section.layout === "TEXT_IMAGE" || section.layout === "IMAGE_TEXT";
|
|
13523
13641
|
const hasImages = section.images.length > 0;
|
|
13524
|
-
const body3 = /* @__PURE__ */
|
|
13525
|
-
section.heading && /* @__PURE__ */
|
|
13526
|
-
/* @__PURE__ */
|
|
13527
|
-
/* @__PURE__ */
|
|
13642
|
+
const body3 = /* @__PURE__ */ jsxs4("div", { className: "space-y-4", children: [
|
|
13643
|
+
section.heading && /* @__PURE__ */ jsx4("h2", { className: "text-2xl font-bold", children: section.heading }),
|
|
13644
|
+
/* @__PURE__ */ jsx4(SafeHtml, { html: sanitizeHtml(section.contentHtml), headingOffset: 2 }),
|
|
13645
|
+
/* @__PURE__ */ jsx4(SectionCta, { section })
|
|
13528
13646
|
] });
|
|
13529
13647
|
if (sideBySide && hasImages) {
|
|
13530
|
-
return /* @__PURE__ */
|
|
13531
|
-
/* @__PURE__ */
|
|
13648
|
+
return /* @__PURE__ */ jsx4("section", { className: "grid items-center gap-8 md:grid-cols-2", children: imageFirst ? /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
13649
|
+
/* @__PURE__ */ jsx4(SectionImages, { section }),
|
|
13532
13650
|
body3
|
|
13533
|
-
] }) : /* @__PURE__ */
|
|
13651
|
+
] }) : /* @__PURE__ */ jsxs4(Fragment2, { children: [
|
|
13534
13652
|
body3,
|
|
13535
|
-
/* @__PURE__ */
|
|
13653
|
+
/* @__PURE__ */ jsx4(SectionImages, { section })
|
|
13536
13654
|
] }) });
|
|
13537
13655
|
}
|
|
13538
|
-
return /* @__PURE__ */
|
|
13656
|
+
return /* @__PURE__ */ jsxs4("section", { className: "space-y-4", children: [
|
|
13539
13657
|
body3,
|
|
13540
|
-
/* @__PURE__ */
|
|
13658
|
+
/* @__PURE__ */ jsx4(SectionImages, { section })
|
|
13541
13659
|
] });
|
|
13542
13660
|
}
|
|
13543
13661
|
function PageSectionList({ sections }) {
|
|
13544
13662
|
if (sections.length === 0) return null;
|
|
13545
13663
|
const ordered = sections.slice().sort((a, b2) => a.order - b2.order);
|
|
13546
|
-
return /* @__PURE__ */
|
|
13664
|
+
return /* @__PURE__ */ jsx4("div", { className: "space-y-12", children: ordered.map((section) => /* @__PURE__ */ jsx4(PageSectionBlock, { section }, section.id)) });
|
|
13547
13665
|
}
|
|
13548
13666
|
|
|
13549
13667
|
// src/components/treatment.tsx
|
|
13550
|
-
import { jsx as
|
|
13668
|
+
import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
13551
13669
|
function Treatment({ page, className }) {
|
|
13552
|
-
return /* @__PURE__ */
|
|
13553
|
-
/* @__PURE__ */
|
|
13554
|
-
/* @__PURE__ */
|
|
13670
|
+
return /* @__PURE__ */ jsxs5("article", { className: cn3("space-y-12", className), "data-slot": "treatment", children: [
|
|
13671
|
+
/* @__PURE__ */ jsx5(PageHero, { page }),
|
|
13672
|
+
/* @__PURE__ */ jsx5(PageSectionList, { sections: page.sections })
|
|
13555
13673
|
] });
|
|
13556
13674
|
}
|
|
13557
13675
|
|
|
@@ -13560,11 +13678,11 @@ import { cn as cn5 } from "@reblu/site-ui/utils";
|
|
|
13560
13678
|
|
|
13561
13679
|
// src/components/page-card-grid.tsx
|
|
13562
13680
|
import { cn as cn4 } from "@reblu/site-ui/utils";
|
|
13563
|
-
import { jsx as
|
|
13681
|
+
import { jsx as jsx6, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
13564
13682
|
var defaultPageHref = (page) => `/${page.slug}`;
|
|
13565
13683
|
var pageKey = (page) => `${page.category?.slug ?? ""}/${page.slug}`;
|
|
13566
13684
|
function PageCardGrid(props) {
|
|
13567
|
-
return /* @__PURE__ */
|
|
13685
|
+
return /* @__PURE__ */ jsx6(PageCardGridSection, { ...props });
|
|
13568
13686
|
}
|
|
13569
13687
|
function PageCardGridSection({
|
|
13570
13688
|
pages,
|
|
@@ -13575,15 +13693,15 @@ function PageCardGridSection({
|
|
|
13575
13693
|
}) {
|
|
13576
13694
|
if (pages.length === 0) return null;
|
|
13577
13695
|
const showHeading = keepEmptyHeading ? heading !== void 0 : !!heading;
|
|
13578
|
-
return /* @__PURE__ */
|
|
13579
|
-
showHeading && /* @__PURE__ */
|
|
13580
|
-
/* @__PURE__ */
|
|
13696
|
+
return /* @__PURE__ */ jsxs6("section", { className: cn4("space-y-6", className), children: [
|
|
13697
|
+
showHeading && /* @__PURE__ */ jsx6("h2", { className: "text-2xl font-bold", children: heading }),
|
|
13698
|
+
/* @__PURE__ */ jsx6("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__ */ jsx6("li", { children: /* @__PURE__ */ jsxs6(
|
|
13581
13699
|
"a",
|
|
13582
13700
|
{
|
|
13583
13701
|
href: pageHref(page),
|
|
13584
13702
|
className: "group flex h-full flex-col overflow-hidden rounded-lg border bg-card transition-shadow hover:shadow-lg",
|
|
13585
13703
|
children: [
|
|
13586
|
-
page.coverImageUrl && /* @__PURE__ */
|
|
13704
|
+
page.coverImageUrl && /* @__PURE__ */ jsx6("div", { className: "relative aspect-video overflow-hidden bg-muted", children: /* @__PURE__ */ jsx6(
|
|
13587
13705
|
"img",
|
|
13588
13706
|
{
|
|
13589
13707
|
src: page.coverImageUrl,
|
|
@@ -13592,9 +13710,9 @@ function PageCardGridSection({
|
|
|
13592
13710
|
className: "h-full w-full object-cover transition-transform group-hover:scale-105"
|
|
13593
13711
|
}
|
|
13594
13712
|
) }),
|
|
13595
|
-
/* @__PURE__ */
|
|
13596
|
-
/* @__PURE__ */
|
|
13597
|
-
page.excerpt && /* @__PURE__ */
|
|
13713
|
+
/* @__PURE__ */ jsxs6("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
|
|
13714
|
+
/* @__PURE__ */ jsx6("h3", { className: "font-semibold leading-tight transition-colors group-hover:text-primary", children: page.title }),
|
|
13715
|
+
page.excerpt && /* @__PURE__ */ jsx6("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: page.excerpt })
|
|
13598
13716
|
] })
|
|
13599
13717
|
]
|
|
13600
13718
|
}
|
|
@@ -13603,7 +13721,7 @@ function PageCardGridSection({
|
|
|
13603
13721
|
}
|
|
13604
13722
|
|
|
13605
13723
|
// src/components/parent-page.tsx
|
|
13606
|
-
import { jsx as
|
|
13724
|
+
import { jsx as jsx7, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
13607
13725
|
var defaultChildPageHref = (slug) => `/${slug}`;
|
|
13608
13726
|
function ParentPage({
|
|
13609
13727
|
page,
|
|
@@ -13618,10 +13736,10 @@ function ParentPage({
|
|
|
13618
13736
|
const pages = childPages ?? treatments ?? [];
|
|
13619
13737
|
const hrefFor = childPageHref ?? treatmentHref ?? defaultChildPageHref;
|
|
13620
13738
|
const label = childPagesLabel ?? treatmentsLabel ?? "Treatments";
|
|
13621
|
-
return /* @__PURE__ */
|
|
13622
|
-
/* @__PURE__ */
|
|
13623
|
-
/* @__PURE__ */
|
|
13624
|
-
/* @__PURE__ */
|
|
13739
|
+
return /* @__PURE__ */ jsxs7("article", { className: cn5("space-y-12", className), "data-slot": "specialty", children: [
|
|
13740
|
+
/* @__PURE__ */ jsx7(PageHero, { page }),
|
|
13741
|
+
/* @__PURE__ */ jsx7(PageSectionList, { sections: page.sections }),
|
|
13742
|
+
/* @__PURE__ */ jsx7(
|
|
13625
13743
|
PageCardGridSection,
|
|
13626
13744
|
{
|
|
13627
13745
|
pages,
|
|
@@ -13641,7 +13759,7 @@ import { cn as cn7 } from "@reblu/site-ui/utils";
|
|
|
13641
13759
|
|
|
13642
13760
|
// src/components/professional-fields.tsx
|
|
13643
13761
|
import { cn as cn6 } from "@reblu/site-ui/utils";
|
|
13644
|
-
import { jsx as
|
|
13762
|
+
import { jsx as jsx8, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
13645
13763
|
function ProfessionalFields({
|
|
13646
13764
|
fields,
|
|
13647
13765
|
variant = "profile",
|
|
@@ -13649,7 +13767,7 @@ function ProfessionalFields({
|
|
|
13649
13767
|
}) {
|
|
13650
13768
|
const shown = (fields ?? []).filter((f) => variant !== "card" || f.showOnCard);
|
|
13651
13769
|
if (shown.length === 0) return null;
|
|
13652
|
-
return /* @__PURE__ */
|
|
13770
|
+
return /* @__PURE__ */ jsx8(
|
|
13653
13771
|
"dl",
|
|
13654
13772
|
{
|
|
13655
13773
|
className: cn6(
|
|
@@ -13659,13 +13777,13 @@ function ProfessionalFields({
|
|
|
13659
13777
|
),
|
|
13660
13778
|
"data-slot": "professional-fields",
|
|
13661
13779
|
"data-variant": variant,
|
|
13662
|
-
children: shown.map((field, index) => /* @__PURE__ */
|
|
13780
|
+
children: shown.map((field, index) => /* @__PURE__ */ jsxs8(
|
|
13663
13781
|
"div",
|
|
13664
13782
|
{
|
|
13665
13783
|
className: variant === "card" ? "flex justify-center gap-1" : "contents",
|
|
13666
13784
|
children: [
|
|
13667
|
-
/* @__PURE__ */
|
|
13668
|
-
/* @__PURE__ */
|
|
13785
|
+
/* @__PURE__ */ jsx8("dt", { className: "text-muted-foreground", children: field.label }),
|
|
13786
|
+
/* @__PURE__ */ jsx8("dd", { className: "m-0 font-medium", children: field.value })
|
|
13669
13787
|
]
|
|
13670
13788
|
},
|
|
13671
13789
|
`${field.label}-${index}`
|
|
@@ -13675,7 +13793,7 @@ function ProfessionalFields({
|
|
|
13675
13793
|
}
|
|
13676
13794
|
|
|
13677
13795
|
// src/components/profile-card.tsx
|
|
13678
|
-
import { jsx as
|
|
13796
|
+
import { jsx as jsx9, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
13679
13797
|
function initials(name) {
|
|
13680
13798
|
return name.split(/\s+/).filter(Boolean).slice(0, 2).map((part) => part[0]?.toUpperCase() ?? "").join("");
|
|
13681
13799
|
}
|
|
@@ -13690,7 +13808,7 @@ function ProfileCard({
|
|
|
13690
13808
|
className
|
|
13691
13809
|
}) {
|
|
13692
13810
|
const NameTag = href ? "a" : "span";
|
|
13693
|
-
return /* @__PURE__ */
|
|
13811
|
+
return /* @__PURE__ */ jsxs9(
|
|
13694
13812
|
"article",
|
|
13695
13813
|
{
|
|
13696
13814
|
className: cn7(
|
|
@@ -13699,7 +13817,7 @@ function ProfileCard({
|
|
|
13699
13817
|
),
|
|
13700
13818
|
"data-slot": "profile-card",
|
|
13701
13819
|
children: [
|
|
13702
|
-
/* @__PURE__ */
|
|
13820
|
+
/* @__PURE__ */ jsx9("div", { className: "relative h-24 w-24 overflow-hidden rounded-full bg-muted", children: imageUrl ? /* @__PURE__ */ jsx9("img", { src: imageUrl, alt: name, loading: "lazy", className: "h-full w-full object-cover" }) : /* @__PURE__ */ jsx9(
|
|
13703
13821
|
"span",
|
|
13704
13822
|
{
|
|
13705
13823
|
className: "flex h-full w-full items-center justify-center text-2xl font-semibold text-muted-foreground",
|
|
@@ -13707,12 +13825,12 @@ function ProfileCard({
|
|
|
13707
13825
|
children: initials(name)
|
|
13708
13826
|
}
|
|
13709
13827
|
) }),
|
|
13710
|
-
/* @__PURE__ */
|
|
13711
|
-
/* @__PURE__ */
|
|
13712
|
-
role && /* @__PURE__ */
|
|
13828
|
+
/* @__PURE__ */ jsxs9("div", { className: "space-y-1", children: [
|
|
13829
|
+
/* @__PURE__ */ jsx9("h3", { className: "text-lg font-semibold leading-tight", children: /* @__PURE__ */ jsx9(NameTag, { ...href ? { href, className: "transition-colors hover:text-primary" } : {}, children: name }) }),
|
|
13830
|
+
role && /* @__PURE__ */ jsx9("p", { className: "text-sm text-muted-foreground", children: role })
|
|
13713
13831
|
] }),
|
|
13714
|
-
/* @__PURE__ */
|
|
13715
|
-
specialties.length > 0 && /* @__PURE__ */
|
|
13832
|
+
/* @__PURE__ */ jsx9(ProfessionalFields, { fields, variant: "card" }),
|
|
13833
|
+
specialties.length > 0 && /* @__PURE__ */ jsx9("ul", { className: "flex flex-wrap justify-center gap-1.5 p-0", children: specialties.map((s2) => /* @__PURE__ */ jsx9(
|
|
13716
13834
|
"li",
|
|
13717
13835
|
{
|
|
13718
13836
|
className: "inline-flex items-center rounded-full bg-secondary px-2.5 py-0.5 text-xs font-medium text-secondary-foreground",
|
|
@@ -13720,7 +13838,7 @@ function ProfileCard({
|
|
|
13720
13838
|
},
|
|
13721
13839
|
s2
|
|
13722
13840
|
)) }),
|
|
13723
|
-
bio && /* @__PURE__ */
|
|
13841
|
+
bio && /* @__PURE__ */ jsx9("p", { className: "text-sm text-muted-foreground", children: bio })
|
|
13724
13842
|
]
|
|
13725
13843
|
}
|
|
13726
13844
|
);
|
|
@@ -13728,11 +13846,11 @@ function ProfileCard({
|
|
|
13728
13846
|
|
|
13729
13847
|
// src/components/product-card.tsx
|
|
13730
13848
|
import { cn as cn8 } from "@reblu/site-ui/utils";
|
|
13731
|
-
import { jsx as
|
|
13849
|
+
import { jsx as jsx10, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
13732
13850
|
function ProductCard({ product, href, currencyCode = "EUR", locale, className }) {
|
|
13733
13851
|
const image = product.images.find((i) => i.isPrimary) ?? product.images[0];
|
|
13734
13852
|
const hasDiscount = product.comparePrice != null && product.comparePrice > product.price;
|
|
13735
|
-
return /* @__PURE__ */
|
|
13853
|
+
return /* @__PURE__ */ jsxs10(
|
|
13736
13854
|
"article",
|
|
13737
13855
|
{
|
|
13738
13856
|
className: cn8(
|
|
@@ -13741,7 +13859,7 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
|
|
|
13741
13859
|
),
|
|
13742
13860
|
"data-slot": "product-card",
|
|
13743
13861
|
children: [
|
|
13744
|
-
/* @__PURE__ */
|
|
13862
|
+
/* @__PURE__ */ jsx10("div", { className: "relative aspect-square overflow-hidden bg-muted", children: image ? /* @__PURE__ */ jsx10(
|
|
13745
13863
|
"img",
|
|
13746
13864
|
{
|
|
13747
13865
|
src: image.url,
|
|
@@ -13749,14 +13867,14 @@ function ProductCard({ product, href, currencyCode = "EUR", locale, className })
|
|
|
13749
13867
|
loading: "lazy",
|
|
13750
13868
|
className: "h-full w-full object-cover transition-transform group-hover:scale-105"
|
|
13751
13869
|
}
|
|
13752
|
-
) : /* @__PURE__ */
|
|
13753
|
-
/* @__PURE__ */
|
|
13754
|
-
product.category && /* @__PURE__ */
|
|
13755
|
-
/* @__PURE__ */
|
|
13756
|
-
product.shortDescription && /* @__PURE__ */
|
|
13757
|
-
/* @__PURE__ */
|
|
13758
|
-
/* @__PURE__ */
|
|
13759
|
-
hasDiscount && /* @__PURE__ */
|
|
13870
|
+
) : /* @__PURE__ */ jsx10("div", { className: "flex h-full items-center justify-center text-4xl text-muted-foreground/30", "aria-hidden": "true", children: "\u{1F6CD}\uFE0F" }) }),
|
|
13871
|
+
/* @__PURE__ */ jsxs10("div", { className: "flex flex-1 flex-col gap-2 p-4", children: [
|
|
13872
|
+
product.category && /* @__PURE__ */ jsx10("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 }),
|
|
13873
|
+
/* @__PURE__ */ jsx10("h3", { className: "text-base font-semibold leading-tight", children: href ? /* @__PURE__ */ jsx10("a", { href, className: "transition-colors hover:text-primary", children: product.name }) : product.name }),
|
|
13874
|
+
product.shortDescription && /* @__PURE__ */ jsx10("p", { className: "line-clamp-2 text-sm text-muted-foreground", children: product.shortDescription }),
|
|
13875
|
+
/* @__PURE__ */ jsxs10("div", { className: "mt-auto flex items-baseline gap-2 pt-2", children: [
|
|
13876
|
+
/* @__PURE__ */ jsx10("span", { className: "text-lg font-bold text-foreground", children: formatPrice(product.price, currencyCode, locale) }),
|
|
13877
|
+
hasDiscount && /* @__PURE__ */ jsx10("span", { className: "text-sm text-muted-foreground line-through", children: formatPrice(product.comparePrice, currencyCode, locale) })
|
|
13760
13878
|
] })
|
|
13761
13879
|
] })
|
|
13762
13880
|
]
|
|
@@ -13958,7 +14076,7 @@ var __iconNode8 = [
|
|
|
13958
14076
|
var Truck = createLucideIcon("truck", __iconNode8);
|
|
13959
14077
|
|
|
13960
14078
|
// src/components/product-trust-items.tsx
|
|
13961
|
-
import { jsx as
|
|
14079
|
+
import { jsx as jsx11, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
13962
14080
|
var DEFAULT_TRUST_ICONS = Object.freeze({
|
|
13963
14081
|
shipping: Truck,
|
|
13964
14082
|
returns: RotateCcw,
|
|
@@ -13992,9 +14110,9 @@ function ProductTrustItems({
|
|
|
13992
14110
|
return [{ key: `${index}-${icon}`, Icon: Icon2, text: text3 }];
|
|
13993
14111
|
});
|
|
13994
14112
|
if (rows.length === 0) return null;
|
|
13995
|
-
return /* @__PURE__ */
|
|
13996
|
-
/* @__PURE__ */
|
|
13997
|
-
/* @__PURE__ */
|
|
14113
|
+
return /* @__PURE__ */ jsx11(List, { "data-slot": "product-trust-items", className: slotClassName("space-y-2.5", "", className), children: rows.map(({ key: key2, Icon: Icon2, text: text3 }) => /* @__PURE__ */ jsxs11("li", { className: slotClassName("flex items-center gap-3", "text-sm text-muted-foreground", itemClassName), children: [
|
|
14114
|
+
/* @__PURE__ */ jsx11(Icon2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-foreground/60" }),
|
|
14115
|
+
/* @__PURE__ */ jsx11("span", { children: text3 })
|
|
13998
14116
|
] }, key2)) });
|
|
13999
14117
|
}
|
|
14000
14118
|
|
|
@@ -14002,7 +14120,7 @@ function ProductTrustItems({
|
|
|
14002
14120
|
import { cn as cn9 } from "@reblu/site-ui/utils";
|
|
14003
14121
|
|
|
14004
14122
|
// src/components/_heading.tsx
|
|
14005
|
-
import { jsx as
|
|
14123
|
+
import { jsx as jsx12 } from "react/jsx-runtime";
|
|
14006
14124
|
function nextHeadingLevel(level) {
|
|
14007
14125
|
return Math.min(level + 1, 6);
|
|
14008
14126
|
}
|
|
@@ -14012,11 +14130,11 @@ function Heading({
|
|
|
14012
14130
|
children: children2
|
|
14013
14131
|
}) {
|
|
14014
14132
|
const Tag = `h${level}`;
|
|
14015
|
-
return /* @__PURE__ */
|
|
14133
|
+
return /* @__PURE__ */ jsx12(Tag, { className, children: children2 });
|
|
14016
14134
|
}
|
|
14017
14135
|
|
|
14018
14136
|
// src/components/faq-accordion.tsx
|
|
14019
|
-
import { jsx as
|
|
14137
|
+
import { jsx as jsx13, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
14020
14138
|
function FaqAccordion({
|
|
14021
14139
|
items,
|
|
14022
14140
|
heading,
|
|
@@ -14027,18 +14145,18 @@ function FaqAccordion({
|
|
|
14027
14145
|
}) {
|
|
14028
14146
|
const visible = items.map((item, index) => ({ item, index })).filter(({ item }) => item.q.trim() !== "");
|
|
14029
14147
|
if (visible.length === 0) return null;
|
|
14030
|
-
return /* @__PURE__ */
|
|
14031
|
-
heading && /* @__PURE__ */
|
|
14032
|
-
/* @__PURE__ */
|
|
14148
|
+
return /* @__PURE__ */ jsxs12("div", { className: cn9("space-y-4", className), "data-slot": "faq-accordion", children: [
|
|
14149
|
+
heading && /* @__PURE__ */ jsx13(Heading, { level: headingLevel, className: "text-2xl font-semibold tracking-tight", children: heading }),
|
|
14150
|
+
/* @__PURE__ */ jsx13("div", { className: "divide-y divide-border rounded-xl border border-border", children: visible.map(({ item, index }) => /* @__PURE__ */ jsxs12(
|
|
14033
14151
|
"details",
|
|
14034
14152
|
{
|
|
14035
14153
|
className: "group px-4",
|
|
14036
14154
|
"data-slot": "faq-item",
|
|
14037
14155
|
...defaultOpen.includes(index) ? { open: true } : {},
|
|
14038
14156
|
children: [
|
|
14039
|
-
/* @__PURE__ */
|
|
14040
|
-
questionHeadingLevel ? /* @__PURE__ */
|
|
14041
|
-
/* @__PURE__ */
|
|
14157
|
+
/* @__PURE__ */ jsxs12("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: [
|
|
14158
|
+
questionHeadingLevel ? /* @__PURE__ */ jsx13(Heading, { level: questionHeadingLevel, className: "text-base font-medium", children: item.q }) : /* @__PURE__ */ jsx13("span", { children: item.q }),
|
|
14159
|
+
/* @__PURE__ */ jsx13(
|
|
14042
14160
|
"span",
|
|
14043
14161
|
{
|
|
14044
14162
|
"aria-hidden": "true",
|
|
@@ -14047,7 +14165,7 @@ function FaqAccordion({
|
|
|
14047
14165
|
}
|
|
14048
14166
|
)
|
|
14049
14167
|
] }),
|
|
14050
|
-
/* @__PURE__ */
|
|
14168
|
+
/* @__PURE__ */ jsx13("p", { className: "whitespace-pre-line pb-4 text-muted-foreground", children: item.a })
|
|
14051
14169
|
]
|
|
14052
14170
|
},
|
|
14053
14171
|
index
|
|
@@ -14057,7 +14175,7 @@ function FaqAccordion({
|
|
|
14057
14175
|
|
|
14058
14176
|
// src/components/trust-badges.tsx
|
|
14059
14177
|
import { cn as cn10 } from "@reblu/site-ui/utils";
|
|
14060
|
-
import { jsx as
|
|
14178
|
+
import { jsx as jsx14, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
14061
14179
|
var DEFAULT_TRUST_BADGE_HEADINGS = Object.freeze(
|
|
14062
14180
|
{
|
|
14063
14181
|
PARTNER: "Colaboradores",
|
|
@@ -14099,7 +14217,7 @@ function BadgeContent({ badge, logoClassName }) {
|
|
|
14099
14217
|
if (src) {
|
|
14100
14218
|
return (
|
|
14101
14219
|
// eslint-disable-next-line @next/next/no-img-element -- framework-agnostic SDK; the SITE owns image optimisation
|
|
14102
|
-
/* @__PURE__ */
|
|
14220
|
+
/* @__PURE__ */ jsx14(
|
|
14103
14221
|
"img",
|
|
14104
14222
|
{
|
|
14105
14223
|
src,
|
|
@@ -14110,7 +14228,7 @@ function BadgeContent({ badge, logoClassName }) {
|
|
|
14110
14228
|
)
|
|
14111
14229
|
);
|
|
14112
14230
|
}
|
|
14113
|
-
return /* @__PURE__ */
|
|
14231
|
+
return /* @__PURE__ */ jsx14("span", { className: "text-sm font-medium", children: badge.name });
|
|
14114
14232
|
}
|
|
14115
14233
|
function TrustBadges({
|
|
14116
14234
|
badges,
|
|
@@ -14138,14 +14256,14 @@ function TrustBadges({
|
|
|
14138
14256
|
if (groups.length === 0) return null;
|
|
14139
14257
|
const hasHeading = heading !== void 0 && heading !== null && heading !== "";
|
|
14140
14258
|
const groupHeadingLevel = hasHeading ? nextHeadingLevel(headingLevel) : headingLevel;
|
|
14141
|
-
const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */
|
|
14259
|
+
const content = groups.map(({ type, groupHeading, items }) => /* @__PURE__ */ jsxs13(
|
|
14142
14260
|
"div",
|
|
14143
14261
|
{
|
|
14144
14262
|
"data-slot": "trust-badge-group",
|
|
14145
14263
|
"data-type": type,
|
|
14146
14264
|
className: cn10("space-y-3", groupClassName),
|
|
14147
14265
|
children: [
|
|
14148
|
-
groupHeading ? /* @__PURE__ */
|
|
14266
|
+
groupHeading ? /* @__PURE__ */ jsx14(
|
|
14149
14267
|
Heading,
|
|
14150
14268
|
{
|
|
14151
14269
|
level: groupHeadingLevel,
|
|
@@ -14157,30 +14275,30 @@ function TrustBadges({
|
|
|
14157
14275
|
children: groupHeading
|
|
14158
14276
|
}
|
|
14159
14277
|
) : null,
|
|
14160
|
-
/* @__PURE__ */
|
|
14278
|
+
/* @__PURE__ */ jsx14("ul", { className: cn10("flex flex-wrap items-center gap-6", listClassName), children: items.map((badge) => {
|
|
14161
14279
|
const href = safeHref(badge.url);
|
|
14162
|
-
return /* @__PURE__ */
|
|
14163
|
-
/* @__PURE__ */
|
|
14280
|
+
return /* @__PURE__ */ jsx14("li", { children: href ? /* @__PURE__ */ jsxs13("a", { href, target: "_blank", rel: "noopener noreferrer", className: "inline-flex", children: [
|
|
14281
|
+
/* @__PURE__ */ jsx14(BadgeContent, { badge, logoClassName }),
|
|
14164
14282
|
" ",
|
|
14165
|
-
/* @__PURE__ */
|
|
14166
|
-
] }) : /* @__PURE__ */
|
|
14283
|
+
/* @__PURE__ */ jsx14("span", { className: "sr-only", children: newWindowLabel })
|
|
14284
|
+
] }) : /* @__PURE__ */ jsx14(BadgeContent, { badge, logoClassName }) }, badge.id);
|
|
14167
14285
|
}) })
|
|
14168
14286
|
]
|
|
14169
14287
|
},
|
|
14170
14288
|
type
|
|
14171
14289
|
));
|
|
14172
14290
|
if (!hasHeading) {
|
|
14173
|
-
return /* @__PURE__ */
|
|
14291
|
+
return /* @__PURE__ */ jsx14("div", { "data-slot": "trust-badges", className: cn10("space-y-6", className), children: content });
|
|
14174
14292
|
}
|
|
14175
14293
|
const Tag = `h${headingLevel}`;
|
|
14176
|
-
return /* @__PURE__ */
|
|
14294
|
+
return /* @__PURE__ */ jsxs13(
|
|
14177
14295
|
"section",
|
|
14178
14296
|
{
|
|
14179
14297
|
"data-slot": "trust-badges",
|
|
14180
14298
|
"aria-labelledby": headingId,
|
|
14181
14299
|
className: cn10("space-y-6", className),
|
|
14182
14300
|
children: [
|
|
14183
|
-
/* @__PURE__ */
|
|
14301
|
+
/* @__PURE__ */ jsx14(
|
|
14184
14302
|
Tag,
|
|
14185
14303
|
{
|
|
14186
14304
|
id: headingId,
|
|
@@ -14197,38 +14315,38 @@ function TrustBadges({
|
|
|
14197
14315
|
// src/components/page-blocks.tsx
|
|
14198
14316
|
import { cn as cn11 } from "@reblu/site-ui/utils";
|
|
14199
14317
|
import { buttonVariants as buttonVariants2 } from "@reblu/site-ui/button-variants";
|
|
14200
|
-
import { jsx as
|
|
14318
|
+
import { jsx as jsx15, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
14201
14319
|
var ALIASES = {
|
|
14202
14320
|
doctor_embed: "profile_embed",
|
|
14203
14321
|
specialty_embed: "page_embed"
|
|
14204
14322
|
};
|
|
14205
14323
|
function HeroBlock({ block, headingLevel }) {
|
|
14206
14324
|
const { title, subtitle, imageUrl } = block.data;
|
|
14207
|
-
return /* @__PURE__ */
|
|
14208
|
-
/* @__PURE__ */
|
|
14209
|
-
subtitle && /* @__PURE__ */
|
|
14210
|
-
imageUrl && /* @__PURE__ */
|
|
14325
|
+
return /* @__PURE__ */ jsxs14("div", { className: "space-y-4", children: [
|
|
14326
|
+
/* @__PURE__ */ jsx15(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
|
|
14327
|
+
subtitle && /* @__PURE__ */ jsx15("p", { className: "text-lg opacity-80", children: subtitle }),
|
|
14328
|
+
imageUrl && /* @__PURE__ */ jsx15("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ jsx15("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
|
|
14211
14329
|
] });
|
|
14212
14330
|
}
|
|
14213
14331
|
function RichtextBlock({ block, headingLevel }) {
|
|
14214
|
-
return /* @__PURE__ */
|
|
14332
|
+
return /* @__PURE__ */ jsx15(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
|
|
14215
14333
|
}
|
|
14216
14334
|
function FaqBlock({ block }) {
|
|
14217
|
-
return /* @__PURE__ */
|
|
14335
|
+
return /* @__PURE__ */ jsx15(FaqAccordion, { items: block.data.items });
|
|
14218
14336
|
}
|
|
14219
14337
|
function StatsBlock({ block }) {
|
|
14220
|
-
return /* @__PURE__ */
|
|
14221
|
-
/* @__PURE__ */
|
|
14222
|
-
/* @__PURE__ */
|
|
14338
|
+
return /* @__PURE__ */ jsx15("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ jsxs14("div", { className: "flex flex-col-reverse gap-1", children: [
|
|
14339
|
+
/* @__PURE__ */ jsx15("dt", { className: "text-sm opacity-80", children: item.label }),
|
|
14340
|
+
/* @__PURE__ */ jsx15("dd", { className: "text-3xl font-bold", children: item.value })
|
|
14223
14341
|
] }, i)) });
|
|
14224
14342
|
}
|
|
14225
14343
|
function TestimonialBlock({ block }) {
|
|
14226
14344
|
const { quote, author, role, avatarUrl } = block.data;
|
|
14227
|
-
return /* @__PURE__ */
|
|
14228
|
-
/* @__PURE__ */
|
|
14229
|
-
/* @__PURE__ */
|
|
14345
|
+
return /* @__PURE__ */ jsxs14("figure", { className: "space-y-4", children: [
|
|
14346
|
+
/* @__PURE__ */ jsx15("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ jsx15("p", { children: quote }) }),
|
|
14347
|
+
/* @__PURE__ */ jsxs14("figcaption", { className: "flex items-center gap-3", children: [
|
|
14230
14348
|
avatarUrl && // eslint-disable-next-line @next/next/no-img-element
|
|
14231
|
-
/* @__PURE__ */
|
|
14349
|
+
/* @__PURE__ */ jsx15(
|
|
14232
14350
|
"img",
|
|
14233
14351
|
{
|
|
14234
14352
|
src: avatarUrl,
|
|
@@ -14237,9 +14355,9 @@ function TestimonialBlock({ block }) {
|
|
|
14237
14355
|
className: "h-10 w-10 rounded-full object-cover"
|
|
14238
14356
|
}
|
|
14239
14357
|
),
|
|
14240
|
-
/* @__PURE__ */
|
|
14241
|
-
/* @__PURE__ */
|
|
14242
|
-
role && /* @__PURE__ */
|
|
14358
|
+
/* @__PURE__ */ jsxs14("span", { children: [
|
|
14359
|
+
/* @__PURE__ */ jsx15("span", { className: "font-semibold", children: author }),
|
|
14360
|
+
role && /* @__PURE__ */ jsx15("span", { className: "block text-sm opacity-80", children: role })
|
|
14243
14361
|
] })
|
|
14244
14362
|
] })
|
|
14245
14363
|
] });
|
|
@@ -14248,19 +14366,19 @@ function CtaSlotBlock(_props) {
|
|
|
14248
14366
|
return null;
|
|
14249
14367
|
}
|
|
14250
14368
|
function FeatureListBlock({ block }) {
|
|
14251
|
-
return /* @__PURE__ */
|
|
14369
|
+
return /* @__PURE__ */ jsx15("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ jsx15("li", { children: item.text }, i)) });
|
|
14252
14370
|
}
|
|
14253
14371
|
function GalleryBlock({ block }) {
|
|
14254
14372
|
const { images } = block.data;
|
|
14255
|
-
return /* @__PURE__ */
|
|
14373
|
+
return /* @__PURE__ */ jsx15(
|
|
14256
14374
|
"div",
|
|
14257
14375
|
{
|
|
14258
14376
|
className: cn11(
|
|
14259
14377
|
"grid gap-4",
|
|
14260
14378
|
images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
|
|
14261
14379
|
),
|
|
14262
|
-
children: images.map((img, i) => /* @__PURE__ */
|
|
14263
|
-
/* @__PURE__ */
|
|
14380
|
+
children: images.map((img, i) => /* @__PURE__ */ jsxs14("figure", { className: "space-y-1", children: [
|
|
14381
|
+
/* @__PURE__ */ jsx15("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ jsx15(
|
|
14264
14382
|
"img",
|
|
14265
14383
|
{
|
|
14266
14384
|
src: img.url,
|
|
@@ -14269,7 +14387,7 @@ function GalleryBlock({ block }) {
|
|
|
14269
14387
|
className: "h-full w-full object-cover"
|
|
14270
14388
|
}
|
|
14271
14389
|
) }),
|
|
14272
|
-
img.caption && /* @__PURE__ */
|
|
14390
|
+
img.caption && /* @__PURE__ */ jsx15("figcaption", { className: "text-sm opacity-80", children: img.caption })
|
|
14273
14391
|
] }, `${img.url}-${i}`))
|
|
14274
14392
|
}
|
|
14275
14393
|
);
|
|
@@ -14279,13 +14397,13 @@ function EmbedCard({
|
|
|
14279
14397
|
headingLevel,
|
|
14280
14398
|
embedHref
|
|
14281
14399
|
}) {
|
|
14282
|
-
return /* @__PURE__ */
|
|
14400
|
+
return /* @__PURE__ */ jsxs14(
|
|
14283
14401
|
"a",
|
|
14284
14402
|
{
|
|
14285
14403
|
href: embedHref(resolved),
|
|
14286
14404
|
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",
|
|
14287
14405
|
children: [
|
|
14288
|
-
resolved.coverImageUrl && /* @__PURE__ */
|
|
14406
|
+
resolved.coverImageUrl && /* @__PURE__ */ jsx15("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ jsx15(
|
|
14289
14407
|
"img",
|
|
14290
14408
|
{
|
|
14291
14409
|
src: resolved.coverImageUrl,
|
|
@@ -14294,24 +14412,24 @@ function EmbedCard({
|
|
|
14294
14412
|
className: "h-full w-full object-cover"
|
|
14295
14413
|
}
|
|
14296
14414
|
) }),
|
|
14297
|
-
/* @__PURE__ */
|
|
14298
|
-
/* @__PURE__ */
|
|
14299
|
-
resolved.role && /* @__PURE__ */
|
|
14300
|
-
resolved.excerpt && /* @__PURE__ */
|
|
14415
|
+
/* @__PURE__ */ jsxs14("div", { className: "space-y-1 p-4", children: [
|
|
14416
|
+
/* @__PURE__ */ jsx15(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
|
|
14417
|
+
resolved.role && /* @__PURE__ */ jsx15("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
|
|
14418
|
+
resolved.excerpt && /* @__PURE__ */ jsx15("p", { className: "text-muted-foreground", children: resolved.excerpt })
|
|
14301
14419
|
] })
|
|
14302
14420
|
]
|
|
14303
14421
|
}
|
|
14304
14422
|
);
|
|
14305
14423
|
}
|
|
14306
14424
|
function PageEmbedBlock({ block, headingLevel, embedHref }) {
|
|
14307
|
-
return /* @__PURE__ */
|
|
14425
|
+
return /* @__PURE__ */ jsx15(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
14308
14426
|
}
|
|
14309
14427
|
function ProfileEmbedBlock({
|
|
14310
14428
|
block,
|
|
14311
14429
|
headingLevel,
|
|
14312
14430
|
embedHref
|
|
14313
14431
|
}) {
|
|
14314
|
-
return /* @__PURE__ */
|
|
14432
|
+
return /* @__PURE__ */ jsx15(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
14315
14433
|
}
|
|
14316
14434
|
var DEFAULT_RENDERERS = {
|
|
14317
14435
|
hero: HeroBlock,
|
|
@@ -14368,7 +14486,7 @@ function toIdFragment(value) {
|
|
|
14368
14486
|
function SectionCta2({ cta }) {
|
|
14369
14487
|
if (!hasUsableCta(cta)) return null;
|
|
14370
14488
|
const variant = toButtonVariant(cta.variant);
|
|
14371
|
-
return /* @__PURE__ */
|
|
14489
|
+
return /* @__PURE__ */ jsx15("div", { className: "pt-2", children: /* @__PURE__ */ jsx15(
|
|
14372
14490
|
"a",
|
|
14373
14491
|
{
|
|
14374
14492
|
href: cta.url,
|
|
@@ -14401,7 +14519,7 @@ function PageBlocks({
|
|
|
14401
14519
|
const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
|
|
14402
14520
|
const background = block.backgroundColor;
|
|
14403
14521
|
return [
|
|
14404
|
-
/* @__PURE__ */
|
|
14522
|
+
/* @__PURE__ */ jsxs14(
|
|
14405
14523
|
"section",
|
|
14406
14524
|
{
|
|
14407
14525
|
"data-slot": "page-block",
|
|
@@ -14410,8 +14528,8 @@ function PageBlocks({
|
|
|
14410
14528
|
style: surfaceStyle(background),
|
|
14411
14529
|
className: cn11("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
|
|
14412
14530
|
children: [
|
|
14413
|
-
block.heading && /* @__PURE__ */
|
|
14414
|
-
/* @__PURE__ */
|
|
14531
|
+
block.heading && /* @__PURE__ */ jsx15(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ jsx15("span", { id: headingId, children: block.heading }) }),
|
|
14532
|
+
/* @__PURE__ */ jsx15(
|
|
14415
14533
|
Renderer,
|
|
14416
14534
|
{
|
|
14417
14535
|
block,
|
|
@@ -14419,7 +14537,7 @@ function PageBlocks({
|
|
|
14419
14537
|
embedHref
|
|
14420
14538
|
}
|
|
14421
14539
|
),
|
|
14422
|
-
/* @__PURE__ */
|
|
14540
|
+
/* @__PURE__ */ jsx15(SectionCta2, { cta: block.cta })
|
|
14423
14541
|
]
|
|
14424
14542
|
},
|
|
14425
14543
|
block.id
|
|
@@ -14427,12 +14545,12 @@ function PageBlocks({
|
|
|
14427
14545
|
];
|
|
14428
14546
|
});
|
|
14429
14547
|
if (sections.length === 0) return null;
|
|
14430
|
-
return /* @__PURE__ */
|
|
14548
|
+
return /* @__PURE__ */ jsx15("div", { className: cn11("space-y-12", className), "data-slot": "page-blocks", children: sections });
|
|
14431
14549
|
}
|
|
14432
14550
|
|
|
14433
14551
|
// src/components/shop-filters.tsx
|
|
14434
14552
|
import { cn as cn12 } from "@reblu/site-ui/utils";
|
|
14435
|
-
import { jsx as
|
|
14553
|
+
import { jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
14436
14554
|
var DEFAULT_SHOP_PRICE_BANDS = [
|
|
14437
14555
|
{ max: 2500 },
|
|
14438
14556
|
{ min: 2500, max: 5e3 },
|
|
@@ -14476,7 +14594,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
|
|
|
14476
14594
|
return "";
|
|
14477
14595
|
}
|
|
14478
14596
|
function OptionLink({ href, active, label, onActivate }) {
|
|
14479
|
-
return /* @__PURE__ */
|
|
14597
|
+
return /* @__PURE__ */ jsx16(
|
|
14480
14598
|
"a",
|
|
14481
14599
|
{
|
|
14482
14600
|
href,
|
|
@@ -14494,9 +14612,9 @@ function OptionLink({ href, active, label, onActivate }) {
|
|
|
14494
14612
|
);
|
|
14495
14613
|
}
|
|
14496
14614
|
function FilterFieldset({ legend, children: children2 }) {
|
|
14497
|
-
return /* @__PURE__ */
|
|
14498
|
-
/* @__PURE__ */
|
|
14499
|
-
/* @__PURE__ */
|
|
14615
|
+
return /* @__PURE__ */ jsxs15("fieldset", { className: "space-y-2", children: [
|
|
14616
|
+
/* @__PURE__ */ jsx16("legend", { className: "text-sm font-medium text-foreground", children: legend }),
|
|
14617
|
+
/* @__PURE__ */ jsx16("div", { className: "flex flex-wrap gap-2", children: children2 })
|
|
14500
14618
|
] });
|
|
14501
14619
|
}
|
|
14502
14620
|
function ShopFilters({
|
|
@@ -14519,11 +14637,11 @@ function ShopFilters({
|
|
|
14519
14637
|
if (!shouldRenderShopFilters(facets, active)) {
|
|
14520
14638
|
return null;
|
|
14521
14639
|
}
|
|
14522
|
-
return /* @__PURE__ */
|
|
14640
|
+
return /* @__PURE__ */ jsxs15("div", { className: cn12("space-y-6", className), "data-slot": "shop-filters", children: [
|
|
14523
14641
|
visibleTaxonomies.map((axis) => {
|
|
14524
14642
|
const activeSlug = active.taxonomy?.[axis.key];
|
|
14525
|
-
return /* @__PURE__ */
|
|
14526
|
-
/* @__PURE__ */
|
|
14643
|
+
return /* @__PURE__ */ jsxs15(FilterFieldset, { legend: axis.label, children: [
|
|
14644
|
+
/* @__PURE__ */ jsx16(
|
|
14527
14645
|
OptionLink,
|
|
14528
14646
|
{
|
|
14529
14647
|
href: hrefs.taxonomy(axis.key, void 0),
|
|
@@ -14538,7 +14656,7 @@ function ShopFilters({
|
|
|
14538
14656
|
),
|
|
14539
14657
|
axis.terms.map((term) => {
|
|
14540
14658
|
const isActive = activeSlug === term.slug;
|
|
14541
|
-
return /* @__PURE__ */
|
|
14659
|
+
return /* @__PURE__ */ jsx16(
|
|
14542
14660
|
OptionLink,
|
|
14543
14661
|
{
|
|
14544
14662
|
href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
|
|
@@ -14558,9 +14676,9 @@ function ShopFilters({
|
|
|
14558
14676
|
}),
|
|
14559
14677
|
visibleAttributes.map((attr) => {
|
|
14560
14678
|
const activeValues = toValueArray(active.attr?.[attr.key]);
|
|
14561
|
-
return /* @__PURE__ */
|
|
14679
|
+
return /* @__PURE__ */ jsx16(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
|
|
14562
14680
|
const isActive = activeValues.includes(opt.value);
|
|
14563
|
-
return /* @__PURE__ */
|
|
14681
|
+
return /* @__PURE__ */ jsx16(
|
|
14564
14682
|
OptionLink,
|
|
14565
14683
|
{
|
|
14566
14684
|
href: hrefs.attr(attr.key, opt.value),
|
|
@@ -14578,11 +14696,11 @@ function ShopFilters({
|
|
|
14578
14696
|
);
|
|
14579
14697
|
}) }, attr.key);
|
|
14580
14698
|
}),
|
|
14581
|
-
showPriceGroup && /* @__PURE__ */
|
|
14699
|
+
showPriceGroup && /* @__PURE__ */ jsx16(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
|
|
14582
14700
|
const isActive = active.priceMin === band.min && active.priceMax === band.max;
|
|
14583
14701
|
const nextMin = isActive ? void 0 : band.min;
|
|
14584
14702
|
const nextMax = isActive ? void 0 : band.max;
|
|
14585
|
-
return /* @__PURE__ */
|
|
14703
|
+
return /* @__PURE__ */ jsx16(
|
|
14586
14704
|
OptionLink,
|
|
14587
14705
|
{
|
|
14588
14706
|
href: hrefs.price(nextMin, nextMax),
|
|
@@ -14593,7 +14711,7 @@ function ShopFilters({
|
|
|
14593
14711
|
i
|
|
14594
14712
|
);
|
|
14595
14713
|
}) }),
|
|
14596
|
-
hasOnSale && /* @__PURE__ */
|
|
14714
|
+
hasOnSale && /* @__PURE__ */ jsx16(
|
|
14597
14715
|
OptionLink,
|
|
14598
14716
|
{
|
|
14599
14717
|
href: hrefs.onSale(!active.onSale),
|
|
@@ -14602,7 +14720,7 @@ function ShopFilters({
|
|
|
14602
14720
|
onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
|
|
14603
14721
|
}
|
|
14604
14722
|
),
|
|
14605
|
-
/* @__PURE__ */
|
|
14723
|
+
/* @__PURE__ */ jsx16(
|
|
14606
14724
|
"a",
|
|
14607
14725
|
{
|
|
14608
14726
|
href: hrefs.clearAll(),
|
|
@@ -14617,9 +14735,129 @@ function ShopFilters({
|
|
|
14617
14735
|
] });
|
|
14618
14736
|
}
|
|
14619
14737
|
|
|
14620
|
-
// src/components/
|
|
14738
|
+
// src/components/course-catalog-filters.tsx
|
|
14621
14739
|
import { cn as cn13 } from "@reblu/site-ui/utils";
|
|
14622
|
-
import { jsx as
|
|
14740
|
+
import { jsx as jsx17, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
14741
|
+
var DEFAULT_COURSE_PRICE_BANDS = [
|
|
14742
|
+
{ max: 5e3 },
|
|
14743
|
+
{ min: 5e3, max: 15e3 },
|
|
14744
|
+
{ min: 15e3, max: 3e4 },
|
|
14745
|
+
{ min: 3e4 }
|
|
14746
|
+
];
|
|
14747
|
+
var DEFAULT_COURSE_CATALOG_FILTERS_LABELS = {
|
|
14748
|
+
instructor: "Docente",
|
|
14749
|
+
allInstructors: "Todos",
|
|
14750
|
+
price: "Precio",
|
|
14751
|
+
free: "Gratis",
|
|
14752
|
+
clearAll: "Quitar filtros",
|
|
14753
|
+
priceUnder: (formattedMax) => `Hasta ${formattedMax}`,
|
|
14754
|
+
priceOver: (formattedMin) => `Desde ${formattedMin}`,
|
|
14755
|
+
priceRange: (formattedMin, formattedMax) => `${formattedMin} \u2013 ${formattedMax}`
|
|
14756
|
+
};
|
|
14757
|
+
function instructorName(instructor) {
|
|
14758
|
+
return [instructor.firstName, instructor.lastName].filter(Boolean).join(" ");
|
|
14759
|
+
}
|
|
14760
|
+
function bandLabel(band, t, currencyCode, locale) {
|
|
14761
|
+
if (band.label) return band.label;
|
|
14762
|
+
const fmt = (cents) => formatPrice(cents, currencyCode, locale);
|
|
14763
|
+
if (band.min !== void 0 && band.max !== void 0)
|
|
14764
|
+
return t.priceRange(fmt(band.min), fmt(band.max));
|
|
14765
|
+
if (band.max !== void 0) return t.priceUnder(fmt(band.max));
|
|
14766
|
+
if (band.min !== void 0) return t.priceOver(fmt(band.min));
|
|
14767
|
+
return "";
|
|
14768
|
+
}
|
|
14769
|
+
function CourseCatalogFilters({
|
|
14770
|
+
instructors,
|
|
14771
|
+
hrefs,
|
|
14772
|
+
active = {},
|
|
14773
|
+
onChange,
|
|
14774
|
+
priceBands = DEFAULT_COURSE_PRICE_BANDS,
|
|
14775
|
+
labels,
|
|
14776
|
+
currencyCode,
|
|
14777
|
+
locale,
|
|
14778
|
+
className
|
|
14779
|
+
}) {
|
|
14780
|
+
const t = { ...DEFAULT_COURSE_CATALOG_FILTERS_LABELS, ...labels };
|
|
14781
|
+
const named = instructors.filter((i) => instructorName(i) !== "");
|
|
14782
|
+
const showInstructors = named.length > 0 || active.instructor !== void 0;
|
|
14783
|
+
const isFree = Boolean(active.free);
|
|
14784
|
+
return /* @__PURE__ */ jsxs16("div", { className: cn13("space-y-6", className), "data-slot": "course-catalog-filters", children: [
|
|
14785
|
+
showInstructors && /* @__PURE__ */ jsxs16(FilterFieldset, { legend: t.instructor, children: [
|
|
14786
|
+
/* @__PURE__ */ jsx17(
|
|
14787
|
+
OptionLink,
|
|
14788
|
+
{
|
|
14789
|
+
href: hrefs.instructor(void 0),
|
|
14790
|
+
active: active.instructor === void 0,
|
|
14791
|
+
label: t.allInstructors,
|
|
14792
|
+
onActivate: onChange ? () => onChange({ instructor: void 0 }) : void 0
|
|
14793
|
+
}
|
|
14794
|
+
),
|
|
14795
|
+
named.map((instructor) => {
|
|
14796
|
+
const isActive = active.instructor === instructor.id;
|
|
14797
|
+
const next2 = isActive ? void 0 : instructor.id;
|
|
14798
|
+
return /* @__PURE__ */ jsx17(
|
|
14799
|
+
OptionLink,
|
|
14800
|
+
{
|
|
14801
|
+
href: hrefs.instructor(next2),
|
|
14802
|
+
active: isActive,
|
|
14803
|
+
label: instructorName(instructor),
|
|
14804
|
+
onActivate: onChange ? () => onChange({ instructor: next2 }) : void 0
|
|
14805
|
+
},
|
|
14806
|
+
instructor.id
|
|
14807
|
+
);
|
|
14808
|
+
})
|
|
14809
|
+
] }),
|
|
14810
|
+
/* @__PURE__ */ jsxs16(FilterFieldset, { legend: t.price, children: [
|
|
14811
|
+
/* @__PURE__ */ jsx17(
|
|
14812
|
+
OptionLink,
|
|
14813
|
+
{
|
|
14814
|
+
href: hrefs.free(!isFree),
|
|
14815
|
+
active: isFree,
|
|
14816
|
+
label: t.free,
|
|
14817
|
+
onActivate: onChange ? () => onChange(
|
|
14818
|
+
isFree ? { free: false } : { free: true, priceMin: void 0, priceMax: void 0 }
|
|
14819
|
+
) : void 0
|
|
14820
|
+
}
|
|
14821
|
+
),
|
|
14822
|
+
priceBands.map((band, i) => {
|
|
14823
|
+
const isActive = !isFree && active.priceMin === band.min && active.priceMax === band.max;
|
|
14824
|
+
const nextMin = isActive ? void 0 : band.min;
|
|
14825
|
+
const nextMax = isActive ? void 0 : band.max;
|
|
14826
|
+
return /* @__PURE__ */ jsx17(
|
|
14827
|
+
OptionLink,
|
|
14828
|
+
{
|
|
14829
|
+
href: hrefs.price(nextMin, nextMax),
|
|
14830
|
+
active: isActive,
|
|
14831
|
+
label: bandLabel(band, t, currencyCode, locale),
|
|
14832
|
+
onActivate: onChange ? () => onChange({ priceMin: nextMin, priceMax: nextMax, free: false }) : void 0
|
|
14833
|
+
},
|
|
14834
|
+
i
|
|
14835
|
+
);
|
|
14836
|
+
})
|
|
14837
|
+
] }),
|
|
14838
|
+
/* @__PURE__ */ jsx17(
|
|
14839
|
+
"a",
|
|
14840
|
+
{
|
|
14841
|
+
href: hrefs.clearAll(),
|
|
14842
|
+
onClick: onChange ? (event) => {
|
|
14843
|
+
event.preventDefault();
|
|
14844
|
+
onChange({
|
|
14845
|
+
instructor: void 0,
|
|
14846
|
+
priceMin: void 0,
|
|
14847
|
+
priceMax: void 0,
|
|
14848
|
+
free: false
|
|
14849
|
+
});
|
|
14850
|
+
} : void 0,
|
|
14851
|
+
className: "text-sm font-medium text-muted-foreground underline-offset-4 hover:text-foreground hover:underline",
|
|
14852
|
+
children: t.clearAll
|
|
14853
|
+
}
|
|
14854
|
+
)
|
|
14855
|
+
] });
|
|
14856
|
+
}
|
|
14857
|
+
|
|
14858
|
+
// src/components/cart-line-list.tsx
|
|
14859
|
+
import { cn as cn14 } from "@reblu/site-ui/utils";
|
|
14860
|
+
import { jsx as jsx18, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
14623
14861
|
var DEFAULT_LABELS2 = {
|
|
14624
14862
|
quantityLabel: "Cantidad",
|
|
14625
14863
|
decrease: "Reducir cantidad",
|
|
@@ -14645,9 +14883,9 @@ function CartLineList({
|
|
|
14645
14883
|
}) {
|
|
14646
14884
|
const t = { ...DEFAULT_LABELS2, ...labels };
|
|
14647
14885
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
14648
|
-
return /* @__PURE__ */
|
|
14649
|
-
/* @__PURE__ */
|
|
14650
|
-
noticeContent != null && noticeContent !== false && /* @__PURE__ */
|
|
14886
|
+
return /* @__PURE__ */ jsxs17("div", { className: cn14("space-y-4", className), "data-slot": "cart-line-list", children: [
|
|
14887
|
+
/* @__PURE__ */ jsx18("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
|
|
14888
|
+
noticeContent != null && noticeContent !== false && /* @__PURE__ */ jsx18(
|
|
14651
14889
|
"div",
|
|
14652
14890
|
{
|
|
14653
14891
|
role: "status",
|
|
@@ -14656,33 +14894,33 @@ function CartLineList({
|
|
|
14656
14894
|
children: noticeContent
|
|
14657
14895
|
}
|
|
14658
14896
|
),
|
|
14659
|
-
/* @__PURE__ */
|
|
14897
|
+
/* @__PURE__ */ jsx18("ul", { className: "space-y-4", children: items.map((item) => {
|
|
14660
14898
|
const maxQty = item.maxStock ?? Infinity;
|
|
14661
14899
|
const atMax = item.quantity >= maxQty;
|
|
14662
14900
|
const atMin = item.quantity <= 1;
|
|
14663
14901
|
const message = lineMessage?.(item);
|
|
14664
|
-
return /* @__PURE__ */
|
|
14902
|
+
return /* @__PURE__ */ jsxs17(
|
|
14665
14903
|
"li",
|
|
14666
14904
|
{
|
|
14667
14905
|
className: "flex gap-4 rounded-xl border border-border bg-card p-4",
|
|
14668
14906
|
children: [
|
|
14669
|
-
/* @__PURE__ */
|
|
14670
|
-
/* @__PURE__ */
|
|
14671
|
-
/* @__PURE__ */
|
|
14672
|
-
item.variantName && /* @__PURE__ */
|
|
14673
|
-
/* @__PURE__ */
|
|
14907
|
+
/* @__PURE__ */ jsx18("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ jsx18("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
|
|
14908
|
+
/* @__PURE__ */ jsxs17("div", { className: "min-w-0 flex-1", children: [
|
|
14909
|
+
/* @__PURE__ */ jsx18("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
|
|
14910
|
+
item.variantName && /* @__PURE__ */ jsx18("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
|
|
14911
|
+
/* @__PURE__ */ jsxs17("p", { className: "mt-1 text-sm text-muted-foreground", children: [
|
|
14674
14912
|
formatPrice(item.unitPrice, currencyCode, locale),
|
|
14675
14913
|
" ",
|
|
14676
14914
|
t.unitPriceSuffix
|
|
14677
14915
|
] }),
|
|
14678
|
-
/* @__PURE__ */
|
|
14916
|
+
/* @__PURE__ */ jsxs17(
|
|
14679
14917
|
"div",
|
|
14680
14918
|
{
|
|
14681
14919
|
role: "group",
|
|
14682
14920
|
"aria-label": t.quantityLabel,
|
|
14683
14921
|
className: "mt-3 flex items-center gap-3",
|
|
14684
14922
|
children: [
|
|
14685
|
-
/* @__PURE__ */
|
|
14923
|
+
/* @__PURE__ */ jsx18(
|
|
14686
14924
|
"button",
|
|
14687
14925
|
{
|
|
14688
14926
|
type: "button",
|
|
@@ -14693,8 +14931,8 @@ function CartLineList({
|
|
|
14693
14931
|
children: "\u2212"
|
|
14694
14932
|
}
|
|
14695
14933
|
),
|
|
14696
|
-
/* @__PURE__ */
|
|
14697
|
-
/* @__PURE__ */
|
|
14934
|
+
/* @__PURE__ */ jsx18("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
|
|
14935
|
+
/* @__PURE__ */ jsx18(
|
|
14698
14936
|
"button",
|
|
14699
14937
|
{
|
|
14700
14938
|
type: "button",
|
|
@@ -14705,7 +14943,7 @@ function CartLineList({
|
|
|
14705
14943
|
children: "+"
|
|
14706
14944
|
}
|
|
14707
14945
|
),
|
|
14708
|
-
onRemove && /* @__PURE__ */
|
|
14946
|
+
onRemove && /* @__PURE__ */ jsx18(
|
|
14709
14947
|
"button",
|
|
14710
14948
|
{
|
|
14711
14949
|
type: "button",
|
|
@@ -14718,7 +14956,7 @@ function CartLineList({
|
|
|
14718
14956
|
]
|
|
14719
14957
|
}
|
|
14720
14958
|
),
|
|
14721
|
-
message != null && message !== false && /* @__PURE__ */
|
|
14959
|
+
message != null && message !== false && /* @__PURE__ */ jsx18(
|
|
14722
14960
|
"p",
|
|
14723
14961
|
{
|
|
14724
14962
|
className: "mt-2 text-sm text-destructive",
|
|
@@ -14727,7 +14965,7 @@ function CartLineList({
|
|
|
14727
14965
|
}
|
|
14728
14966
|
)
|
|
14729
14967
|
] }),
|
|
14730
|
-
/* @__PURE__ */
|
|
14968
|
+
/* @__PURE__ */ jsx18("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ jsx18("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
|
|
14731
14969
|
]
|
|
14732
14970
|
},
|
|
14733
14971
|
lineKey(item.productId, item.variantId)
|
|
@@ -14737,8 +14975,8 @@ function CartLineList({
|
|
|
14737
14975
|
}
|
|
14738
14976
|
|
|
14739
14977
|
// src/components/cart-summary.tsx
|
|
14740
|
-
import { cn as
|
|
14741
|
-
import { jsx as
|
|
14978
|
+
import { cn as cn15 } from "@reblu/site-ui/utils";
|
|
14979
|
+
import { jsx as jsx19, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
14742
14980
|
var DEFAULT_LABELS3 = {
|
|
14743
14981
|
subtotal: "Subtotal",
|
|
14744
14982
|
discountPrefix: "Descuento",
|
|
@@ -14768,37 +15006,37 @@ function CartSummary({
|
|
|
14768
15006
|
const hasDiscount = Boolean(discountAmount && discountAmount > 0);
|
|
14769
15007
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
14770
15008
|
const hasNotice = noticeContent != null && noticeContent !== false;
|
|
14771
|
-
const breakdown = /* @__PURE__ */
|
|
15009
|
+
const breakdown = /* @__PURE__ */ jsxs18(
|
|
14772
15010
|
"dl",
|
|
14773
15011
|
{
|
|
14774
|
-
className:
|
|
15012
|
+
className: cn15("space-y-2 text-sm", !hasNotice && className),
|
|
14775
15013
|
"data-slot": "cart-summary",
|
|
14776
15014
|
children: [
|
|
14777
|
-
/* @__PURE__ */
|
|
14778
|
-
/* @__PURE__ */
|
|
14779
|
-
/* @__PURE__ */
|
|
15015
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
15016
|
+
/* @__PURE__ */ jsx19("dt", { children: t.subtotal }),
|
|
15017
|
+
/* @__PURE__ */ jsx19("dd", { children: formatPrice(subtotal, currencyCode, locale) })
|
|
14780
15018
|
] }),
|
|
14781
|
-
hasDiscount && /* @__PURE__ */
|
|
14782
|
-
/* @__PURE__ */
|
|
14783
|
-
/* @__PURE__ */
|
|
15019
|
+
hasDiscount && /* @__PURE__ */ jsxs18("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
|
|
15020
|
+
/* @__PURE__ */ jsx19("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
|
|
15021
|
+
/* @__PURE__ */ jsxs18("dd", { children: [
|
|
14784
15022
|
"-",
|
|
14785
15023
|
formatPrice(discountAmount, currencyCode, locale)
|
|
14786
15024
|
] })
|
|
14787
15025
|
] }),
|
|
14788
|
-
shippingEnabled && /* @__PURE__ */
|
|
14789
|
-
/* @__PURE__ */
|
|
14790
|
-
/* @__PURE__ */
|
|
15026
|
+
shippingEnabled && /* @__PURE__ */ jsxs18("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
15027
|
+
/* @__PURE__ */ jsx19("dt", { children: t.shipping }),
|
|
15028
|
+
/* @__PURE__ */ jsx19("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
|
|
14791
15029
|
] }),
|
|
14792
|
-
/* @__PURE__ */
|
|
14793
|
-
/* @__PURE__ */
|
|
14794
|
-
/* @__PURE__ */
|
|
15030
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
|
|
15031
|
+
/* @__PURE__ */ jsx19("dt", { children: t.total }),
|
|
15032
|
+
/* @__PURE__ */ jsx19("dd", { children: formatPrice(total, currencyCode, locale) })
|
|
14795
15033
|
] })
|
|
14796
15034
|
]
|
|
14797
15035
|
}
|
|
14798
15036
|
);
|
|
14799
15037
|
if (!hasNotice) return breakdown;
|
|
14800
|
-
return /* @__PURE__ */
|
|
14801
|
-
/* @__PURE__ */
|
|
15038
|
+
return /* @__PURE__ */ jsxs18("div", { className: cn15("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
|
|
15039
|
+
/* @__PURE__ */ jsx19(
|
|
14802
15040
|
"div",
|
|
14803
15041
|
{
|
|
14804
15042
|
role: "status",
|
|
@@ -14812,8 +15050,8 @@ function CartSummary({
|
|
|
14812
15050
|
}
|
|
14813
15051
|
|
|
14814
15052
|
// src/components/cart-adjustments-notice.tsx
|
|
14815
|
-
import { cn as
|
|
14816
|
-
import { jsx as
|
|
15053
|
+
import { cn as cn16 } from "@reblu/site-ui/utils";
|
|
15054
|
+
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
14817
15055
|
var DEFAULT_LABELS4 = {
|
|
14818
15056
|
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.`,
|
|
14819
15057
|
quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
|
|
@@ -14847,20 +15085,20 @@ function CartAdjustmentsNotice({
|
|
|
14847
15085
|
);
|
|
14848
15086
|
}
|
|
14849
15087
|
if (messages.length === 0) return null;
|
|
14850
|
-
return /* @__PURE__ */
|
|
15088
|
+
return /* @__PURE__ */ jsx20(
|
|
14851
15089
|
"div",
|
|
14852
15090
|
{
|
|
14853
15091
|
role: "status",
|
|
14854
|
-
className:
|
|
15092
|
+
className: cn16("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
|
|
14855
15093
|
"data-slot": "cart-adjustments-notice",
|
|
14856
|
-
children: messages.length === 1 ? /* @__PURE__ */
|
|
15094
|
+
children: messages.length === 1 ? /* @__PURE__ */ jsx20("p", { children: messages[0] }) : /* @__PURE__ */ jsx20("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ jsx20("li", { children: message }, index)) })
|
|
14857
15095
|
}
|
|
14858
15096
|
);
|
|
14859
15097
|
}
|
|
14860
15098
|
|
|
14861
15099
|
// src/components/added-to-cart-toast.tsx
|
|
14862
|
-
import { cn as
|
|
14863
|
-
import { jsx as
|
|
15100
|
+
import { cn as cn17 } from "@reblu/site-ui/utils";
|
|
15101
|
+
import { jsx as jsx21, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
14864
15102
|
var DEFAULT_LABELS5 = {
|
|
14865
15103
|
success: "A\xF1adido al carrito",
|
|
14866
15104
|
error: "No se pudo a\xF1adir al carrito",
|
|
@@ -14880,12 +15118,12 @@ function AddedToCartToast({
|
|
|
14880
15118
|
const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
|
|
14881
15119
|
const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
|
|
14882
15120
|
const variant = status === "success" ? "success" : "error";
|
|
14883
|
-
return /* @__PURE__ */
|
|
15121
|
+
return /* @__PURE__ */ jsxs19(
|
|
14884
15122
|
"div",
|
|
14885
15123
|
{
|
|
14886
15124
|
"data-slot": "added-to-cart-toast",
|
|
14887
15125
|
"data-variant": variant,
|
|
14888
|
-
className:
|
|
15126
|
+
className: cn17(
|
|
14889
15127
|
"flex items-center gap-3 rounded-xl border border-border bg-card p-3 text-sm shadow-lg",
|
|
14890
15128
|
variant === "success" && "border-green-600/30 dark:border-green-400/30",
|
|
14891
15129
|
variant === "error" && "border-destructive/30",
|
|
@@ -14893,20 +15131,20 @@ function AddedToCartToast({
|
|
|
14893
15131
|
),
|
|
14894
15132
|
children: [
|
|
14895
15133
|
hasThumbnail && // eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
|
|
14896
|
-
/* @__PURE__ */
|
|
14897
|
-
/* @__PURE__ */
|
|
14898
|
-
/* @__PURE__ */
|
|
14899
|
-
/* @__PURE__ */
|
|
15134
|
+
/* @__PURE__ */ jsx21("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
|
|
15135
|
+
/* @__PURE__ */ jsxs19("div", { className: "min-w-0 flex-1", children: [
|
|
15136
|
+
/* @__PURE__ */ jsx21("p", { className: "truncate font-semibold text-foreground", children: productName }),
|
|
15137
|
+
/* @__PURE__ */ jsx21("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
|
|
14900
15138
|
] }),
|
|
14901
|
-
/* @__PURE__ */
|
|
15139
|
+
/* @__PURE__ */ jsx21("div", { className: "flex-shrink-0", children: /* @__PURE__ */ jsx21("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
|
|
14902
15140
|
]
|
|
14903
15141
|
}
|
|
14904
15142
|
);
|
|
14905
15143
|
}
|
|
14906
15144
|
|
|
14907
15145
|
// src/components/checkout-login-prompt.tsx
|
|
14908
|
-
import { cn as
|
|
14909
|
-
import { Fragment as Fragment3, jsx as
|
|
15146
|
+
import { cn as cn18 } from "@reblu/site-ui/utils";
|
|
15147
|
+
import { Fragment as Fragment3, jsx as jsx22, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
14910
15148
|
var DEFAULT_LABELS6 = {
|
|
14911
15149
|
title: "Identificaci\xF3n",
|
|
14912
15150
|
description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
|
|
@@ -14933,26 +15171,26 @@ function CheckoutLoginPrompt({
|
|
|
14933
15171
|
if (!open) return null;
|
|
14934
15172
|
const t = { ...DEFAULT_LABELS6, ...labels };
|
|
14935
15173
|
const isValidEmail = EMAIL_PATTERN.test(email.trim());
|
|
14936
|
-
return /* @__PURE__ */
|
|
14937
|
-
/* @__PURE__ */
|
|
14938
|
-
/* @__PURE__ */
|
|
15174
|
+
return /* @__PURE__ */ jsxs20(Fragment3, { children: [
|
|
15175
|
+
/* @__PURE__ */ jsx22("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
|
|
15176
|
+
/* @__PURE__ */ jsxs20(
|
|
14939
15177
|
"div",
|
|
14940
15178
|
{
|
|
14941
15179
|
role: "dialog",
|
|
14942
15180
|
"aria-modal": "true",
|
|
14943
15181
|
"aria-labelledby": "checkout-login-prompt-title",
|
|
14944
15182
|
"data-slot": "checkout-login-prompt",
|
|
14945
|
-
className:
|
|
15183
|
+
className: cn18(
|
|
14946
15184
|
"fixed left-1/2 top-1/2 z-50 w-full max-w-md -translate-x-1/2 -translate-y-1/2 space-y-5 rounded-2xl border border-border bg-background p-6 shadow-2xl",
|
|
14947
15185
|
className
|
|
14948
15186
|
),
|
|
14949
15187
|
children: [
|
|
14950
|
-
/* @__PURE__ */
|
|
14951
|
-
/* @__PURE__ */
|
|
14952
|
-
/* @__PURE__ */
|
|
14953
|
-
/* @__PURE__ */
|
|
15188
|
+
/* @__PURE__ */ jsxs20("div", { className: "flex items-start justify-between gap-3", children: [
|
|
15189
|
+
/* @__PURE__ */ jsxs20("div", { children: [
|
|
15190
|
+
/* @__PURE__ */ jsx22("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
|
|
15191
|
+
/* @__PURE__ */ jsx22("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
|
|
14954
15192
|
] }),
|
|
14955
|
-
/* @__PURE__ */
|
|
15193
|
+
/* @__PURE__ */ jsx22(
|
|
14956
15194
|
"button",
|
|
14957
15195
|
{
|
|
14958
15196
|
type: "button",
|
|
@@ -14963,9 +15201,9 @@ function CheckoutLoginPrompt({
|
|
|
14963
15201
|
}
|
|
14964
15202
|
)
|
|
14965
15203
|
] }),
|
|
14966
|
-
/* @__PURE__ */
|
|
14967
|
-
/* @__PURE__ */
|
|
14968
|
-
/* @__PURE__ */
|
|
15204
|
+
/* @__PURE__ */ jsxs20("div", { className: "space-y-2", children: [
|
|
15205
|
+
/* @__PURE__ */ jsx22("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
15206
|
+
/* @__PURE__ */ jsx22(
|
|
14969
15207
|
"input",
|
|
14970
15208
|
{
|
|
14971
15209
|
id: "checkout-login-prompt-email",
|
|
@@ -14974,29 +15212,29 @@ function CheckoutLoginPrompt({
|
|
|
14974
15212
|
value: email,
|
|
14975
15213
|
onChange: (e) => onEmailChange(e.target.value),
|
|
14976
15214
|
placeholder: t.emailPlaceholder,
|
|
14977
|
-
className:
|
|
15215
|
+
className: cn18(
|
|
14978
15216
|
"w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
|
|
14979
15217
|
error ? "border-destructive" : "border-border focus:border-primary"
|
|
14980
15218
|
)
|
|
14981
15219
|
}
|
|
14982
15220
|
),
|
|
14983
|
-
error && /* @__PURE__ */
|
|
15221
|
+
error && /* @__PURE__ */ jsx22("p", { className: "text-xs text-destructive", children: error })
|
|
14984
15222
|
] }),
|
|
14985
|
-
/* @__PURE__ */
|
|
14986
|
-
/* @__PURE__ */
|
|
15223
|
+
/* @__PURE__ */ jsxs20("div", { className: "space-y-2", children: [
|
|
15224
|
+
/* @__PURE__ */ jsx22(
|
|
14987
15225
|
"button",
|
|
14988
15226
|
{
|
|
14989
15227
|
type: "button",
|
|
14990
15228
|
onClick: onSubmitEmail,
|
|
14991
15229
|
disabled: checking || !isValidEmail,
|
|
14992
|
-
className:
|
|
15230
|
+
className: cn18(
|
|
14993
15231
|
"flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-2.5 text-sm font-semibold transition-all",
|
|
14994
15232
|
checking || !isValidEmail ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
|
|
14995
15233
|
),
|
|
14996
15234
|
children: checking ? t.checking : t.continueWithEmail
|
|
14997
15235
|
}
|
|
14998
15236
|
),
|
|
14999
|
-
/* @__PURE__ */
|
|
15237
|
+
/* @__PURE__ */ jsx22(
|
|
15000
15238
|
"button",
|
|
15001
15239
|
{
|
|
15002
15240
|
type: "button",
|
|
@@ -15013,9 +15251,9 @@ function CheckoutLoginPrompt({
|
|
|
15013
15251
|
}
|
|
15014
15252
|
|
|
15015
15253
|
// src/components/checkout-form.tsx
|
|
15016
|
-
import { cn as
|
|
15254
|
+
import { cn as cn19 } from "@reblu/site-ui/utils";
|
|
15017
15255
|
import { PhoneInput } from "@reblu/site-ui/phone-input";
|
|
15018
|
-
import { Fragment as Fragment4, jsx as
|
|
15256
|
+
import { Fragment as Fragment4, jsx as jsx23, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
15019
15257
|
var DEFAULT_LABELS7 = {
|
|
15020
15258
|
contactTitle: "Datos de contacto",
|
|
15021
15259
|
nameLabel: "Nombre completo",
|
|
@@ -15071,22 +15309,22 @@ function CheckoutForm({
|
|
|
15071
15309
|
event.preventDefault();
|
|
15072
15310
|
if (discountCode.trim() && !discountApplying) onApplyDiscount();
|
|
15073
15311
|
}
|
|
15074
|
-
return /* @__PURE__ */
|
|
15312
|
+
return /* @__PURE__ */ jsxs21(Fragment4, { children: [
|
|
15075
15313
|
loginPrompt,
|
|
15076
|
-
/* @__PURE__ */
|
|
15314
|
+
/* @__PURE__ */ jsxs21(
|
|
15077
15315
|
"form",
|
|
15078
15316
|
{
|
|
15079
15317
|
"data-testid": "checkout-form",
|
|
15080
15318
|
onSubmit,
|
|
15081
|
-
className:
|
|
15319
|
+
className: cn19("space-y-8", className),
|
|
15082
15320
|
"data-slot": "checkout-form",
|
|
15083
15321
|
children: [
|
|
15084
|
-
/* @__PURE__ */
|
|
15085
|
-
/* @__PURE__ */
|
|
15086
|
-
/* @__PURE__ */
|
|
15087
|
-
/* @__PURE__ */
|
|
15088
|
-
/* @__PURE__ */
|
|
15089
|
-
/* @__PURE__ */
|
|
15322
|
+
/* @__PURE__ */ jsxs21("section", { className: "space-y-4", children: [
|
|
15323
|
+
/* @__PURE__ */ jsx23("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
|
|
15324
|
+
/* @__PURE__ */ jsxs21("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
15325
|
+
/* @__PURE__ */ jsxs21("div", { className: "space-y-1", children: [
|
|
15326
|
+
/* @__PURE__ */ jsx23("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
|
|
15327
|
+
/* @__PURE__ */ jsx23(
|
|
15090
15328
|
"input",
|
|
15091
15329
|
{
|
|
15092
15330
|
id: "checkout-form-name",
|
|
@@ -15095,17 +15333,17 @@ function CheckoutForm({
|
|
|
15095
15333
|
value: contact.name,
|
|
15096
15334
|
onChange: (e) => patchContact({ name: e.target.value }),
|
|
15097
15335
|
placeholder: t.namePlaceholder,
|
|
15098
|
-
className:
|
|
15336
|
+
className: cn19(
|
|
15099
15337
|
"w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
|
|
15100
15338
|
contactErrors?.name ? "border-destructive" : "border-border focus:border-primary"
|
|
15101
15339
|
)
|
|
15102
15340
|
}
|
|
15103
15341
|
),
|
|
15104
|
-
contactErrors?.name && /* @__PURE__ */
|
|
15342
|
+
contactErrors?.name && /* @__PURE__ */ jsx23("p", { className: "text-xs text-destructive", children: contactErrors.name })
|
|
15105
15343
|
] }),
|
|
15106
|
-
/* @__PURE__ */
|
|
15107
|
-
/* @__PURE__ */
|
|
15108
|
-
/* @__PURE__ */
|
|
15344
|
+
/* @__PURE__ */ jsxs21("div", { className: "space-y-1", children: [
|
|
15345
|
+
/* @__PURE__ */ jsx23("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
15346
|
+
/* @__PURE__ */ jsx23(
|
|
15109
15347
|
"input",
|
|
15110
15348
|
{
|
|
15111
15349
|
id: "checkout-form-email",
|
|
@@ -15114,15 +15352,15 @@ function CheckoutForm({
|
|
|
15114
15352
|
value: contact.email,
|
|
15115
15353
|
onChange: (e) => patchContact({ email: e.target.value }),
|
|
15116
15354
|
placeholder: t.emailPlaceholder,
|
|
15117
|
-
className:
|
|
15355
|
+
className: cn19(
|
|
15118
15356
|
"w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
|
|
15119
15357
|
contactErrors?.email ? "border-destructive" : "border-border focus:border-primary"
|
|
15120
15358
|
)
|
|
15121
15359
|
}
|
|
15122
15360
|
),
|
|
15123
|
-
contactErrors?.email && /* @__PURE__ */
|
|
15361
|
+
contactErrors?.email && /* @__PURE__ */ jsx23("p", { className: "text-xs text-destructive", children: contactErrors.email })
|
|
15124
15362
|
] }),
|
|
15125
|
-
/* @__PURE__ */
|
|
15363
|
+
/* @__PURE__ */ jsx23("div", { className: "space-y-1", children: /* @__PURE__ */ jsx23(
|
|
15126
15364
|
PhoneInput,
|
|
15127
15365
|
{
|
|
15128
15366
|
id: "checkout-form-phone",
|
|
@@ -15136,26 +15374,26 @@ function CheckoutForm({
|
|
|
15136
15374
|
] })
|
|
15137
15375
|
] }),
|
|
15138
15376
|
children2,
|
|
15139
|
-
generalError ? /* @__PURE__ */
|
|
15140
|
-
/* @__PURE__ */
|
|
15141
|
-
/* @__PURE__ */
|
|
15142
|
-
autoDiscount ? /* @__PURE__ */
|
|
15377
|
+
generalError ? /* @__PURE__ */ jsx23("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
|
|
15378
|
+
/* @__PURE__ */ jsxs21("section", { className: "space-y-3", children: [
|
|
15379
|
+
/* @__PURE__ */ jsx23("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
|
|
15380
|
+
autoDiscount ? /* @__PURE__ */ jsxs21(
|
|
15143
15381
|
"div",
|
|
15144
15382
|
{
|
|
15145
15383
|
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",
|
|
15146
15384
|
"data-slot": "checkout-staff-discount",
|
|
15147
15385
|
children: [
|
|
15148
|
-
/* @__PURE__ */
|
|
15149
|
-
/* @__PURE__ */
|
|
15386
|
+
/* @__PURE__ */ jsx23("span", { className: "font-semibold", children: t.staffDiscountApplied }),
|
|
15387
|
+
/* @__PURE__ */ jsx23("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
|
|
15150
15388
|
]
|
|
15151
15389
|
}
|
|
15152
15390
|
) : null,
|
|
15153
|
-
appliedDiscount && !autoDiscount ? /* @__PURE__ */
|
|
15154
|
-
/* @__PURE__ */
|
|
15155
|
-
/* @__PURE__ */
|
|
15156
|
-
/* @__PURE__ */
|
|
15391
|
+
appliedDiscount && !autoDiscount ? /* @__PURE__ */ jsxs21("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: [
|
|
15392
|
+
/* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
|
|
15393
|
+
/* @__PURE__ */ jsx23("span", { className: "font-semibold", children: appliedDiscount.code }),
|
|
15394
|
+
/* @__PURE__ */ jsx23("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
|
|
15157
15395
|
] }),
|
|
15158
|
-
/* @__PURE__ */
|
|
15396
|
+
/* @__PURE__ */ jsx23(
|
|
15159
15397
|
"button",
|
|
15160
15398
|
{
|
|
15161
15399
|
type: "button",
|
|
@@ -15165,9 +15403,9 @@ function CheckoutForm({
|
|
|
15165
15403
|
children: t.removeDiscount
|
|
15166
15404
|
}
|
|
15167
15405
|
)
|
|
15168
|
-
] }) : /* @__PURE__ */
|
|
15169
|
-
/* @__PURE__ */
|
|
15170
|
-
/* @__PURE__ */
|
|
15406
|
+
] }) : /* @__PURE__ */ jsxs21("div", { className: "flex gap-2", children: [
|
|
15407
|
+
/* @__PURE__ */ jsx23("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
|
|
15408
|
+
/* @__PURE__ */ jsx23(
|
|
15171
15409
|
"input",
|
|
15172
15410
|
{
|
|
15173
15411
|
id: "checkout-form-discount-code",
|
|
@@ -15179,7 +15417,7 @@ function CheckoutForm({
|
|
|
15179
15417
|
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"
|
|
15180
15418
|
}
|
|
15181
15419
|
),
|
|
15182
|
-
/* @__PURE__ */
|
|
15420
|
+
/* @__PURE__ */ jsx23(
|
|
15183
15421
|
"button",
|
|
15184
15422
|
{
|
|
15185
15423
|
type: "button",
|
|
@@ -15190,14 +15428,14 @@ function CheckoutForm({
|
|
|
15190
15428
|
}
|
|
15191
15429
|
)
|
|
15192
15430
|
] }),
|
|
15193
|
-
discountError && /* @__PURE__ */
|
|
15431
|
+
discountError && /* @__PURE__ */ jsx23("p", { className: "text-xs text-destructive", children: discountError })
|
|
15194
15432
|
] }),
|
|
15195
|
-
/* @__PURE__ */
|
|
15433
|
+
/* @__PURE__ */ jsx23(
|
|
15196
15434
|
"button",
|
|
15197
15435
|
{
|
|
15198
15436
|
type: "submit",
|
|
15199
15437
|
disabled: submitting || submitDisabled,
|
|
15200
|
-
className:
|
|
15438
|
+
className: cn19(
|
|
15201
15439
|
"flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-3 font-semibold transition-all",
|
|
15202
15440
|
submitting || submitDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
|
|
15203
15441
|
),
|
|
@@ -15211,11 +15449,11 @@ function CheckoutForm({
|
|
|
15211
15449
|
}
|
|
15212
15450
|
|
|
15213
15451
|
// src/components/order-confirmation.tsx
|
|
15214
|
-
import { cn as
|
|
15452
|
+
import { cn as cn21 } from "@reblu/site-ui/utils";
|
|
15215
15453
|
|
|
15216
15454
|
// src/components/order-invoice-link.tsx
|
|
15217
|
-
import { cn as
|
|
15218
|
-
import { jsx as
|
|
15455
|
+
import { cn as cn20 } from "@reblu/site-ui/utils";
|
|
15456
|
+
import { jsx as jsx24, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
15219
15457
|
var DEFAULT_LABELS8 = {
|
|
15220
15458
|
linkLabel: "Descargar la factura {number}",
|
|
15221
15459
|
signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
|
|
@@ -15223,8 +15461,8 @@ var DEFAULT_LABELS8 = {
|
|
|
15223
15461
|
function OrderInvoiceLink({ invoice, labels, className }) {
|
|
15224
15462
|
if (!invoice) return null;
|
|
15225
15463
|
const t = { ...DEFAULT_LABELS8, ...labels };
|
|
15226
|
-
return /* @__PURE__ */
|
|
15227
|
-
/* @__PURE__ */
|
|
15464
|
+
return /* @__PURE__ */ jsxs22("div", { className: cn20("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
|
|
15465
|
+
/* @__PURE__ */ jsx24(
|
|
15228
15466
|
"a",
|
|
15229
15467
|
{
|
|
15230
15468
|
href: invoice.url,
|
|
@@ -15232,12 +15470,12 @@ function OrderInvoiceLink({ invoice, labels, className }) {
|
|
|
15232
15470
|
children: t.linkLabel.replace("{number}", invoice.number)
|
|
15233
15471
|
}
|
|
15234
15472
|
),
|
|
15235
|
-
/* @__PURE__ */
|
|
15473
|
+
/* @__PURE__ */ jsx24("p", { className: "text-muted-foreground", children: t.signInHint })
|
|
15236
15474
|
] });
|
|
15237
15475
|
}
|
|
15238
15476
|
|
|
15239
15477
|
// src/components/order-confirmation.tsx
|
|
15240
|
-
import { jsx as
|
|
15478
|
+
import { jsx as jsx25, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
15241
15479
|
var DEFAULT_LABELS9 = {
|
|
15242
15480
|
pollingTitle: "Confirmando tu pedido\u2026",
|
|
15243
15481
|
pollingDescription: "Estamos procesando el pago, un momento\u2026",
|
|
@@ -15303,43 +15541,43 @@ function OrderConfirmation({
|
|
|
15303
15541
|
const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
|
|
15304
15542
|
const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
|
|
15305
15543
|
const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
|
|
15306
|
-
return /* @__PURE__ */
|
|
15307
|
-
/* @__PURE__ */
|
|
15308
|
-
/* @__PURE__ */
|
|
15309
|
-
showFullOrderSummary && order && /* @__PURE__ */
|
|
15310
|
-
/* @__PURE__ */
|
|
15311
|
-
/* @__PURE__ */
|
|
15312
|
-
/* @__PURE__ */
|
|
15544
|
+
return /* @__PURE__ */ jsxs23("div", { className: cn21("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
|
|
15545
|
+
/* @__PURE__ */ jsx25("h1", { className: "text-3xl font-bold", children: title }),
|
|
15546
|
+
/* @__PURE__ */ jsx25("p", { className: "text-lg text-muted-foreground", children: description }),
|
|
15547
|
+
showFullOrderSummary && order && /* @__PURE__ */ jsxs23("div", { className: "space-y-6", children: [
|
|
15548
|
+
/* @__PURE__ */ jsxs23("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
15549
|
+
/* @__PURE__ */ jsx25("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
|
|
15550
|
+
/* @__PURE__ */ jsx25("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
15313
15551
|
] }),
|
|
15314
|
-
/* @__PURE__ */
|
|
15315
|
-
order.items.map((item, idx) => /* @__PURE__ */
|
|
15552
|
+
/* @__PURE__ */ jsxs23("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
|
|
15553
|
+
order.items.map((item, idx) => /* @__PURE__ */ jsxs23(
|
|
15316
15554
|
"div",
|
|
15317
15555
|
{
|
|
15318
15556
|
className: "flex justify-between gap-4 text-sm",
|
|
15319
15557
|
children: [
|
|
15320
|
-
/* @__PURE__ */
|
|
15558
|
+
/* @__PURE__ */ jsxs23("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
|
|
15321
15559
|
item.product.name,
|
|
15322
15560
|
item.variant ? ` (${item.variant.name})` : "",
|
|
15323
15561
|
" x",
|
|
15324
15562
|
item.quantity
|
|
15325
15563
|
] }),
|
|
15326
|
-
/* @__PURE__ */
|
|
15564
|
+
/* @__PURE__ */ jsx25("span", { children: formatPrice(item.total, currencyCode, locale) })
|
|
15327
15565
|
]
|
|
15328
15566
|
},
|
|
15329
15567
|
idx
|
|
15330
15568
|
)),
|
|
15331
|
-
/* @__PURE__ */
|
|
15332
|
-
/* @__PURE__ */
|
|
15333
|
-
/* @__PURE__ */
|
|
15569
|
+
/* @__PURE__ */ jsx25("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ jsxs23("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
|
|
15570
|
+
/* @__PURE__ */ jsx25("span", { children: t.totalLabel }),
|
|
15571
|
+
/* @__PURE__ */ jsx25("span", { children: formatPrice(order.total, currencyCode, locale) })
|
|
15334
15572
|
] }) })
|
|
15335
15573
|
] }),
|
|
15336
|
-
/* @__PURE__ */
|
|
15574
|
+
/* @__PURE__ */ jsxs23("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
|
|
15337
15575
|
t.confirmationEmailPrefix,
|
|
15338
15576
|
" ",
|
|
15339
|
-
/* @__PURE__ */
|
|
15577
|
+
/* @__PURE__ */ jsx25("span", { className: "font-medium text-foreground", children: order.customerEmail }),
|
|
15340
15578
|
"."
|
|
15341
15579
|
] }),
|
|
15342
|
-
/* @__PURE__ */
|
|
15580
|
+
/* @__PURE__ */ jsx25(
|
|
15343
15581
|
OrderInvoiceLink,
|
|
15344
15582
|
{
|
|
15345
15583
|
invoice: order.invoice,
|
|
@@ -15347,11 +15585,11 @@ function OrderConfirmation({
|
|
|
15347
15585
|
}
|
|
15348
15586
|
)
|
|
15349
15587
|
] }),
|
|
15350
|
-
showOrderReference && order && /* @__PURE__ */
|
|
15351
|
-
/* @__PURE__ */
|
|
15352
|
-
/* @__PURE__ */
|
|
15588
|
+
showOrderReference && order && /* @__PURE__ */ jsxs23("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
15589
|
+
/* @__PURE__ */ jsx25("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
|
|
15590
|
+
/* @__PURE__ */ jsx25("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
15353
15591
|
] }),
|
|
15354
|
-
status === "failed" && cartHref && /* @__PURE__ */
|
|
15592
|
+
status === "failed" && cartHref && /* @__PURE__ */ jsx25(
|
|
15355
15593
|
"a",
|
|
15356
15594
|
{
|
|
15357
15595
|
href: cartHref,
|
|
@@ -15359,7 +15597,7 @@ function OrderConfirmation({
|
|
|
15359
15597
|
children: t.backToCartLabel
|
|
15360
15598
|
}
|
|
15361
15599
|
),
|
|
15362
|
-
showRecheck && /* @__PURE__ */
|
|
15600
|
+
showRecheck && /* @__PURE__ */ jsx25(
|
|
15363
15601
|
"button",
|
|
15364
15602
|
{
|
|
15365
15603
|
type: "button",
|
|
@@ -15368,16 +15606,16 @@ function OrderConfirmation({
|
|
|
15368
15606
|
children: t.recheckLabel
|
|
15369
15607
|
}
|
|
15370
15608
|
),
|
|
15371
|
-
showSessionReference && /* @__PURE__ */
|
|
15372
|
-
/* @__PURE__ */
|
|
15373
|
-
/* @__PURE__ */
|
|
15609
|
+
showSessionReference && /* @__PURE__ */ jsxs23("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
15610
|
+
/* @__PURE__ */ jsx25("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
|
|
15611
|
+
/* @__PURE__ */ jsx25("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
|
|
15374
15612
|
] })
|
|
15375
15613
|
] });
|
|
15376
15614
|
}
|
|
15377
15615
|
|
|
15378
15616
|
// src/components/full-invoice-fields.tsx
|
|
15379
|
-
import { cn as
|
|
15380
|
-
import { jsx as
|
|
15617
|
+
import { cn as cn22 } from "@reblu/site-ui/utils";
|
|
15618
|
+
import { jsx as jsx26, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
15381
15619
|
var EMPTY_FULL_INVOICE_VALUE = {
|
|
15382
15620
|
wantsFullInvoice: false,
|
|
15383
15621
|
billingIdType: "NIF",
|
|
@@ -15494,12 +15732,12 @@ function FullInvoiceFields({
|
|
|
15494
15732
|
const showFields = value.wantsFullInvoice || overCap;
|
|
15495
15733
|
const isSpanishNif = value.billingIdType === "NIF";
|
|
15496
15734
|
const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
|
|
15497
|
-
const error = (key2) => errors[key2] ? /* @__PURE__ */
|
|
15735
|
+
const error = (key2) => errors[key2] ? /* @__PURE__ */ jsx26("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
|
|
15498
15736
|
const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
|
|
15499
|
-
return /* @__PURE__ */
|
|
15500
|
-
overCap ? /* @__PURE__ */
|
|
15501
|
-
/* @__PURE__ */
|
|
15502
|
-
/* @__PURE__ */
|
|
15737
|
+
return /* @__PURE__ */ jsxs24("section", { className: cn22("space-y-4", className), "data-slot": "full-invoice-fields", children: [
|
|
15738
|
+
overCap ? /* @__PURE__ */ jsx26("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
|
|
15739
|
+
/* @__PURE__ */ jsxs24("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
|
|
15740
|
+
/* @__PURE__ */ jsx26(
|
|
15503
15741
|
"input",
|
|
15504
15742
|
{
|
|
15505
15743
|
type: "checkbox",
|
|
@@ -15509,12 +15747,12 @@ function FullInvoiceFields({
|
|
|
15509
15747
|
),
|
|
15510
15748
|
t.toggle
|
|
15511
15749
|
] }),
|
|
15512
|
-
/* @__PURE__ */
|
|
15750
|
+
/* @__PURE__ */ jsx26("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
|
|
15513
15751
|
] }),
|
|
15514
|
-
showFields && /* @__PURE__ */
|
|
15515
|
-
/* @__PURE__ */
|
|
15516
|
-
/* @__PURE__ */
|
|
15517
|
-
/* @__PURE__ */
|
|
15752
|
+
showFields && /* @__PURE__ */ jsxs24("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
15753
|
+
/* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
|
|
15754
|
+
/* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
|
|
15755
|
+
/* @__PURE__ */ jsx26(
|
|
15518
15756
|
"select",
|
|
15519
15757
|
{
|
|
15520
15758
|
id: "full-invoice-id-type",
|
|
@@ -15523,14 +15761,14 @@ function FullInvoiceFields({
|
|
|
15523
15761
|
value: value.billingIdType,
|
|
15524
15762
|
onChange: (e) => set("billingIdType", e.target.value),
|
|
15525
15763
|
...invalid2("billingIdType"),
|
|
15526
|
-
children: ID_TYPES.map((type) => /* @__PURE__ */
|
|
15764
|
+
children: ID_TYPES.map((type) => /* @__PURE__ */ jsx26("option", { value: type, children: t.idTypeOptions[type] }, type))
|
|
15527
15765
|
}
|
|
15528
15766
|
),
|
|
15529
15767
|
error("billingIdType")
|
|
15530
15768
|
] }),
|
|
15531
|
-
!isSpanishNif && /* @__PURE__ */
|
|
15532
|
-
/* @__PURE__ */
|
|
15533
|
-
/* @__PURE__ */
|
|
15769
|
+
!isSpanishNif && /* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
|
|
15770
|
+
/* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
|
|
15771
|
+
/* @__PURE__ */ jsxs24(
|
|
15534
15772
|
"select",
|
|
15535
15773
|
{
|
|
15536
15774
|
id: "full-invoice-id-country",
|
|
@@ -15540,16 +15778,16 @@ function FullInvoiceFields({
|
|
|
15540
15778
|
onChange: (e) => set("billingIdCountry", e.target.value),
|
|
15541
15779
|
...invalid2("billingIdCountry"),
|
|
15542
15780
|
children: [
|
|
15543
|
-
/* @__PURE__ */
|
|
15544
|
-
countries.map((c) => /* @__PURE__ */
|
|
15781
|
+
/* @__PURE__ */ jsx26("option", { value: "", disabled: true, children: t.chooseCountry }),
|
|
15782
|
+
countries.map((c) => /* @__PURE__ */ jsx26("option", { value: c.code, children: c.name }, c.code))
|
|
15545
15783
|
]
|
|
15546
15784
|
}
|
|
15547
15785
|
),
|
|
15548
15786
|
error("billingIdCountry")
|
|
15549
15787
|
] }),
|
|
15550
|
-
/* @__PURE__ */
|
|
15551
|
-
/* @__PURE__ */
|
|
15552
|
-
/* @__PURE__ */
|
|
15788
|
+
/* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
|
|
15789
|
+
/* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
|
|
15790
|
+
/* @__PURE__ */ jsx26(
|
|
15553
15791
|
"input",
|
|
15554
15792
|
{
|
|
15555
15793
|
id: "full-invoice-nif",
|
|
@@ -15562,9 +15800,9 @@ function FullInvoiceFields({
|
|
|
15562
15800
|
),
|
|
15563
15801
|
error("billingNif")
|
|
15564
15802
|
] }),
|
|
15565
|
-
/* @__PURE__ */
|
|
15566
|
-
/* @__PURE__ */
|
|
15567
|
-
/* @__PURE__ */
|
|
15803
|
+
/* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
|
|
15804
|
+
/* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
|
|
15805
|
+
/* @__PURE__ */ jsx26(
|
|
15568
15806
|
"input",
|
|
15569
15807
|
{
|
|
15570
15808
|
id: "full-invoice-name",
|
|
@@ -15577,9 +15815,9 @@ function FullInvoiceFields({
|
|
|
15577
15815
|
),
|
|
15578
15816
|
error("billingName")
|
|
15579
15817
|
] }),
|
|
15580
|
-
/* @__PURE__ */
|
|
15581
|
-
/* @__PURE__ */
|
|
15582
|
-
/* @__PURE__ */
|
|
15818
|
+
/* @__PURE__ */ jsxs24("div", { className: "space-y-1 sm:col-span-2", children: [
|
|
15819
|
+
/* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
|
|
15820
|
+
/* @__PURE__ */ jsx26(
|
|
15583
15821
|
"input",
|
|
15584
15822
|
{
|
|
15585
15823
|
id: "full-invoice-street",
|
|
@@ -15591,9 +15829,9 @@ function FullInvoiceFields({
|
|
|
15591
15829
|
}
|
|
15592
15830
|
)
|
|
15593
15831
|
] }),
|
|
15594
|
-
/* @__PURE__ */
|
|
15595
|
-
/* @__PURE__ */
|
|
15596
|
-
/* @__PURE__ */
|
|
15832
|
+
/* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
|
|
15833
|
+
/* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
|
|
15834
|
+
/* @__PURE__ */ jsx26(
|
|
15597
15835
|
"input",
|
|
15598
15836
|
{
|
|
15599
15837
|
id: "full-invoice-postal-code",
|
|
@@ -15604,9 +15842,9 @@ function FullInvoiceFields({
|
|
|
15604
15842
|
}
|
|
15605
15843
|
)
|
|
15606
15844
|
] }),
|
|
15607
|
-
/* @__PURE__ */
|
|
15608
|
-
/* @__PURE__ */
|
|
15609
|
-
/* @__PURE__ */
|
|
15845
|
+
/* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
|
|
15846
|
+
/* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
|
|
15847
|
+
/* @__PURE__ */ jsx26(
|
|
15610
15848
|
"input",
|
|
15611
15849
|
{
|
|
15612
15850
|
id: "full-invoice-city",
|
|
@@ -15617,9 +15855,9 @@ function FullInvoiceFields({
|
|
|
15617
15855
|
}
|
|
15618
15856
|
)
|
|
15619
15857
|
] }),
|
|
15620
|
-
/* @__PURE__ */
|
|
15621
|
-
/* @__PURE__ */
|
|
15622
|
-
/* @__PURE__ */
|
|
15858
|
+
/* @__PURE__ */ jsxs24("div", { className: "space-y-1", children: [
|
|
15859
|
+
/* @__PURE__ */ jsx26("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
|
|
15860
|
+
/* @__PURE__ */ jsx26(
|
|
15623
15861
|
"select",
|
|
15624
15862
|
{
|
|
15625
15863
|
id: "full-invoice-country",
|
|
@@ -15627,15 +15865,64 @@ function FullInvoiceFields({
|
|
|
15627
15865
|
required: true,
|
|
15628
15866
|
value: value.country,
|
|
15629
15867
|
onChange: (e) => set("country", e.target.value),
|
|
15630
|
-
children: countries.map((c) => /* @__PURE__ */
|
|
15868
|
+
children: countries.map((c) => /* @__PURE__ */ jsx26("option", { value: c.code, children: c.name }, c.code))
|
|
15631
15869
|
}
|
|
15632
15870
|
)
|
|
15633
15871
|
] }),
|
|
15634
|
-
/* @__PURE__ */
|
|
15872
|
+
/* @__PURE__ */ jsx26("div", { className: "sm:col-span-2", children: error("address") })
|
|
15635
15873
|
] })
|
|
15636
15874
|
] });
|
|
15637
15875
|
}
|
|
15638
15876
|
|
|
15877
|
+
// src/components/contact-interest-field.tsx
|
|
15878
|
+
import { cn as cn23 } from "@reblu/site-ui/utils";
|
|
15879
|
+
import { jsx as jsx27, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
15880
|
+
function ContactInterestField({
|
|
15881
|
+
interest,
|
|
15882
|
+
value,
|
|
15883
|
+
onChange,
|
|
15884
|
+
idPrefix = "contact-interest",
|
|
15885
|
+
disabled,
|
|
15886
|
+
className
|
|
15887
|
+
}) {
|
|
15888
|
+
if (!interest || interest.options.length === 0) return null;
|
|
15889
|
+
const chosen = new Set(value);
|
|
15890
|
+
const toggle = (option2, checked) => {
|
|
15891
|
+
const next2 = new Set(chosen);
|
|
15892
|
+
if (checked) next2.add(option2);
|
|
15893
|
+
else next2.delete(option2);
|
|
15894
|
+
onChange(interest.options.filter((candidate) => next2.has(candidate)));
|
|
15895
|
+
};
|
|
15896
|
+
return /* @__PURE__ */ jsxs25("fieldset", { "data-slot": "contact-interest", className: cn23("space-y-2", className), children: [
|
|
15897
|
+
/* @__PURE__ */ jsx27("legend", { className: "text-sm font-medium", children: interest.label }),
|
|
15898
|
+
/* @__PURE__ */ jsx27("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
|
|
15899
|
+
const id = `${idPrefix}-${index}`;
|
|
15900
|
+
return /* @__PURE__ */ jsxs25(
|
|
15901
|
+
"label",
|
|
15902
|
+
{
|
|
15903
|
+
htmlFor: id,
|
|
15904
|
+
"data-slot": "contact-interest-option",
|
|
15905
|
+
className: "flex items-center gap-2 text-sm",
|
|
15906
|
+
children: [
|
|
15907
|
+
/* @__PURE__ */ jsx27(
|
|
15908
|
+
"input",
|
|
15909
|
+
{
|
|
15910
|
+
id,
|
|
15911
|
+
type: "checkbox",
|
|
15912
|
+
checked: chosen.has(option2),
|
|
15913
|
+
disabled,
|
|
15914
|
+
onChange: (event) => toggle(option2, event.target.checked)
|
|
15915
|
+
}
|
|
15916
|
+
),
|
|
15917
|
+
option2
|
|
15918
|
+
]
|
|
15919
|
+
},
|
|
15920
|
+
option2
|
|
15921
|
+
);
|
|
15922
|
+
}) })
|
|
15923
|
+
] });
|
|
15924
|
+
}
|
|
15925
|
+
|
|
15639
15926
|
// src/index.ts
|
|
15640
15927
|
import { DATA_REQUEST_TYPES } from "@reblu/site-contracts";
|
|
15641
15928
|
export {
|
|
@@ -15646,9 +15933,14 @@ export {
|
|
|
15646
15933
|
CartSummary,
|
|
15647
15934
|
CheckoutForm,
|
|
15648
15935
|
CheckoutLoginPrompt,
|
|
15936
|
+
ContactInterestField,
|
|
15937
|
+
CourseCatalogFilters,
|
|
15649
15938
|
CourseDescription,
|
|
15650
15939
|
DATA_REQUEST_TYPES,
|
|
15940
|
+
DEFAULT_COURSE_CATALOG_FILTERS_LABELS,
|
|
15941
|
+
DEFAULT_COURSE_PRICE_BANDS,
|
|
15651
15942
|
DEFAULT_INVOICE_COUNTRIES,
|
|
15943
|
+
DEFAULT_LESSON_PREVIEW_LABELS,
|
|
15652
15944
|
DEFAULT_SHOP_ERROR_FALLBACK_MESSAGE,
|
|
15653
15945
|
DEFAULT_SHOP_ERROR_MESSAGES,
|
|
15654
15946
|
DEFAULT_SHOP_PRICE_BANDS,
|
|
@@ -15658,6 +15950,7 @@ export {
|
|
|
15658
15950
|
EMPTY_FULL_INVOICE_VALUE,
|
|
15659
15951
|
FaqAccordion,
|
|
15660
15952
|
FullInvoiceFields,
|
|
15953
|
+
LessonPreview,
|
|
15661
15954
|
MarkdownRenderer,
|
|
15662
15955
|
OrderConfirmation,
|
|
15663
15956
|
OrderInvoiceLink,
|