@reblu/site-blocks 0.29.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 +31 -0
- package/README.md +217 -6
- 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 +859 -342
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +202 -131
- package/dist/index.d.ts +202 -131
- package/dist/index.js +844 -342
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/_heading-BsNbc1wc.d.cts +0 -4
- package/dist/_heading-BsNbc1wc.d.ts +0 -4
package/dist/index.cjs
CHANGED
|
@@ -23,21 +23,29 @@ __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,
|
|
30
|
+
CartLineIncludes: () => CartLineIncludes,
|
|
27
31
|
CartLineList: () => CartLineList,
|
|
28
32
|
CartSummary: () => CartSummary,
|
|
29
33
|
CheckoutDeliveryChoice: () => CheckoutDeliveryChoice,
|
|
30
34
|
CheckoutForm: () => CheckoutForm,
|
|
31
35
|
CheckoutLoginPrompt: () => CheckoutLoginPrompt,
|
|
32
36
|
CheckoutPayAction: () => CheckoutPayAction,
|
|
37
|
+
CheckoutQuoteNotice: () => CheckoutQuoteNotice,
|
|
33
38
|
CheckoutQuoteSummary: () => CheckoutQuoteSummary,
|
|
34
39
|
CheckoutTermsAcceptance: () => CheckoutTermsAcceptance,
|
|
40
|
+
ChipList: () => ChipList,
|
|
35
41
|
ContactInterestField: () => ContactInterestField,
|
|
36
42
|
CourseCatalogFilters: () => CourseCatalogFilters,
|
|
37
43
|
CourseDescription: () => CourseDescription,
|
|
38
44
|
CoursePurchaseTerms: () => CoursePurchaseTerms,
|
|
39
45
|
DATA_REQUEST_TYPES: () => import_site_contracts.DATA_REQUEST_TYPES,
|
|
46
|
+
DEFAULT_BEFORE_AFTER_LABELS: () => DEFAULT_BEFORE_AFTER_LABELS,
|
|
40
47
|
DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS: () => DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS,
|
|
48
|
+
DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS: () => DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS,
|
|
41
49
|
DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS: () => DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS,
|
|
42
50
|
DEFAULT_COURSE_CATALOG_FILTERS_LABELS: () => DEFAULT_COURSE_CATALOG_FILTERS_LABELS,
|
|
43
51
|
DEFAULT_COURSE_PRICE_BANDS: () => DEFAULT_COURSE_PRICE_BANDS,
|
|
@@ -54,6 +62,8 @@ __export(src_exports, {
|
|
|
54
62
|
EMPTY_FULL_INVOICE_VALUE: () => EMPTY_FULL_INVOICE_VALUE,
|
|
55
63
|
FaqAccordion: () => FaqAccordion,
|
|
56
64
|
FullInvoiceFields: () => FullInvoiceFields,
|
|
65
|
+
IconCardGrid: () => IconCardGrid,
|
|
66
|
+
ImageTextSplit: () => ImageTextSplit,
|
|
57
67
|
LegalDocument: () => LegalDocument,
|
|
58
68
|
LessonPreview: () => LessonPreview,
|
|
59
69
|
MarkdownRenderer: () => MarkdownRenderer,
|
|
@@ -73,11 +83,15 @@ __export(src_exports, {
|
|
|
73
83
|
TrustBadges: () => TrustBadges,
|
|
74
84
|
buildFaqPageJsonLd: () => buildFaqPageJsonLd,
|
|
75
85
|
buildShareUrls: () => buildShareUrls,
|
|
86
|
+
bundleComponentsToIncludes: () => bundleComponentsToIncludes,
|
|
87
|
+
checkoutQuoteNotice: () => checkoutQuoteNotice,
|
|
76
88
|
collectFaqItems: () => collectFaqItems,
|
|
89
|
+
courseSellsAsGuest: () => courseSellsAsGuest,
|
|
77
90
|
defaultCheckoutFulfillment: () => defaultCheckoutFulfillment,
|
|
78
91
|
formatPrice: () => formatPrice,
|
|
79
92
|
getShopErrorMessage: () => getShopErrorMessage,
|
|
80
93
|
isAllowedYouTubeHost: () => isAllowedYouTubeHost,
|
|
94
|
+
isCheckoutDeliveryComplete: () => isCheckoutDeliveryComplete,
|
|
81
95
|
isOverSimplifiedInvoiceCap: () => isOverSimplifiedInvoiceCap,
|
|
82
96
|
markdownToPlainText: () => markdownToPlainText,
|
|
83
97
|
markdownToSafeHtml: () => markdownToSafeHtml,
|
|
@@ -86,6 +100,7 @@ __export(src_exports, {
|
|
|
86
100
|
sanitizeHtml: () => sanitizeHtml,
|
|
87
101
|
shopIssuesInvoices: () => shopIssuesInvoices,
|
|
88
102
|
shouldRenderShopFilters: () => shouldRenderShopFilters,
|
|
103
|
+
toAcademyCheckoutInvoiceFields: () => toAcademyCheckoutInvoiceFields,
|
|
89
104
|
toCheckoutFulfillmentFields: () => toCheckoutFulfillmentFields,
|
|
90
105
|
toCheckoutInvoiceFields: () => toCheckoutInvoiceFields,
|
|
91
106
|
toCheckoutTermsFields: () => toCheckoutTermsFields
|
|
@@ -14588,40 +14603,376 @@ function ArbitrationBadge({
|
|
|
14588
14603
|
}
|
|
14589
14604
|
|
|
14590
14605
|
// src/components/page-blocks.tsx
|
|
14591
|
-
var
|
|
14606
|
+
var import_utils15 = require("@reblu/site-ui/utils");
|
|
14592
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
|
|
14593
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");
|
|
14594
14945
|
var ALIASES = {
|
|
14595
14946
|
doctor_embed: "profile_embed",
|
|
14596
14947
|
specialty_embed: "page_embed"
|
|
14597
14948
|
};
|
|
14598
14949
|
function HeroBlock({ block, headingLevel }) {
|
|
14599
14950
|
const { title, subtitle, imageUrl } = block.data;
|
|
14600
|
-
return /* @__PURE__ */ (0,
|
|
14601
|
-
/* @__PURE__ */ (0,
|
|
14602
|
-
subtitle && /* @__PURE__ */ (0,
|
|
14603
|
-
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" }) })
|
|
14604
14955
|
] });
|
|
14605
14956
|
}
|
|
14606
14957
|
function RichtextBlock({ block, headingLevel }) {
|
|
14607
|
-
return /* @__PURE__ */ (0,
|
|
14958
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SafeHtml, { html: sanitizeHtml(block.data.html), headingOffset: headingLevel - 1 });
|
|
14608
14959
|
}
|
|
14609
14960
|
function FaqBlock({ block }) {
|
|
14610
|
-
return /* @__PURE__ */ (0,
|
|
14961
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(FaqAccordion, { items: block.data.items });
|
|
14611
14962
|
}
|
|
14612
14963
|
function StatsBlock({ block }) {
|
|
14613
|
-
return /* @__PURE__ */ (0,
|
|
14614
|
-
/* @__PURE__ */ (0,
|
|
14615
|
-
/* @__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 })
|
|
14616
14967
|
] }, i)) });
|
|
14617
14968
|
}
|
|
14618
14969
|
function TestimonialBlock({ block }) {
|
|
14619
14970
|
const { quote, author, role, avatarUrl } = block.data;
|
|
14620
|
-
return /* @__PURE__ */ (0,
|
|
14621
|
-
/* @__PURE__ */ (0,
|
|
14622
|
-
/* @__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: [
|
|
14623
14974
|
avatarUrl && // eslint-disable-next-line @next/next/no-img-element
|
|
14624
|
-
/* @__PURE__ */ (0,
|
|
14975
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14625
14976
|
"img",
|
|
14626
14977
|
{
|
|
14627
14978
|
src: avatarUrl,
|
|
@@ -14630,9 +14981,9 @@ function TestimonialBlock({ block }) {
|
|
|
14630
14981
|
className: "h-10 w-10 rounded-full object-cover"
|
|
14631
14982
|
}
|
|
14632
14983
|
),
|
|
14633
|
-
/* @__PURE__ */ (0,
|
|
14634
|
-
/* @__PURE__ */ (0,
|
|
14635
|
-
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 })
|
|
14636
14987
|
] })
|
|
14637
14988
|
] })
|
|
14638
14989
|
] });
|
|
@@ -14641,19 +14992,19 @@ function CtaSlotBlock(_props) {
|
|
|
14641
14992
|
return null;
|
|
14642
14993
|
}
|
|
14643
14994
|
function FeatureListBlock({ block }) {
|
|
14644
|
-
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)) });
|
|
14645
14996
|
}
|
|
14646
14997
|
function GalleryBlock({ block }) {
|
|
14647
14998
|
const { images } = block.data;
|
|
14648
|
-
return /* @__PURE__ */ (0,
|
|
14999
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14649
15000
|
"div",
|
|
14650
15001
|
{
|
|
14651
|
-
className: (0,
|
|
15002
|
+
className: (0, import_utils15.cn)(
|
|
14652
15003
|
"grid gap-4",
|
|
14653
15004
|
images.length > 1 ? "sm:grid-cols-2 lg:grid-cols-3" : "grid-cols-1"
|
|
14654
15005
|
),
|
|
14655
|
-
children: images.map((img, i) => /* @__PURE__ */ (0,
|
|
14656
|
-
/* @__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)(
|
|
14657
15008
|
"img",
|
|
14658
15009
|
{
|
|
14659
15010
|
src: img.url,
|
|
@@ -14662,7 +15013,7 @@ function GalleryBlock({ block }) {
|
|
|
14662
15013
|
className: "h-full w-full object-cover"
|
|
14663
15014
|
}
|
|
14664
15015
|
) }),
|
|
14665
|
-
img.caption && /* @__PURE__ */ (0,
|
|
15016
|
+
img.caption && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("figcaption", { className: "text-sm opacity-80", children: img.caption })
|
|
14666
15017
|
] }, `${img.url}-${i}`))
|
|
14667
15018
|
}
|
|
14668
15019
|
);
|
|
@@ -14672,13 +15023,13 @@ function EmbedCard({
|
|
|
14672
15023
|
headingLevel,
|
|
14673
15024
|
embedHref
|
|
14674
15025
|
}) {
|
|
14675
|
-
return /* @__PURE__ */ (0,
|
|
15026
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
14676
15027
|
"a",
|
|
14677
15028
|
{
|
|
14678
15029
|
href: embedHref(resolved),
|
|
14679
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",
|
|
14680
15031
|
children: [
|
|
14681
|
-
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)(
|
|
14682
15033
|
"img",
|
|
14683
15034
|
{
|
|
14684
15035
|
src: resolved.coverImageUrl,
|
|
@@ -14687,24 +15038,51 @@ function EmbedCard({
|
|
|
14687
15038
|
className: "h-full w-full object-cover"
|
|
14688
15039
|
}
|
|
14689
15040
|
) }),
|
|
14690
|
-
/* @__PURE__ */ (0,
|
|
14691
|
-
/* @__PURE__ */ (0,
|
|
14692
|
-
resolved.role && /* @__PURE__ */ (0,
|
|
14693
|
-
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 })
|
|
14694
15045
|
] })
|
|
14695
15046
|
]
|
|
14696
15047
|
}
|
|
14697
15048
|
);
|
|
14698
15049
|
}
|
|
14699
15050
|
function PageEmbedBlock({ block, headingLevel, embedHref }) {
|
|
14700
|
-
return /* @__PURE__ */ (0,
|
|
15051
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(EmbedCard, { resolved: block.resolved, headingLevel, embedHref });
|
|
14701
15052
|
}
|
|
14702
15053
|
function ProfileEmbedBlock({
|
|
14703
15054
|
block,
|
|
14704
15055
|
headingLevel,
|
|
14705
15056
|
embedHref
|
|
14706
15057
|
}) {
|
|
14707
|
-
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 });
|
|
14708
15086
|
}
|
|
14709
15087
|
var DEFAULT_RENDERERS = {
|
|
14710
15088
|
hero: HeroBlock,
|
|
@@ -14716,8 +15094,25 @@ var DEFAULT_RENDERERS = {
|
|
|
14716
15094
|
feature_list: FeatureListBlock,
|
|
14717
15095
|
gallery: GalleryBlock,
|
|
14718
15096
|
page_embed: PageEmbedBlock,
|
|
14719
|
-
profile_embed: ProfileEmbedBlock
|
|
15097
|
+
profile_embed: ProfileEmbedBlock,
|
|
15098
|
+
before_after: BeforeAfterBlock,
|
|
15099
|
+
chips: ChipsBlock,
|
|
15100
|
+
icon_cards: IconCardsBlock,
|
|
15101
|
+
image_text: ImageTextBlock
|
|
14720
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
|
+
}
|
|
14721
15116
|
var EMBED_TYPES = /* @__PURE__ */ new Set([
|
|
14722
15117
|
"page_embed",
|
|
14723
15118
|
"profile_embed"
|
|
@@ -14761,14 +15156,14 @@ function toIdFragment(value) {
|
|
|
14761
15156
|
function SectionCta2({ cta }) {
|
|
14762
15157
|
if (!hasUsableCta(cta)) return null;
|
|
14763
15158
|
const variant = toButtonVariant(cta.variant);
|
|
14764
|
-
return /* @__PURE__ */ (0,
|
|
15159
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "pt-2", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14765
15160
|
"a",
|
|
14766
15161
|
{
|
|
14767
15162
|
href: cta.url,
|
|
14768
15163
|
"data-slot": "button",
|
|
14769
15164
|
"data-variant": variant,
|
|
14770
15165
|
"data-size": "default",
|
|
14771
|
-
className: (0,
|
|
15166
|
+
className: (0, import_utils15.cn)((0, import_button_variants2.buttonVariants)({ variant, size: "default" })),
|
|
14772
15167
|
...cta.isExternal ? { target: "_blank", rel: "noopener noreferrer" } : {},
|
|
14773
15168
|
children: cta.label
|
|
14774
15169
|
}
|
|
@@ -14793,18 +15188,29 @@ function PageBlocks({
|
|
|
14793
15188
|
const Renderer = components?.[type] ?? DEFAULT_RENDERERS[type];
|
|
14794
15189
|
const headingId = block.heading ? `${safePrefix}-${toIdFragment(block.id)}-heading` : void 0;
|
|
14795
15190
|
const background = block.backgroundColor;
|
|
15191
|
+
const kicker = kickerOf(type, block);
|
|
15192
|
+
const ownsHeading = OWN_HEADING_TYPES.has(type);
|
|
14796
15193
|
return [
|
|
14797
|
-
/* @__PURE__ */ (0,
|
|
15194
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
14798
15195
|
"section",
|
|
14799
15196
|
{
|
|
14800
15197
|
"data-slot": "page-block",
|
|
14801
15198
|
"data-block-type": type,
|
|
14802
15199
|
"aria-labelledby": headingId,
|
|
14803
15200
|
style: surfaceStyle(background),
|
|
14804
|
-
className: (0,
|
|
15201
|
+
className: (0, import_utils15.cn)("space-y-6", background && "rounded-xl px-6 py-10", sectionClassName),
|
|
14805
15202
|
children: [
|
|
14806
|
-
|
|
14807
|
-
/* @__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)(
|
|
14808
15214
|
Renderer,
|
|
14809
15215
|
{
|
|
14810
15216
|
block,
|
|
@@ -14812,7 +15218,7 @@ function PageBlocks({
|
|
|
14812
15218
|
embedHref
|
|
14813
15219
|
}
|
|
14814
15220
|
),
|
|
14815
|
-
/* @__PURE__ */ (0,
|
|
15221
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(SectionCta2, { cta: block.cta })
|
|
14816
15222
|
]
|
|
14817
15223
|
},
|
|
14818
15224
|
block.id
|
|
@@ -14820,12 +15226,12 @@ function PageBlocks({
|
|
|
14820
15226
|
];
|
|
14821
15227
|
});
|
|
14822
15228
|
if (sections.length === 0) return null;
|
|
14823
|
-
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 });
|
|
14824
15230
|
}
|
|
14825
15231
|
|
|
14826
15232
|
// src/components/shop-filters.tsx
|
|
14827
|
-
var
|
|
14828
|
-
var
|
|
15233
|
+
var import_utils16 = require("@reblu/site-ui/utils");
|
|
15234
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
14829
15235
|
var DEFAULT_SHOP_PRICE_BANDS = [
|
|
14830
15236
|
{ max: 2500 },
|
|
14831
15237
|
{ min: 2500, max: 5e3 },
|
|
@@ -14869,7 +15275,7 @@ function priceBandLabel(band, t, currencyCode, locale) {
|
|
|
14869
15275
|
return "";
|
|
14870
15276
|
}
|
|
14871
15277
|
function OptionLink({ href, active, label, onActivate }) {
|
|
14872
|
-
return /* @__PURE__ */ (0,
|
|
15278
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
14873
15279
|
"a",
|
|
14874
15280
|
{
|
|
14875
15281
|
href,
|
|
@@ -14878,7 +15284,7 @@ function OptionLink({ href, active, label, onActivate }) {
|
|
|
14878
15284
|
event.preventDefault();
|
|
14879
15285
|
onActivate();
|
|
14880
15286
|
} : void 0,
|
|
14881
|
-
className: (0,
|
|
15287
|
+
className: (0, import_utils16.cn)(
|
|
14882
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",
|
|
14883
15289
|
active ? "border-transparent bg-primary text-primary-foreground" : "border-border text-muted-foreground hover:bg-muted hover:text-foreground"
|
|
14884
15290
|
),
|
|
@@ -14887,9 +15293,9 @@ function OptionLink({ href, active, label, onActivate }) {
|
|
|
14887
15293
|
);
|
|
14888
15294
|
}
|
|
14889
15295
|
function FilterFieldset({ legend, children: children2 }) {
|
|
14890
|
-
return /* @__PURE__ */ (0,
|
|
14891
|
-
/* @__PURE__ */ (0,
|
|
14892
|
-
/* @__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 })
|
|
14893
15299
|
] });
|
|
14894
15300
|
}
|
|
14895
15301
|
function ShopFilters({
|
|
@@ -14912,11 +15318,11 @@ function ShopFilters({
|
|
|
14912
15318
|
if (!shouldRenderShopFilters(facets, active)) {
|
|
14913
15319
|
return null;
|
|
14914
15320
|
}
|
|
14915
|
-
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: [
|
|
14916
15322
|
visibleTaxonomies.map((axis) => {
|
|
14917
15323
|
const activeSlug = active.taxonomy?.[axis.key];
|
|
14918
|
-
return /* @__PURE__ */ (0,
|
|
14919
|
-
/* @__PURE__ */ (0,
|
|
15324
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(FilterFieldset, { legend: axis.label, children: [
|
|
15325
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
14920
15326
|
OptionLink,
|
|
14921
15327
|
{
|
|
14922
15328
|
href: hrefs.taxonomy(axis.key, void 0),
|
|
@@ -14931,7 +15337,7 @@ function ShopFilters({
|
|
|
14931
15337
|
),
|
|
14932
15338
|
axis.terms.map((term) => {
|
|
14933
15339
|
const isActive = activeSlug === term.slug;
|
|
14934
|
-
return /* @__PURE__ */ (0,
|
|
15340
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
14935
15341
|
OptionLink,
|
|
14936
15342
|
{
|
|
14937
15343
|
href: hrefs.taxonomy(axis.key, isActive ? void 0 : term.slug),
|
|
@@ -14951,9 +15357,9 @@ function ShopFilters({
|
|
|
14951
15357
|
}),
|
|
14952
15358
|
visibleAttributes.map((attr) => {
|
|
14953
15359
|
const activeValues = toValueArray(active.attr?.[attr.key]);
|
|
14954
|
-
return /* @__PURE__ */ (0,
|
|
15360
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(FilterFieldset, { legend: attr.label, children: attr.options.map((opt) => {
|
|
14955
15361
|
const isActive = activeValues.includes(opt.value);
|
|
14956
|
-
return /* @__PURE__ */ (0,
|
|
15362
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
14957
15363
|
OptionLink,
|
|
14958
15364
|
{
|
|
14959
15365
|
href: hrefs.attr(attr.key, opt.value),
|
|
@@ -14971,11 +15377,11 @@ function ShopFilters({
|
|
|
14971
15377
|
);
|
|
14972
15378
|
}) }, attr.key);
|
|
14973
15379
|
}),
|
|
14974
|
-
showPriceGroup && /* @__PURE__ */ (0,
|
|
15380
|
+
showPriceGroup && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(FilterFieldset, { legend: t.price, children: priceBands.map((band, i) => {
|
|
14975
15381
|
const isActive = active.priceMin === band.min && active.priceMax === band.max;
|
|
14976
15382
|
const nextMin = isActive ? void 0 : band.min;
|
|
14977
15383
|
const nextMax = isActive ? void 0 : band.max;
|
|
14978
|
-
return /* @__PURE__ */ (0,
|
|
15384
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
14979
15385
|
OptionLink,
|
|
14980
15386
|
{
|
|
14981
15387
|
href: hrefs.price(nextMin, nextMax),
|
|
@@ -14986,7 +15392,7 @@ function ShopFilters({
|
|
|
14986
15392
|
i
|
|
14987
15393
|
);
|
|
14988
15394
|
}) }),
|
|
14989
|
-
hasOnSale && /* @__PURE__ */ (0,
|
|
15395
|
+
hasOnSale && /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
14990
15396
|
OptionLink,
|
|
14991
15397
|
{
|
|
14992
15398
|
href: hrefs.onSale(!active.onSale),
|
|
@@ -14995,7 +15401,7 @@ function ShopFilters({
|
|
|
14995
15401
|
onActivate: onChange ? () => onChange({ onSale: !active.onSale }) : void 0
|
|
14996
15402
|
}
|
|
14997
15403
|
),
|
|
14998
|
-
/* @__PURE__ */ (0,
|
|
15404
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
14999
15405
|
"a",
|
|
15000
15406
|
{
|
|
15001
15407
|
href: hrefs.clearAll(),
|
|
@@ -15011,8 +15417,8 @@ function ShopFilters({
|
|
|
15011
15417
|
}
|
|
15012
15418
|
|
|
15013
15419
|
// src/components/course-catalog-filters.tsx
|
|
15014
|
-
var
|
|
15015
|
-
var
|
|
15420
|
+
var import_utils17 = require("@reblu/site-ui/utils");
|
|
15421
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
15016
15422
|
var DEFAULT_COURSE_PRICE_BANDS = [
|
|
15017
15423
|
{ max: 5e3 },
|
|
15018
15424
|
{ min: 5e3, max: 15e3 },
|
|
@@ -15065,9 +15471,9 @@ function CourseCatalogFilters({
|
|
|
15065
15471
|
const showPrice = enabled.price !== false;
|
|
15066
15472
|
const isFree = Boolean(active.free);
|
|
15067
15473
|
if (!showCategories && !showInstructors && !showPrice) return null;
|
|
15068
|
-
return /* @__PURE__ */ (0,
|
|
15069
|
-
showCategories && /* @__PURE__ */ (0,
|
|
15070
|
-
/* @__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)(
|
|
15071
15477
|
OptionLink,
|
|
15072
15478
|
{
|
|
15073
15479
|
href: categoryHref(void 0),
|
|
@@ -15079,7 +15485,7 @@ function CourseCatalogFilters({
|
|
|
15079
15485
|
sortedCategories.map((category) => {
|
|
15080
15486
|
const isActive = active.category === category.slug;
|
|
15081
15487
|
const next2 = isActive ? void 0 : category.slug;
|
|
15082
|
-
return /* @__PURE__ */ (0,
|
|
15488
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15083
15489
|
OptionLink,
|
|
15084
15490
|
{
|
|
15085
15491
|
href: categoryHref(next2),
|
|
@@ -15091,8 +15497,8 @@ function CourseCatalogFilters({
|
|
|
15091
15497
|
);
|
|
15092
15498
|
})
|
|
15093
15499
|
] }),
|
|
15094
|
-
showInstructors && /* @__PURE__ */ (0,
|
|
15095
|
-
/* @__PURE__ */ (0,
|
|
15500
|
+
showInstructors && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(FilterFieldset, { legend: t.instructor, children: [
|
|
15501
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15096
15502
|
OptionLink,
|
|
15097
15503
|
{
|
|
15098
15504
|
href: hrefs.instructor(void 0),
|
|
@@ -15104,7 +15510,7 @@ function CourseCatalogFilters({
|
|
|
15104
15510
|
named.map((instructor) => {
|
|
15105
15511
|
const isActive = active.instructor === instructor.id;
|
|
15106
15512
|
const next2 = isActive ? void 0 : instructor.id;
|
|
15107
|
-
return /* @__PURE__ */ (0,
|
|
15513
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15108
15514
|
OptionLink,
|
|
15109
15515
|
{
|
|
15110
15516
|
href: hrefs.instructor(next2),
|
|
@@ -15116,8 +15522,8 @@ function CourseCatalogFilters({
|
|
|
15116
15522
|
);
|
|
15117
15523
|
})
|
|
15118
15524
|
] }),
|
|
15119
|
-
showPrice && /* @__PURE__ */ (0,
|
|
15120
|
-
/* @__PURE__ */ (0,
|
|
15525
|
+
showPrice && /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(FilterFieldset, { legend: t.price, children: [
|
|
15526
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15121
15527
|
OptionLink,
|
|
15122
15528
|
{
|
|
15123
15529
|
href: hrefs.free(!isFree),
|
|
@@ -15132,7 +15538,7 @@ function CourseCatalogFilters({
|
|
|
15132
15538
|
const isActive = !isFree && active.priceMin === band.min && active.priceMax === band.max;
|
|
15133
15539
|
const nextMin = isActive ? void 0 : band.min;
|
|
15134
15540
|
const nextMax = isActive ? void 0 : band.max;
|
|
15135
|
-
return /* @__PURE__ */ (0,
|
|
15541
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15136
15542
|
OptionLink,
|
|
15137
15543
|
{
|
|
15138
15544
|
href: hrefs.price(nextMin, nextMax),
|
|
@@ -15144,7 +15550,7 @@ function CourseCatalogFilters({
|
|
|
15144
15550
|
);
|
|
15145
15551
|
})
|
|
15146
15552
|
] }),
|
|
15147
|
-
/* @__PURE__ */ (0,
|
|
15553
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
15148
15554
|
"a",
|
|
15149
15555
|
{
|
|
15150
15556
|
href: hrefs.clearAll(),
|
|
@@ -15166,16 +15572,44 @@ function CourseCatalogFilters({
|
|
|
15166
15572
|
}
|
|
15167
15573
|
|
|
15168
15574
|
// src/components/cart-line-list.tsx
|
|
15169
|
-
var
|
|
15170
|
-
var
|
|
15575
|
+
var import_utils18 = require("@reblu/site-ui/utils");
|
|
15576
|
+
var import_jsx_runtime22 = (
|
|
15577
|
+
// eslint-disable-next-line react/no-array-index-key -- entries are positional, SITE-built rows
|
|
15578
|
+
require("react/jsx-runtime")
|
|
15579
|
+
);
|
|
15171
15580
|
var DEFAULT_LABELS2 = {
|
|
15172
15581
|
quantityLabel: "Cantidad",
|
|
15173
15582
|
decrease: "Reducir cantidad",
|
|
15174
15583
|
increase: "Aumentar cantidad",
|
|
15175
15584
|
remove: "Eliminar",
|
|
15176
15585
|
unitPriceSuffix: "/ ud.",
|
|
15177
|
-
cancelledNotice: "Pago cancelado: tu carrito sigue aqu\xED"
|
|
15586
|
+
cancelledNotice: "Pago cancelado: tu carrito sigue aqu\xED",
|
|
15587
|
+
includesSummary: "Qu\xE9 incluye"
|
|
15178
15588
|
};
|
|
15589
|
+
function CartLineIncludes({ entries, note, className }) {
|
|
15590
|
+
const hasNote = note != null && note !== false && note !== "";
|
|
15591
|
+
if (entries.length === 0 && !hasNote) return null;
|
|
15592
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
15593
|
+
"div",
|
|
15594
|
+
{
|
|
15595
|
+
className: (0, import_utils18.cn)("mt-2 space-y-2 rounded-lg bg-muted px-4 py-3 text-sm", className),
|
|
15596
|
+
"data-slot": "cart-line-includes",
|
|
15597
|
+
children: [
|
|
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 })
|
|
15601
|
+
] }, idx)) }),
|
|
15602
|
+
hasNote && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-muted-foreground", children: note })
|
|
15603
|
+
]
|
|
15604
|
+
}
|
|
15605
|
+
);
|
|
15606
|
+
}
|
|
15607
|
+
function bundleComponentsToIncludes(components) {
|
|
15608
|
+
return components.map(({ quantity, component }) => ({
|
|
15609
|
+
label: component.name,
|
|
15610
|
+
value: `x${quantity}`
|
|
15611
|
+
}));
|
|
15612
|
+
}
|
|
15179
15613
|
function lineKey(productId, variantId) {
|
|
15180
15614
|
return `${productId}-${variantId ?? "no-variant"}`;
|
|
15181
15615
|
}
|
|
@@ -15186,6 +15620,7 @@ function CartLineList({
|
|
|
15186
15620
|
liveMessage,
|
|
15187
15621
|
notice,
|
|
15188
15622
|
lineMessage,
|
|
15623
|
+
lineIncludes,
|
|
15189
15624
|
labels,
|
|
15190
15625
|
currencyCode,
|
|
15191
15626
|
locale,
|
|
@@ -15193,9 +15628,9 @@ function CartLineList({
|
|
|
15193
15628
|
}) {
|
|
15194
15629
|
const t = { ...DEFAULT_LABELS2, ...labels };
|
|
15195
15630
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
15196
|
-
return /* @__PURE__ */ (0,
|
|
15197
|
-
/* @__PURE__ */ (0,
|
|
15198
|
-
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)(
|
|
15199
15634
|
"div",
|
|
15200
15635
|
{
|
|
15201
15636
|
role: "status",
|
|
@@ -15204,33 +15639,34 @@ function CartLineList({
|
|
|
15204
15639
|
children: noticeContent
|
|
15205
15640
|
}
|
|
15206
15641
|
),
|
|
15207
|
-
/* @__PURE__ */ (0,
|
|
15642
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)("ul", { className: "space-y-4", children: items.map((item) => {
|
|
15208
15643
|
const maxQty = item.maxStock ?? Infinity;
|
|
15209
15644
|
const atMax = item.quantity >= maxQty;
|
|
15210
15645
|
const atMin = item.quantity <= 1;
|
|
15211
15646
|
const message = lineMessage?.(item);
|
|
15212
|
-
|
|
15647
|
+
const includes = lineIncludes?.(item);
|
|
15648
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
15213
15649
|
"li",
|
|
15214
15650
|
{
|
|
15215
15651
|
className: "flex gap-4 rounded-xl border border-border bg-card p-4",
|
|
15216
15652
|
children: [
|
|
15217
|
-
/* @__PURE__ */ (0,
|
|
15218
|
-
/* @__PURE__ */ (0,
|
|
15219
|
-
/* @__PURE__ */ (0,
|
|
15220
|
-
item.variantName && /* @__PURE__ */ (0,
|
|
15221
|
-
/* @__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: [
|
|
15222
15658
|
formatPrice(item.unitPrice, currencyCode, locale),
|
|
15223
15659
|
" ",
|
|
15224
15660
|
t.unitPriceSuffix
|
|
15225
15661
|
] }),
|
|
15226
|
-
/* @__PURE__ */ (0,
|
|
15662
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
15227
15663
|
"div",
|
|
15228
15664
|
{
|
|
15229
15665
|
role: "group",
|
|
15230
15666
|
"aria-label": t.quantityLabel,
|
|
15231
15667
|
className: "mt-3 flex items-center gap-3",
|
|
15232
15668
|
children: [
|
|
15233
|
-
/* @__PURE__ */ (0,
|
|
15669
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15234
15670
|
"button",
|
|
15235
15671
|
{
|
|
15236
15672
|
type: "button",
|
|
@@ -15241,8 +15677,8 @@ function CartLineList({
|
|
|
15241
15677
|
children: "\u2212"
|
|
15242
15678
|
}
|
|
15243
15679
|
),
|
|
15244
|
-
/* @__PURE__ */ (0,
|
|
15245
|
-
/* @__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)(
|
|
15246
15682
|
"button",
|
|
15247
15683
|
{
|
|
15248
15684
|
type: "button",
|
|
@@ -15253,7 +15689,7 @@ function CartLineList({
|
|
|
15253
15689
|
children: "+"
|
|
15254
15690
|
}
|
|
15255
15691
|
),
|
|
15256
|
-
onRemove && /* @__PURE__ */ (0,
|
|
15692
|
+
onRemove && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15257
15693
|
"button",
|
|
15258
15694
|
{
|
|
15259
15695
|
type: "button",
|
|
@@ -15266,16 +15702,20 @@ function CartLineList({
|
|
|
15266
15702
|
]
|
|
15267
15703
|
}
|
|
15268
15704
|
),
|
|
15269
|
-
message != null && message !== false && /* @__PURE__ */ (0,
|
|
15705
|
+
message != null && message !== false && /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
15270
15706
|
"p",
|
|
15271
15707
|
{
|
|
15272
15708
|
className: "mt-2 text-sm text-destructive",
|
|
15273
15709
|
"data-slot": "cart-line-list-line-message",
|
|
15274
15710
|
children: message
|
|
15275
15711
|
}
|
|
15276
|
-
)
|
|
15712
|
+
),
|
|
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 }),
|
|
15715
|
+
includes
|
|
15716
|
+
] })
|
|
15277
15717
|
] }),
|
|
15278
|
-
/* @__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) }) })
|
|
15279
15719
|
]
|
|
15280
15720
|
},
|
|
15281
15721
|
lineKey(item.productId, item.variantId)
|
|
@@ -15285,8 +15725,8 @@ function CartLineList({
|
|
|
15285
15725
|
}
|
|
15286
15726
|
|
|
15287
15727
|
// src/components/cart-summary.tsx
|
|
15288
|
-
var
|
|
15289
|
-
var
|
|
15728
|
+
var import_utils19 = require("@reblu/site-ui/utils");
|
|
15729
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
15290
15730
|
var DEFAULT_LABELS3 = {
|
|
15291
15731
|
subtotal: "Subtotal",
|
|
15292
15732
|
discountPrefix: "Descuento",
|
|
@@ -15316,37 +15756,37 @@ function CartSummary({
|
|
|
15316
15756
|
const hasDiscount = Boolean(discountAmount && discountAmount > 0);
|
|
15317
15757
|
const noticeContent = notice === true ? t.cancelledNotice : notice;
|
|
15318
15758
|
const hasNotice = noticeContent != null && noticeContent !== false;
|
|
15319
|
-
const breakdown = /* @__PURE__ */ (0,
|
|
15759
|
+
const breakdown = /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
|
|
15320
15760
|
"dl",
|
|
15321
15761
|
{
|
|
15322
|
-
className: (0,
|
|
15762
|
+
className: (0, import_utils19.cn)("space-y-2 text-sm", !hasNotice && className),
|
|
15323
15763
|
"data-slot": "cart-summary",
|
|
15324
15764
|
children: [
|
|
15325
|
-
/* @__PURE__ */ (0,
|
|
15326
|
-
/* @__PURE__ */ (0,
|
|
15327
|
-
/* @__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) })
|
|
15328
15768
|
] }),
|
|
15329
|
-
hasDiscount && /* @__PURE__ */ (0,
|
|
15330
|
-
/* @__PURE__ */ (0,
|
|
15331
|
-
/* @__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: [
|
|
15332
15772
|
"-",
|
|
15333
15773
|
formatPrice(discountAmount, currencyCode, locale)
|
|
15334
15774
|
] })
|
|
15335
15775
|
] }),
|
|
15336
|
-
shippingEnabled && /* @__PURE__ */ (0,
|
|
15337
|
-
/* @__PURE__ */ (0,
|
|
15338
|
-
/* @__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) })
|
|
15339
15779
|
] }),
|
|
15340
|
-
/* @__PURE__ */ (0,
|
|
15341
|
-
/* @__PURE__ */ (0,
|
|
15342
|
-
/* @__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) })
|
|
15343
15783
|
] })
|
|
15344
15784
|
]
|
|
15345
15785
|
}
|
|
15346
15786
|
);
|
|
15347
15787
|
if (!hasNotice) return breakdown;
|
|
15348
|
-
return /* @__PURE__ */ (0,
|
|
15349
|
-
/* @__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)(
|
|
15350
15790
|
"div",
|
|
15351
15791
|
{
|
|
15352
15792
|
role: "status",
|
|
@@ -15360,8 +15800,8 @@ function CartSummary({
|
|
|
15360
15800
|
}
|
|
15361
15801
|
|
|
15362
15802
|
// src/components/cart-adjustments-notice.tsx
|
|
15363
|
-
var
|
|
15364
|
-
var
|
|
15803
|
+
var import_utils20 = require("@reblu/site-ui/utils");
|
|
15804
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
15365
15805
|
var DEFAULT_LABELS4 = {
|
|
15366
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.`,
|
|
15367
15807
|
quantityChanged: (name, quantity) => `Hemos ajustado la cantidad de ${name} a ${quantity} por el stock disponible.`,
|
|
@@ -15395,20 +15835,20 @@ function CartAdjustmentsNotice({
|
|
|
15395
15835
|
);
|
|
15396
15836
|
}
|
|
15397
15837
|
if (messages.length === 0) return null;
|
|
15398
|
-
return /* @__PURE__ */ (0,
|
|
15838
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
15399
15839
|
"div",
|
|
15400
15840
|
{
|
|
15401
15841
|
role: "status",
|
|
15402
|
-
className: (0,
|
|
15842
|
+
className: (0, import_utils20.cn)("rounded-lg border border-border bg-muted px-3 py-2 text-sm", className),
|
|
15403
15843
|
"data-slot": "cart-adjustments-notice",
|
|
15404
|
-
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)) })
|
|
15405
15845
|
}
|
|
15406
15846
|
);
|
|
15407
15847
|
}
|
|
15408
15848
|
|
|
15409
15849
|
// src/components/added-to-cart-toast.tsx
|
|
15410
|
-
var
|
|
15411
|
-
var
|
|
15850
|
+
var import_utils21 = require("@reblu/site-ui/utils");
|
|
15851
|
+
var import_jsx_runtime25 = (
|
|
15412
15852
|
// eslint-disable-next-line @next/next/no-img-element -- toast content, not a Next <Image> layout context
|
|
15413
15853
|
require("react/jsx-runtime")
|
|
15414
15854
|
);
|
|
@@ -15431,32 +15871,32 @@ function AddedToCartToast({
|
|
|
15431
15871
|
const message = status === "error" ? t.error : status === "outOfStock" ? t.outOfStock : t.success;
|
|
15432
15872
|
const hasThumbnail = Boolean(imageUrl && imageUrl.trim().length > 0);
|
|
15433
15873
|
const variant = status === "success" ? "success" : "error";
|
|
15434
|
-
return /* @__PURE__ */ (0,
|
|
15874
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
15435
15875
|
"div",
|
|
15436
15876
|
{
|
|
15437
15877
|
"data-slot": "added-to-cart-toast",
|
|
15438
15878
|
"data-variant": variant,
|
|
15439
|
-
className: (0,
|
|
15879
|
+
className: (0, import_utils21.cn)(
|
|
15440
15880
|
"flex items-center gap-3 rounded-xl border border-border bg-card p-3 text-sm shadow-lg",
|
|
15441
15881
|
variant === "success" && "border-green-600/30 dark:border-green-400/30",
|
|
15442
15882
|
variant === "error" && "border-destructive/30",
|
|
15443
15883
|
className
|
|
15444
15884
|
),
|
|
15445
15885
|
children: [
|
|
15446
|
-
hasThumbnail && /* @__PURE__ */ (0,
|
|
15447
|
-
/* @__PURE__ */ (0,
|
|
15448
|
-
/* @__PURE__ */ (0,
|
|
15449
|
-
/* @__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 })
|
|
15450
15890
|
] }),
|
|
15451
|
-
/* @__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 }) })
|
|
15452
15892
|
]
|
|
15453
15893
|
}
|
|
15454
15894
|
);
|
|
15455
15895
|
}
|
|
15456
15896
|
|
|
15457
15897
|
// src/components/checkout-login-prompt.tsx
|
|
15458
|
-
var
|
|
15459
|
-
var
|
|
15898
|
+
var import_utils22 = require("@reblu/site-ui/utils");
|
|
15899
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
15460
15900
|
var DEFAULT_LABELS6 = {
|
|
15461
15901
|
title: "Identificaci\xF3n",
|
|
15462
15902
|
description: "Introduce tu email para agilizar el proceso o contin\xFAa como invitado.",
|
|
@@ -15483,26 +15923,26 @@ function CheckoutLoginPrompt({
|
|
|
15483
15923
|
if (!open) return null;
|
|
15484
15924
|
const t = { ...DEFAULT_LABELS6, ...labels };
|
|
15485
15925
|
const isValidEmail = EMAIL_PATTERN.test(email.trim());
|
|
15486
|
-
return /* @__PURE__ */ (0,
|
|
15487
|
-
/* @__PURE__ */ (0,
|
|
15488
|
-
/* @__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)(
|
|
15489
15929
|
"div",
|
|
15490
15930
|
{
|
|
15491
15931
|
role: "dialog",
|
|
15492
15932
|
"aria-modal": "true",
|
|
15493
15933
|
"aria-labelledby": "checkout-login-prompt-title",
|
|
15494
15934
|
"data-slot": "checkout-login-prompt",
|
|
15495
|
-
className: (0,
|
|
15935
|
+
className: (0, import_utils22.cn)(
|
|
15496
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",
|
|
15497
15937
|
className
|
|
15498
15938
|
),
|
|
15499
15939
|
children: [
|
|
15500
|
-
/* @__PURE__ */ (0,
|
|
15501
|
-
/* @__PURE__ */ (0,
|
|
15502
|
-
/* @__PURE__ */ (0,
|
|
15503
|
-
/* @__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 })
|
|
15504
15944
|
] }),
|
|
15505
|
-
/* @__PURE__ */ (0,
|
|
15945
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
15506
15946
|
"button",
|
|
15507
15947
|
{
|
|
15508
15948
|
type: "button",
|
|
@@ -15513,9 +15953,9 @@ function CheckoutLoginPrompt({
|
|
|
15513
15953
|
}
|
|
15514
15954
|
)
|
|
15515
15955
|
] }),
|
|
15516
|
-
/* @__PURE__ */ (0,
|
|
15517
|
-
/* @__PURE__ */ (0,
|
|
15518
|
-
/* @__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)(
|
|
15519
15959
|
"input",
|
|
15520
15960
|
{
|
|
15521
15961
|
id: "checkout-login-prompt-email",
|
|
@@ -15524,29 +15964,29 @@ function CheckoutLoginPrompt({
|
|
|
15524
15964
|
value: email,
|
|
15525
15965
|
onChange: (e) => onEmailChange(e.target.value),
|
|
15526
15966
|
placeholder: t.emailPlaceholder,
|
|
15527
|
-
className: (0,
|
|
15967
|
+
className: (0, import_utils22.cn)(
|
|
15528
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",
|
|
15529
15969
|
error ? "border-destructive" : "border-border focus:border-primary"
|
|
15530
15970
|
)
|
|
15531
15971
|
}
|
|
15532
15972
|
),
|
|
15533
|
-
error && /* @__PURE__ */ (0,
|
|
15973
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "text-xs text-destructive", children: error })
|
|
15534
15974
|
] }),
|
|
15535
|
-
/* @__PURE__ */ (0,
|
|
15536
|
-
/* @__PURE__ */ (0,
|
|
15975
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "space-y-2", children: [
|
|
15976
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
15537
15977
|
"button",
|
|
15538
15978
|
{
|
|
15539
15979
|
type: "button",
|
|
15540
15980
|
onClick: onSubmitEmail,
|
|
15541
15981
|
disabled: checking || !isValidEmail,
|
|
15542
|
-
className: (0,
|
|
15982
|
+
className: (0, import_utils22.cn)(
|
|
15543
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",
|
|
15544
15984
|
checking || !isValidEmail ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
|
|
15545
15985
|
),
|
|
15546
15986
|
children: checking ? t.checking : t.continueWithEmail
|
|
15547
15987
|
}
|
|
15548
15988
|
),
|
|
15549
|
-
/* @__PURE__ */ (0,
|
|
15989
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
15550
15990
|
"button",
|
|
15551
15991
|
{
|
|
15552
15992
|
type: "button",
|
|
@@ -15563,9 +16003,9 @@ function CheckoutLoginPrompt({
|
|
|
15563
16003
|
}
|
|
15564
16004
|
|
|
15565
16005
|
// src/components/checkout-form.tsx
|
|
15566
|
-
var
|
|
16006
|
+
var import_utils23 = require("@reblu/site-ui/utils");
|
|
15567
16007
|
var import_phone_input = require("@reblu/site-ui/phone-input");
|
|
15568
|
-
var
|
|
16008
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
15569
16009
|
var DEFAULT_LABELS7 = {
|
|
15570
16010
|
contactTitle: "Datos de contacto",
|
|
15571
16011
|
nameLabel: "Nombre completo",
|
|
@@ -15621,22 +16061,22 @@ function CheckoutForm({
|
|
|
15621
16061
|
event.preventDefault();
|
|
15622
16062
|
if (discountCode.trim() && !discountApplying) onApplyDiscount();
|
|
15623
16063
|
}
|
|
15624
|
-
return /* @__PURE__ */ (0,
|
|
16064
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
|
|
15625
16065
|
loginPrompt,
|
|
15626
|
-
/* @__PURE__ */ (0,
|
|
16066
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
15627
16067
|
"form",
|
|
15628
16068
|
{
|
|
15629
16069
|
"data-testid": "checkout-form",
|
|
15630
16070
|
onSubmit,
|
|
15631
|
-
className: (0,
|
|
16071
|
+
className: (0, import_utils23.cn)("space-y-8", className),
|
|
15632
16072
|
"data-slot": "checkout-form",
|
|
15633
16073
|
children: [
|
|
15634
|
-
/* @__PURE__ */ (0,
|
|
15635
|
-
/* @__PURE__ */ (0,
|
|
15636
|
-
/* @__PURE__ */ (0,
|
|
15637
|
-
/* @__PURE__ */ (0,
|
|
15638
|
-
/* @__PURE__ */ (0,
|
|
15639
|
-
/* @__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)(
|
|
15640
16080
|
"input",
|
|
15641
16081
|
{
|
|
15642
16082
|
id: "checkout-form-name",
|
|
@@ -15645,17 +16085,17 @@ function CheckoutForm({
|
|
|
15645
16085
|
value: contact.name,
|
|
15646
16086
|
onChange: (e) => patchContact({ name: e.target.value }),
|
|
15647
16087
|
placeholder: t.namePlaceholder,
|
|
15648
|
-
className: (0,
|
|
16088
|
+
className: (0, import_utils23.cn)(
|
|
15649
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",
|
|
15650
16090
|
contactErrors?.name ? "border-destructive" : "border-border focus:border-primary"
|
|
15651
16091
|
)
|
|
15652
16092
|
}
|
|
15653
16093
|
),
|
|
15654
|
-
contactErrors?.name && /* @__PURE__ */ (0,
|
|
16094
|
+
contactErrors?.name && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.name })
|
|
15655
16095
|
] }),
|
|
15656
|
-
/* @__PURE__ */ (0,
|
|
15657
|
-
/* @__PURE__ */ (0,
|
|
15658
|
-
/* @__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)(
|
|
15659
16099
|
"input",
|
|
15660
16100
|
{
|
|
15661
16101
|
id: "checkout-form-email",
|
|
@@ -15664,15 +16104,15 @@ function CheckoutForm({
|
|
|
15664
16104
|
value: contact.email,
|
|
15665
16105
|
onChange: (e) => patchContact({ email: e.target.value }),
|
|
15666
16106
|
placeholder: t.emailPlaceholder,
|
|
15667
|
-
className: (0,
|
|
16107
|
+
className: (0, import_utils23.cn)(
|
|
15668
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",
|
|
15669
16109
|
contactErrors?.email ? "border-destructive" : "border-border focus:border-primary"
|
|
15670
16110
|
)
|
|
15671
16111
|
}
|
|
15672
16112
|
),
|
|
15673
|
-
contactErrors?.email && /* @__PURE__ */ (0,
|
|
16113
|
+
contactErrors?.email && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "text-xs text-destructive", children: contactErrors.email })
|
|
15674
16114
|
] }),
|
|
15675
|
-
/* @__PURE__ */ (0,
|
|
16115
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "space-y-1", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15676
16116
|
import_phone_input.PhoneInput,
|
|
15677
16117
|
{
|
|
15678
16118
|
id: "checkout-form-phone",
|
|
@@ -15686,26 +16126,26 @@ function CheckoutForm({
|
|
|
15686
16126
|
] })
|
|
15687
16127
|
] }),
|
|
15688
16128
|
children2,
|
|
15689
|
-
generalError ? /* @__PURE__ */ (0,
|
|
15690
|
-
/* @__PURE__ */ (0,
|
|
15691
|
-
/* @__PURE__ */ (0,
|
|
15692
|
-
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)(
|
|
15693
16133
|
"div",
|
|
15694
16134
|
{
|
|
15695
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",
|
|
15696
16136
|
"data-slot": "checkout-staff-discount",
|
|
15697
16137
|
children: [
|
|
15698
|
-
/* @__PURE__ */ (0,
|
|
15699
|
-
/* @__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)) })
|
|
15700
16140
|
]
|
|
15701
16141
|
}
|
|
15702
16142
|
) : null,
|
|
15703
|
-
appliedDiscount && !autoDiscount ? /* @__PURE__ */ (0,
|
|
15704
|
-
/* @__PURE__ */ (0,
|
|
15705
|
-
/* @__PURE__ */ (0,
|
|
15706
|
-
/* @__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)) })
|
|
15707
16147
|
] }),
|
|
15708
|
-
/* @__PURE__ */ (0,
|
|
16148
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15709
16149
|
"button",
|
|
15710
16150
|
{
|
|
15711
16151
|
type: "button",
|
|
@@ -15715,9 +16155,9 @@ function CheckoutForm({
|
|
|
15715
16155
|
children: t.removeDiscount
|
|
15716
16156
|
}
|
|
15717
16157
|
)
|
|
15718
|
-
] }) : /* @__PURE__ */ (0,
|
|
15719
|
-
/* @__PURE__ */ (0,
|
|
15720
|
-
/* @__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)(
|
|
15721
16161
|
"input",
|
|
15722
16162
|
{
|
|
15723
16163
|
id: "checkout-form-discount-code",
|
|
@@ -15729,7 +16169,7 @@ function CheckoutForm({
|
|
|
15729
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"
|
|
15730
16170
|
}
|
|
15731
16171
|
),
|
|
15732
|
-
/* @__PURE__ */ (0,
|
|
16172
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15733
16173
|
"button",
|
|
15734
16174
|
{
|
|
15735
16175
|
type: "button",
|
|
@@ -15740,14 +16180,14 @@ function CheckoutForm({
|
|
|
15740
16180
|
}
|
|
15741
16181
|
)
|
|
15742
16182
|
] }),
|
|
15743
|
-
discountError && /* @__PURE__ */ (0,
|
|
16183
|
+
discountError && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "text-xs text-destructive", children: discountError })
|
|
15744
16184
|
] }),
|
|
15745
|
-
/* @__PURE__ */ (0,
|
|
16185
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
15746
16186
|
"button",
|
|
15747
16187
|
{
|
|
15748
16188
|
type: "submit",
|
|
15749
16189
|
disabled: submitting || submitDisabled,
|
|
15750
|
-
className: (0,
|
|
16190
|
+
className: (0, import_utils23.cn)(
|
|
15751
16191
|
"flex w-full cursor-pointer items-center justify-center gap-2 rounded-xl px-4 py-3 font-semibold transition-all",
|
|
15752
16192
|
submitting || submitDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "bg-primary text-primary-foreground hover:bg-primary/90"
|
|
15753
16193
|
),
|
|
@@ -15761,11 +16201,11 @@ function CheckoutForm({
|
|
|
15761
16201
|
}
|
|
15762
16202
|
|
|
15763
16203
|
// src/components/order-confirmation.tsx
|
|
15764
|
-
var
|
|
16204
|
+
var import_utils25 = require("@reblu/site-ui/utils");
|
|
15765
16205
|
|
|
15766
16206
|
// src/components/order-invoice-link.tsx
|
|
15767
|
-
var
|
|
15768
|
-
var
|
|
16207
|
+
var import_utils24 = require("@reblu/site-ui/utils");
|
|
16208
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
15769
16209
|
var DEFAULT_LABELS8 = {
|
|
15770
16210
|
linkLabel: "Descargar la factura {number}",
|
|
15771
16211
|
signInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
|
|
@@ -15773,8 +16213,8 @@ var DEFAULT_LABELS8 = {
|
|
|
15773
16213
|
function OrderInvoiceLink({ invoice, labels, className }) {
|
|
15774
16214
|
if (!invoice) return null;
|
|
15775
16215
|
const t = { ...DEFAULT_LABELS8, ...labels };
|
|
15776
|
-
return /* @__PURE__ */ (0,
|
|
15777
|
-
/* @__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)(
|
|
15778
16218
|
"a",
|
|
15779
16219
|
{
|
|
15780
16220
|
href: invoice.url,
|
|
@@ -15782,19 +16222,21 @@ function OrderInvoiceLink({ invoice, labels, className }) {
|
|
|
15782
16222
|
children: t.linkLabel.replace("{number}", invoice.number)
|
|
15783
16223
|
}
|
|
15784
16224
|
),
|
|
15785
|
-
/* @__PURE__ */ (0,
|
|
16225
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: "text-muted-foreground", children: t.signInHint })
|
|
15786
16226
|
] });
|
|
15787
16227
|
}
|
|
15788
16228
|
|
|
15789
16229
|
// src/components/order-confirmation.tsx
|
|
15790
|
-
var
|
|
16230
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
15791
16231
|
var DEFAULT_LABELS9 = {
|
|
15792
16232
|
pollingTitle: "Confirmando tu pedido\u2026",
|
|
15793
16233
|
pollingDescription: "Estamos procesando el pago, un momento\u2026",
|
|
15794
16234
|
foundTitle: "\xA1Pedido confirmado!",
|
|
15795
|
-
// REB-
|
|
15796
|
-
//
|
|
15797
|
-
|
|
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.",
|
|
15798
16240
|
timeoutTitle: "Pago recibido",
|
|
15799
16241
|
timeoutDescription: "Tu pago se ha procesado. Recibir\xE1s un email de confirmaci\xF3n en breve.",
|
|
15800
16242
|
orderNumberLabel: "Pedido confirmado",
|
|
@@ -15820,6 +16262,12 @@ var DEFAULT_LABELS9 = {
|
|
|
15820
16262
|
invoiceLinkLabel: "Descargar la factura {number}",
|
|
15821
16263
|
invoiceSignInHint: "Te pediremos que inicies sesi\xF3n para abrirla."
|
|
15822
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
|
+
}
|
|
15823
16271
|
function OrderConfirmation({
|
|
15824
16272
|
status,
|
|
15825
16273
|
order,
|
|
@@ -15846,50 +16294,50 @@ function OrderConfirmation({
|
|
|
15846
16294
|
}
|
|
15847
16295
|
if (status === "not_found") return { title: t.notFoundTitle, description: t.notFoundDescription };
|
|
15848
16296
|
if (status === "error") return { title: t.errorTitle, description: t.errorDescription };
|
|
15849
|
-
if (isFound || order) return { title: t.foundTitle, description: t
|
|
16297
|
+
if (isFound || order) return { title: t.foundTitle, description: foundDescription(t, order) };
|
|
15850
16298
|
return { title: t.timeoutTitle, description: t.timeoutDescription };
|
|
15851
16299
|
})();
|
|
15852
16300
|
const showFullOrderSummary = Boolean(order) && (isFound || status === "timeout");
|
|
15853
16301
|
const showOrderReference = Boolean(order) && !showFullOrderSummary && (status === "refunded" || status === "partially_refunded" || status === "pending_timeout");
|
|
15854
16302
|
const showSessionReference = !order && sessionId && (status === "timeout" || status === "not_found" || status === "pending_timeout");
|
|
15855
16303
|
const showRecheck = (status === "pending_timeout" || status === "error") && onRecheck;
|
|
15856
|
-
return /* @__PURE__ */ (0,
|
|
15857
|
-
/* @__PURE__ */ (0,
|
|
15858
|
-
/* @__PURE__ */ (0,
|
|
15859
|
-
showFullOrderSummary && order && /* @__PURE__ */ (0,
|
|
15860
|
-
/* @__PURE__ */ (0,
|
|
15861
|
-
/* @__PURE__ */ (0,
|
|
15862
|
-
/* @__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 })
|
|
15863
16311
|
] }),
|
|
15864
|
-
/* @__PURE__ */ (0,
|
|
15865
|
-
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)(
|
|
15866
16314
|
"div",
|
|
15867
16315
|
{
|
|
15868
16316
|
className: "flex justify-between gap-4 text-sm",
|
|
15869
16317
|
children: [
|
|
15870
|
-
/* @__PURE__ */ (0,
|
|
16318
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("span", { className: "max-w-[60%] truncate text-muted-foreground", children: [
|
|
15871
16319
|
item.product.name,
|
|
15872
16320
|
item.variant ? ` (${item.variant.name})` : "",
|
|
15873
16321
|
" x",
|
|
15874
16322
|
item.quantity
|
|
15875
16323
|
] }),
|
|
15876
|
-
/* @__PURE__ */ (0,
|
|
16324
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: formatPrice(item.total, currencyCode, locale) })
|
|
15877
16325
|
]
|
|
15878
16326
|
},
|
|
15879
16327
|
idx
|
|
15880
16328
|
)),
|
|
15881
|
-
/* @__PURE__ */ (0,
|
|
15882
|
-
/* @__PURE__ */ (0,
|
|
15883
|
-
/* @__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) })
|
|
15884
16332
|
] }) })
|
|
15885
16333
|
] }),
|
|
15886
|
-
/* @__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: [
|
|
15887
16335
|
t.confirmationEmailPrefix,
|
|
15888
16336
|
" ",
|
|
15889
|
-
/* @__PURE__ */ (0,
|
|
16337
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "font-medium text-foreground", children: order.customerEmail }),
|
|
15890
16338
|
"."
|
|
15891
16339
|
] }),
|
|
15892
|
-
/* @__PURE__ */ (0,
|
|
16340
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
15893
16341
|
OrderInvoiceLink,
|
|
15894
16342
|
{
|
|
15895
16343
|
invoice: order.invoice,
|
|
@@ -15897,11 +16345,11 @@ function OrderConfirmation({
|
|
|
15897
16345
|
}
|
|
15898
16346
|
)
|
|
15899
16347
|
] }),
|
|
15900
|
-
showOrderReference && order && /* @__PURE__ */ (0,
|
|
15901
|
-
/* @__PURE__ */ (0,
|
|
15902
|
-
/* @__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 })
|
|
15903
16351
|
] }),
|
|
15904
|
-
status === "failed" && cartHref && /* @__PURE__ */ (0,
|
|
16352
|
+
status === "failed" && cartHref && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
15905
16353
|
"a",
|
|
15906
16354
|
{
|
|
15907
16355
|
href: cartHref,
|
|
@@ -15909,7 +16357,7 @@ function OrderConfirmation({
|
|
|
15909
16357
|
children: t.backToCartLabel
|
|
15910
16358
|
}
|
|
15911
16359
|
),
|
|
15912
|
-
showRecheck && /* @__PURE__ */ (0,
|
|
16360
|
+
showRecheck && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
15913
16361
|
"button",
|
|
15914
16362
|
{
|
|
15915
16363
|
type: "button",
|
|
@@ -15918,16 +16366,16 @@ function OrderConfirmation({
|
|
|
15918
16366
|
children: t.recheckLabel
|
|
15919
16367
|
}
|
|
15920
16368
|
),
|
|
15921
|
-
showSessionReference && /* @__PURE__ */ (0,
|
|
15922
|
-
/* @__PURE__ */ (0,
|
|
15923
|
-
/* @__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 })
|
|
15924
16372
|
] })
|
|
15925
16373
|
] });
|
|
15926
16374
|
}
|
|
15927
16375
|
|
|
15928
16376
|
// src/components/full-invoice-fields.tsx
|
|
15929
|
-
var
|
|
15930
|
-
var
|
|
16377
|
+
var import_utils26 = require("@reblu/site-ui/utils");
|
|
16378
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
15931
16379
|
var EMPTY_FULL_INVOICE_VALUE = {
|
|
15932
16380
|
wantsFullInvoice: false,
|
|
15933
16381
|
billingIdType: "NIF",
|
|
@@ -16044,12 +16492,12 @@ function FullInvoiceFields({
|
|
|
16044
16492
|
const showFields = value.wantsFullInvoice || overCap;
|
|
16045
16493
|
const isSpanishNif = value.billingIdType === "NIF";
|
|
16046
16494
|
const set = (key2, next2) => onChange({ ...value, [key2]: next2 });
|
|
16047
|
-
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;
|
|
16048
16496
|
const invalid2 = (key2) => errors[key2] ? { "aria-invalid": true, "aria-describedby": `full-invoice-${key2}-error` } : {};
|
|
16049
|
-
return /* @__PURE__ */ (0,
|
|
16050
|
-
overCap ? /* @__PURE__ */ (0,
|
|
16051
|
-
/* @__PURE__ */ (0,
|
|
16052
|
-
/* @__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)(
|
|
16053
16501
|
"input",
|
|
16054
16502
|
{
|
|
16055
16503
|
type: "checkbox",
|
|
@@ -16059,12 +16507,12 @@ function FullInvoiceFields({
|
|
|
16059
16507
|
),
|
|
16060
16508
|
t.toggle
|
|
16061
16509
|
] }),
|
|
16062
|
-
/* @__PURE__ */ (0,
|
|
16510
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("p", { className: "text-sm text-muted-foreground", children: t.underCapNotice })
|
|
16063
16511
|
] }),
|
|
16064
|
-
showFields && /* @__PURE__ */ (0,
|
|
16065
|
-
/* @__PURE__ */ (0,
|
|
16066
|
-
/* @__PURE__ */ (0,
|
|
16067
|
-
/* @__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)(
|
|
16068
16516
|
"select",
|
|
16069
16517
|
{
|
|
16070
16518
|
id: "full-invoice-id-type",
|
|
@@ -16073,14 +16521,14 @@ function FullInvoiceFields({
|
|
|
16073
16521
|
value: value.billingIdType,
|
|
16074
16522
|
onChange: (e) => set("billingIdType", e.target.value),
|
|
16075
16523
|
...invalid2("billingIdType"),
|
|
16076
|
-
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))
|
|
16077
16525
|
}
|
|
16078
16526
|
),
|
|
16079
16527
|
error("billingIdType")
|
|
16080
16528
|
] }),
|
|
16081
|
-
!isSpanishNif && /* @__PURE__ */ (0,
|
|
16082
|
-
/* @__PURE__ */ (0,
|
|
16083
|
-
/* @__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)(
|
|
16084
16532
|
"select",
|
|
16085
16533
|
{
|
|
16086
16534
|
id: "full-invoice-id-country",
|
|
@@ -16090,16 +16538,16 @@ function FullInvoiceFields({
|
|
|
16090
16538
|
onChange: (e) => set("billingIdCountry", e.target.value),
|
|
16091
16539
|
...invalid2("billingIdCountry"),
|
|
16092
16540
|
children: [
|
|
16093
|
-
/* @__PURE__ */ (0,
|
|
16094
|
-
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))
|
|
16095
16543
|
]
|
|
16096
16544
|
}
|
|
16097
16545
|
),
|
|
16098
16546
|
error("billingIdCountry")
|
|
16099
16547
|
] }),
|
|
16100
|
-
/* @__PURE__ */ (0,
|
|
16101
|
-
/* @__PURE__ */ (0,
|
|
16102
|
-
/* @__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)(
|
|
16103
16551
|
"input",
|
|
16104
16552
|
{
|
|
16105
16553
|
id: "full-invoice-nif",
|
|
@@ -16112,9 +16560,9 @@ function FullInvoiceFields({
|
|
|
16112
16560
|
),
|
|
16113
16561
|
error("billingNif")
|
|
16114
16562
|
] }),
|
|
16115
|
-
/* @__PURE__ */ (0,
|
|
16116
|
-
/* @__PURE__ */ (0,
|
|
16117
|
-
/* @__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)(
|
|
16118
16566
|
"input",
|
|
16119
16567
|
{
|
|
16120
16568
|
id: "full-invoice-name",
|
|
@@ -16127,9 +16575,9 @@ function FullInvoiceFields({
|
|
|
16127
16575
|
),
|
|
16128
16576
|
error("billingName")
|
|
16129
16577
|
] }),
|
|
16130
|
-
/* @__PURE__ */ (0,
|
|
16131
|
-
/* @__PURE__ */ (0,
|
|
16132
|
-
/* @__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)(
|
|
16133
16581
|
"input",
|
|
16134
16582
|
{
|
|
16135
16583
|
id: "full-invoice-street",
|
|
@@ -16141,9 +16589,9 @@ function FullInvoiceFields({
|
|
|
16141
16589
|
}
|
|
16142
16590
|
)
|
|
16143
16591
|
] }),
|
|
16144
|
-
/* @__PURE__ */ (0,
|
|
16145
|
-
/* @__PURE__ */ (0,
|
|
16146
|
-
/* @__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)(
|
|
16147
16595
|
"input",
|
|
16148
16596
|
{
|
|
16149
16597
|
id: "full-invoice-postal-code",
|
|
@@ -16154,9 +16602,9 @@ function FullInvoiceFields({
|
|
|
16154
16602
|
}
|
|
16155
16603
|
)
|
|
16156
16604
|
] }),
|
|
16157
|
-
/* @__PURE__ */ (0,
|
|
16158
|
-
/* @__PURE__ */ (0,
|
|
16159
|
-
/* @__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)(
|
|
16160
16608
|
"input",
|
|
16161
16609
|
{
|
|
16162
16610
|
id: "full-invoice-city",
|
|
@@ -16167,9 +16615,9 @@ function FullInvoiceFields({
|
|
|
16167
16615
|
}
|
|
16168
16616
|
)
|
|
16169
16617
|
] }),
|
|
16170
|
-
/* @__PURE__ */ (0,
|
|
16171
|
-
/* @__PURE__ */ (0,
|
|
16172
|
-
/* @__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)(
|
|
16173
16621
|
"select",
|
|
16174
16622
|
{
|
|
16175
16623
|
id: "full-invoice-country",
|
|
@@ -16177,18 +16625,18 @@ function FullInvoiceFields({
|
|
|
16177
16625
|
required: true,
|
|
16178
16626
|
value: value.country,
|
|
16179
16627
|
onChange: (e) => set("country", e.target.value),
|
|
16180
|
-
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))
|
|
16181
16629
|
}
|
|
16182
16630
|
)
|
|
16183
16631
|
] }),
|
|
16184
|
-
/* @__PURE__ */ (0,
|
|
16632
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "sm:col-span-2", children: error("address") })
|
|
16185
16633
|
] })
|
|
16186
16634
|
] });
|
|
16187
16635
|
}
|
|
16188
16636
|
|
|
16189
16637
|
// src/components/checkout-delivery-choice.tsx
|
|
16190
|
-
var
|
|
16191
|
-
var
|
|
16638
|
+
var import_utils27 = require("@reblu/site-ui/utils");
|
|
16639
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
16192
16640
|
var EMPTY_CHECKOUT_ADDRESS = {
|
|
16193
16641
|
firstName: "",
|
|
16194
16642
|
lastName: "",
|
|
@@ -16251,17 +16699,17 @@ function CheckoutDeliveryChoice({
|
|
|
16251
16699
|
const isPickup = value?.type === "PICKUP";
|
|
16252
16700
|
const isShipping = value?.type === "SHIPPING";
|
|
16253
16701
|
const errorId = `${uid}-delivery-error`;
|
|
16254
|
-
return /* @__PURE__ */ (0,
|
|
16702
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
16255
16703
|
"fieldset",
|
|
16256
16704
|
{
|
|
16257
16705
|
"data-slot": "checkout-delivery",
|
|
16258
16706
|
"aria-describedby": error ? errorId : void 0,
|
|
16259
|
-
className: (0,
|
|
16707
|
+
className: (0, import_utils27.cn)("space-y-4", className),
|
|
16260
16708
|
children: [
|
|
16261
|
-
/* @__PURE__ */ (0,
|
|
16262
|
-
/* @__PURE__ */ (0,
|
|
16263
|
-
homeDelivery ? /* @__PURE__ */ (0,
|
|
16264
|
-
/* @__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)(
|
|
16265
16713
|
"input",
|
|
16266
16714
|
{
|
|
16267
16715
|
type: "radio",
|
|
@@ -16271,42 +16719,42 @@ function CheckoutDeliveryChoice({
|
|
|
16271
16719
|
className: "mt-0.5 size-4 accent-primary"
|
|
16272
16720
|
}
|
|
16273
16721
|
),
|
|
16274
|
-
/* @__PURE__ */ (0,
|
|
16275
|
-
/* @__PURE__ */ (0,
|
|
16276
|
-
/* @__PURE__ */ (0,
|
|
16277
|
-
/* @__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 })
|
|
16278
16726
|
] }),
|
|
16279
|
-
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
|
|
16280
16728
|
] })
|
|
16281
16729
|
] }) : null,
|
|
16282
|
-
pickup ? /* @__PURE__ */ (0,
|
|
16283
|
-
/* @__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)(
|
|
16284
16732
|
"input",
|
|
16285
16733
|
{
|
|
16286
16734
|
type: "radio",
|
|
16287
16735
|
name: `${uid}-method`,
|
|
16288
16736
|
checked: isPickup,
|
|
16289
|
-
onChange: () => onChange(
|
|
16737
|
+
onChange: () => onChange(pickupFulfillment(delivery)),
|
|
16290
16738
|
className: "mt-0.5 size-4 accent-primary"
|
|
16291
16739
|
}
|
|
16292
16740
|
),
|
|
16293
|
-
/* @__PURE__ */ (0,
|
|
16294
|
-
/* @__PURE__ */ (0,
|
|
16295
|
-
/* @__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 })
|
|
16296
16744
|
] })
|
|
16297
16745
|
] }) : null
|
|
16298
16746
|
] }),
|
|
16299
|
-
error ? /* @__PURE__ */ (0,
|
|
16300
|
-
isPickup ? /* @__PURE__ */ (0,
|
|
16301
|
-
/* @__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 }),
|
|
16302
16750
|
delivery.pickupLocations.map((location2) => {
|
|
16303
16751
|
const descId = `${uid}-point-${location2.id}`;
|
|
16304
|
-
return /* @__PURE__ */ (0,
|
|
16752
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
16305
16753
|
"label",
|
|
16306
16754
|
{
|
|
16307
16755
|
className: "flex cursor-pointer items-start gap-3 rounded-lg border border-border p-3 has-[:checked]:border-primary",
|
|
16308
16756
|
children: [
|
|
16309
|
-
/* @__PURE__ */ (0,
|
|
16757
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
16310
16758
|
"input",
|
|
16311
16759
|
{
|
|
16312
16760
|
type: "radio",
|
|
@@ -16317,9 +16765,9 @@ function CheckoutDeliveryChoice({
|
|
|
16317
16765
|
className: "mt-0.5 size-4 accent-primary"
|
|
16318
16766
|
}
|
|
16319
16767
|
),
|
|
16320
|
-
/* @__PURE__ */ (0,
|
|
16321
|
-
/* @__PURE__ */ (0,
|
|
16322
|
-
/* @__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) })
|
|
16323
16771
|
] })
|
|
16324
16772
|
]
|
|
16325
16773
|
},
|
|
@@ -16327,14 +16775,14 @@ function CheckoutDeliveryChoice({
|
|
|
16327
16775
|
);
|
|
16328
16776
|
})
|
|
16329
16777
|
] }) : null,
|
|
16330
|
-
isShipping ? /* @__PURE__ */ (0,
|
|
16331
|
-
/* @__PURE__ */ (0,
|
|
16332
|
-
/* @__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 }) => {
|
|
16333
16781
|
const fieldId = `${uid}-${key2}`;
|
|
16334
16782
|
const fieldError = addressErrors?.[key2];
|
|
16335
|
-
return /* @__PURE__ */ (0,
|
|
16336
|
-
/* @__PURE__ */ (0,
|
|
16337
|
-
/* @__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)(
|
|
16338
16786
|
"input",
|
|
16339
16787
|
{
|
|
16340
16788
|
id: fieldId,
|
|
@@ -16345,13 +16793,13 @@ function CheckoutDeliveryChoice({
|
|
|
16345
16793
|
onChange: (e) => onAddressChange({ ...address, [key2]: e.target.value }),
|
|
16346
16794
|
"aria-invalid": fieldError ? true : void 0,
|
|
16347
16795
|
"aria-describedby": fieldError ? `${fieldId}-error` : void 0,
|
|
16348
|
-
className: (0,
|
|
16796
|
+
className: (0, import_utils27.cn)(
|
|
16349
16797
|
INPUT_CLASS,
|
|
16350
16798
|
fieldError ? "border-destructive" : "border-border focus:border-primary"
|
|
16351
16799
|
)
|
|
16352
16800
|
}
|
|
16353
16801
|
),
|
|
16354
|
-
fieldError ? /* @__PURE__ */ (0,
|
|
16802
|
+
fieldError ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { id: `${fieldId}-error`, className: "text-sm text-destructive", children: fieldError }) : null
|
|
16355
16803
|
] }, key2);
|
|
16356
16804
|
}) })
|
|
16357
16805
|
] }) : null
|
|
@@ -16359,12 +16807,19 @@ function CheckoutDeliveryChoice({
|
|
|
16359
16807
|
}
|
|
16360
16808
|
);
|
|
16361
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
|
+
}
|
|
16362
16814
|
function defaultCheckoutFulfillment(delivery) {
|
|
16363
16815
|
if (!delivery) return null;
|
|
16364
16816
|
if (delivery.methods.homeDelivery) return { type: "SHIPPING" };
|
|
16365
16817
|
if (!delivery.methods.pickup) return null;
|
|
16366
|
-
|
|
16367
|
-
|
|
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);
|
|
16368
16823
|
}
|
|
16369
16824
|
function quoteRequiresDelivery(quote) {
|
|
16370
16825
|
return quote ? quote.lines.some((line) => line.isShippable) : true;
|
|
@@ -16386,8 +16841,8 @@ function toCheckoutFulfillmentFields(value, address, requiresDelivery = true) {
|
|
|
16386
16841
|
}
|
|
16387
16842
|
|
|
16388
16843
|
// src/components/checkout-quote-summary.tsx
|
|
16389
|
-
var
|
|
16390
|
-
var
|
|
16844
|
+
var import_utils28 = require("@reblu/site-ui/utils");
|
|
16845
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
16391
16846
|
var DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS = {
|
|
16392
16847
|
subtotal: "Subtotal",
|
|
16393
16848
|
discount: (codeOrLabel, isAutomatic) => isAutomatic ? codeOrLabel : `Descuento (${codeOrLabel})`,
|
|
@@ -16404,9 +16859,9 @@ function Row({
|
|
|
16404
16859
|
value,
|
|
16405
16860
|
className
|
|
16406
16861
|
}) {
|
|
16407
|
-
return /* @__PURE__ */ (0,
|
|
16408
|
-
/* @__PURE__ */ (0,
|
|
16409
|
-
/* @__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 })
|
|
16410
16865
|
] });
|
|
16411
16866
|
}
|
|
16412
16867
|
function CheckoutQuoteSummary({
|
|
@@ -16422,22 +16877,22 @@ function CheckoutQuoteSummary({
|
|
|
16422
16877
|
const price = (cents) => formatPrice(cents, currencyCode, locale);
|
|
16423
16878
|
const { fulfillment, shipping, tax, discount } = quote;
|
|
16424
16879
|
const Tag = `h${headingLevel}`;
|
|
16425
|
-
return /* @__PURE__ */ (0,
|
|
16426
|
-
heading ? /* @__PURE__ */ (0,
|
|
16427
|
-
/* @__PURE__ */ (0,
|
|
16428
|
-
/* @__PURE__ */ (0,
|
|
16429
|
-
/* @__PURE__ */ (0,
|
|
16430
|
-
line.variantName ? /* @__PURE__ */ (0,
|
|
16431
|
-
/* @__PURE__ */ (0,
|
|
16432
|
-
line.kindLabel ? /* @__PURE__ */ (0,
|
|
16433
|
-
/* @__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)) })
|
|
16434
16889
|
] })
|
|
16435
16890
|
] }),
|
|
16436
|
-
/* @__PURE__ */ (0,
|
|
16891
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "shrink-0 tabular-nums", children: price(line.total) })
|
|
16437
16892
|
] }, `${line.productId}-${line.variantId ?? ""}`)) }),
|
|
16438
|
-
/* @__PURE__ */ (0,
|
|
16439
|
-
/* @__PURE__ */ (0,
|
|
16440
|
-
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)(
|
|
16441
16896
|
Row,
|
|
16442
16897
|
{
|
|
16443
16898
|
className: "text-green-700 dark:text-green-400",
|
|
@@ -16445,17 +16900,17 @@ function CheckoutQuoteSummary({
|
|
|
16445
16900
|
value: `\u2212${price(discount.amount)}`
|
|
16446
16901
|
}
|
|
16447
16902
|
) : null,
|
|
16448
|
-
fulfillment.type ? /* @__PURE__ */ (0,
|
|
16903
|
+
fulfillment.type ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
16449
16904
|
Row,
|
|
16450
16905
|
{
|
|
16451
|
-
name: /* @__PURE__ */ (0,
|
|
16906
|
+
name: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
|
|
16452
16907
|
fulfillment.label ?? t.delivery,
|
|
16453
|
-
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
|
|
16454
16909
|
] }),
|
|
16455
16910
|
value: fulfillment.type === "PICKUP" || shipping.isFree ? t.free : price(shipping.cost)
|
|
16456
16911
|
}
|
|
16457
16912
|
) : null,
|
|
16458
|
-
tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ (0,
|
|
16913
|
+
tax.isLineVisible ? tax.breakdown.map((entry) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
16459
16914
|
Row,
|
|
16460
16915
|
{
|
|
16461
16916
|
className: tax.isIncluded ? "text-muted-foreground" : void 0,
|
|
@@ -16464,19 +16919,44 @@ function CheckoutQuoteSummary({
|
|
|
16464
16919
|
},
|
|
16465
16920
|
entry.label
|
|
16466
16921
|
)) : null,
|
|
16467
|
-
/* @__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) })
|
|
16468
16923
|
] }),
|
|
16469
|
-
tax.isIncluded ? /* @__PURE__ */ (0,
|
|
16470
|
-
fulfillment.type === "SHIPPING" && !shipping.isFree && shipping.remainingForFree ? /* @__PURE__ */ (0,
|
|
16471
|
-
fulfillment.type && quote.deliveryEstimateText ? /* @__PURE__ */ (0,
|
|
16472
|
-
quote.discountError ? /* @__PURE__ */ (0,
|
|
16473
|
-
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
|
|
16474
16929
|
] });
|
|
16475
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
|
+
}
|
|
16476
16956
|
|
|
16477
16957
|
// src/components/checkout-terms-acceptance.tsx
|
|
16478
|
-
var
|
|
16479
|
-
var
|
|
16958
|
+
var import_utils29 = require("@reblu/site-ui/utils");
|
|
16959
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
16480
16960
|
function splitTermsLabel(label) {
|
|
16481
16961
|
const at = label.indexOf("{terms}");
|
|
16482
16962
|
return at === -1 ? [`${label} `, ""] : [label.slice(0, at), label.slice(at + "{terms}".length)];
|
|
@@ -16498,9 +16978,9 @@ function CheckoutTermsAcceptance({
|
|
|
16498
16978
|
(part) => part.replaceAll("{tenant}", copy.tenantName)
|
|
16499
16979
|
);
|
|
16500
16980
|
const newTab = copy.isTermsLinkNewTab;
|
|
16501
|
-
return /* @__PURE__ */ (0,
|
|
16502
|
-
/* @__PURE__ */ (0,
|
|
16503
|
-
/* @__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)(
|
|
16504
16984
|
"input",
|
|
16505
16985
|
{
|
|
16506
16986
|
id: boxId,
|
|
@@ -16513,9 +16993,9 @@ function CheckoutTermsAcceptance({
|
|
|
16513
16993
|
className: "mt-0.5 size-5 shrink-0 cursor-pointer accent-primary"
|
|
16514
16994
|
}
|
|
16515
16995
|
),
|
|
16516
|
-
/* @__PURE__ */ (0,
|
|
16996
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("label", { htmlFor: boxId, className: "text-sm leading-relaxed", children: [
|
|
16517
16997
|
before,
|
|
16518
|
-
/* @__PURE__ */ (0,
|
|
16998
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
|
|
16519
16999
|
"a",
|
|
16520
17000
|
{
|
|
16521
17001
|
href: copy.termsLinkUrl ?? termsHref,
|
|
@@ -16523,9 +17003,9 @@ function CheckoutTermsAcceptance({
|
|
|
16523
17003
|
className: "font-medium underline underline-offset-2 hover:text-primary",
|
|
16524
17004
|
children: [
|
|
16525
17005
|
copy.termsLinkText,
|
|
16526
|
-
newTab ? /* @__PURE__ */ (0,
|
|
17006
|
+
newTab ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [
|
|
16527
17007
|
" ",
|
|
16528
|
-
/* @__PURE__ */ (0,
|
|
17008
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "sr-only", children: newTabHint })
|
|
16529
17009
|
] }) : null
|
|
16530
17010
|
]
|
|
16531
17011
|
}
|
|
@@ -16533,7 +17013,7 @@ function CheckoutTermsAcceptance({
|
|
|
16533
17013
|
after
|
|
16534
17014
|
] })
|
|
16535
17015
|
] }),
|
|
16536
|
-
error ? /* @__PURE__ */ (0,
|
|
17016
|
+
error ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("p", { id: errorId, className: "pl-8 text-sm text-destructive", children: error }) : null
|
|
16537
17017
|
] });
|
|
16538
17018
|
}
|
|
16539
17019
|
function toCheckoutTermsFields(copy, accepted) {
|
|
@@ -16542,8 +17022,8 @@ function toCheckoutTermsFields(copy, accepted) {
|
|
|
16542
17022
|
}
|
|
16543
17023
|
|
|
16544
17024
|
// src/components/checkout-pay-action.tsx
|
|
16545
|
-
var
|
|
16546
|
-
var
|
|
17025
|
+
var import_utils30 = require("@reblu/site-ui/utils");
|
|
17026
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
16547
17027
|
function CheckoutPayAction({
|
|
16548
17028
|
label,
|
|
16549
17029
|
notice,
|
|
@@ -16557,28 +17037,50 @@ function CheckoutPayAction({
|
|
|
16557
17037
|
}) {
|
|
16558
17038
|
const noticeId = `${id}-notice`;
|
|
16559
17039
|
const isDisabled = submitting || disabled;
|
|
16560
|
-
return /* @__PURE__ */ (0,
|
|
16561
|
-
/* @__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)(
|
|
16562
17042
|
"button",
|
|
16563
17043
|
{
|
|
16564
17044
|
type: "submit",
|
|
16565
17045
|
disabled: isDisabled,
|
|
16566
17046
|
"aria-busy": submitting || void 0,
|
|
16567
17047
|
"aria-describedby": notice ? noticeId : void 0,
|
|
16568
|
-
className: buttonClassName ?? (0,
|
|
17048
|
+
className: buttonClassName ?? (0, import_utils30.cn)(
|
|
16569
17049
|
"flex w-full items-center justify-center gap-2 rounded-xl px-4 py-3 text-base font-semibold transition-all",
|
|
16570
17050
|
isDisabled ? "cursor-not-allowed bg-muted text-muted-foreground" : "cursor-pointer bg-primary text-primary-foreground hover:bg-primary/90"
|
|
16571
17051
|
),
|
|
16572
17052
|
children: submitting ? submittingLabel : label
|
|
16573
17053
|
}
|
|
16574
17054
|
),
|
|
16575
|
-
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
|
|
16576
17056
|
] });
|
|
16577
17057
|
}
|
|
16578
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
|
+
|
|
16579
17081
|
// src/components/contact-interest-field.tsx
|
|
16580
|
-
var
|
|
16581
|
-
var
|
|
17082
|
+
var import_utils31 = require("@reblu/site-ui/utils");
|
|
17083
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
16582
17084
|
function ContactInterestField({
|
|
16583
17085
|
interest,
|
|
16584
17086
|
value,
|
|
@@ -16595,18 +17097,18 @@ function ContactInterestField({
|
|
|
16595
17097
|
else next2.delete(option2);
|
|
16596
17098
|
onChange(interest.options.filter((candidate) => next2.has(candidate)));
|
|
16597
17099
|
};
|
|
16598
|
-
return /* @__PURE__ */ (0,
|
|
16599
|
-
/* @__PURE__ */ (0,
|
|
16600
|
-
/* @__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) => {
|
|
16601
17103
|
const id = `${idPrefix}-${index}`;
|
|
16602
|
-
return /* @__PURE__ */ (0,
|
|
17104
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
|
|
16603
17105
|
"label",
|
|
16604
17106
|
{
|
|
16605
17107
|
htmlFor: id,
|
|
16606
17108
|
"data-slot": "contact-interest-option",
|
|
16607
17109
|
className: "flex items-center gap-2 text-sm",
|
|
16608
17110
|
children: [
|
|
16609
|
-
/* @__PURE__ */ (0,
|
|
17111
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
16610
17112
|
"input",
|
|
16611
17113
|
{
|
|
16612
17114
|
id,
|
|
@@ -16632,21 +17134,29 @@ var import_site_contracts = require("@reblu/site-contracts");
|
|
|
16632
17134
|
ALLOWED_YOUTUBE_HOSTS,
|
|
16633
17135
|
AddedToCartToast,
|
|
16634
17136
|
ArbitrationBadge,
|
|
17137
|
+
BeforeAfterPairs,
|
|
17138
|
+
CARD_ICON_NAMES,
|
|
17139
|
+
CardIconSvg,
|
|
16635
17140
|
CartAdjustmentsNotice,
|
|
17141
|
+
CartLineIncludes,
|
|
16636
17142
|
CartLineList,
|
|
16637
17143
|
CartSummary,
|
|
16638
17144
|
CheckoutDeliveryChoice,
|
|
16639
17145
|
CheckoutForm,
|
|
16640
17146
|
CheckoutLoginPrompt,
|
|
16641
17147
|
CheckoutPayAction,
|
|
17148
|
+
CheckoutQuoteNotice,
|
|
16642
17149
|
CheckoutQuoteSummary,
|
|
16643
17150
|
CheckoutTermsAcceptance,
|
|
17151
|
+
ChipList,
|
|
16644
17152
|
ContactInterestField,
|
|
16645
17153
|
CourseCatalogFilters,
|
|
16646
17154
|
CourseDescription,
|
|
16647
17155
|
CoursePurchaseTerms,
|
|
16648
17156
|
DATA_REQUEST_TYPES,
|
|
17157
|
+
DEFAULT_BEFORE_AFTER_LABELS,
|
|
16649
17158
|
DEFAULT_CHECKOUT_DELIVERY_CHOICE_LABELS,
|
|
17159
|
+
DEFAULT_CHECKOUT_QUOTE_NOTICE_LABELS,
|
|
16650
17160
|
DEFAULT_CHECKOUT_QUOTE_SUMMARY_LABELS,
|
|
16651
17161
|
DEFAULT_COURSE_CATALOG_FILTERS_LABELS,
|
|
16652
17162
|
DEFAULT_COURSE_PRICE_BANDS,
|
|
@@ -16663,6 +17173,8 @@ var import_site_contracts = require("@reblu/site-contracts");
|
|
|
16663
17173
|
EMPTY_FULL_INVOICE_VALUE,
|
|
16664
17174
|
FaqAccordion,
|
|
16665
17175
|
FullInvoiceFields,
|
|
17176
|
+
IconCardGrid,
|
|
17177
|
+
ImageTextSplit,
|
|
16666
17178
|
LegalDocument,
|
|
16667
17179
|
LessonPreview,
|
|
16668
17180
|
MarkdownRenderer,
|
|
@@ -16682,11 +17194,15 @@ var import_site_contracts = require("@reblu/site-contracts");
|
|
|
16682
17194
|
TrustBadges,
|
|
16683
17195
|
buildFaqPageJsonLd,
|
|
16684
17196
|
buildShareUrls,
|
|
17197
|
+
bundleComponentsToIncludes,
|
|
17198
|
+
checkoutQuoteNotice,
|
|
16685
17199
|
collectFaqItems,
|
|
17200
|
+
courseSellsAsGuest,
|
|
16686
17201
|
defaultCheckoutFulfillment,
|
|
16687
17202
|
formatPrice,
|
|
16688
17203
|
getShopErrorMessage,
|
|
16689
17204
|
isAllowedYouTubeHost,
|
|
17205
|
+
isCheckoutDeliveryComplete,
|
|
16690
17206
|
isOverSimplifiedInvoiceCap,
|
|
16691
17207
|
markdownToPlainText,
|
|
16692
17208
|
markdownToSafeHtml,
|
|
@@ -16695,6 +17211,7 @@ var import_site_contracts = require("@reblu/site-contracts");
|
|
|
16695
17211
|
sanitizeHtml,
|
|
16696
17212
|
shopIssuesInvoices,
|
|
16697
17213
|
shouldRenderShopFilters,
|
|
17214
|
+
toAcademyCheckoutInvoiceFields,
|
|
16698
17215
|
toCheckoutFulfillmentFields,
|
|
16699
17216
|
toCheckoutInvoiceFields,
|
|
16700
17217
|
toCheckoutTermsFields
|