@reblu/site-blocks 0.30.0 → 0.31.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 +25 -0
- package/README.md +185 -5
- package/dist/client.cjs +632 -0
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +105 -3
- package/dist/client.d.ts +105 -3
- package/dist/client.js +629 -0
- package/dist/client.js.map +1 -1
- package/dist/full-invoice-fields-DMX0sjPG.d.cts +140 -0
- package/dist/full-invoice-fields-DMX0sjPG.d.ts +140 -0
- package/dist/index.cjs +827 -348
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +167 -130
- package/dist/index.d.ts +167 -130
- package/dist/index.js +815 -349
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/dist/_heading-BsNbc1wc.d.cts +0 -4
- package/dist/_heading-BsNbc1wc.d.ts +0 -4
package/dist/index.cjs
CHANGED
|
@@ -23,6 +23,9 @@ __export(src_exports, {
|
|
|
23
23
|
ALLOWED_YOUTUBE_HOSTS: () => ALLOWED_YOUTUBE_HOSTS,
|
|
24
24
|
AddedToCartToast: () => AddedToCartToast,
|
|
25
25
|
ArbitrationBadge: () => ArbitrationBadge,
|
|
26
|
+
BeforeAfterPairs: () => BeforeAfterPairs,
|
|
27
|
+
CARD_ICON_NAMES: () => CARD_ICON_NAMES,
|
|
28
|
+
CardIconSvg: () => CardIconSvg,
|
|
26
29
|
CartAdjustmentsNotice: () => CartAdjustmentsNotice,
|
|
27
30
|
CartLineIncludes: () => CartLineIncludes,
|
|
28
31
|
CartLineList: () => CartLineList,
|
|
@@ -31,14 +34,18 @@ __export(src_exports, {
|
|
|
31
34
|
CheckoutForm: () => CheckoutForm,
|
|
32
35
|
CheckoutLoginPrompt: () => CheckoutLoginPrompt,
|
|
33
36
|
CheckoutPayAction: () => CheckoutPayAction,
|
|
37
|
+
CheckoutQuoteNotice: () => CheckoutQuoteNotice,
|
|
34
38
|
CheckoutQuoteSummary: () => CheckoutQuoteSummary,
|
|
35
39
|
CheckoutTermsAcceptance: () => CheckoutTermsAcceptance,
|
|
40
|
+
ChipList: () => ChipList,
|
|
36
41
|
ContactInterestField: () => ContactInterestField,
|
|
37
42
|
CourseCatalogFilters: () => CourseCatalogFilters,
|
|
38
43
|
CourseDescription: () => CourseDescription,
|
|
39
44
|
CoursePurchaseTerms: () => CoursePurchaseTerms,
|
|
40
45
|
DATA_REQUEST_TYPES: () => import_site_contracts.DATA_REQUEST_TYPES,
|
|
46
|
+
DEFAULT_BEFORE_AFTER_LABELS: () => DEFAULT_BEFORE_AFTER_LABELS,
|
|
41
47
|
DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS: () => DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS,
|
|
48
|
+
DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS: () => DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS,
|
|
42
49
|
DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS: () => DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS,
|
|
43
50
|
DEFAULT_COURSE_CATALOG_FILTERS_LABELS: () => DEFAULT_COURSE_CATALOG_FILTERS_LABELS,
|
|
44
51
|
DEFAULT_COURSE_PRICE_BANDS: () => DEFAULT_COURSE_PRICE_BANDS,
|
|
@@ -55,6 +62,8 @@ __export(src_exports, {
|
|
|
55
62
|
EMPTY_FULL_INVOICE_VALUE: () => EMPTY_FULL_INVOICE_VALUE,
|
|
56
63
|
FaqAccordion: () => FaqAccordion,
|
|
57
64
|
FullInvoiceFields: () => FullInvoiceFields,
|
|
65
|
+
IconCardGrid: () => IconCardGrid,
|
|
66
|
+
ImageTextSplit: () => ImageTextSplit,
|
|
58
67
|
LegalDocument: () => LegalDocument,
|
|
59
68
|
LessonPreview: () => LessonPreview,
|
|
60
69
|
MarkdownRenderer: () => MarkdownRenderer,
|
|
@@ -75,11 +84,14 @@ __export(src_exports, {
|
|
|
75
84
|
buildFaqPageJsonLd: () => buildFaqPageJsonLd,
|
|
76
85
|
buildShareUrls: () => buildShareUrls,
|
|
77
86
|
bundleComponentsToIncludes: () => bundleComponentsToIncludes,
|
|
87
|
+
checkoutQuoteNotice: () => checkoutQuoteNotice,
|
|
78
88
|
collectFaqItems: () => collectFaqItems,
|
|
89
|
+
courseSellsAsGuest: () => courseSellsAsGuest,
|
|
79
90
|
defaultCheckoutFulfillment: () => defaultCheckoutFulfillment,
|
|
80
91
|
formatPrice: () => formatPrice,
|
|
81
92
|
getShopErrorMessage: () => getShopErrorMessage,
|
|
82
93
|
isAllowedYouTubeHost: () => isAllowedYouTubeHost,
|
|
94
|
+
isCheckoutDeliveryComplete: () => isCheckoutDeliveryComplete,
|
|
83
95
|
isOverSimplifiedInvoiceCap: () => isOverSimplifiedInvoiceCap,
|
|
84
96
|
markdownToPlainText: () => markdownToPlainText,
|
|
85
97
|
markdownToSafeHtml: () => markdownToSafeHtml,
|
|
@@ -88,6 +100,7 @@ __export(src_exports, {
|
|
|
88
100
|
sanitizeHtml: () => sanitizeHtml,
|
|
89
101
|
shopIssuesInvoices: () => shopIssuesInvoices,
|
|
90
102
|
shouldRenderShopFilters: () => shouldRenderShopFilters,
|
|
103
|
+
toAcademyCheckoutInvoiceFields: () => toAcademyCheckoutInvoiceFields,
|
|
91
104
|
toCheckoutFulfillmentFields: () => toCheckoutFulfillmentFields,
|
|
92
105
|
toCheckoutInvoiceFields: () => toCheckoutInvoiceFields,
|
|
93
106
|
toCheckoutTermsFields: () => toCheckoutTermsFields
|
|
@@ -14590,40 +14603,376 @@ function ArbitrationBadge({
|
|
|
14590
14603
|
}
|
|
14591
14604
|
|
|
14592
14605
|
// src/components/page-blocks.tsx
|
|
14593
|
-
var
|
|
14606
|
+
var import_utils15 = require("@reblu/site-ui/utils");
|
|
14594
14607
|
var import_button_variants2 = require("@reblu/site-ui/button-variants");
|
|
14608
|
+
|
|
14609
|
+
// src/components/content-blocks.tsx
|
|
14610
|
+
var import_utils14 = require("@reblu/site-ui/utils");
|
|
14611
|
+
|
|
14612
|
+
// src/components/_card-icons.ts
|
|
14613
|
+
var CARD_ICON_NODES = {
|
|
14614
|
+
check: [["path", { d: "M20 6 9 17l-5-5" }]],
|
|
14615
|
+
star: [
|
|
14616
|
+
[
|
|
14617
|
+
"path",
|
|
14618
|
+
{
|
|
14619
|
+
d: "M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z"
|
|
14620
|
+
}
|
|
14621
|
+
]
|
|
14622
|
+
],
|
|
14623
|
+
heart: [
|
|
14624
|
+
[
|
|
14625
|
+
"path",
|
|
14626
|
+
{
|
|
14627
|
+
d: "M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5"
|
|
14628
|
+
}
|
|
14629
|
+
]
|
|
14630
|
+
],
|
|
14631
|
+
"shield-check": [
|
|
14632
|
+
[
|
|
14633
|
+
"path",
|
|
14634
|
+
{
|
|
14635
|
+
d: "M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"
|
|
14636
|
+
}
|
|
14637
|
+
],
|
|
14638
|
+
["path", { d: "m9 12 2 2 4-4" }]
|
|
14639
|
+
],
|
|
14640
|
+
sparkles: [
|
|
14641
|
+
[
|
|
14642
|
+
"path",
|
|
14643
|
+
{
|
|
14644
|
+
d: "M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z"
|
|
14645
|
+
}
|
|
14646
|
+
],
|
|
14647
|
+
["path", { d: "M20 2v4" }],
|
|
14648
|
+
["path", { d: "M22 4h-4" }],
|
|
14649
|
+
["circle", { cx: "4", cy: "20", r: "2" }]
|
|
14650
|
+
],
|
|
14651
|
+
clock: [
|
|
14652
|
+
["path", { d: "M12 6v6l4 2" }],
|
|
14653
|
+
["circle", { cx: "12", cy: "12", r: "10" }]
|
|
14654
|
+
],
|
|
14655
|
+
calendar: [
|
|
14656
|
+
["path", { d: "M8 2v4" }],
|
|
14657
|
+
["path", { d: "M16 2v4" }],
|
|
14658
|
+
["rect", { width: "18", height: "18", x: "3", y: "4", rx: "2" }],
|
|
14659
|
+
["path", { d: "M3 10h18" }]
|
|
14660
|
+
],
|
|
14661
|
+
user: [
|
|
14662
|
+
["path", { d: "M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2" }],
|
|
14663
|
+
["circle", { cx: "12", cy: "7", r: "4" }]
|
|
14664
|
+
],
|
|
14665
|
+
users: [
|
|
14666
|
+
["path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }],
|
|
14667
|
+
["path", { d: "M16 3.128a4 4 0 0 1 0 7.744" }],
|
|
14668
|
+
["path", { d: "M22 21v-2a4 4 0 0 0-3-3.87" }],
|
|
14669
|
+
["circle", { cx: "9", cy: "7", r: "4" }]
|
|
14670
|
+
],
|
|
14671
|
+
phone: [
|
|
14672
|
+
[
|
|
14673
|
+
"path",
|
|
14674
|
+
{
|
|
14675
|
+
d: "M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384"
|
|
14676
|
+
}
|
|
14677
|
+
]
|
|
14678
|
+
],
|
|
14679
|
+
mail: [
|
|
14680
|
+
["path", { d: "m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7" }],
|
|
14681
|
+
["rect", { x: "2", y: "4", width: "20", height: "16", rx: "2" }]
|
|
14682
|
+
],
|
|
14683
|
+
"map-pin": [
|
|
14684
|
+
[
|
|
14685
|
+
"path",
|
|
14686
|
+
{
|
|
14687
|
+
d: "M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"
|
|
14688
|
+
}
|
|
14689
|
+
],
|
|
14690
|
+
["circle", { cx: "12", cy: "10", r: "3" }]
|
|
14691
|
+
],
|
|
14692
|
+
leaf: [
|
|
14693
|
+
[
|
|
14694
|
+
"path",
|
|
14695
|
+
{ d: "M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z" }
|
|
14696
|
+
],
|
|
14697
|
+
["path", { d: "M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12" }]
|
|
14698
|
+
],
|
|
14699
|
+
droplet: [
|
|
14700
|
+
[
|
|
14701
|
+
"path",
|
|
14702
|
+
{
|
|
14703
|
+
d: "M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z"
|
|
14704
|
+
}
|
|
14705
|
+
]
|
|
14706
|
+
],
|
|
14707
|
+
sun: [
|
|
14708
|
+
["circle", { cx: "12", cy: "12", r: "4" }],
|
|
14709
|
+
["path", { d: "M12 2v2" }],
|
|
14710
|
+
["path", { d: "M12 20v2" }],
|
|
14711
|
+
["path", { d: "m4.93 4.93 1.41 1.41" }],
|
|
14712
|
+
["path", { d: "m17.66 17.66 1.41 1.41" }],
|
|
14713
|
+
["path", { d: "M2 12h2" }],
|
|
14714
|
+
["path", { d: "M20 12h2" }],
|
|
14715
|
+
["path", { d: "m6.34 17.66-1.41 1.41" }],
|
|
14716
|
+
["path", { d: "m19.07 4.93-1.41 1.41" }]
|
|
14717
|
+
],
|
|
14718
|
+
zap: [
|
|
14719
|
+
[
|
|
14720
|
+
"path",
|
|
14721
|
+
{
|
|
14722
|
+
d: "M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"
|
|
14723
|
+
}
|
|
14724
|
+
]
|
|
14725
|
+
],
|
|
14726
|
+
award: [
|
|
14727
|
+
[
|
|
14728
|
+
"path",
|
|
14729
|
+
{
|
|
14730
|
+
d: "m15.477 12.89 1.515 8.526a.5.5 0 0 1-.81.47l-3.58-2.687a1 1 0 0 0-1.197 0l-3.586 2.686a.5.5 0 0 1-.81-.469l1.514-8.526"
|
|
14731
|
+
}
|
|
14732
|
+
],
|
|
14733
|
+
["circle", { cx: "12", cy: "8", r: "6" }]
|
|
14734
|
+
],
|
|
14735
|
+
target: [
|
|
14736
|
+
["circle", { cx: "12", cy: "12", r: "10" }],
|
|
14737
|
+
["circle", { cx: "12", cy: "12", r: "6" }],
|
|
14738
|
+
["circle", { cx: "12", cy: "12", r: "2" }]
|
|
14739
|
+
],
|
|
14740
|
+
lightbulb: [
|
|
14741
|
+
[
|
|
14742
|
+
"path",
|
|
14743
|
+
{
|
|
14744
|
+
d: "M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"
|
|
14745
|
+
}
|
|
14746
|
+
],
|
|
14747
|
+
["path", { d: "M9 18h6" }],
|
|
14748
|
+
["path", { d: "M10 22h4" }]
|
|
14749
|
+
],
|
|
14750
|
+
smile: [
|
|
14751
|
+
["circle", { cx: "12", cy: "12", r: "10" }],
|
|
14752
|
+
["path", { d: "M8 14s1.5 2 4 2 4-2 4-2" }],
|
|
14753
|
+
["line", { x1: "9", x2: "9.01", y1: "9", y2: "9" }],
|
|
14754
|
+
["line", { x1: "15", x2: "15.01", y1: "9", y2: "9" }]
|
|
14755
|
+
],
|
|
14756
|
+
"thumbs-up": [
|
|
14757
|
+
[
|
|
14758
|
+
"path",
|
|
14759
|
+
{
|
|
14760
|
+
d: "M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"
|
|
14761
|
+
}
|
|
14762
|
+
],
|
|
14763
|
+
["path", { d: "M7 10v12" }]
|
|
14764
|
+
],
|
|
14765
|
+
info: [
|
|
14766
|
+
["circle", { cx: "12", cy: "12", r: "10" }],
|
|
14767
|
+
["path", { d: "M12 16v-4" }],
|
|
14768
|
+
["path", { d: "M12 8h.01" }]
|
|
14769
|
+
]
|
|
14770
|
+
};
|
|
14771
|
+
|
|
14772
|
+
// src/components/content-blocks.tsx
|
|
14595
14773
|
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
14774
|
+
var DEFAULT_BEFORE_AFTER_LABELS = Object.freeze({ before: "Antes", after: "Despu\xE9s" });
|
|
14775
|
+
function PairImage({ url, alt, label }) {
|
|
14776
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("figure", { className: "space-y-2", children: [
|
|
14777
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14778
|
+
"img",
|
|
14779
|
+
{
|
|
14780
|
+
src: url,
|
|
14781
|
+
alt,
|
|
14782
|
+
loading: "lazy",
|
|
14783
|
+
decoding: "async",
|
|
14784
|
+
className: "h-full w-full object-cover"
|
|
14785
|
+
}
|
|
14786
|
+
) }),
|
|
14787
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("figcaption", { className: "text-sm font-semibold", children: label })
|
|
14788
|
+
] });
|
|
14789
|
+
}
|
|
14790
|
+
function BeforeAfterPairs({
|
|
14791
|
+
pairs,
|
|
14792
|
+
showCaption = false,
|
|
14793
|
+
caption,
|
|
14794
|
+
labels = DEFAULT_BEFORE_AFTER_LABELS,
|
|
14795
|
+
className
|
|
14796
|
+
}) {
|
|
14797
|
+
const visibleCaption = showCaption && caption && caption.trim() !== "" ? caption : null;
|
|
14798
|
+
if (pairs.length === 0 && !visibleCaption) return null;
|
|
14799
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { "data-slot": "before-after", className: (0, import_utils14.cn)("space-y-4", className), children: [
|
|
14800
|
+
pairs.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("ul", { className: "grid gap-6 lg:grid-cols-2", children: pairs.map((pair, i) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
14801
|
+
"li",
|
|
14802
|
+
{
|
|
14803
|
+
"data-slot": "before-after-pair",
|
|
14804
|
+
className: "grid grid-cols-1 gap-3 sm:grid-cols-2",
|
|
14805
|
+
children: [
|
|
14806
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(PairImage, { url: pair.beforeUrl, alt: pair.alt ?? "", label: labels.before }),
|
|
14807
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(PairImage, { url: pair.afterUrl, alt: pair.alt ?? "", label: labels.after })
|
|
14808
|
+
]
|
|
14809
|
+
},
|
|
14810
|
+
`${pair.beforeUrl}-${pair.afterUrl}-${i}`
|
|
14811
|
+
)) }),
|
|
14812
|
+
visibleCaption && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { "data-slot": "before-after-caption", className: "whitespace-pre-line text-sm opacity-80", children: visibleCaption })
|
|
14813
|
+
] });
|
|
14814
|
+
}
|
|
14815
|
+
function ChipList({ items, className }) {
|
|
14816
|
+
const visible = items.filter((item) => item.trim() !== "");
|
|
14817
|
+
if (visible.length === 0) return null;
|
|
14818
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("ul", { "data-slot": "chip-list", className: (0, import_utils14.cn)("flex flex-wrap gap-3", className), children: visible.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14819
|
+
"li",
|
|
14820
|
+
{
|
|
14821
|
+
"data-slot": "chip",
|
|
14822
|
+
className: "rounded-full border border-primary/20 bg-primary/10 px-4 py-2 text-sm font-medium text-primary",
|
|
14823
|
+
children: item
|
|
14824
|
+
},
|
|
14825
|
+
`${item}-${i}`
|
|
14826
|
+
)) });
|
|
14827
|
+
}
|
|
14828
|
+
var CARD_ICON_NAMES = Object.freeze(Object.keys(CARD_ICON_NODES));
|
|
14829
|
+
function hasCardIcon(icon) {
|
|
14830
|
+
return Object.prototype.hasOwnProperty.call(CARD_ICON_NODES, icon);
|
|
14831
|
+
}
|
|
14832
|
+
function CardIconSvg({ icon, className }) {
|
|
14833
|
+
if (!hasCardIcon(icon)) return null;
|
|
14834
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14835
|
+
"svg",
|
|
14836
|
+
{
|
|
14837
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
14838
|
+
viewBox: "0 0 24 24",
|
|
14839
|
+
fill: "none",
|
|
14840
|
+
stroke: "currentColor",
|
|
14841
|
+
strokeWidth: 2,
|
|
14842
|
+
strokeLinecap: "round",
|
|
14843
|
+
strokeLinejoin: "round",
|
|
14844
|
+
"aria-hidden": "true",
|
|
14845
|
+
focusable: "false",
|
|
14846
|
+
"data-icon": icon,
|
|
14847
|
+
className: (0, import_utils14.cn)("h-5 w-5", className),
|
|
14848
|
+
children: CARD_ICON_NODES[icon].map(([Tag, attrs], i) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Tag, { ...attrs }, i))
|
|
14849
|
+
}
|
|
14850
|
+
);
|
|
14851
|
+
}
|
|
14852
|
+
function IconCardGrid({ items, intro, headingLevel = 3, className }) {
|
|
14853
|
+
const hasIntro = !!intro && intro.trim() !== "";
|
|
14854
|
+
if (items.length === 0 && !hasIntro) return null;
|
|
14855
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { "data-slot": "icon-cards", className: (0, import_utils14.cn)("space-y-6", className), children: [
|
|
14856
|
+
hasIntro && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "max-w-prose text-lg opacity-80", children: intro }),
|
|
14857
|
+
items.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14858
|
+
"ul",
|
|
14859
|
+
{
|
|
14860
|
+
"data-slot": "icon-card-grid",
|
|
14861
|
+
className: "grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3",
|
|
14862
|
+
children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
14863
|
+
"li",
|
|
14864
|
+
{
|
|
14865
|
+
"data-slot": "icon-card",
|
|
14866
|
+
className: "space-y-3 rounded-xl border border-border bg-card p-6 text-card-foreground",
|
|
14867
|
+
children: [
|
|
14868
|
+
hasCardIcon(item.icon) && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "inline-flex h-12 w-12 items-center justify-center rounded-xl bg-primary/10 text-primary", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(CardIconSvg, { icon: item.icon }) }),
|
|
14869
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: item.title }),
|
|
14870
|
+
item.text && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { className: "text-muted-foreground", children: item.text })
|
|
14871
|
+
]
|
|
14872
|
+
},
|
|
14873
|
+
`${item.title}-${i}`
|
|
14874
|
+
))
|
|
14875
|
+
}
|
|
14876
|
+
)
|
|
14877
|
+
] });
|
|
14878
|
+
}
|
|
14879
|
+
var KICKER_CLASS_NAME = "text-sm font-semibold uppercase tracking-wider opacity-80";
|
|
14880
|
+
function ImageTextSplit({
|
|
14881
|
+
imageUrl,
|
|
14882
|
+
alt,
|
|
14883
|
+
imageSide,
|
|
14884
|
+
mobileOrder = "image_first",
|
|
14885
|
+
html: html5,
|
|
14886
|
+
kicker,
|
|
14887
|
+
heading,
|
|
14888
|
+
headingLevel = 2,
|
|
14889
|
+
headingId,
|
|
14890
|
+
className
|
|
14891
|
+
}) {
|
|
14892
|
+
const textFirst = mobileOrder === "text_first";
|
|
14893
|
+
const imageRight = imageSide === "right";
|
|
14894
|
+
const hasKicker = !!kicker && kicker.trim() !== "";
|
|
14895
|
+
const bodyOffset = heading ? headingLevel : headingLevel - 1;
|
|
14896
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
14897
|
+
"div",
|
|
14898
|
+
{
|
|
14899
|
+
"data-slot": "image-text",
|
|
14900
|
+
"data-image-side": imageRight ? "right" : "left",
|
|
14901
|
+
className: (0, import_utils14.cn)("grid grid-cols-1 items-center gap-8 md:grid-cols-2", className),
|
|
14902
|
+
children: [
|
|
14903
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14904
|
+
"div",
|
|
14905
|
+
{
|
|
14906
|
+
"data-slot": "image-text-media",
|
|
14907
|
+
className: (0, import_utils14.cn)(textFirst ? "order-2" : "order-1", imageRight ? "md:order-2" : "md:order-1"),
|
|
14908
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "relative aspect-[4/3] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14909
|
+
"img",
|
|
14910
|
+
{
|
|
14911
|
+
src: imageUrl,
|
|
14912
|
+
alt: alt ?? "",
|
|
14913
|
+
loading: "lazy",
|
|
14914
|
+
decoding: "async",
|
|
14915
|
+
className: "h-full w-full object-cover"
|
|
14916
|
+
}
|
|
14917
|
+
) })
|
|
14918
|
+
}
|
|
14919
|
+
),
|
|
14920
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
14921
|
+
"div",
|
|
14922
|
+
{
|
|
14923
|
+
"data-slot": "image-text-body",
|
|
14924
|
+
className: (0, import_utils14.cn)(
|
|
14925
|
+
"space-y-4",
|
|
14926
|
+
textFirst ? "order-1" : "order-2",
|
|
14927
|
+
imageRight ? "md:order-1" : "md:order-2"
|
|
14928
|
+
),
|
|
14929
|
+
children: [
|
|
14930
|
+
(hasKicker || heading) && /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "space-y-2", children: [
|
|
14931
|
+
hasKicker && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("p", { "data-slot": "page-block-kicker", className: KICKER_CLASS_NAME, children: kicker }),
|
|
14932
|
+
heading && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { id: headingId, children: heading }) })
|
|
14933
|
+
] }),
|
|
14934
|
+
html5 && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(SafeHtml, { html: sanitizeHtml(html5), headingOffset: bodyOffset })
|
|
14935
|
+
]
|
|
14936
|
+
}
|
|
14937
|
+
)
|
|
14938
|
+
]
|
|
14939
|
+
}
|
|
14940
|
+
);
|
|
14941
|
+
}
|
|
14942
|
+
|
|
14943
|
+
// src/components/page-blocks.tsx
|
|
14944
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
14596
14945
|
var ALIASES = {
|
|
14597
14946
|
doctor_embed: "profile_embed",
|
|
14598
14947
|
specialty_embed: "page_embed"
|
|
14599
14948
|
};
|
|
14600
14949
|
function HeroBlock({ block, headingLevel }) {
|
|
14601
14950
|
const { title, subtitle, imageUrl } = block.data;
|
|
14602
|
-
return /* @__PURE__ */ (0,
|
|
14603
|
-
/* @__PURE__ */ (0,
|
|
14604
|
-
subtitle && /* @__PURE__ */ (0,
|
|
14605
|
-
imageUrl && /* @__PURE__ */ (0,
|
|
14951
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "space-y-4", children: [
|
|
14952
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Heading, { level: headingLevel, className: "text-3xl font-bold tracking-tight md:text-4xl", children: title }),
|
|
14953
|
+
subtitle && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-lg opacity-80", children: subtitle }),
|
|
14954
|
+
imageUrl && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "relative aspect-[21/9] w-full overflow-hidden rounded-xl bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("img", { src: imageUrl, alt: "", loading: "lazy", className: "h-full w-full object-cover" }) })
|
|
14606
14955
|
] });
|
|
14607
14956
|
}
|
|
14608
14957
|
function RichtextBlock({ block, headingLevel }) {
|
|
14609
|
-
return /* @__PURE__ */ (0,
|
|
14958
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
|
|
14610
14959
|
}
|
|
14611
14960
|
function FaqBlock({ block }) {
|
|
14612
|
-
return /* @__PURE__ */ (0,
|
|
14961
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(FaqAccordion, { items: block.data.items });
|
|
14613
14962
|
}
|
|
14614
14963
|
function StatsBlock({ block }) {
|
|
14615
|
-
return /* @__PURE__ */ (0,
|
|
14616
|
-
/* @__PURE__ */ (0,
|
|
14617
|
-
/* @__PURE__ */ (0,
|
|
14964
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("dl", { className: "grid gap-6 sm:grid-cols-2 lg:grid-cols-4", children: block.data.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex flex-col-reverse gap-1", children: [
|
|
14965
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("dt", { className: "text-sm opacity-80", children: item.label }),
|
|
14966
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("dd", { className: "text-3xl font-bold", children: item.value })
|
|
14618
14967
|
] }, i)) });
|
|
14619
14968
|
}
|
|
14620
14969
|
function TestimonialBlock({ block }) {
|
|
14621
14970
|
const { quote, author, role, avatarUrl } = block.data;
|
|
14622
|
-
return /* @__PURE__ */ (0,
|
|
14623
|
-
/* @__PURE__ */ (0,
|
|
14624
|
-
/* @__PURE__ */ (0,
|
|
14971
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("figure", { className: "space-y-4", children: [
|
|
14972
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("blockquote", { className: "text-xl italic", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { children: quote }) }),
|
|
14973
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("figcaption", { className: "flex items-center gap-3", children: [
|
|
14625
14974
|
avatarUrl && // eslint-disable-next-line @next/next/no-img-element
|
|
14626
|
-
/* @__PURE__ */ (0,
|
|
14975
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14627
14976
|
"img",
|
|
14628
14977
|
{
|
|
14629
14978
|
src: avatarUrl,
|
|
@@ -14632,9 +14981,9 @@ function TestimonialBlock({ block }) {
|
|
|
14632
14981
|
className: "h-10 w-10 rounded-full object-cover"
|
|
14633
14982
|
}
|
|
14634
14983
|
),
|
|
14635
|
-
/* @__PURE__ */ (0,
|
|
14636
|
-
/* @__PURE__ */ (0,
|
|
14637
|
-
role && /* @__PURE__ */ (0,
|
|
14984
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { children: [
|
|
14985
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "font-semibold", children: author }),
|
|
14986
|
+
role && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "block text-sm opacity-80", children: role })
|
|
14638
14987
|
] })
|
|
14639
14988
|
] })
|
|
14640
14989
|
] });
|
|
@@ -14643,19 +14992,19 @@ function CtaSlotBlock(_props) {
|
|
|
14643
14992
|
return null;
|
|
14644
14993
|
}
|
|
14645
14994
|
function FeatureListBlock({ block }) {
|
|
14646
|
-
return /* @__PURE__ */ (0,
|
|
14995
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("ul", { className: "grid list-disc gap-2 pl-5 sm:grid-cols-2", children: block.data.items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("li", { children: item.text }, i)) });
|
|
14647
14996
|
}
|
|
14648
14997
|
function GalleryBlock({ block }) {
|
|
14649
14998
|
const { images } = block.data;
|
|
14650
|
-
return /* @__PURE__ */ (0,
|
|
14999
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14651
15000
|
"div",
|
|
14652
15001
|
{
|
|
14653
|
-
className: (0,
|
|
15002
|
+
className: (0, import_utils15.cn)(
|
|
14654
15003
|
"grid gap-4",
|
|
14655
15004
|
images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
|
|
14656
15005
|
),
|
|
14657
|
-
children: images.map((img, i) => /* @__PURE__ */ (0,
|
|
14658
|
-
/* @__PURE__ */ (0,
|
|
15006
|
+
children: images.map((img, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("figure", { className: "space-y-1", children: [
|
|
15007
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "relative aspect-video w-full overflow-hidden rounded-lg bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14659
15008
|
"img",
|
|
14660
15009
|
{
|
|
14661
15010
|
src: img.url,
|
|
@@ -14664,7 +15013,7 @@ function GalleryBlock({ block }) {
|
|
|
14664
15013
|
className: "h-full w-full object-cover"
|
|
14665
15014
|
}
|
|
14666
15015
|
) }),
|
|
14667
|
-
img.caption && /* @__PURE__ */ (0,
|
|
15016
|
+
img.caption && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
|
|
14668
15017
|
] }, `${img.url}-${i}`))
|
|
14669
15018
|
}
|
|
14670
15019
|
);
|
|
@@ -14674,13 +15023,13 @@ function EmbedCard({
|
|
|
14674
15023
|
headingLevel,
|
|
14675
15024
|
embedHref
|
|
14676
15025
|
}) {
|
|
14677
|
-
return /* @__PURE__ */ (0,
|
|
15026
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
14678
15027
|
"a",
|
|
14679
15028
|
{
|
|
14680
15029
|
href: embedHref(resolved),
|
|
14681
15030
|
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",
|
|
14682
15031
|
children: [
|
|
14683
|
-
resolved.coverImageUrl && /* @__PURE__ */ (0,
|
|
15032
|
+
resolved.coverImageUrl && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "aspect-video w-full overflow-hidden bg-muted", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14684
15033
|
"img",
|
|
14685
15034
|
{
|
|
14686
15035
|
src: resolved.coverImageUrl,
|
|
@@ -14689,24 +15038,51 @@ function EmbedCard({
|
|
|
14689
15038
|
className: "h-full w-full object-cover"
|
|
14690
15039
|
}
|
|
14691
15040
|
) }),
|
|
14692
|
-
/* @__PURE__ */ (0,
|
|
14693
|
-
/* @__PURE__ */ (0,
|
|
14694
|
-
resolved.role && /* @__PURE__ */ (0,
|
|
14695
|
-
resolved.excerpt && /* @__PURE__ */ (0,
|
|
15041
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "space-y-1 p-4", children: [
|
|
15042
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Heading, { level: headingLevel, className: "text-lg font-semibold", children: resolved.title }),
|
|
15043
|
+
resolved.role && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-sm text-muted-foreground", children: resolved.role }),
|
|
15044
|
+
resolved.excerpt && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "text-muted-foreground", children: resolved.excerpt })
|
|
14696
15045
|
] })
|
|
14697
15046
|
]
|
|
14698
15047
|
}
|
|
14699
15048
|
);
|
|
14700
15049
|
}
|
|
14701
15050
|
function PageEmbedBlock({ block, headingLevel, embedHref }) {
|
|
14702
|
-
return /* @__PURE__ */ (0,
|
|
15051
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
14703
15052
|
}
|
|
14704
15053
|
function ProfileEmbedBlock({
|
|
14705
15054
|
block,
|
|
14706
15055
|
headingLevel,
|
|
14707
15056
|
embedHref
|
|
14708
15057
|
}) {
|
|
14709
|
-
return /* @__PURE__ */ (0,
|
|
15058
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
15059
|
+
}
|
|
15060
|
+
function BeforeAfterBlock({ block }) {
|
|
15061
|
+
const { pairs, showCaption, caption } = block.data;
|
|
15062
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(BeforeAfterPairs, { pairs, showCaption, caption });
|
|
15063
|
+
}
|
|
15064
|
+
function ChipsBlock({ block }) {
|
|
15065
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ChipList, { items: block.data.items });
|
|
15066
|
+
}
|
|
15067
|
+
function ImageTextBlock({ block, headingLevel, headingId }) {
|
|
15068
|
+
const { kicker, imageUrl, alt, imageSide, mobileOrder, html: html5 } = block.data;
|
|
15069
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
15070
|
+
ImageTextSplit,
|
|
15071
|
+
{
|
|
15072
|
+
imageUrl,
|
|
15073
|
+
alt,
|
|
15074
|
+
imageSide,
|
|
15075
|
+
mobileOrder,
|
|
15076
|
+
html: html5,
|
|
15077
|
+
kicker,
|
|
15078
|
+
heading: block.heading,
|
|
15079
|
+
headingLevel,
|
|
15080
|
+
headingId
|
|
15081
|
+
}
|
|
15082
|
+
);
|
|
15083
|
+
}
|
|
15084
|
+
function IconCardsBlock({ block, headingLevel }) {
|
|
15085
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(IconCardGrid, { items: block.data.items, intro: block.data.intro, headingLevel });
|
|
14710
15086
|
}
|
|
14711
15087
|
var DEFAULT_RENDERERS = {
|
|
14712
15088
|
hero: HeroBlock,
|
|
@@ -14718,8 +15094,25 @@ var DEFAULT_RENDERERS = {
|
|
|
14718
15094
|
feature_list: FeatureListBlock,
|
|
14719
15095
|
gallery: GalleryBlock,
|
|
14720
15096
|
page_embed: PageEmbedBlock,
|
|
14721
|
-
profile_embed: ProfileEmbedBlock
|
|
15097
|
+
profile_embed: ProfileEmbedBlock,
|
|
15098
|
+
before_after: BeforeAfterBlock,
|
|
15099
|
+
chips: ChipsBlock,
|
|
15100
|
+
icon_cards: IconCardsBlock,
|
|
15101
|
+
image_text: ImageTextBlock
|
|
14722
15102
|
};
|
|
15103
|
+
var KICKER_TYPES = /* @__PURE__ */ new Set([
|
|
15104
|
+
"before_after",
|
|
15105
|
+
"chips",
|
|
15106
|
+
"icon_cards"
|
|
15107
|
+
]);
|
|
15108
|
+
var OWN_HEADING_TYPES = /* @__PURE__ */ new Set([
|
|
15109
|
+
"image_text"
|
|
15110
|
+
]);
|
|
15111
|
+
function kickerOf(type, block) {
|
|
15112
|
+
if (!KICKER_TYPES.has(type)) return null;
|
|
15113
|
+
const kicker = block.data.kicker;
|
|
15114
|
+
return typeof kicker === "string" && kicker.trim() !== "" ? kicker : null;
|
|
15115
|
+
}
|
|
14723
15116
|
var EMBED_TYPES = /* @__PURE__ */ new Set([
|
|
14724
15117
|
"page_embed",
|
|
14725
15118
|
"profile_embed"
|
|
@@ -14763,14 +15156,14 @@ function toIdFragment(value) {
|
|
|
14763
15156
|
function SectionCta2({ cta }) {
|
|
14764
15157
|
if (!hasUsableCta(cta)) return null;
|
|
14765
15158
|
const variant = toButtonVariant(cta.variant);
|
|
14766
|
-
return /* @__PURE__ */ (0,
|
|
15159
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14767
15160
|
"a",
|
|
14768
15161
|
{
|
|
14769
15162
|
href: cta.url,
|
|
14770
15163
|
"data-slot": "button",
|
|
14771
15164
|
"data-variant": variant,
|
|
14772
15165
|
"data-size": "default",
|
|
14773
|
-
className: (0,
|
|
15166
|
+
className: (0, import_utils15.cn)((0, import_button_variants2.buttonVariants)({ variant, size: "default" })),
|
|
14774
15167
|
...cta.isExternal ? { target: "_blank", rel: "noopener noreferrer" } : {},
|
|
14775
15168
|
children: cta.label
|
|
14776
15169
|
}
|
|
@@ -14795,18 +15188,29 @@ function PageBlocks({
|
|
|
14795
15188
|
const Renderer = components?.[type] ?? DEFAULT_RENDERERS[type];
|
|
14796
15189
|
const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
|
|
14797
15190
|
const background = block.backgroundColor;
|
|
15191
|
+
const kicker = kickerOf(type, block);
|
|
15192
|
+
const ownsHeading = OWN_HEADING_TYPES.has(type);
|
|
14798
15193
|
return [
|
|
14799
|
-
/* @__PURE__ */ (0,
|
|
15194
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
14800
15195
|
"section",
|
|
14801
15196
|
{
|
|
14802
15197
|
"data-slot": "page-block",
|
|
14803
15198
|
"data-block-type": type,
|
|
14804
15199
|
"aria-labelledby": headingId,
|
|
14805
15200
|
style: surfaceStyle(background),
|
|
14806
|
-
className: (0,
|
|
15201
|
+
className: (0, import_utils15.cn)("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
|
|
14807
15202
|
children: [
|
|
14808
|
-
|
|
14809
|
-
/* @__PURE__ */ (0,
|
|
15203
|
+
kicker && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { "data-slot": "page-block-kicker", className: (0, import_utils15.cn)("-mb-4", KICKER_CLASS_NAME), children: kicker }),
|
|
15204
|
+
block.heading && !ownsHeading && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Heading, { level: headingLevel, className: "text-2xl font-bold tracking-tight", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { id: headingId, children: block.heading }) }),
|
|
15205
|
+
ownsHeading ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
15206
|
+
Renderer,
|
|
15207
|
+
{
|
|
15208
|
+
block,
|
|
15209
|
+
headingLevel,
|
|
15210
|
+
embedHref,
|
|
15211
|
+
headingId
|
|
15212
|
+
}
|
|
15213
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14810
15214
|
Renderer,
|
|
14811
15215
|
{
|
|
14812
15216
|
block,
|
|
@@ -14814,7 +15218,7 @@ function PageBlocks({
|
|
|
14814
15218
|
embedHref
|
|
14815
15219
|
}
|
|
14816
15220
|
),
|
|
14817
|
-
/* @__PURE__ */ (0,
|
|
15221
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SectionCta2, { cta: block.cta })
|
|
14818
15222
|
]
|
|
14819
15223
|
},
|
|
14820
15224
|
block.id
|
|
@@ -14822,12 +15226,12 @@ function PageBlocks({
|
|
|
14822
15226
|
];
|
|
14823
15227
|
});
|
|
14824
15228
|
if (sections.length === 0) return null;
|
|
14825
|
-
return /* @__PURE__ */ (0,
|
|
15229
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: (0, import_utils15.cn)("space-y-12", className), "data-slot": "page-blocks", children: sections });
|
|
14826
15230
|
}
|
|
14827
15231
|
|
|
14828
15232
|
// src/components/shop-filters.tsx
|
|
14829
|
-
var
|
|
14830
|
-
var
|
|
15233
|
+
var import_utils16 = require("@reblu/site-ui/utils");
|
|
15234
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
14831
15235
|
var DEFAULT_SHOP_PRICE_BANDS = [
|
|
14832
15236
|
{ max: 2500 },
|
|
14833
15237
|
{ min: 2500, max: 5e3 },
|
|
@@ -14871,7 +15275,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
|
|
|
14871
15275
|
return "";
|
|
14872
15276
|
}
|
|
14873
15277
|
function OptionLink({ href, active, label, onActivate }) {
|
|
14874
|
-
return /* @__PURE__ */ (0,
|
|
15278
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
14875
15279
|
"a",
|
|
14876
15280
|
{
|
|
14877
15281
|
href,
|
|
@@ -14880,7 +15284,7 @@ function OptionLink({ href, active, label, onActivate }) {
|
|
|
14880
15284
|
event.preventDefault();
|
|
14881
15285
|
onActivate();
|
|
14882
15286
|
} : void 0,
|
|
14883
|
-
className: (0,
|
|
15287
|
+
className: (0, import_utils16.cn)(
|
|
14884
15288
|
"inline-flex items-center rounded-full border px-3 py-1 text-sm transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
14885
15289
|
active ? "border-transparent bg-primary text-primary-foreground" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground"
|
|
14886
15290
|
),
|
|
@@ -14889,9 +15293,9 @@ function OptionLink({ href, active, label, onActivate }) {
|
|
|
14889
15293
|
);
|
|
14890
15294
|
}
|
|
14891
15295
|
function FilterFieldset({ legend, children: children2 }) {
|
|
14892
|
-
return /* @__PURE__ */ (0,
|
|
14893
|
-
/* @__PURE__ */ (0,
|
|
14894
|
-
/* @__PURE__ */ (0,
|
|
15296
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("fieldset", { className: "space-y-2", children: [
|
|
15297
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("legend", { className: "text-sm font-medium text-foreground", children: legend }),
|
|
15298
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "flex flex-wrap gap-2", children: children2 })
|
|
14895
15299
|
] });
|
|
14896
15300
|
}
|
|
14897
15301
|
function ShopFilters({
|
|
@@ -14914,11 +15318,11 @@ function ShopFilters({
|
|
|
14914
15318
|
if (!shouldRenderShopFilters(facets, active)) {
|
|
14915
15319
|
return null;
|
|
14916
15320
|
}
|
|
14917
|
-
return /* @__PURE__ */ (0,
|
|
15321
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: (0, import_utils16.cn)("space-y-6", className), "data-slot": "shop-filters", children: [
|
|
14918
15322
|
visibleTaxonomies.map((axis) => {
|
|
14919
15323
|
const activeSlug = active.taxonomy?.[axis.key];
|
|
14920
|
-
return /* @__PURE__ */ (0,
|
|
14921
|
-
/* @__PURE__ */ (0,
|
|
15324
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(FilterFieldset, { legend: axis.label, children: [
|
|
15325
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
14922
15326
|
OptionLink,
|
|
14923
15327
|
{
|
|
14924
15328
|
href: hrefs.taxonomy(axis.key, void 0),
|
|
@@ -14933,7 +15337,7 @@ function ShopFilters({
|
|
|
14933
15337
|
),
|
|
14934
15338
|
axis.terms.map((term) => {
|
|
14935
15339
|
const isActive = activeSlug === term.slug;
|
|
14936
|
-
return /* @__PURE__ */ (0,
|
|
15340
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
14937
15341
|
OptionLink,
|
|
14938
15342
|
{
|
|
14939
15343
|
href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
|
|
@@ -14953,9 +15357,9 @@ function ShopFilters({
|
|
|
14953
15357
|
}),
|
|
14954
15358
|
visibleAttributes.map((attr) => {
|
|
14955
15359
|
const activeValues = toValueArray(active.attr?.[attr.key]);
|
|
14956
|
-
return /* @__PURE__ */ (0,
|
|
15360
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
|
|
14957
15361
|
const isActive = activeValues.includes(opt.value);
|
|
14958
|
-
return /* @__PURE__ */ (0,
|
|
15362
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
14959
15363
|
OptionLink,
|
|
14960
15364
|
{
|
|
14961
15365
|
href: hrefs.attr(attr.key, opt.value),
|
|
@@ -14973,11 +15377,11 @@ function ShopFilters({
|
|
|
14973
15377
|
);
|
|
14974
15378
|
}) }, attr.key);
|
|
14975
15379
|
}),
|
|
14976
|
-
showPriceGroup && /* @__PURE__ */ (0,
|
|
15380
|
+
showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
|
|
14977
15381
|
const isActive = active.priceMin === band.min && active.priceMax === band.max;
|
|
14978
15382
|
const nextMin = isActive ? void 0 : band.min;
|
|
14979
15383
|
const nextMax = isActive ? void 0 : band.max;
|
|
14980
|
-
return /* @__PURE__ */ (0,
|
|
15384
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
14981
15385
|
OptionLink,
|
|
14982
15386
|
{
|
|
14983
15387
|
href: hrefs.price(nextMin, nextMax),
|
|
@@ -14988,7 +15392,7 @@ function ShopFilters({
|
|
|
14988
15392
|
i
|
|
14989
15393
|
);
|
|
14990
15394
|
}) }),
|
|
14991
|
-
hasOnSale && /* @__PURE__ */ (0,
|
|
15395
|
+
hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
14992
15396
|
OptionLink,
|
|
14993
15397
|
{
|
|
14994
15398
|
href: hrefs.onSale(!active.onSale),
|
|
@@ -14997,7 +15401,7 @@ function ShopFilters({
|
|
|
14997
15401
|
onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
|
|
14998
15402
|
}
|
|
14999
15403
|
),
|
|
15000
|
-
/* @__PURE__ */ (0,
|
|
15404
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
15001
15405
|
"a",
|
|
15002
15406
|
{
|
|
15003
15407
|
href: hrefs.clearAll(),
|
|
@@ -15013,8 +15417,8 @@ function ShopFilters({
|
|
|
15013
15417
|
}
|
|
15014
15418
|
|
|
15015
15419
|
// src/components/course-catalog-filters.tsx
|
|
15016
|
-
var
|
|
15017
|
-
var
|
|
15420
|
+
var import_utils17 = require("@reblu/site-ui/utils");
|
|
15421
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
15018
15422
|
var DEFAULT_COURSE_PRICE_BANDS = [
|
|
15019
15423
|
{ max: 5e3 },
|
|
15020
15424
|
{ min: 5e3, max: 15e3 },
|
|
@@ -15067,9 +15471,9 @@ function CourseCatalogFilters({
|
|
|
15067
15471
|
const showPrice = enabled.price !== false;
|
|
15068
15472
|
const isFree = Boolean(active.free);
|
|
15069
15473
|
if (!showCategories && !showInstructors && !showPrice) return null;
|
|
15070
|
-
return /* @__PURE__ */ (0,
|
|
15071
|
-
showCategories && /* @__PURE__ */ (0,
|
|
15072
|
-
/* @__PURE__ */ (0,
|
|
15474
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: (0, import_utils17.cn)("space-y-6", className), "data-slot": "course-catalog-filters", children: [
|
|
15475
|
+
showCategories && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(FilterFieldset, { legend: t.category, children: [
|
|
15476
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15073
15477
|
OptionLink,
|
|
15074
15478
|
{
|
|
15075
15479
|
href: categoryHref(void 0),
|
|
@@ -15081,7 +15485,7 @@ function CourseCatalogFilters({
|
|
|
15081
15485
|
sortedCategories.map((category) => {
|
|
15082
15486
|
const isActive = active.category === category.slug;
|
|
15083
15487
|
const next2 = isActive ? void 0 : category.slug;
|
|
15084
|
-
return /* @__PURE__ */ (0,
|
|
15488
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15085
15489
|
OptionLink,
|
|
15086
15490
|
{
|
|
15087
15491
|
href: categoryHref(next2),
|
|
@@ -15093,8 +15497,8 @@ function CourseCatalogFilters({
|
|
|
15093
15497
|
);
|
|
15094
15498
|
})
|
|
15095
15499
|
] }),
|
|
15096
|
-
showInstructors && /* @__PURE__ */ (0,
|
|
15097
|
-
/* @__PURE__ */ (0,
|
|
15500
|
+
showInstructors && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(FilterFieldset, { legend: t.instructor, children: [
|
|
15501
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15098
15502
|
OptionLink,
|
|
15099
15503
|
{
|
|
15100
15504
|
href: hrefs.instructor(void 0),
|
|
@@ -15106,7 +15510,7 @@ function CourseCatalogFilters({
|
|
|
15106
15510
|
named.map((instructor) => {
|
|
15107
15511
|
const isActive = active.instructor === instructor.id;
|
|
15108
15512
|
const next2 = isActive ? void 0 : instructor.id;
|
|
15109
|
-
return /* @__PURE__ */ (0,
|
|
15513
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15110
15514
|
OptionLink,
|
|
15111
15515
|
{
|
|
15112
15516
|
href: hrefs.instructor(next2),
|
|
@@ -15118,8 +15522,8 @@ function CourseCatalogFilters({
|
|
|
15118
15522
|
);
|
|
15119
15523
|
})
|
|
15120
15524
|
] }),
|
|
15121
|
-
showPrice && /* @__PURE__ */ (0,
|
|
15122
|
-
/* @__PURE__ */ (0,
|
|
15525
|
+
showPrice && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(FilterFieldset, { legend: t.price, children: [
|
|
15526
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15123
15527
|
OptionLink,
|
|
15124
15528
|
{
|
|
15125
15529
|
href: hrefs.free(!isFree),
|
|
@@ -15134,7 +15538,7 @@ function CourseCatalogFilters({
|
|
|
15134
15538
|
const isActive = !isFree && active.priceMin === band.min && active.priceMax === band.max;
|
|
15135
15539
|
const nextMin = isActive ? void 0 : band.min;
|
|
15136
15540
|
const nextMax = isActive ? void 0 : band.max;
|
|
15137
|
-
return /* @__PURE__ */ (0,
|
|
15541
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15138
15542
|
OptionLink,
|
|
15139
15543
|
{
|
|
15140
15544
|
href: hrefs.price(nextMin, nextMax),
|
|
@@ -15146,7 +15550,7 @@ function CourseCatalogFilters({
|
|
|
15146
15550
|
);
|
|
15147
15551
|
})
|
|
15148
15552
|
] }),
|
|
15149
|
-
/* @__PURE__ */ (0,
|
|
15553
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15150
15554
|
"a",
|
|
15151
15555
|
{
|
|
15152
15556
|
href: hrefs.clearAll(),
|
|
@@ -15168,8 +15572,8 @@ function CourseCatalogFilters({
|
|
|
15168
15572
|
}
|
|
15169
15573
|
|
|
15170
15574
|
// src/components/cart-line-list.tsx
|
|
15171
|
-
var
|
|
15172
|
-
var
|
|
15575
|
+
var import_utils18 = require("@reblu/site-ui/utils");
|
|
15576
|
+
var import_jsx_runtime22 = (
|
|
15173
15577
|
// eslint-disable-next-line react/no-array-index-key -- entries are positional, SITE-built rows
|
|
15174
15578
|
require("react/jsx-runtime")
|
|
15175
15579
|
);
|
|
@@ -15185,17 +15589,17 @@ var DEFAULT_LABELS2 = {
|
|
|
15185
15589
|
function CartLineIncludes({ entries, note, className }) {
|
|
15186
15590
|
const hasNote = note != null && note !== false && note !== "";
|
|
15187
15591
|
if (entries.length === 0 && !hasNote) return null;
|
|
15188
|
-
return /* @__PURE__ */ (0,
|
|
15592
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
15189
15593
|
"div",
|
|
15190
15594
|
{
|
|
15191
|
-
className: (0,
|
|
15595
|
+
className: (0, import_utils18.cn)("mt-2 space-y-2 rounded-lg bg-muted px-4 py-3 text-sm", className),
|
|
15192
15596
|
"data-slot": "cart-line-includes",
|
|
15193
15597
|
children: [
|
|
15194
|
-
entries.length > 0 && /* @__PURE__ */ (0,
|
|
15195
|
-
/* @__PURE__ */ (0,
|
|
15196
|
-
/* @__PURE__ */ (0,
|
|
15598
|
+
entries.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("dl", { className: "grid grid-cols-[max-content_1fr] gap-x-4 gap-y-1.5", children: entries.map((entry, idx) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "contents", children: [
|
|
15599
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("dt", { className: "font-semibold text-muted-foreground", children: entry.label }),
|
|
15600
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("dd", { className: "m-0", children: entry.value })
|
|
15197
15601
|
] }, idx)) }),
|
|
15198
|
-
hasNote && /* @__PURE__ */ (0,
|
|
15602
|
+
hasNote && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-muted-foreground", children: note })
|
|
15199
15603
|
]
|
|
15200
15604
|
}
|
|
15201
15605
|
);
|
|
@@ -15224,9 +15628,9 @@ function CartLineList({
|
|
|
15224
15628
|
}) {
|
|
15225
15629
|
const t = { ...DEFAULT_LABELS2, ...labels };
|
|
15226
15630
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
15227
|
-
return /* @__PURE__ */ (0,
|
|
15228
|
-
/* @__PURE__ */ (0,
|
|
15229
|
-
noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0,
|
|
15631
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: (0, import_utils18.cn)("space-y-4", className), "data-slot": "cart-line-list", children: [
|
|
15632
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { "aria-live": "polite", className: "sr-only", children: liveMessage }),
|
|
15633
|
+
noticeContent != null && noticeContent !== false && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15230
15634
|
"div",
|
|
15231
15635
|
{
|
|
15232
15636
|
role: "status",
|
|
@@ -15235,34 +15639,34 @@ function CartLineList({
|
|
|
15235
15639
|
children: noticeContent
|
|
15236
15640
|
}
|
|
15237
15641
|
),
|
|
15238
|
-
/* @__PURE__ */ (0,
|
|
15642
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
|
|
15239
15643
|
const maxQty = item.maxStock ?? Infinity;
|
|
15240
15644
|
const atMax = item.quantity >= maxQty;
|
|
15241
15645
|
const atMin = item.quantity <= 1;
|
|
15242
15646
|
const message = lineMessage?.(item);
|
|
15243
15647
|
const includes = lineIncludes?.(item);
|
|
15244
|
-
return /* @__PURE__ */ (0,
|
|
15648
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
15245
15649
|
"li",
|
|
15246
15650
|
{
|
|
15247
15651
|
className: "flex gap-4 rounded-xl border border-border bg-card p-4",
|
|
15248
15652
|
children: [
|
|
15249
|
-
/* @__PURE__ */ (0,
|
|
15250
|
-
/* @__PURE__ */ (0,
|
|
15251
|
-
/* @__PURE__ */ (0,
|
|
15252
|
-
item.variantName && /* @__PURE__ */ (0,
|
|
15253
|
-
/* @__PURE__ */ (0,
|
|
15653
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "h-20 w-20 flex-shrink-0 overflow-hidden rounded-lg bg-muted", children: item.imageUrl ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("img", { src: item.imageUrl, alt: item.name, className: "h-full w-full object-cover" }) : null }),
|
|
15654
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
15655
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "truncate text-sm font-semibold leading-tight", children: item.name }),
|
|
15656
|
+
item.variantName && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "mt-0.5 text-xs text-muted-foreground", children: item.variantName }),
|
|
15657
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("p", { className: "mt-1 text-sm text-muted-foreground", children: [
|
|
15254
15658
|
formatPrice(item.unitPrice, currencyCode, locale),
|
|
15255
15659
|
" ",
|
|
15256
15660
|
t.unitPriceSuffix
|
|
15257
15661
|
] }),
|
|
15258
|
-
/* @__PURE__ */ (0,
|
|
15662
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
15259
15663
|
"div",
|
|
15260
15664
|
{
|
|
15261
15665
|
role: "group",
|
|
15262
15666
|
"aria-label": t.quantityLabel,
|
|
15263
15667
|
className: "mt-3 flex items-center gap-3",
|
|
15264
15668
|
children: [
|
|
15265
|
-
/* @__PURE__ */ (0,
|
|
15669
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15266
15670
|
"button",
|
|
15267
15671
|
{
|
|
15268
15672
|
type: "button",
|
|
@@ -15273,8 +15677,8 @@ function CartLineList({
|
|
|
15273
15677
|
children: "\u2212"
|
|
15274
15678
|
}
|
|
15275
15679
|
),
|
|
15276
|
-
/* @__PURE__ */ (0,
|
|
15277
|
-
/* @__PURE__ */ (0,
|
|
15680
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "w-8 text-center text-sm font-semibold tabular-nums", children: item.quantity }),
|
|
15681
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15278
15682
|
"button",
|
|
15279
15683
|
{
|
|
15280
15684
|
type: "button",
|
|
@@ -15285,7 +15689,7 @@ function CartLineList({
|
|
|
15285
15689
|
children: "+"
|
|
15286
15690
|
}
|
|
15287
15691
|
),
|
|
15288
|
-
onRemove && /* @__PURE__ */ (0,
|
|
15692
|
+
onRemove && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15289
15693
|
"button",
|
|
15290
15694
|
{
|
|
15291
15695
|
type: "button",
|
|
@@ -15298,7 +15702,7 @@ function CartLineList({
|
|
|
15298
15702
|
]
|
|
15299
15703
|
}
|
|
15300
15704
|
),
|
|
15301
|
-
message != null && message !== false && /* @__PURE__ */ (0,
|
|
15705
|
+
message != null && message !== false && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15302
15706
|
"p",
|
|
15303
15707
|
{
|
|
15304
15708
|
className: "mt-2 text-sm text-destructive",
|
|
@@ -15306,12 +15710,12 @@ function CartLineList({
|
|
|
15306
15710
|
children: message
|
|
15307
15711
|
}
|
|
15308
15712
|
),
|
|
15309
|
-
includes != null && includes !== false && /* @__PURE__ */ (0,
|
|
15310
|
-
/* @__PURE__ */ (0,
|
|
15713
|
+
includes != null && includes !== false && /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("details", { className: "mt-2", "data-slot": "cart-line-list-includes", children: [
|
|
15714
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("summary", { className: "cursor-pointer text-sm font-semibold text-primary", children: t.includesSummary }),
|
|
15311
15715
|
includes
|
|
15312
15716
|
] })
|
|
15313
15717
|
] }),
|
|
15314
|
-
/* @__PURE__ */ (0,
|
|
15718
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "flex-shrink-0 text-right", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-base font-bold", children: formatPrice(item.unitPrice * item.quantity, currencyCode, locale) }) })
|
|
15315
15719
|
]
|
|
15316
15720
|
},
|
|
15317
15721
|
lineKey(item.productId, item.variantId)
|
|
@@ -15321,8 +15725,8 @@ function CartLineList({
|
|
|
15321
15725
|
}
|
|
15322
15726
|
|
|
15323
15727
|
// src/components/cart-summary.tsx
|
|
15324
|
-
var
|
|
15325
|
-
var
|
|
15728
|
+
var import_utils19 = require("@reblu/site-ui/utils");
|
|
15729
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
15326
15730
|
var DEFAULT_LABELS3 = {
|
|
15327
15731
|
subtotal: "Subtotal",
|
|
15328
15732
|
discountPrefix: "Descuento",
|
|
@@ -15352,37 +15756,37 @@ function CartSummary({
|
|
|
15352
15756
|
const hasDiscount = Boolean(discountAmount && discountAmount > 0);
|
|
15353
15757
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
15354
15758
|
const hasNotice = noticeContent != null && noticeContent !== false;
|
|
15355
|
-
const breakdown = /* @__PURE__ */ (0,
|
|
15759
|
+
const breakdown = /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
15356
15760
|
"dl",
|
|
15357
15761
|
{
|
|
15358
|
-
className: (0,
|
|
15762
|
+
className: (0, import_utils19.cn)("space-y-2 text-sm", !hasNotice && className),
|
|
15359
15763
|
"data-slot": "cart-summary",
|
|
15360
15764
|
children: [
|
|
15361
|
-
/* @__PURE__ */ (0,
|
|
15362
|
-
/* @__PURE__ */ (0,
|
|
15363
|
-
/* @__PURE__ */ (0,
|
|
15765
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
15766
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("dt", { children: t.subtotal }),
|
|
15767
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("dd", { children: formatPrice(subtotal, currencyCode, locale) })
|
|
15364
15768
|
] }),
|
|
15365
|
-
hasDiscount && /* @__PURE__ */ (0,
|
|
15366
|
-
/* @__PURE__ */ (0,
|
|
15367
|
-
/* @__PURE__ */ (0,
|
|
15769
|
+
hasDiscount && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex justify-between text-green-600 dark:text-green-400", children: [
|
|
15770
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("dt", { children: autoDiscount ? t.staffDiscountApplied : `${t.discountPrefix}${discountCode ? ` (${discountCode})` : ""}` }),
|
|
15771
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("dd", { children: [
|
|
15368
15772
|
"-",
|
|
15369
15773
|
formatPrice(discountAmount, currencyCode, locale)
|
|
15370
15774
|
] })
|
|
15371
15775
|
] }),
|
|
15372
|
-
shippingEnabled && /* @__PURE__ */ (0,
|
|
15373
|
-
/* @__PURE__ */ (0,
|
|
15374
|
-
/* @__PURE__ */ (0,
|
|
15776
|
+
shippingEnabled && /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex justify-between text-muted-foreground", children: [
|
|
15777
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("dt", { children: t.shipping }),
|
|
15778
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("dd", { children: shipping == null || !Number.isFinite(shipping) ? t.shippingCalculated : shipping === 0 ? t.freeShipping : formatPrice(shipping, currencyCode, locale) })
|
|
15375
15779
|
] }),
|
|
15376
|
-
/* @__PURE__ */ (0,
|
|
15377
|
-
/* @__PURE__ */ (0,
|
|
15378
|
-
/* @__PURE__ */ (0,
|
|
15780
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex justify-between border-t border-border pt-2 text-base font-bold", children: [
|
|
15781
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("dt", { children: t.total }),
|
|
15782
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("dd", { children: formatPrice(total, currencyCode, locale) })
|
|
15379
15783
|
] })
|
|
15380
15784
|
]
|
|
15381
15785
|
}
|
|
15382
15786
|
);
|
|
15383
15787
|
if (!hasNotice) return breakdown;
|
|
15384
|
-
return /* @__PURE__ */ (0,
|
|
15385
|
-
/* @__PURE__ */ (0,
|
|
15788
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: (0, import_utils19.cn)("space-y-3", className), "data-slot": "cart-summary-wrapper", children: [
|
|
15789
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
15386
15790
|
"div",
|
|
15387
15791
|
{
|
|
15388
15792
|
role: "status",
|
|
@@ -15396,8 +15800,8 @@ function CartSummary({
|
|
|
15396
15800
|
}
|
|
15397
15801
|
|
|
15398
15802
|
// src/components/cart-adjustments-notice.tsx
|
|
15399
|
-
var
|
|
15400
|
-
var
|
|
15803
|
+
var import_utils20 = require("@reblu/site-ui/utils");
|
|
15804
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
15401
15805
|
var DEFAULT_LABELS4 = {
|
|
15402
15806
|
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.`,
|
|
15403
15807
|
quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
|
|
@@ -15431,20 +15835,20 @@ function CartAdjustmentsNotice({
|
|
|
15431
15835
|
);
|
|
15432
15836
|
}
|
|
15433
15837
|
if (messages.length === 0) return null;
|
|
15434
|
-
return /* @__PURE__ */ (0,
|
|
15838
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15435
15839
|
"div",
|
|
15436
15840
|
{
|
|
15437
15841
|
role: "status",
|
|
15438
|
-
className: (0,
|
|
15842
|
+
className: (0, import_utils20.cn)("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
|
|
15439
15843
|
"data-slot": "cart-adjustments-notice",
|
|
15440
|
-
children: messages.length === 1 ? /* @__PURE__ */ (0,
|
|
15844
|
+
children: messages.length === 1 ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { children: messages[0] }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("ul", { className: "list-disc space-y-1 pl-4", children: messages.map((message, index) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("li", { children: message }, index)) })
|
|
15441
15845
|
}
|
|
15442
15846
|
);
|
|
15443
15847
|
}
|
|
15444
15848
|
|
|
15445
15849
|
// src/components/added-to-cart-toast.tsx
|
|
15446
|
-
var
|
|
15447
|
-
var
|
|
15850
|
+
var import_utils21 = require("@reblu/site-ui/utils");
|
|
15851
|
+
var import_jsx_runtime25 = (
|
|
15448
15852
|
// eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
|
|
15449
15853
|
require("react/jsx-runtime")
|
|
15450
15854
|
);
|
|
@@ -15467,32 +15871,32 @@ function AddedToCartToast({
|
|
|
15467
15871
|
const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
|
|
15468
15872
|
const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
|
|
15469
15873
|
const variant = status === "success" ? "success" : "error";
|
|
15470
|
-
return /* @__PURE__ */ (0,
|
|
15874
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
15471
15875
|
"div",
|
|
15472
15876
|
{
|
|
15473
15877
|
"data-slot": "added-to-cart-toast",
|
|
15474
15878
|
"data-variant": variant,
|
|
15475
|
-
className: (0,
|
|
15879
|
+
className: (0, import_utils21.cn)(
|
|
15476
15880
|
"flex items-center gap-3 rounded-xl border border-border bg-card p-3 text-sm shadow-lg",
|
|
15477
15881
|
variant === "success" && "border-green-600/30 dark:border-green-400/30",
|
|
15478
15882
|
variant === "error" && "border-destructive/30",
|
|
15479
15883
|
className
|
|
15480
15884
|
),
|
|
15481
15885
|
children: [
|
|
15482
|
-
hasThumbnail && /* @__PURE__ */ (0,
|
|
15483
|
-
/* @__PURE__ */ (0,
|
|
15484
|
-
/* @__PURE__ */ (0,
|
|
15485
|
-
/* @__PURE__ */ (0,
|
|
15886
|
+
hasThumbnail && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("img", { src: imageUrl, alt: productName, className: "h-10 w-10 flex-shrink-0 rounded-lg object-cover" }),
|
|
15887
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
15888
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "truncate font-semibold text-foreground", children: productName }),
|
|
15889
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "truncate text-muted-foreground", children: quantity && quantity > 1 ? `${message} \xB7 x${quantity}` : message })
|
|
15486
15890
|
] }),
|
|
15487
|
-
/* @__PURE__ */ (0,
|
|
15891
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "flex-shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("a", { href: cartHref, className: "text-sm font-semibold text-primary underline-offset-2 hover:underline", children: t.viewCart }) })
|
|
15488
15892
|
]
|
|
15489
15893
|
}
|
|
15490
15894
|
);
|
|
15491
15895
|
}
|
|
15492
15896
|
|
|
15493
15897
|
// src/components/checkout-login-prompt.tsx
|
|
15494
|
-
var
|
|
15495
|
-
var
|
|
15898
|
+
var import_utils22 = require("@reblu/site-ui/utils");
|
|
15899
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
15496
15900
|
var DEFAULT_LABELS6 = {
|
|
15497
15901
|
title: "Identificaci\xF3n",
|
|
15498
15902
|
description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
|
|
@@ -15519,26 +15923,26 @@ function CheckoutLoginPrompt({
|
|
|
15519
15923
|
if (!open) return null;
|
|
15520
15924
|
const t = { ...DEFAULT_LABELS6, ...labels };
|
|
15521
15925
|
const isValidEmail = EMAIL_PATTERN.test(email.trim());
|
|
15522
|
-
return /* @__PURE__ */ (0,
|
|
15523
|
-
/* @__PURE__ */ (0,
|
|
15524
|
-
/* @__PURE__ */ (0,
|
|
15926
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
|
|
15927
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "fixed inset-0 z-50 bg-black/50", onClick: onClose, "aria-hidden": "true" }),
|
|
15928
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
15525
15929
|
"div",
|
|
15526
15930
|
{
|
|
15527
15931
|
role: "dialog",
|
|
15528
15932
|
"aria-modal": "true",
|
|
15529
15933
|
"aria-labelledby": "checkout-login-prompt-title",
|
|
15530
15934
|
"data-slot": "checkout-login-prompt",
|
|
15531
|
-
className: (0,
|
|
15935
|
+
className: (0, import_utils22.cn)(
|
|
15532
15936
|
"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",
|
|
15533
15937
|
className
|
|
15534
15938
|
),
|
|
15535
15939
|
children: [
|
|
15536
|
-
/* @__PURE__ */ (0,
|
|
15537
|
-
/* @__PURE__ */ (0,
|
|
15538
|
-
/* @__PURE__ */ (0,
|
|
15539
|
-
/* @__PURE__ */ (0,
|
|
15940
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex items-start justify-between gap-3", children: [
|
|
15941
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { children: [
|
|
15942
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("h2", { id: "checkout-login-prompt-title", className: "text-xl font-bold", children: t.title }),
|
|
15943
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "mt-1 text-sm text-muted-foreground", children: t.description })
|
|
15540
15944
|
] }),
|
|
15541
|
-
/* @__PURE__ */ (0,
|
|
15945
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
15542
15946
|
"button",
|
|
15543
15947
|
{
|
|
15544
15948
|
type: "button",
|
|
@@ -15549,9 +15953,9 @@ function CheckoutLoginPrompt({
|
|
|
15549
15953
|
}
|
|
15550
15954
|
)
|
|
15551
15955
|
] }),
|
|
15552
|
-
/* @__PURE__ */ (0,
|
|
15553
|
-
/* @__PURE__ */ (0,
|
|
15554
|
-
/* @__PURE__ */ (0,
|
|
15956
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "space-y-2", children: [
|
|
15957
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("label", { htmlFor: "checkout-login-prompt-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
15958
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
15555
15959
|
"input",
|
|
15556
15960
|
{
|
|
15557
15961
|
id: "checkout-login-prompt-email",
|
|
@@ -15560,29 +15964,29 @@ function CheckoutLoginPrompt({
|
|
|
15560
15964
|
value: email,
|
|
15561
15965
|
onChange: (e) => onEmailChange(e.target.value),
|
|
15562
15966
|
placeholder: t.emailPlaceholder,
|
|
15563
|
-
className: (0,
|
|
15967
|
+
className: (0, import_utils22.cn)(
|
|
15564
15968
|
"w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
|
|
15565
15969
|
error ? "border-destructive" : "border-border focus:border-primary"
|
|
15566
15970
|
)
|
|
15567
15971
|
}
|
|
15568
15972
|
),
|
|
15569
|
-
error && /* @__PURE__ */ (0,
|
|
15973
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-xs text-destructive", children: error })
|
|
15570
15974
|
] }),
|
|
15571
|
-
/* @__PURE__ */ (0,
|
|
15572
|
-
/* @__PURE__ */ (0,
|
|
15975
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "space-y-2", children: [
|
|
15976
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
15573
15977
|
"button",
|
|
15574
15978
|
{
|
|
15575
15979
|
type: "button",
|
|
15576
15980
|
onClick: onSubmitEmail,
|
|
15577
15981
|
disabled: checking || !isValidEmail,
|
|
15578
|
-
className: (0,
|
|
15982
|
+
className: (0, import_utils22.cn)(
|
|
15579
15983
|
"flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-2.5 text-sm font-semibold transition-all",
|
|
15580
15984
|
checking || !isValidEmail ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
|
|
15581
15985
|
),
|
|
15582
15986
|
children: checking ? t.checking : t.continueWithEmail
|
|
15583
15987
|
}
|
|
15584
15988
|
),
|
|
15585
|
-
/* @__PURE__ */ (0,
|
|
15989
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
15586
15990
|
"button",
|
|
15587
15991
|
{
|
|
15588
15992
|
type: "button",
|
|
@@ -15599,9 +16003,9 @@ function CheckoutLoginPrompt({
|
|
|
15599
16003
|
}
|
|
15600
16004
|
|
|
15601
16005
|
// src/components/checkout-form.tsx
|
|
15602
|
-
var
|
|
16006
|
+
var import_utils23 = require("@reblu/site-ui/utils");
|
|
15603
16007
|
var import_phone_input = require("@reblu/site-ui/phone-input");
|
|
15604
|
-
var
|
|
16008
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
15605
16009
|
var DEFAULT_LABELS7 = {
|
|
15606
16010
|
contactTitle: "Datos de contacto",
|
|
15607
16011
|
nameLabel: "Nombre completo",
|
|
@@ -15657,22 +16061,22 @@ function CheckoutForm({
|
|
|
15657
16061
|
event.preventDefault();
|
|
15658
16062
|
if (discountCode.trim() && !discountApplying) onApplyDiscount();
|
|
15659
16063
|
}
|
|
15660
|
-
return /* @__PURE__ */ (0,
|
|
16064
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
|
|
15661
16065
|
loginPrompt,
|
|
15662
|
-
/* @__PURE__ */ (0,
|
|
16066
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
15663
16067
|
"form",
|
|
15664
16068
|
{
|
|
15665
16069
|
"data-testid": "checkout-form",
|
|
15666
16070
|
onSubmit,
|
|
15667
|
-
className: (0,
|
|
16071
|
+
className: (0, import_utils23.cn)("space-y-8", className),
|
|
15668
16072
|
"data-slot": "checkout-form",
|
|
15669
16073
|
children: [
|
|
15670
|
-
/* @__PURE__ */ (0,
|
|
15671
|
-
/* @__PURE__ */ (0,
|
|
15672
|
-
/* @__PURE__ */ (0,
|
|
15673
|
-
/* @__PURE__ */ (0,
|
|
15674
|
-
/* @__PURE__ */ (0,
|
|
15675
|
-
/* @__PURE__ */ (0,
|
|
16074
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("section", { className: "space-y-4", children: [
|
|
16075
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.contactTitle }),
|
|
16076
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
16077
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "space-y-1", children: [
|
|
16078
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("label", { htmlFor: "checkout-form-name", className: "text-sm font-medium", children: t.nameLabel }),
|
|
16079
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15676
16080
|
"input",
|
|
15677
16081
|
{
|
|
15678
16082
|
id: "checkout-form-name",
|
|
@@ -15681,17 +16085,17 @@ function CheckoutForm({
|
|
|
15681
16085
|
value: contact.name,
|
|
15682
16086
|
onChange: (e) => patchContact({ name: e.target.value }),
|
|
15683
16087
|
placeholder: t.namePlaceholder,
|
|
15684
|
-
className: (0,
|
|
16088
|
+
className: (0, import_utils23.cn)(
|
|
15685
16089
|
"w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
|
|
15686
16090
|
contactErrors?.name ? "border-destructive" : "border-border focus:border-primary"
|
|
15687
16091
|
)
|
|
15688
16092
|
}
|
|
15689
16093
|
),
|
|
15690
|
-
contactErrors?.name && /* @__PURE__ */ (0,
|
|
16094
|
+
contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
|
|
15691
16095
|
] }),
|
|
15692
|
-
/* @__PURE__ */ (0,
|
|
15693
|
-
/* @__PURE__ */ (0,
|
|
15694
|
-
/* @__PURE__ */ (0,
|
|
16096
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "space-y-1", children: [
|
|
16097
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("label", { htmlFor: "checkout-form-email", className: "text-sm font-medium", children: t.emailLabel }),
|
|
16098
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15695
16099
|
"input",
|
|
15696
16100
|
{
|
|
15697
16101
|
id: "checkout-form-email",
|
|
@@ -15700,15 +16104,15 @@ function CheckoutForm({
|
|
|
15700
16104
|
value: contact.email,
|
|
15701
16105
|
onChange: (e) => patchContact({ email: e.target.value }),
|
|
15702
16106
|
placeholder: t.emailPlaceholder,
|
|
15703
|
-
className: (0,
|
|
16107
|
+
className: (0, import_utils23.cn)(
|
|
15704
16108
|
"w-full rounded-lg border bg-background px-3 py-2 text-sm transition focus:outline-none focus:ring-2 focus:ring-primary/20",
|
|
15705
16109
|
contactErrors?.email ? "border-destructive" : "border-border focus:border-primary"
|
|
15706
16110
|
)
|
|
15707
16111
|
}
|
|
15708
16112
|
),
|
|
15709
|
-
contactErrors?.email && /* @__PURE__ */ (0,
|
|
16113
|
+
contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
|
|
15710
16114
|
] }),
|
|
15711
|
-
/* @__PURE__ */ (0,
|
|
16115
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15712
16116
|
import_phone_input.PhoneInput,
|
|
15713
16117
|
{
|
|
15714
16118
|
id: "checkout-form-phone",
|
|
@@ -15722,26 +16126,26 @@ function CheckoutForm({
|
|
|
15722
16126
|
] })
|
|
15723
16127
|
] }),
|
|
15724
16128
|
children2,
|
|
15725
|
-
generalError ? /* @__PURE__ */ (0,
|
|
15726
|
-
/* @__PURE__ */ (0,
|
|
15727
|
-
/* @__PURE__ */ (0,
|
|
15728
|
-
autoDiscount ? /* @__PURE__ */ (0,
|
|
16129
|
+
generalError ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { role: "alert", className: "text-sm text-destructive", children: generalError }) : null,
|
|
16130
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("section", { className: "space-y-3", children: [
|
|
16131
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("h2", { className: "border-b border-border pb-2 text-lg font-semibold", children: t.discountTitle }),
|
|
16132
|
+
autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
15729
16133
|
"div",
|
|
15730
16134
|
{
|
|
15731
16135
|
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",
|
|
15732
16136
|
"data-slot": "checkout-staff-discount",
|
|
15733
16137
|
children: [
|
|
15734
|
-
/* @__PURE__ */ (0,
|
|
15735
|
-
/* @__PURE__ */ (0,
|
|
16138
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "font-semibold", children: t.staffDiscountApplied }),
|
|
16139
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(autoDiscount.amount, currencyCode, locale)) })
|
|
15736
16140
|
]
|
|
15737
16141
|
}
|
|
15738
16142
|
) : null,
|
|
15739
|
-
appliedDiscount && !autoDiscount ? /* @__PURE__ */ (0,
|
|
15740
|
-
/* @__PURE__ */ (0,
|
|
15741
|
-
/* @__PURE__ */ (0,
|
|
15742
|
-
/* @__PURE__ */ (0,
|
|
16143
|
+
appliedDiscount && !autoDiscount ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center justify-between rounded-lg border border-green-200 bg-green-50 px-4 py-3 dark:border-green-800 dark:bg-green-900/20", children: [
|
|
16144
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center gap-2 text-sm text-green-700 dark:text-green-400", children: [
|
|
16145
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "font-semibold", children: appliedDiscount.code }),
|
|
16146
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: t.discountAppliedSuffix(formatPrice(appliedDiscount.amount, currencyCode, locale)) })
|
|
15743
16147
|
] }),
|
|
15744
|
-
/* @__PURE__ */ (0,
|
|
16148
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15745
16149
|
"button",
|
|
15746
16150
|
{
|
|
15747
16151
|
type: "button",
|
|
@@ -15751,9 +16155,9 @@ function CheckoutForm({
|
|
|
15751
16155
|
children: t.removeDiscount
|
|
15752
16156
|
}
|
|
15753
16157
|
)
|
|
15754
|
-
] }) : /* @__PURE__ */ (0,
|
|
15755
|
-
/* @__PURE__ */ (0,
|
|
15756
|
-
/* @__PURE__ */ (0,
|
|
16158
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex gap-2", children: [
|
|
16159
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("label", { htmlFor: "checkout-form-discount-code", className: "sr-only", children: t.discountTitle }),
|
|
16160
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15757
16161
|
"input",
|
|
15758
16162
|
{
|
|
15759
16163
|
id: "checkout-form-discount-code",
|
|
@@ -15765,7 +16169,7 @@ function CheckoutForm({
|
|
|
15765
16169
|
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"
|
|
15766
16170
|
}
|
|
15767
16171
|
),
|
|
15768
|
-
/* @__PURE__ */ (0,
|
|
16172
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15769
16173
|
"button",
|
|
15770
16174
|
{
|
|
15771
16175
|
type: "button",
|
|
@@ -15776,14 +16180,14 @@ function CheckoutForm({
|
|
|
15776
16180
|
}
|
|
15777
16181
|
)
|
|
15778
16182
|
] }),
|
|
15779
|
-
discountError && /* @__PURE__ */ (0,
|
|
16183
|
+
discountError && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "text-xs text-destructive", children: discountError })
|
|
15780
16184
|
] }),
|
|
15781
|
-
/* @__PURE__ */ (0,
|
|
16185
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15782
16186
|
"button",
|
|
15783
16187
|
{
|
|
15784
16188
|
type: "submit",
|
|
15785
16189
|
disabled: submitting || submitDisabled,
|
|
15786
|
-
className: (0,
|
|
16190
|
+
className: (0, import_utils23.cn)(
|
|
15787
16191
|
"flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-3 font-semibold transition-all",
|
|
15788
16192
|
submitting || submitDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
|
|
15789
16193
|
),
|
|
@@ -15797,11 +16201,11 @@ function CheckoutForm({
|
|
|
15797
16201
|
}
|
|
15798
16202
|
|
|
15799
16203
|
// src/components/order-confirmation.tsx
|
|
15800
|
-
var
|
|
16204
|
+
var import_utils25 = require("@reblu/site-ui/utils");
|
|
15801
16205
|
|
|
15802
16206
|
// src/components/order-invoice-link.tsx
|
|
15803
|
-
var
|
|
15804
|
-
var
|
|
16207
|
+
var import_utils24 = require("@reblu/site-ui/utils");
|
|
16208
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
15805
16209
|
var DEFAULT_LABELS8 = {
|
|
15806
16210
|
linkLabel: "Descargar la factura {number}",
|
|
15807
16211
|
signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
|
|
@@ -15809,8 +16213,8 @@ var DEFAULT_LABELS8 = {
|
|
|
15809
16213
|
function OrderInvoiceLink({ invoice, labels, className }) {
|
|
15810
16214
|
if (!invoice) return null;
|
|
15811
16215
|
const t = { ...DEFAULT_LABELS8, ...labels };
|
|
15812
|
-
return /* @__PURE__ */ (0,
|
|
15813
|
-
/* @__PURE__ */ (0,
|
|
16216
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: (0, import_utils24.cn)("space-y-1 text-sm", className), "data-slot": "order-invoice-link", children: [
|
|
16217
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
15814
16218
|
"a",
|
|
15815
16219
|
{
|
|
15816
16220
|
href: invoice.url,
|
|
@@ -15818,19 +16222,21 @@ function OrderInvoiceLink({ invoice, labels, className }) {
|
|
|
15818
16222
|
children: t.linkLabel.replace("{number}", invoice.number)
|
|
15819
16223
|
}
|
|
15820
16224
|
),
|
|
15821
|
-
/* @__PURE__ */ (0,
|
|
16225
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: "text-muted-foreground", children: t.signInHint })
|
|
15822
16226
|
] });
|
|
15823
16227
|
}
|
|
15824
16228
|
|
|
15825
16229
|
// src/components/order-confirmation.tsx
|
|
15826
|
-
var
|
|
16230
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
15827
16231
|
var DEFAULT_LABELS9 = {
|
|
15828
16232
|
pollingTitle: "Confirmando tu pedido\u2026",
|
|
15829
16233
|
pollingDescription: "Estamos procesando el pago, un momento\u2026",
|
|
15830
16234
|
foundTitle: "\xA1Pedido confirmado!",
|
|
15831
|
-
// REB-
|
|
15832
|
-
//
|
|
15833
|
-
|
|
16235
|
+
// REB-1200 (owner OK 6-Nov): no «con tu acceso» sentence — buyers who
|
|
16236
|
+
// already have an account (staff, returning clients) get no new access.
|
|
16237
|
+
// `{number}` and `{email}` come from the order. Files are never served here.
|
|
16238
|
+
foundDescription: "Tu pedido {number} est\xE1 confirmado. Te hemos enviado el resumen a {email}.",
|
|
16239
|
+
foundWithoutOrderDescription: "Tu pedido est\xE1 confirmado.",
|
|
15834
16240
|
timeoutTitle: "Pago recibido",
|
|
15835
16241
|
timeoutDescription: "Tu pago se ha procesado. Recibir\xE1s un email de confirmaci\xF3n en breve.",
|
|
15836
16242
|
orderNumberLabel: "Pedido confirmado",
|
|
@@ -15856,6 +16262,12 @@ var DEFAULT_LABELS9 = {
|
|
|
15856
16262
|
invoiceLinkLabel: "Descargar la factura {number}",
|
|
15857
16263
|
invoiceSignInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
|
|
15858
16264
|
};
|
|
16265
|
+
function foundDescription(t, order) {
|
|
16266
|
+
const template = t.foundDescription;
|
|
16267
|
+
if (!/\{(number|email)\}/.test(template)) return template;
|
|
16268
|
+
if (!order) return t.foundWithoutOrderDescription;
|
|
16269
|
+
return template.replaceAll("{number}", order.orderNumber).replaceAll("{email}", order.customerEmail);
|
|
16270
|
+
}
|
|
15859
16271
|
function OrderConfirmation({
|
|
15860
16272
|
status,
|
|
15861
16273
|
order,
|
|
@@ -15882,50 +16294,50 @@ function OrderConfirmation({
|
|
|
15882
16294
|
}
|
|
15883
16295
|
if (status === "not_found") return { title: t.notFoundTitle, description: t.notFoundDescription };
|
|
15884
16296
|
if (status === "error") return { title: t.errorTitle, description: t.errorDescription };
|
|
15885
|
-
if (isFound || order) return { title: t.foundTitle, description: t
|
|
16297
|
+
if (isFound || order) return { title: t.foundTitle, description: foundDescription(t, order) };
|
|
15886
16298
|
return { title: t.timeoutTitle, description: t.timeoutDescription };
|
|
15887
16299
|
})();
|
|
15888
16300
|
const showFullOrderSummary = Boolean(order) && (isFound || status === "timeout");
|
|
15889
16301
|
const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
|
|
15890
16302
|
const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
|
|
15891
16303
|
const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
|
|
15892
|
-
return /* @__PURE__ */ (0,
|
|
15893
|
-
/* @__PURE__ */ (0,
|
|
15894
|
-
/* @__PURE__ */ (0,
|
|
15895
|
-
showFullOrderSummary && order && /* @__PURE__ */ (0,
|
|
15896
|
-
/* @__PURE__ */ (0,
|
|
15897
|
-
/* @__PURE__ */ (0,
|
|
15898
|
-
/* @__PURE__ */ (0,
|
|
16304
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: (0, import_utils25.cn)("space-y-6 text-center", className), "data-slot": "order-confirmation", children: [
|
|
16305
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("h1", { className: "text-3xl font-bold", children: title }),
|
|
16306
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "text-lg text-muted-foreground", children: description }),
|
|
16307
|
+
showFullOrderSummary && order && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "space-y-6", children: [
|
|
16308
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
16309
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderNumberLabel }),
|
|
16310
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
15899
16311
|
] }),
|
|
15900
|
-
/* @__PURE__ */ (0,
|
|
15901
|
-
order.items.map((item, idx) => /* @__PURE__ */ (0,
|
|
16312
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "mx-auto max-w-sm space-y-3 rounded-xl border border-border bg-card p-5 text-left", children: [
|
|
16313
|
+
order.items.map((item, idx) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
|
|
15902
16314
|
"div",
|
|
15903
16315
|
{
|
|
15904
16316
|
className: "flex justify-between gap-4 text-sm",
|
|
15905
16317
|
children: [
|
|
15906
|
-
/* @__PURE__ */ (0,
|
|
16318
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
|
|
15907
16319
|
item.product.name,
|
|
15908
16320
|
item.variant ? ` (${item.variant.name})` : "",
|
|
15909
16321
|
" x",
|
|
15910
16322
|
item.quantity
|
|
15911
16323
|
] }),
|
|
15912
|
-
/* @__PURE__ */ (0,
|
|
16324
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
|
|
15913
16325
|
]
|
|
15914
16326
|
},
|
|
15915
16327
|
idx
|
|
15916
16328
|
)),
|
|
15917
|
-
/* @__PURE__ */ (0,
|
|
15918
|
-
/* @__PURE__ */ (0,
|
|
15919
|
-
/* @__PURE__ */ (0,
|
|
16329
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "space-y-1 border-t border-border pt-3 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex justify-between pt-1 text-base font-bold", children: [
|
|
16330
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: t.totalLabel }),
|
|
16331
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: formatPrice(order.total, currencyCode, locale) })
|
|
15920
16332
|
] }) })
|
|
15921
16333
|
] }),
|
|
15922
|
-
/* @__PURE__ */ (0,
|
|
16334
|
+
t.foundDescription.includes("{email}") ? null : /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("p", { className: "mx-auto max-w-sm text-sm text-muted-foreground", children: [
|
|
15923
16335
|
t.confirmationEmailPrefix,
|
|
15924
16336
|
" ",
|
|
15925
|
-
/* @__PURE__ */ (0,
|
|
16337
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
|
|
15926
16338
|
"."
|
|
15927
16339
|
] }),
|
|
15928
|
-
/* @__PURE__ */ (0,
|
|
16340
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
15929
16341
|
OrderInvoiceLink,
|
|
15930
16342
|
{
|
|
15931
16343
|
invoice: order.invoice,
|
|
@@ -15933,11 +16345,11 @@ function OrderConfirmation({
|
|
|
15933
16345
|
}
|
|
15934
16346
|
)
|
|
15935
16347
|
] }),
|
|
15936
|
-
showOrderReference && order && /* @__PURE__ */ (0,
|
|
15937
|
-
/* @__PURE__ */ (0,
|
|
15938
|
-
/* @__PURE__ */ (0,
|
|
16348
|
+
showOrderReference && order && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
16349
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.orderReferenceLabel }),
|
|
16350
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "font-mono text-lg font-semibold", children: order.orderNumber })
|
|
15939
16351
|
] }),
|
|
15940
|
-
status === "failed" && cartHref && /* @__PURE__ */ (0,
|
|
16352
|
+
status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
15941
16353
|
"a",
|
|
15942
16354
|
{
|
|
15943
16355
|
href: cartHref,
|
|
@@ -15945,7 +16357,7 @@ function OrderConfirmation({
|
|
|
15945
16357
|
children: t.backToCartLabel
|
|
15946
16358
|
}
|
|
15947
16359
|
),
|
|
15948
|
-
showRecheck && /* @__PURE__ */ (0,
|
|
16360
|
+
showRecheck && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
15949
16361
|
"button",
|
|
15950
16362
|
{
|
|
15951
16363
|
type: "button",
|
|
@@ -15954,16 +16366,16 @@ function OrderConfirmation({
|
|
|
15954
16366
|
children: t.recheckLabel
|
|
15955
16367
|
}
|
|
15956
16368
|
),
|
|
15957
|
-
showSessionReference && /* @__PURE__ */ (0,
|
|
15958
|
-
/* @__PURE__ */ (0,
|
|
15959
|
-
/* @__PURE__ */ (0,
|
|
16369
|
+
showSessionReference && /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "inline-block rounded-xl bg-muted px-6 py-4", children: [
|
|
16370
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "mb-1 text-xs uppercase tracking-widest text-muted-foreground", children: t.sessionReferenceLabel }),
|
|
16371
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "break-all font-mono text-sm font-semibold", children: sessionId })
|
|
15960
16372
|
] })
|
|
15961
16373
|
] });
|
|
15962
16374
|
}
|
|
15963
16375
|
|
|
15964
16376
|
// src/components/full-invoice-fields.tsx
|
|
15965
|
-
var
|
|
15966
|
-
var
|
|
16377
|
+
var import_utils26 = require("@reblu/site-ui/utils");
|
|
16378
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
15967
16379
|
var EMPTY_FULL_INVOICE_VALUE = {
|
|
15968
16380
|
wantsFullInvoice: false,
|
|
15969
16381
|
billingIdType: "NIF",
|
|
@@ -16080,12 +16492,12 @@ function FullInvoiceFields({
|
|
|
16080
16492
|
const showFields = value.wantsFullInvoice || overCap;
|
|
16081
16493
|
const isSpanishNif = value.billingIdType === "NIF";
|
|
16082
16494
|
const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
|
|
16083
|
-
const error = (key2) => errors[key2] ? /* @__PURE__ */ (0,
|
|
16495
|
+
const error = (key2) => errors[key2] ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { id: `full-invoice-${key2}-error`, className: "text-sm text-destructive", children: errors[key2] }) : null;
|
|
16084
16496
|
const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
|
|
16085
|
-
return /* @__PURE__ */ (0,
|
|
16086
|
-
overCap ? /* @__PURE__ */ (0,
|
|
16087
|
-
/* @__PURE__ */ (0,
|
|
16088
|
-
/* @__PURE__ */ (0,
|
|
16497
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("section", { className: (0, import_utils26.cn)("space-y-4", className), "data-slot": "full-invoice-fields", children: [
|
|
16498
|
+
overCap ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { role: "note", className: "rounded-lg border border-border p-4 text-sm", children: t.overCapNotice }) : /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-1", children: [
|
|
16499
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("label", { className: "flex items-center gap-2 text-sm font-medium", children: [
|
|
16500
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
16089
16501
|
"input",
|
|
16090
16502
|
{
|
|
16091
16503
|
type: "checkbox",
|
|
@@ -16095,12 +16507,12 @@ function FullInvoiceFields({
|
|
|
16095
16507
|
),
|
|
16096
16508
|
t.toggle
|
|
16097
16509
|
] }),
|
|
16098
|
-
/* @__PURE__ */ (0,
|
|
16510
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
|
|
16099
16511
|
] }),
|
|
16100
|
-
showFields && /* @__PURE__ */ (0,
|
|
16101
|
-
/* @__PURE__ */ (0,
|
|
16102
|
-
/* @__PURE__ */ (0,
|
|
16103
|
-
/* @__PURE__ */ (0,
|
|
16512
|
+
showFields && /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: [
|
|
16513
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-1", children: [
|
|
16514
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("label", { htmlFor: "full-invoice-id-type", className: "text-sm font-medium", children: t.idType }),
|
|
16515
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
16104
16516
|
"select",
|
|
16105
16517
|
{
|
|
16106
16518
|
id: "full-invoice-id-type",
|
|
@@ -16109,14 +16521,14 @@ function FullInvoiceFields({
|
|
|
16109
16521
|
value: value.billingIdType,
|
|
16110
16522
|
onChange: (e) => set("billingIdType", e.target.value),
|
|
16111
16523
|
...invalid2("billingIdType"),
|
|
16112
|
-
children: ID_TYPES.map((type) => /* @__PURE__ */ (0,
|
|
16524
|
+
children: ID_TYPES.map((type) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("option", { value: type, children: t.idTypeOptions[type] }, type))
|
|
16113
16525
|
}
|
|
16114
16526
|
),
|
|
16115
16527
|
error("billingIdType")
|
|
16116
16528
|
] }),
|
|
16117
|
-
!isSpanishNif && /* @__PURE__ */ (0,
|
|
16118
|
-
/* @__PURE__ */ (0,
|
|
16119
|
-
/* @__PURE__ */ (0,
|
|
16529
|
+
!isSpanishNif && /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-1", children: [
|
|
16530
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("label", { htmlFor: "full-invoice-id-country", className: "text-sm font-medium", children: t.idCountry }),
|
|
16531
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
|
|
16120
16532
|
"select",
|
|
16121
16533
|
{
|
|
16122
16534
|
id: "full-invoice-id-country",
|
|
@@ -16126,16 +16538,16 @@ function FullInvoiceFields({
|
|
|
16126
16538
|
onChange: (e) => set("billingIdCountry", e.target.value),
|
|
16127
16539
|
...invalid2("billingIdCountry"),
|
|
16128
16540
|
children: [
|
|
16129
|
-
/* @__PURE__ */ (0,
|
|
16130
|
-
countries.map((c) => /* @__PURE__ */ (0,
|
|
16541
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("option", { value: "", disabled: true, children: t.chooseCountry }),
|
|
16542
|
+
countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("option", { value: c.code, children: c.name }, c.code))
|
|
16131
16543
|
]
|
|
16132
16544
|
}
|
|
16133
16545
|
),
|
|
16134
16546
|
error("billingIdCountry")
|
|
16135
16547
|
] }),
|
|
16136
|
-
/* @__PURE__ */ (0,
|
|
16137
|
-
/* @__PURE__ */ (0,
|
|
16138
|
-
/* @__PURE__ */ (0,
|
|
16548
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-1", children: [
|
|
16549
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("label", { htmlFor: "full-invoice-nif", className: "text-sm font-medium", children: isSpanishNif ? t.spanishNif : t.documentNumber }),
|
|
16550
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
16139
16551
|
"input",
|
|
16140
16552
|
{
|
|
16141
16553
|
id: "full-invoice-nif",
|
|
@@ -16148,9 +16560,9 @@ function FullInvoiceFields({
|
|
|
16148
16560
|
),
|
|
16149
16561
|
error("billingNif")
|
|
16150
16562
|
] }),
|
|
16151
|
-
/* @__PURE__ */ (0,
|
|
16152
|
-
/* @__PURE__ */ (0,
|
|
16153
|
-
/* @__PURE__ */ (0,
|
|
16563
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-1", children: [
|
|
16564
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("label", { htmlFor: "full-invoice-name", className: "text-sm font-medium", children: t.name }),
|
|
16565
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
16154
16566
|
"input",
|
|
16155
16567
|
{
|
|
16156
16568
|
id: "full-invoice-name",
|
|
@@ -16163,9 +16575,9 @@ function FullInvoiceFields({
|
|
|
16163
16575
|
),
|
|
16164
16576
|
error("billingName")
|
|
16165
16577
|
] }),
|
|
16166
|
-
/* @__PURE__ */ (0,
|
|
16167
|
-
/* @__PURE__ */ (0,
|
|
16168
|
-
/* @__PURE__ */ (0,
|
|
16578
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-1 sm:col-span-2", children: [
|
|
16579
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("label", { htmlFor: "full-invoice-street", className: "text-sm font-medium", children: t.street }),
|
|
16580
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
16169
16581
|
"input",
|
|
16170
16582
|
{
|
|
16171
16583
|
id: "full-invoice-street",
|
|
@@ -16177,9 +16589,9 @@ function FullInvoiceFields({
|
|
|
16177
16589
|
}
|
|
16178
16590
|
)
|
|
16179
16591
|
] }),
|
|
16180
|
-
/* @__PURE__ */ (0,
|
|
16181
|
-
/* @__PURE__ */ (0,
|
|
16182
|
-
/* @__PURE__ */ (0,
|
|
16592
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-1", children: [
|
|
16593
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("label", { htmlFor: "full-invoice-postal-code", className: "text-sm font-medium", children: t.postalCode }),
|
|
16594
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
16183
16595
|
"input",
|
|
16184
16596
|
{
|
|
16185
16597
|
id: "full-invoice-postal-code",
|
|
@@ -16190,9 +16602,9 @@ function FullInvoiceFields({
|
|
|
16190
16602
|
}
|
|
16191
16603
|
)
|
|
16192
16604
|
] }),
|
|
16193
|
-
/* @__PURE__ */ (0,
|
|
16194
|
-
/* @__PURE__ */ (0,
|
|
16195
|
-
/* @__PURE__ */ (0,
|
|
16605
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-1", children: [
|
|
16606
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("label", { htmlFor: "full-invoice-city", className: "text-sm font-medium", children: t.city }),
|
|
16607
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
16196
16608
|
"input",
|
|
16197
16609
|
{
|
|
16198
16610
|
id: "full-invoice-city",
|
|
@@ -16203,9 +16615,9 @@ function FullInvoiceFields({
|
|
|
16203
16615
|
}
|
|
16204
16616
|
)
|
|
16205
16617
|
] }),
|
|
16206
|
-
/* @__PURE__ */ (0,
|
|
16207
|
-
/* @__PURE__ */ (0,
|
|
16208
|
-
/* @__PURE__ */ (0,
|
|
16618
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "space-y-1", children: [
|
|
16619
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("label", { htmlFor: "full-invoice-country", className: "text-sm font-medium", children: t.country }),
|
|
16620
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
16209
16621
|
"select",
|
|
16210
16622
|
{
|
|
16211
16623
|
id: "full-invoice-country",
|
|
@@ -16213,18 +16625,18 @@ function FullInvoiceFields({
|
|
|
16213
16625
|
required: true,
|
|
16214
16626
|
value: value.country,
|
|
16215
16627
|
onChange: (e) => set("country", e.target.value),
|
|
16216
|
-
children: countries.map((c) => /* @__PURE__ */ (0,
|
|
16628
|
+
children: countries.map((c) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("option", { value: c.code, children: c.name }, c.code))
|
|
16217
16629
|
}
|
|
16218
16630
|
)
|
|
16219
16631
|
] }),
|
|
16220
|
-
/* @__PURE__ */ (0,
|
|
16632
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "sm:col-span-2", children: error("address") })
|
|
16221
16633
|
] })
|
|
16222
16634
|
] });
|
|
16223
16635
|
}
|
|
16224
16636
|
|
|
16225
16637
|
// src/components/checkout-delivery-choice.tsx
|
|
16226
|
-
var
|
|
16227
|
-
var
|
|
16638
|
+
var import_utils27 = require("@reblu/site-ui/utils");
|
|
16639
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
16228
16640
|
var EMPTY_CHECKOUT_ADDRESS = {
|
|
16229
16641
|
firstName: "",
|
|
16230
16642
|
lastName: "",
|
|
@@ -16287,17 +16699,17 @@ function CheckoutDeliveryChoice({
|
|
|
16287
16699
|
const isPickup = value?.type === "PICKUP";
|
|
16288
16700
|
const isShipping = value?.type === "SHIPPING";
|
|
16289
16701
|
const errorId = `${uid}-delivery-error`;
|
|
16290
|
-
return /* @__PURE__ */ (0,
|
|
16702
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
16291
16703
|
"fieldset",
|
|
16292
16704
|
{
|
|
16293
16705
|
"data-slot": "checkout-delivery",
|
|
16294
16706
|
"aria-describedby": error ? errorId : void 0,
|
|
16295
|
-
className: (0,
|
|
16707
|
+
className: (0, import_utils27.cn)("space-y-4", className),
|
|
16296
16708
|
children: [
|
|
16297
|
-
/* @__PURE__ */ (0,
|
|
16298
|
-
/* @__PURE__ */ (0,
|
|
16299
|
-
homeDelivery ? /* @__PURE__ */ (0,
|
|
16300
|
-
/* @__PURE__ */ (0,
|
|
16709
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("legend", { className: "mb-2 text-lg font-semibold", children: t.legend }),
|
|
16710
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "grid gap-3 sm:grid-cols-2", children: [
|
|
16711
|
+
homeDelivery ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
|
|
16712
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
16301
16713
|
"input",
|
|
16302
16714
|
{
|
|
16303
16715
|
type: "radio",
|
|
@@ -16307,42 +16719,42 @@ function CheckoutDeliveryChoice({
|
|
|
16307
16719
|
className: "mt-0.5 size-4 accent-primary"
|
|
16308
16720
|
}
|
|
16309
16721
|
),
|
|
16310
|
-
/* @__PURE__ */ (0,
|
|
16311
|
-
/* @__PURE__ */ (0,
|
|
16312
|
-
/* @__PURE__ */ (0,
|
|
16313
|
-
/* @__PURE__ */ (0,
|
|
16722
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: "flex-1 space-y-1", children: [
|
|
16723
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: "flex justify-between gap-2 font-medium", children: [
|
|
16724
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: copy.shippingOptionLabel }),
|
|
16725
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "tabular-nums", children: homeCost })
|
|
16314
16726
|
] }),
|
|
16315
|
-
delivery.estimatedDeliveryText ? /* @__PURE__ */ (0,
|
|
16727
|
+
delivery.estimatedDeliveryText ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "block text-sm text-muted-foreground", children: delivery.estimatedDeliveryText }) : null
|
|
16316
16728
|
] })
|
|
16317
16729
|
] }) : null,
|
|
16318
|
-
pickup ? /* @__PURE__ */ (0,
|
|
16319
|
-
/* @__PURE__ */ (0,
|
|
16730
|
+
pickup ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("label", { className: "flex cursor-pointer items-start gap-3 rounded-xl border border-border p-4 has-[:checked]:border-primary", children: [
|
|
16731
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
16320
16732
|
"input",
|
|
16321
16733
|
{
|
|
16322
16734
|
type: "radio",
|
|
16323
16735
|
name: `${uid}-method`,
|
|
16324
16736
|
checked: isPickup,
|
|
16325
|
-
onChange: () => onChange(
|
|
16737
|
+
onChange: () => onChange(pickupFulfillment(delivery)),
|
|
16326
16738
|
className: "mt-0.5 size-4 accent-primary"
|
|
16327
16739
|
}
|
|
16328
16740
|
),
|
|
16329
|
-
/* @__PURE__ */ (0,
|
|
16330
|
-
/* @__PURE__ */ (0,
|
|
16331
|
-
/* @__PURE__ */ (0,
|
|
16741
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: "flex flex-1 justify-between gap-2 font-medium", children: [
|
|
16742
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: copy.pickupOptionLabel }),
|
|
16743
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: t.free })
|
|
16332
16744
|
] })
|
|
16333
16745
|
] }) : null
|
|
16334
16746
|
] }),
|
|
16335
|
-
error ? /* @__PURE__ */ (0,
|
|
16336
|
-
isPickup ? /* @__PURE__ */ (0,
|
|
16337
|
-
/* @__PURE__ */ (0,
|
|
16747
|
+
error ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { id: errorId, role: "alert", className: "text-sm text-destructive", children: error }) : null,
|
|
16748
|
+
isPickup ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { role: "radiogroup", "aria-labelledby": `${uid}-points`, className: "space-y-2", children: [
|
|
16749
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { id: `${uid}-points`, className: "text-sm font-medium", children: t.pickupPointsLegend }),
|
|
16338
16750
|
delivery.pickupLocations.map((location2) => {
|
|
16339
16751
|
const descId = `${uid}-point-${location2.id}`;
|
|
16340
|
-
return /* @__PURE__ */ (0,
|
|
16752
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
16341
16753
|
"label",
|
|
16342
16754
|
{
|
|
16343
16755
|
className: "flex cursor-pointer items-start gap-3 rounded-lg border border-border p-3 has-[:checked]:border-primary",
|
|
16344
16756
|
children: [
|
|
16345
|
-
/* @__PURE__ */ (0,
|
|
16757
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
16346
16758
|
"input",
|
|
16347
16759
|
{
|
|
16348
16760
|
type: "radio",
|
|
@@ -16353,9 +16765,9 @@ function CheckoutDeliveryChoice({
|
|
|
16353
16765
|
className: "mt-0.5 size-4 accent-primary"
|
|
16354
16766
|
}
|
|
16355
16767
|
),
|
|
16356
|
-
/* @__PURE__ */ (0,
|
|
16357
|
-
/* @__PURE__ */ (0,
|
|
16358
|
-
/* @__PURE__ */ (0,
|
|
16768
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: "space-y-0.5 text-sm", children: [
|
|
16769
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "block font-medium", children: location2.name }),
|
|
16770
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { id: descId, className: "block text-muted-foreground", children: pickupDescription(location2) })
|
|
16359
16771
|
] })
|
|
16360
16772
|
]
|
|
16361
16773
|
},
|
|
@@ -16363,14 +16775,14 @@ function CheckoutDeliveryChoice({
|
|
|
16363
16775
|
);
|
|
16364
16776
|
})
|
|
16365
16777
|
] }) : null,
|
|
16366
|
-
isShipping ? /* @__PURE__ */ (0,
|
|
16367
|
-
/* @__PURE__ */ (0,
|
|
16368
|
-
/* @__PURE__ */ (0,
|
|
16778
|
+
isShipping ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("fieldset", { className: "space-y-3", children: [
|
|
16779
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("legend", { className: "mb-2 text-sm font-medium", children: t.addressLegend }),
|
|
16780
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2", children: ADDRESS_FIELDS.map(({ key: key2, autoComplete, required, wide }) => {
|
|
16369
16781
|
const fieldId = `${uid}-${key2}`;
|
|
16370
16782
|
const fieldError = addressErrors?.[key2];
|
|
16371
|
-
return /* @__PURE__ */ (0,
|
|
16372
|
-
/* @__PURE__ */ (0,
|
|
16373
|
-
/* @__PURE__ */ (0,
|
|
16783
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: (0, import_utils27.cn)("space-y-1", wide && "sm:col-span-2"), children: [
|
|
16784
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("label", { htmlFor: fieldId, className: "text-sm font-medium", children: t[key2] }),
|
|
16785
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
16374
16786
|
"input",
|
|
16375
16787
|
{
|
|
16376
16788
|
id: fieldId,
|
|
@@ -16381,13 +16793,13 @@ function CheckoutDeliveryChoice({
|
|
|
16381
16793
|
onChange: (e) => onAddressChange({ ...address, [key2]: e.target.value }),
|
|
16382
16794
|
"aria-invalid": fieldError ? true : void 0,
|
|
16383
16795
|
"aria-describedby": fieldError ? `${fieldId}-error` : void 0,
|
|
16384
|
-
className: (0,
|
|
16796
|
+
className: (0, import_utils27.cn)(
|
|
16385
16797
|
INPUT_CLASS,
|
|
16386
16798
|
fieldError ? "border-destructive" : "border-border focus:border-primary"
|
|
16387
16799
|
)
|
|
16388
16800
|
}
|
|
16389
16801
|
),
|
|
16390
|
-
fieldError ? /* @__PURE__ */ (0,
|
|
16802
|
+
fieldError ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { id: `${fieldId}-error`, className: "text-sm text-destructive", children: fieldError }) : null
|
|
16391
16803
|
] }, key2);
|
|
16392
16804
|
}) })
|
|
16393
16805
|
] }) : null
|
|
@@ -16395,12 +16807,19 @@ function CheckoutDeliveryChoice({
|
|
|
16395
16807
|
}
|
|
16396
16808
|
);
|
|
16397
16809
|
}
|
|
16810
|
+
function pickupFulfillment(delivery) {
|
|
16811
|
+
const [only, ...rest] = delivery.pickupLocations;
|
|
16812
|
+
return only && rest.length === 0 ? { type: "PICKUP", pickupLocationId: only.id } : { type: "PICKUP" };
|
|
16813
|
+
}
|
|
16398
16814
|
function defaultCheckoutFulfillment(delivery) {
|
|
16399
16815
|
if (!delivery) return null;
|
|
16400
16816
|
if (delivery.methods.homeDelivery) return { type: "SHIPPING" };
|
|
16401
16817
|
if (!delivery.methods.pickup) return null;
|
|
16402
|
-
|
|
16403
|
-
|
|
16818
|
+
return pickupFulfillment(delivery);
|
|
16819
|
+
}
|
|
16820
|
+
function isCheckoutDeliveryComplete(value, requiresDelivery = true) {
|
|
16821
|
+
if (!value || !requiresDelivery) return true;
|
|
16822
|
+
return value.type !== "PICKUP" || Boolean(value.pickupLocationId);
|
|
16404
16823
|
}
|
|
16405
16824
|
function quoteRequiresDelivery(quote) {
|
|
16406
16825
|
return quote ? quote.lines.some((line) => line.isShippable) : true;
|
|
@@ -16422,8 +16841,8 @@ function toCheckoutFulfillmentFields(value, address, requiresDelivery = true) {
|
|
|
16422
16841
|
}
|
|
16423
16842
|
|
|
16424
16843
|
// src/components/checkout-quote-summary.tsx
|
|
16425
|
-
var
|
|
16426
|
-
var
|
|
16844
|
+
var import_utils28 = require("@reblu/site-ui/utils");
|
|
16845
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
16427
16846
|
var DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS = {
|
|
16428
16847
|
subtotal: "Subtotal",
|
|
16429
16848
|
discount: (codeOrLabel, isAutomatic) => isAutomatic ? codeOrLabel : `Descuento (${codeOrLabel})`,
|
|
@@ -16440,9 +16859,9 @@ function Row({
|
|
|
16440
16859
|
value,
|
|
16441
16860
|
className
|
|
16442
16861
|
}) {
|
|
16443
|
-
return /* @__PURE__ */ (0,
|
|
16444
|
-
/* @__PURE__ */ (0,
|
|
16445
|
-
/* @__PURE__ */ (0,
|
|
16862
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { "data-slot": "checkout-quote-row", className: (0, import_utils28.cn)("flex justify-between gap-4", className), children: [
|
|
16863
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("dt", { children: name }),
|
|
16864
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("dd", { className: "shrink-0 tabular-nums", children: value })
|
|
16446
16865
|
] });
|
|
16447
16866
|
}
|
|
16448
16867
|
function CheckoutQuoteSummary({
|
|
@@ -16458,22 +16877,22 @@ function CheckoutQuoteSummary({
|
|
|
16458
16877
|
const price = (cents) => formatPrice(cents, currencyCode, locale);
|
|
16459
16878
|
const { fulfillment, shipping, tax, discount } = quote;
|
|
16460
16879
|
const Tag = `h${headingLevel}`;
|
|
16461
|
-
return /* @__PURE__ */ (0,
|
|
16462
|
-
heading ? /* @__PURE__ */ (0,
|
|
16463
|
-
/* @__PURE__ */ (0,
|
|
16464
|
-
/* @__PURE__ */ (0,
|
|
16465
|
-
/* @__PURE__ */ (0,
|
|
16466
|
-
line.variantName ? /* @__PURE__ */ (0,
|
|
16467
|
-
/* @__PURE__ */ (0,
|
|
16468
|
-
line.kindLabel ? /* @__PURE__ */ (0,
|
|
16469
|
-
/* @__PURE__ */ (0,
|
|
16880
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("section", { "data-slot": "checkout-quote-summary", className: slotClassName("space-y-4", "", className), children: [
|
|
16881
|
+
heading ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Tag, { className: "text-lg font-semibold", children: heading }) : null,
|
|
16882
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("ul", { className: "space-y-3 text-sm", children: quote.lines.map((line) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("li", { className: "flex justify-between gap-4", children: [
|
|
16883
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "min-w-0 space-y-0.5", children: [
|
|
16884
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "font-medium", children: line.name }),
|
|
16885
|
+
line.variantName ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "text-muted-foreground", children: line.variantName }) : null,
|
|
16886
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("p", { className: "flex flex-wrap items-center gap-2 text-muted-foreground", children: [
|
|
16887
|
+
line.kindLabel ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { "data-slot": "checkout-quote-kind", className: "rounded-full border border-border px-2 py-0.5 text-xs font-medium text-foreground", children: line.kindLabel }) : null,
|
|
16888
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { children: t.quantityTimesUnit(line.quantity, price(line.unitPrice)) })
|
|
16470
16889
|
] })
|
|
16471
16890
|
] }),
|
|
16472
|
-
/* @__PURE__ */ (0,
|
|
16891
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "shrink-0 tabular-nums", children: price(line.total) })
|
|
16473
16892
|
] }, `${line.productId}-${line.variantId ?? ""}`)) }),
|
|
16474
|
-
/* @__PURE__ */ (0,
|
|
16475
|
-
/* @__PURE__ */ (0,
|
|
16476
|
-
discount && discount.amount > 0 ? /* @__PURE__ */ (0,
|
|
16893
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("dl", { className: "space-y-2 border-t border-border pt-3 text-sm", children: [
|
|
16894
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Row, { name: t.subtotal, value: price(quote.subtotal) }),
|
|
16895
|
+
discount && discount.amount > 0 ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
16477
16896
|
Row,
|
|
16478
16897
|
{
|
|
16479
16898
|
className: "text-green-700 dark:text-green-400",
|
|
@@ -16481,17 +16900,17 @@ function CheckoutQuoteSummary({
|
|
|
16481
16900
|
value: `\u2212${price(discount.amount)}`
|
|
16482
16901
|
}
|
|
16483
16902
|
) : null,
|
|
16484
|
-
fulfillment.type ? /* @__PURE__ */ (0,
|
|
16903
|
+
fulfillment.type ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
16485
16904
|
Row,
|
|
16486
16905
|
{
|
|
16487
|
-
name: /* @__PURE__ */ (0,
|
|
16906
|
+
name: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
|
|
16488
16907
|
fulfillment.label ?? t.delivery,
|
|
16489
|
-
fulfillment.type === "PICKUP" && fulfillment.pickupLocation ? /* @__PURE__ */ (0,
|
|
16908
|
+
fulfillment.type === "PICKUP" && fulfillment.pickupLocation ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "block text-muted-foreground", children: fulfillment.pickupLocation.name }) : null
|
|
16490
16909
|
] }),
|
|
16491
16910
|
value: fulfillment.type === "PICKUP" || shipping.isFree ? t.free : price(shipping.cost)
|
|
16492
16911
|
}
|
|
16493
16912
|
) : null,
|
|
16494
|
-
tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ (0,
|
|
16913
|
+
tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
16495
16914
|
Row,
|
|
16496
16915
|
{
|
|
16497
16916
|
className: tax.isIncluded ? "text-muted-foreground" : void 0,
|
|
@@ -16500,19 +16919,44 @@ function CheckoutQuoteSummary({
|
|
|
16500
16919
|
},
|
|
16501
16920
|
entry.label
|
|
16502
16921
|
)) : null,
|
|
16503
|
-
/* @__PURE__ */ (0,
|
|
16922
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Row, { className: "border-t border-border pt-2 text-base font-bold", name: t.total, value: price(quote.total) })
|
|
16504
16923
|
] }),
|
|
16505
|
-
tax.isIncluded ? /* @__PURE__ */ (0,
|
|
16506
|
-
fulfillment.type === "SHIPPING" && !shipping.isFree && shipping.remainingForFree ? /* @__PURE__ */ (0,
|
|
16507
|
-
fulfillment.type && quote.deliveryEstimateText ? /* @__PURE__ */ (0,
|
|
16508
|
-
quote.discountError ? /* @__PURE__ */ (0,
|
|
16509
|
-
quote.blockingReason ? /* @__PURE__ */ (0,
|
|
16924
|
+
tax.isIncluded ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "text-sm text-muted-foreground", children: t.taxesIncludedNote }) : null,
|
|
16925
|
+
fulfillment.type === "SHIPPING" && !shipping.isFree && shipping.remainingForFree ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { className: "text-sm text-muted-foreground", children: t.remainingForFree(price(shipping.remainingForFree)) }) : null,
|
|
16926
|
+
fulfillment.type && quote.deliveryEstimateText ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { "data-slot": "checkout-quote-estimate", className: "text-sm text-muted-foreground", children: quote.deliveryEstimateText }) : null,
|
|
16927
|
+
quote.discountError ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { role: "status", className: "text-sm text-destructive", children: quote.discountError.message }) : null,
|
|
16928
|
+
quote.blockingReason ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { role: "alert", className: "rounded-lg border border-destructive/50 bg-destructive/10 p-3 text-sm text-destructive", children: quote.blockingReason.message }) : null
|
|
16510
16929
|
] });
|
|
16511
16930
|
}
|
|
16931
|
+
var DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS = {
|
|
16932
|
+
pickupLocationRequired: "Elige un punto de recogida"
|
|
16933
|
+
};
|
|
16934
|
+
function checkoutQuoteNotice({
|
|
16935
|
+
fulfillment,
|
|
16936
|
+
requiresDelivery = true,
|
|
16937
|
+
error
|
|
16938
|
+
}) {
|
|
16939
|
+
if (!isCheckoutDeliveryComplete(fulfillment, requiresDelivery)) return "PICKUP_LOCATION_REQUIRED";
|
|
16940
|
+
if (error?.code === "PICKUP_LOCATION_INVALID") return "PICKUP_LOCATION_REQUIRED";
|
|
16941
|
+
return null;
|
|
16942
|
+
}
|
|
16943
|
+
function CheckoutQuoteNotice({ reason, labels, className }) {
|
|
16944
|
+
if (!reason) return null;
|
|
16945
|
+
const t = { ...DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS, ...labels };
|
|
16946
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
16947
|
+
"p",
|
|
16948
|
+
{
|
|
16949
|
+
role: "status",
|
|
16950
|
+
"data-slot": "checkout-quote-notice",
|
|
16951
|
+
className: slotClassName("rounded-lg border border-border bg-muted p-3 text-sm", "", className),
|
|
16952
|
+
children: t.pickupLocationRequired
|
|
16953
|
+
}
|
|
16954
|
+
);
|
|
16955
|
+
}
|
|
16512
16956
|
|
|
16513
16957
|
// src/components/checkout-terms-acceptance.tsx
|
|
16514
|
-
var
|
|
16515
|
-
var
|
|
16958
|
+
var import_utils29 = require("@reblu/site-ui/utils");
|
|
16959
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
16516
16960
|
function splitTermsLabel(label) {
|
|
16517
16961
|
const at = label.indexOf("{terms}");
|
|
16518
16962
|
return at === -1 ? [`${label} `, ""] : [label.slice(0, at), label.slice(at + "{terms}".length)];
|
|
@@ -16534,9 +16978,9 @@ function CheckoutTermsAcceptance({
|
|
|
16534
16978
|
(part) => part.replaceAll("{tenant}", copy.tenantName)
|
|
16535
16979
|
);
|
|
16536
16980
|
const newTab = copy.isTermsLinkNewTab;
|
|
16537
|
-
return /* @__PURE__ */ (0,
|
|
16538
|
-
/* @__PURE__ */ (0,
|
|
16539
|
-
/* @__PURE__ */ (0,
|
|
16981
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { "data-slot": "checkout-terms", className: (0, import_utils29.cn)("space-y-1", className), children: [
|
|
16982
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "flex items-start gap-3", children: [
|
|
16983
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
16540
16984
|
"input",
|
|
16541
16985
|
{
|
|
16542
16986
|
id: boxId,
|
|
@@ -16549,9 +16993,9 @@ function CheckoutTermsAcceptance({
|
|
|
16549
16993
|
className: "mt-0.5 size-5 shrink-0 cursor-pointer accent-primary"
|
|
16550
16994
|
}
|
|
16551
16995
|
),
|
|
16552
|
-
/* @__PURE__ */ (0,
|
|
16996
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("label", { htmlFor: boxId, className: "text-sm leading-relaxed", children: [
|
|
16553
16997
|
before,
|
|
16554
|
-
/* @__PURE__ */ (0,
|
|
16998
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
|
|
16555
16999
|
"a",
|
|
16556
17000
|
{
|
|
16557
17001
|
href: copy.termsLinkUrl ?? termsHref,
|
|
@@ -16559,9 +17003,9 @@ function CheckoutTermsAcceptance({
|
|
|
16559
17003
|
className: "font-medium underline underline-offset-2 hover:text-primary",
|
|
16560
17004
|
children: [
|
|
16561
17005
|
copy.termsLinkText,
|
|
16562
|
-
newTab ? /* @__PURE__ */ (0,
|
|
17006
|
+
newTab ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [
|
|
16563
17007
|
" ",
|
|
16564
|
-
/* @__PURE__ */ (0,
|
|
17008
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "sr-only", children: newTabHint })
|
|
16565
17009
|
] }) : null
|
|
16566
17010
|
]
|
|
16567
17011
|
}
|
|
@@ -16569,7 +17013,7 @@ function CheckoutTermsAcceptance({
|
|
|
16569
17013
|
after
|
|
16570
17014
|
] })
|
|
16571
17015
|
] }),
|
|
16572
|
-
error ? /* @__PURE__ */ (0,
|
|
17016
|
+
error ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { id: errorId, className: "pl-8 text-sm text-destructive", children: error }) : null
|
|
16573
17017
|
] });
|
|
16574
17018
|
}
|
|
16575
17019
|
function toCheckoutTermsFields(copy, accepted) {
|
|
@@ -16578,8 +17022,8 @@ function toCheckoutTermsFields(copy, accepted) {
|
|
|
16578
17022
|
}
|
|
16579
17023
|
|
|
16580
17024
|
// src/components/checkout-pay-action.tsx
|
|
16581
|
-
var
|
|
16582
|
-
var
|
|
17025
|
+
var import_utils30 = require("@reblu/site-ui/utils");
|
|
17026
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
16583
17027
|
function CheckoutPayAction({
|
|
16584
17028
|
label,
|
|
16585
17029
|
notice,
|
|
@@ -16593,28 +17037,50 @@ function CheckoutPayAction({
|
|
|
16593
17037
|
}) {
|
|
16594
17038
|
const noticeId = `${id}-notice`;
|
|
16595
17039
|
const isDisabled = submitting || disabled;
|
|
16596
|
-
return /* @__PURE__ */ (0,
|
|
16597
|
-
/* @__PURE__ */ (0,
|
|
17040
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { "data-slot": "checkout-pay-action", className: (0, import_utils30.cn)("space-y-3", className), children: [
|
|
17041
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
16598
17042
|
"button",
|
|
16599
17043
|
{
|
|
16600
17044
|
type: "submit",
|
|
16601
17045
|
disabled: isDisabled,
|
|
16602
17046
|
"aria-busy": submitting || void 0,
|
|
16603
17047
|
"aria-describedby": notice ? noticeId : void 0,
|
|
16604
|
-
className: buttonClassName ?? (0,
|
|
17048
|
+
className: buttonClassName ?? (0, import_utils30.cn)(
|
|
16605
17049
|
"flex w-full items-center justify-center gap-2 rounded-xl px-4 py-3 text-base font-semibold transition-all",
|
|
16606
17050
|
isDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "cursor-pointer bg-primary text-primary-foreground hover:bg-primary/90"
|
|
16607
17051
|
),
|
|
16608
17052
|
children: submitting ? submittingLabel : label
|
|
16609
17053
|
}
|
|
16610
17054
|
),
|
|
16611
|
-
notice ? /* @__PURE__ */ (0,
|
|
17055
|
+
notice ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("p", { id: noticeId, "data-slot": "checkout-pay-notice", className: noticeClassName ?? "text-sm text-muted-foreground", children: notice }) : null
|
|
16612
17056
|
] });
|
|
16613
17057
|
}
|
|
16614
17058
|
|
|
17059
|
+
// src/lib/course-guest-checkout.ts
|
|
17060
|
+
function courseSellsAsGuest(course) {
|
|
17061
|
+
return course.salesEnabled && !course.requiresValidation && course.priceCents > 0;
|
|
17062
|
+
}
|
|
17063
|
+
function toAcademyCheckoutInvoiceFields(value, overCap, issuesInvoices = true) {
|
|
17064
|
+
if (!issuesInvoices) return {};
|
|
17065
|
+
if (!value.wantsFullInvoice && !overCap) return {};
|
|
17066
|
+
const billing = {
|
|
17067
|
+
billingName: value.billingName.trim(),
|
|
17068
|
+
billingNif: value.billingNif.trim(),
|
|
17069
|
+
billingIdType: value.billingIdType,
|
|
17070
|
+
...value.billingIdType === "NIF" ? {} : { billingIdCountry: value.billingIdCountry },
|
|
17071
|
+
billingAddress: {
|
|
17072
|
+
street: value.street.trim(),
|
|
17073
|
+
postalCode: value.postalCode.trim(),
|
|
17074
|
+
city: value.city.trim(),
|
|
17075
|
+
country: value.country
|
|
17076
|
+
}
|
|
17077
|
+
};
|
|
17078
|
+
return { ...value.wantsFullInvoice ? { wantsFullInvoice: true } : {}, billing };
|
|
17079
|
+
}
|
|
17080
|
+
|
|
16615
17081
|
// src/components/contact-interest-field.tsx
|
|
16616
|
-
var
|
|
16617
|
-
var
|
|
17082
|
+
var import_utils31 = require("@reblu/site-ui/utils");
|
|
17083
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
16618
17084
|
function ContactInterestField({
|
|
16619
17085
|
interest,
|
|
16620
17086
|
value,
|
|
@@ -16631,18 +17097,18 @@ function ContactInterestField({
|
|
|
16631
17097
|
else next2.delete(option2);
|
|
16632
17098
|
onChange(interest.options.filter((candidate) => next2.has(candidate)));
|
|
16633
17099
|
};
|
|
16634
|
-
return /* @__PURE__ */ (0,
|
|
16635
|
-
/* @__PURE__ */ (0,
|
|
16636
|
-
/* @__PURE__ */ (0,
|
|
17100
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("fieldset", { "data-slot": "contact-interest", className: (0, import_utils31.cn)("space-y-2", className), children: [
|
|
17101
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("legend", { className: "text-sm font-medium", children: interest.label }),
|
|
17102
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "flex flex-col gap-2", children: interest.options.map((option2, index) => {
|
|
16637
17103
|
const id = `${idPrefix}-${index}`;
|
|
16638
|
-
return /* @__PURE__ */ (0,
|
|
17104
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
|
|
16639
17105
|
"label",
|
|
16640
17106
|
{
|
|
16641
17107
|
htmlFor: id,
|
|
16642
17108
|
"data-slot": "contact-interest-option",
|
|
16643
17109
|
className: "flex items-center gap-2 text-sm",
|
|
16644
17110
|
children: [
|
|
16645
|
-
/* @__PURE__ */ (0,
|
|
17111
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
16646
17112
|
"input",
|
|
16647
17113
|
{
|
|
16648
17114
|
id,
|
|
@@ -16668,6 +17134,9 @@ var import_site_contracts = require("@reblu/site-contracts");
|
|
|
16668
17134
|
ALLOWED_YOUTUBE_HOSTS,
|
|
16669
17135
|
AddedToCartToast,
|
|
16670
17136
|
ArbitrationBadge,
|
|
17137
|
+
BeforeAfterPairs,
|
|
17138
|
+
CARD_ICON_NAMES,
|
|
17139
|
+
CardIconSvg,
|
|
16671
17140
|
CartAdjustmentsNotice,
|
|
16672
17141
|
CartLineIncludes,
|
|
16673
17142
|
CartLineList,
|
|
@@ -16676,14 +17145,18 @@ var import_site_contracts = require("@reblu/site-contracts");
|
|
|
16676
17145
|
CheckoutForm,
|
|
16677
17146
|
CheckoutLoginPrompt,
|
|
16678
17147
|
CheckoutPayAction,
|
|
17148
|
+
CheckoutQuoteNotice,
|
|
16679
17149
|
CheckoutQuoteSummary,
|
|
16680
17150
|
CheckoutTermsAcceptance,
|
|
17151
|
+
ChipList,
|
|
16681
17152
|
ContactInterestField,
|
|
16682
17153
|
CourseCatalogFilters,
|
|
16683
17154
|
CourseDescription,
|
|
16684
17155
|
CoursePurchaseTerms,
|
|
16685
17156
|
DATA_REQUEST_TYPES,
|
|
17157
|
+
DEFAULT_BEFORE_AFTER_LABELS,
|
|
16686
17158
|
DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS,
|
|
17159
|
+
DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS,
|
|
16687
17160
|
DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS,
|
|
16688
17161
|
DEFAULT_COURSE_CATALOG_FILTERS_LABELS,
|
|
16689
17162
|
DEFAULT_COURSE_PRICE_BANDS,
|
|
@@ -16700,6 +17173,8 @@ var import_site_contracts = require("@reblu/site-contracts");
|
|
|
16700
17173
|
EMPTY_FULL_INVOICE_VALUE,
|
|
16701
17174
|
FaqAccordion,
|
|
16702
17175
|
FullInvoiceFields,
|
|
17176
|
+
IconCardGrid,
|
|
17177
|
+
ImageTextSplit,
|
|
16703
17178
|
LegalDocument,
|
|
16704
17179
|
LessonPreview,
|
|
16705
17180
|
MarkdownRenderer,
|
|
@@ -16720,11 +17195,14 @@ var import_site_contracts = require("@reblu/site-contracts");
|
|
|
16720
17195
|
buildFaqPageJsonLd,
|
|
16721
17196
|
buildShareUrls,
|
|
16722
17197
|
bundleComponentsToIncludes,
|
|
17198
|
+
checkoutQuoteNotice,
|
|
16723
17199
|
collectFaqItems,
|
|
17200
|
+
courseSellsAsGuest,
|
|
16724
17201
|
defaultCheckoutFulfillment,
|
|
16725
17202
|
formatPrice,
|
|
16726
17203
|
getShopErrorMessage,
|
|
16727
17204
|
isAllowedYouTubeHost,
|
|
17205
|
+
isCheckoutDeliveryComplete,
|
|
16728
17206
|
isOverSimplifiedInvoiceCap,
|
|
16729
17207
|
markdownToPlainText,
|
|
16730
17208
|
markdownToSafeHtml,
|
|
@@ -16733,6 +17211,7 @@ var import_site_contracts = require("@reblu/site-contracts");
|
|
|
16733
17211
|
sanitizeHtml,
|
|
16734
17212
|
shopIssuesInvoices,
|
|
16735
17213
|
shouldRenderShopFilters,
|
|
17214
|
+
toAcademyCheckoutInvoiceFields,
|
|
16736
17215
|
toCheckoutFulfillmentFields,
|
|
16737
17216
|
toCheckoutInvoiceFields,
|
|
16738
17217
|
toCheckoutTermsFields
|