@ecomiq/storefront 3.0.2 → 3.1.1

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.
Files changed (81) hide show
  1. package/README.md +21 -0
  2. package/dist/{account-DTahJyuQ.js → account-CZZ-ku6L.js} +4 -4
  3. package/dist/account.d.ts +9 -0
  4. package/dist/analytics/{analytics-CG1Qagwl.js → analytics-CiG_O37p.js} +4 -4
  5. package/dist/analytics/{config-C1-n2Zx-.js → config-DN5B1GOG.js} +3 -3
  6. package/dist/analytics/{consent-B13rBpBs.js → consent-D0-iQ4bg.js} +1 -1
  7. package/dist/analytics/{consent-banner-9QvRRy8v.js → consent-banner-D36fpU89.js} +1 -1
  8. package/dist/analytics/{cookies-pLozllyB.js → cookies-CWsi-zSd.js} +1 -1
  9. package/dist/analytics/{events-Dt81tIp1.js → events-CWmKY7oX.js} +2 -1
  10. package/dist/analytics/{tracker-p4yaoOyk.js → tracker-DpfDB2sY.js} +1 -1
  11. package/dist/{bank-accounts-8PuqC0GW.js → bank-accounts-MpKIxHaX.js} +1 -1
  12. package/dist/{captcha-CsBwlX74.js → captcha-CZkpghTO.js} +1 -1
  13. package/dist/{cart-actions-C58VRCAp.js → cart-actions-IKRYGqfj.js} +32 -9
  14. package/dist/{cart-form-y9P1r_EX.js → cart-form-Bq_B-Rh6.js} +6 -4
  15. package/dist/cart-form.d.ts +2 -1
  16. package/dist/{cart-summary-ur2VWKr-.js → cart-summary-B6vtRGBO.js} +6 -1
  17. package/dist/cart-summary.d.ts +2 -1
  18. package/dist/{catalog-hooks-CV6zETMZ.js → catalog-hooks-DjmpXROv.js} +1 -1
  19. package/dist/{checkout-CrDtrDrV.js → checkout-DsI1MY14.js} +6 -6
  20. package/dist/{complaint-book-CQkiQ0M-.js → complaint-book-aAQfGBvo.js} +2 -2
  21. package/dist/{culqi-authentication-Ckq_e5B7.js → culqi-authentication-DHxjPJRE.js} +1 -1
  22. package/dist/{customer-document-fields-B4RtDYe-.js → customer-document-fields-BzLdztjM.js} +1 -1
  23. package/dist/{customer-login-form-Cg1xa3UR.js → customer-login-form-k_q7_7FX.js} +2 -2
  24. package/dist/{customer-registration-form-Cy7n-Y42.js → customer-registration-form-PrBqUuI9.js} +1 -1
  25. package/dist/entries/account.js +5 -5
  26. package/dist/entries/analytics.js +4 -4
  27. package/dist/entries/cart.d.ts +2 -1
  28. package/dist/entries/cart.js +6 -5
  29. package/dist/entries/checkout.js +8 -8
  30. package/dist/entries/order.js +8 -8
  31. package/dist/{form-contracts-BNpHaTGJ.js → form-contracts-0R112spH.js} +11 -4
  32. package/dist/form-contracts.d.ts +3 -3
  33. package/dist/index.js +29 -29
  34. package/dist/{invoice-fields-BmAF1Bdv.js → invoice-fields-BzDfV1nR.js} +1 -1
  35. package/dist/{mercadopago-dialog-BzboyTG1.js → mercadopago-dialog-CpGlgKBl.js} +2 -2
  36. package/dist/{optimistic-cart-BveVOHuh.js → optimistic-cart-DcJ8-tCw.js} +1 -1
  37. package/dist/{order-display-NqS81m9p.js → order-display-CUXVESaF.js} +19 -10
  38. package/dist/{order-draft-CvtfTp4H.js → order-draft-D8sqUUNp.js} +1 -1
  39. package/dist/{order-payment-continuation-B2oNgu94.js → order-payment-continuation-CS6omD7E.js} +3 -3
  40. package/dist/{order-payment-in-review-DB6bCNsB.js → order-payment-in-review-D5Y8bjGA.js} +1 -1
  41. package/dist/{order-status-YIcJmCVH.js → order-status-QsmEO-89.js} +3 -3
  42. package/dist/{page-seo-CXj_ZxJc.js → page-seo-BKG-Ta6t.js} +3 -3
  43. package/dist/{pages-DoVOQVlP.js → pages-DyItxkdE.js} +4 -4
  44. package/dist/{payment-dialog-frame-Yqptx9Ze.js → payment-dialog-frame-xtidt_eM.js} +1 -1
  45. package/dist/personalization-BSVlktZP.js +94 -0
  46. package/dist/personalization-fields-CwBR8oGr.js +363 -0
  47. package/dist/personalization-fields.d.ts +17 -0
  48. package/dist/{preview-C3sqXLu7.js → preview-JWdMO6kX.js} +6 -4
  49. package/dist/{preview-address-BQLjWNrr.js → preview-address-bvieGEKb.js} +1 -1
  50. package/dist/{preview-cart-D1tZo7HE.js → preview-cart-COIP3Vfh.js} +3 -2
  51. package/dist/{public-pages-BH4jw2xh.js → public-pages-Byh01h-6.js} +2 -2
  52. package/dist/{registration-B99Qz9FK.js → registration-h_00PAhj.js} +3 -3
  53. package/dist/{route-text-TU3xed68.js → route-text-B6pWdevi.js} +1 -1
  54. package/dist/{section-preview-NzNw6sAL.js → section-preview-BiYfeE-d.js} +2 -2
  55. package/dist/sections/account-addresses.js +2 -2
  56. package/dist/sections/account-order.js +11 -6
  57. package/dist/sections/account-orders.js +3 -3
  58. package/dist/sections/account-profile.js +2 -2
  59. package/dist/sections/checkout.js +18 -11
  60. package/dist/sections/complaint-book.js +3 -3
  61. package/dist/sections/design-system.js +1 -1
  62. package/dist/sections/draft-invoice.js +7 -2
  63. package/dist/{sections-DyCN6unE.js → sections-CgpjubkB.js} +1 -1
  64. package/dist/{seo-CXnoXxGZ.js → seo-D9UdUMg9.js} +2 -2
  65. package/dist/{session-l0xbh3uY.js → session-DR_9-bcf.js} +6 -6
  66. package/dist/{store-CuxOWbsb.js → store-uU2gWdMY.js} +2 -2
  67. package/dist/{storefront-language-3jED0mSM.js → storefront-language-Bnt-TU2F.js} +1 -1
  68. package/dist/{storefront-text-Cdo69zlx.js → storefront-text-Co7iUnLM.js} +2 -2
  69. package/dist/{storefront-text-en-Bzm4qMCo.js → storefront-text-en-DzYmdOuY.js} +5 -1
  70. package/dist/{storefront-text-pt-BeMGHI7h.js → storefront-text-pt-CizClH0I.js} +5 -1
  71. package/dist/{stripe-dialog-C7WM3gEI.js → stripe-dialog-D88qfkUS.js} +2 -2
  72. package/dist/{templates-B4TX5AB0.js → templates-AgGupnPA.js} +2 -2
  73. package/dist/{urls-wCZ6LnmG.js → urls-D4uinJVd.js} +1 -1
  74. package/dist/{use-checkout-C7IG5Xnz.js → use-checkout-Jdk8P12A.js} +1 -1
  75. package/dist/{use-checkout-payment-t1R-GdW1.js → use-checkout-payment-BGX-BE6D.js} +1 -1
  76. package/dist/{voucher-payment-DUopOxhl.js → voucher-payment-B3o9ybg6.js} +1 -1
  77. package/dist/{worker-xF0YKH8T.js → worker-cbXmLvfR.js} +2 -2
  78. package/package.json +2 -2
  79. package/src/sections/account-order.tsx +4 -2
  80. package/src/sections/checkout.tsx +4 -1
  81. package/src/sections/draft-invoice.tsx +2 -0
package/dist/index.js CHANGED
@@ -1,27 +1,27 @@
1
- import { createRequestHandler, worker } from "./worker-xF0YKH8T.js";
2
- import { collectionImageCandidates, found, readCountries, store, withImages } from "./store-CuxOWbsb.js";
1
+ import { createRequestHandler, worker } from "./worker-cbXmLvfR.js";
2
+ import { collectionImageCandidates, found, readCountries, store, withImages } from "./store-uU2gWdMY.js";
3
3
  import { cartCookie, cartToken, readCart } from "./cart-D7DxZ2lD.js";
4
- import { MAX_CART_QUANTITY, cartAction, loadCart } from "./cart-actions-C58VRCAp.js";
5
- import { checkoutAction, checkoutAddressDefaults, checkoutProgress, checkoutStep, defaultPaymentMethod, loadCheckout, needsShipping } from "./checkout-CrDtrDrV.js";
4
+ import { MAX_CART_QUANTITY, cartAction, loadCart } from "./cart-actions-IKRYGqfj.js";
5
+ import { checkoutAction, checkoutAddressDefaults, checkoutProgress, checkoutStep, defaultPaymentMethod, loadCheckout, needsShipping } from "./checkout-DsI1MY14.js";
6
6
  import { paymentMethodSaving } from "./payment-methods-B8ocTgFZ.js";
7
- import { useCheckout } from "./use-checkout-C7IG5Xnz.js";
8
- import { addressAction, loadAccount, loadAddresses, loadOrder, loadOrders, loadProfile, profileAction, readCustomerAddress } from "./account-DTahJyuQ.js";
9
- import { loadGeo, loadPage, loadReview, loadSearchSuggestions, loadTracking, productReviewAction, readPage, reviewAction } from "./public-pages-BH4jw2xh.js";
10
- import { hasOrderPaymentContinuation, loadOrderStatus, orderPaymentAction, orderProgress, orderStepTitle } from "./order-status-YIcJmCVH.js";
11
- import { isOrderDraftPayable, loadOrderDraft, orderDraftAction } from "./order-draft-CvtfTp4H.js";
7
+ import { useCheckout } from "./use-checkout-Jdk8P12A.js";
8
+ import { addressAction, loadAccount, loadAddresses, loadOrder, loadOrders, loadProfile, profileAction, readCustomerAddress } from "./account-CZZ-ku6L.js";
9
+ import { loadGeo, loadPage, loadReview, loadSearchSuggestions, loadTracking, productReviewAction, readPage, reviewAction } from "./public-pages-Byh01h-6.js";
10
+ import { hasOrderPaymentContinuation, loadOrderStatus, orderPaymentAction, orderProgress, orderStepTitle } from "./order-status-QsmEO-89.js";
11
+ import { isOrderDraftPayable, loadOrderDraft, orderDraftAction } from "./order-draft-D8sqUUNp.js";
12
12
  import { useOrderPayment } from "./use-order-payment-BKIz_IO0.js";
13
- import { OrderPaymentContinuation } from "./order-payment-continuation-B2oNgu94.js";
14
- import { OrderPaymentInReview } from "./order-payment-in-review-DB6bCNsB.js";
13
+ import { OrderPaymentContinuation } from "./order-payment-continuation-CS6omD7E.js";
14
+ import { OrderPaymentInReview } from "./order-payment-in-review-D5Y8bjGA.js";
15
15
  import { discountPercent, isVariantAvailable, pickVariant, variantOptions, variantSwatches } from "./product-variants-BNDHvs1y.js";
16
- import { SORT_OPTIONS, activeFilterChips, activeFilterCount, clearedFiltersHref, filterLabel, filterValueLabel, isSingleChoiceFilter, pageItems, selectedFacetCount, useFacets, useGeoCascade, usePagination, useSearchSuggestions, useSort } from "./catalog-hooks-CV6zETMZ.js";
17
- import { completeCustomerLogin, customer, customerCsrfToken, customerHeaders, logout, requireCustomer, requireCustomerRegistration, startCustomerLogin, submitCustomerLogin } from "./session-l0xbh3uY.js";
16
+ import { SORT_OPTIONS, activeFilterChips, activeFilterCount, clearedFiltersHref, filterLabel, filterValueLabel, isSingleChoiceFilter, pageItems, selectedFacetCount, useFacets, useGeoCascade, usePagination, useSearchSuggestions, useSort } from "./catalog-hooks-DjmpXROv.js";
17
+ import { completeCustomerLogin, customer, customerCsrfToken, customerHeaders, logout, requireCustomer, requireCustomerRegistration, startCustomerLogin, submitCustomerLogin } from "./session-DR_9-bcf.js";
18
18
  import { CustomerCsrfField, useCustomerCsrfToken } from "./customer-csrf-C1oDX-Py.js";
19
- import { CUSTOMER_CSRF_FIELD, FORM_CONTRACTS } from "./form-contracts-BNpHaTGJ.js";
19
+ import { CUSTOMER_CSRF_FIELD, FORM_CONTRACTS } from "./form-contracts-0R112spH.js";
20
20
  import { culqiSourceKey } from "./culqi-three-ds-HP3mfrvV.js";
21
21
  import { readCatalog, shouldRevalidateCatalogRoot } from "./catalog-7gJ-l5hW.js";
22
- import { categorySeo, collectionSeo, homeSeo, pageSeo, productSeo, seoMeta } from "./page-seo-CXj_ZxJc.js";
23
- import { canonicalUrl, loadCategory, loadProduct, requireCanonical, resolveUrl } from "./urls-wCZ6LnmG.js";
24
- import { collectionPage, productPage, productReviews, resolvePage } from "./pages-DoVOQVlP.js";
22
+ import { categorySeo, collectionSeo, homeSeo, pageSeo, productSeo, seoMeta } from "./page-seo-BKG-Ta6t.js";
23
+ import { canonicalUrl, loadCategory, loadProduct, requireCanonical, resolveUrl } from "./urls-D4uinJVd.js";
24
+ import { collectionPage, productPage, productReviews, resolvePage } from "./pages-DyItxkdE.js";
25
25
  import { money } from "./money-DtGOtDri.js";
26
26
  import { readPlace } from "./place-CmW4hBWY.js";
27
27
  import { optional, safeNext, text } from "./form-BtQcbXlJ.js";
@@ -30,21 +30,21 @@ import { Favicon } from "./favicon-YpyhVJ9H.js";
30
30
  import { Hidden } from "./hidden-CCWtOWKR.js";
31
31
  import { SourceProvider, source, sourceValue } from "./sources-B-3JFJfb.js";
32
32
  import { RichText } from "./rich-text-M-Ju8RL4.js";
33
- import { loadSections, sectionKey, useSection, withSectionBoundary, withSections } from "./sections-DyCN6unE.js";
34
- import { templateComponent, templateName, templatePath, templated } from "./templates-B4TX5AB0.js";
35
- import { SectionPreview, sectionPreview, sectionPreviewMeta } from "./section-preview-NzNw6sAL.js";
33
+ import { loadSections, sectionKey, useSection, withSectionBoundary, withSections } from "./sections-CgpjubkB.js";
34
+ import { templateComponent, templateName, templatePath, templated } from "./templates-AgGupnPA.js";
35
+ import { SectionPreview, sectionPreview, sectionPreviewMeta } from "./section-preview-BiYfeE-d.js";
36
36
  import { StorefrontAnchor, StorefrontLink, readStorefrontLayout, readStorefrontLinks, storefrontHref, useStorefrontLinkPublished } from "./links-kFxBZfdb.js";
37
37
  import { PaymentLogo, paymentLogoCodes } from "./payment-logo-BoPaGJc_.js";
38
- import { BankAccountList } from "./bank-accounts-8PuqC0GW.js";
38
+ import { BankAccountList } from "./bank-accounts-MpKIxHaX.js";
39
39
  import { CustomerAvatar } from "./customer-avatar-CJXSDroK.js";
40
- import { CustomerLoginForm } from "./customer-login-form-Cg1xa3UR.js";
41
- import { Captcha } from "./captcha-CsBwlX74.js";
40
+ import { CustomerLoginForm } from "./customer-login-form-k_q7_7FX.js";
41
+ import { Captcha } from "./captcha-CZkpghTO.js";
42
42
  import { COMPLAINT_DOCUMENT_TYPES, IDENTITY_DOCUMENT_TYPES, identityDocumentRule } from "./documents-T1mzc_j8.js";
43
- import { complaintBookAction, complaintBookAttachmentError, complaintBookLinks, complaintBookNumber, loadComplaintBook } from "./complaint-book-CQkiQ0M-.js";
44
- import { loadCustomerRegistration, submitCustomerRegistration } from "./registration-B99Qz9FK.js";
45
- import { CustomerRegistrationForm } from "./customer-registration-form-Cy7n-Y42.js";
43
+ import { complaintBookAction, complaintBookAttachmentError, complaintBookLinks, complaintBookNumber, loadComplaintBook } from "./complaint-book-aAQfGBvo.js";
44
+ import { loadCustomerRegistration, submitCustomerRegistration } from "./registration-h_00PAhj.js";
45
+ import { CustomerRegistrationForm } from "./customer-registration-form-PrBqUuI9.js";
46
46
  import { storefrontContact } from "./store-contact--hY6CoFb.js";
47
- import { loadStorefrontTranslations, storefrontText } from "./storefront-text-Cdo69zlx.js";
48
- import { StorefrontLanguageProvider, useStorefrontLocale, useStorefrontText } from "./storefront-language-3jED0mSM.js";
49
- import { storefrontRouteText } from "./route-text-TU3xed68.js";
47
+ import { loadStorefrontTranslations, storefrontText } from "./storefront-text-Co7iUnLM.js";
48
+ import { StorefrontLanguageProvider, useStorefrontLocale, useStorefrontText } from "./storefront-language-Bnt-TU2F.js";
49
+ import { storefrontRouteText } from "./route-text-B6pWdevi.js";
50
50
  export { BankAccountList, COMPLAINT_DOCUMENT_TYPES, CUSTOMER_CSRF_FIELD, Captcha, CustomerAvatar, CustomerCsrfField, CustomerLoginForm, CustomerRegistrationForm, FORM_CONTRACTS, Favicon, Hidden, IDENTITY_DOCUMENT_TYPES, MAX_CART_QUANTITY, OrderPaymentContinuation, OrderPaymentInReview, PaymentLogo, RichText, SORT_OPTIONS, SectionPreview, SourceProvider, StorefrontAnchor, StorefrontLanguageProvider, StorefrontLink, activeFilterChips, activeFilterCount, addressAction, canonicalUrl, cartAction, cartCookie, cartToken, categorySeo, checkoutAction, checkoutAddressDefaults, checkoutProgress, checkoutStep, clearedFiltersHref, collectionImageCandidates, collectionPage, collectionSeo, complaintBookAction, complaintBookAttachmentError, complaintBookLinks, complaintBookNumber, completeCustomerLogin, createRequestHandler, culqiSourceKey, customer, customerCsrfToken, customerHeaders, defaultPaymentMethod, discountPercent, filterLabel, filterValueLabel, found, hasOrderPaymentContinuation, homeSeo, identityDocumentRule, isOrderDraftPayable, isSingleChoiceFilter, isVariantAvailable, loadAccount, loadAddresses, loadCart, loadCategory, loadCheckout, loadComplaintBook, loadCustomerRegistration, loadGeo, loadOrder, loadOrderDraft, loadOrderStatus, loadOrders, loadPage, loadProduct, loadProfile, loadReview, loadSearchSuggestions, loadSections, loadStorefrontTranslations, loadTracking, logout, money, needsShipping, optional, orderDraftAction, orderPaymentAction, orderProgress, orderStepTitle, pageItems, pageSeo, paymentLogoCodes, paymentMethodSaving, pickProducts, pickVariant, productPage, productReviewAction, productReviews, productSeo, profileAction, readCart, readCatalog, readCountries, readCustomerAddress, readPage, readPlace, readStorefrontLayout, readStorefrontLinks, requireCanonical, requireCustomer, requireCustomerRegistration, resolvePage, resolveUrl, reviewAction, safeNext, section, sectionKey, sectionPreview, sectionPreviewMeta, selectedFacetCount, seoMeta, setting, shouldRevalidateCatalogRoot, source, sourceValue, startCustomerLogin, store, storefrontContact, storefrontHref, storefrontRouteText, storefrontText, submitCustomerLogin, submitCustomerRegistration, templateComponent, templateName, templatePath, templated, text, useCheckout, useCustomerCsrfToken, useFacets, useGeoCascade, useOrderPayment, usePagination, useSearchSuggestions, useSection, useSort, useStorefrontLinkPublished, useStorefrontLocale, useStorefrontText, variantOptions, variantSwatches, withImages, withSectionBoundary, withSections, worker };
@@ -1,4 +1,4 @@
1
- import { useStorefrontText } from "./storefront-language-3jED0mSM.js";
1
+ import { useStorefrontText } from "./storefront-language-Bnt-TU2F.js";
2
2
  import { IDENTITY_DOCUMENT_TYPES, identityDocumentError, identityDocumentRule, isIdentityDocumentType } from "./documents-T1mzc_j8.js";
3
3
  import { useState } from "react";
4
4
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,8 +1,8 @@
1
- import { useStorefrontLocale, useStorefrontText } from "./storefront-language-3jED0mSM.js";
1
+ import { useStorefrontLocale, useStorefrontText } from "./storefront-language-Bnt-TU2F.js";
2
2
  import { loadMercadoPago } from "./mercadopago-checkout-DC7RXa8k.js";
3
3
  import { money } from "./money-DtGOtDri.js";
4
4
  import { PaymentLogo } from "./payment-logo-BoPaGJc_.js";
5
- import { PaymentDialogFrame } from "./payment-dialog-frame-Yqptx9Ze.js";
5
+ import { PaymentDialogFrame } from "./payment-dialog-frame-xtidt_eM.js";
6
6
  import { useEffect, useId, useRef, useState } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
8
8
  // src/mercadopago-dialog.tsx
@@ -1,4 +1,4 @@
1
- import { CART_ACTION } from "./cart-form-y9P1r_EX.js";
1
+ import { CART_ACTION } from "./cart-form-Bq_B-Rh6.js";
2
2
  import { useFetchers, useNavigation } from "react-router";
3
3
  // src/optimistic-cart.ts
4
4
  function postsToCart(submission) {
@@ -1,6 +1,7 @@
1
1
  import { orderStepLabel, orderStepOf, paymentLabel } from "./order-view-9IlBg5AF.js";
2
+ import { cartModifiers } from "./personalization-BSVlktZP.js";
2
3
  import { PaymentLogo, hasPaymentLogo } from "./payment-logo-BoPaGJc_.js";
3
- import { useStorefrontLocale, useStorefrontText } from "./storefront-language-3jED0mSM.js";
4
+ import { useStorefrontLocale, useStorefrontText } from "./storefront-language-Bnt-TU2F.js";
4
5
  import { Form } from "react-router";
5
6
  import { formatOrderDate } from "@ecomiq/core";
6
7
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -79,15 +80,23 @@ function ReorderButton({ items, variant = "default" }) {
79
80
  name: "intent",
80
81
  value: "reorder"
81
82
  }),
82
- lines.map((item) => /* @__PURE__ */ jsxs("span", { children: [/* @__PURE__ */ jsx("input", {
83
- type: "hidden",
84
- name: "variantId",
85
- value: item.variantId ?? ""
86
- }), /* @__PURE__ */ jsx("input", {
87
- type: "hidden",
88
- name: "quantity",
89
- value: item.quantity
90
- })] }, item.id)),
83
+ lines.map((item) => /* @__PURE__ */ jsxs("span", { children: [
84
+ /* @__PURE__ */ jsx("input", {
85
+ type: "hidden",
86
+ name: "variantId",
87
+ value: item.variantId ?? ""
88
+ }),
89
+ /* @__PURE__ */ jsx("input", {
90
+ type: "hidden",
91
+ name: "quantity",
92
+ value: item.quantity
93
+ }),
94
+ /* @__PURE__ */ jsx("input", {
95
+ type: "hidden",
96
+ name: "modifiers",
97
+ value: JSON.stringify(cartModifiers(item.modifiers))
98
+ })
99
+ ] }, item.id)),
91
100
  /* @__PURE__ */ jsx(Button, {
92
101
  type: "submit",
93
102
  variant,
@@ -1,4 +1,4 @@
1
- import { found, store } from "./store-CuxOWbsb.js";
1
+ import { found, store } from "./store-uU2gWdMY.js";
2
2
  import { data, redirect } from "react-router";
3
3
  import { ApiError } from "@ecomiq/core";
4
4
  // src/order-draft.ts
@@ -1,7 +1,7 @@
1
- import { useStorefrontText } from "./storefront-language-3jED0mSM.js";
2
- import { VoucherPayment } from "./voucher-payment-DUopOxhl.js";
1
+ import { useStorefrontText } from "./storefront-language-Bnt-TU2F.js";
2
+ import { VoucherPayment } from "./voucher-payment-B3o9ybg6.js";
3
3
  import { useCulqiCheckout } from "./use-culqi-checkout-CrjLAipU.js";
4
- import { CulqiAuthentication } from "./culqi-authentication-Ckq_e5B7.js";
4
+ import { CulqiAuthentication } from "./culqi-authentication-DHxjPJRE.js";
5
5
  import { useRevalidator } from "react-router";
6
6
  import { useEffect, useRef, useState } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
1
  import { money } from "./money-DtGOtDri.js";
2
- import { useStorefrontLocale, useStorefrontText } from "./storefront-language-3jED0mSM.js";
2
+ import { useStorefrontLocale, useStorefrontText } from "./storefront-language-Bnt-TU2F.js";
3
3
  import { Link, useLocation, useRevalidator } from "react-router";
4
4
  import { useEffect, useState } from "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,7 +1,7 @@
1
- import { orderAnalytics } from "./analytics/events-Dt81tIp1.js";
1
+ import { orderAnalytics } from "./analytics/events-CWmKY7oX.js";
2
2
  import { text } from "./form-BtQcbXlJ.js";
3
- import { found, store } from "./store-CuxOWbsb.js";
4
- import { worker } from "./worker-xF0YKH8T.js";
3
+ import { found, store } from "./store-uU2gWdMY.js";
4
+ import { worker } from "./worker-cbXmLvfR.js";
5
5
  import { PAYMENT_RETURN_CONFIRMING, PAYMENT_RETURN_PARAM } from "./payment-return-5cjypwIw.js";
6
6
  import { data, redirect } from "react-router";
7
7
  import { ApiError, AuthenticateOrderPaymentInputSchema } from "@ecomiq/core";
@@ -1,6 +1,6 @@
1
- import { loadStorefrontTranslations, storefrontText } from "./storefront-text-Cdo69zlx.js";
2
- import { store } from "./store-CuxOWbsb.js";
3
- import { absoluteUrl, canonicalOrigin, requestUrl } from "./urls-wCZ6LnmG.js";
1
+ import { loadStorefrontTranslations, storefrontText } from "./storefront-text-Co7iUnLM.js";
2
+ import { store } from "./store-uU2gWdMY.js";
3
+ import { absoluteUrl, canonicalOrigin, requestUrl } from "./urls-D4uinJVd.js";
4
4
  // src/page-seo.ts
5
5
  const DESCRIPTION_LENGTH = 160;
6
6
  const TITLE_LENGTH = 65;
@@ -1,8 +1,8 @@
1
- import { categoryAnalytics, collectionAnalytics, productAnalytics } from "./analytics/events-Dt81tIp1.js";
1
+ import { categoryAnalytics, collectionAnalytics, productAnalytics } from "./analytics/events-CWmKY7oX.js";
2
2
  import { readCatalog } from "./catalog-7gJ-l5hW.js";
3
- import { store } from "./store-CuxOWbsb.js";
4
- import { requestUrl, requireCanonical } from "./urls-wCZ6LnmG.js";
5
- import { worker } from "./worker-xF0YKH8T.js";
3
+ import { store } from "./store-uU2gWdMY.js";
4
+ import { requestUrl, requireCanonical } from "./urls-D4uinJVd.js";
5
+ import { worker } from "./worker-cbXmLvfR.js";
6
6
  import { data, redirect } from "react-router";
7
7
  import { CategoryDetailSchema, CollectionSchema, GraphQLResponseError, ProductDetailSchema, ProductSummarySchema, ProductsResponseSchema, graphQLSelection, sanitizeHtml } from "@ecomiq/core";
8
8
  import { z } from "zod";
@@ -1,4 +1,4 @@
1
- import { useStorefrontText } from "./storefront-language-3jED0mSM.js";
1
+ import { useStorefrontText } from "./storefront-language-Bnt-TU2F.js";
2
2
  import { useEffect, useRef } from "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  // src/payment-dialog-frame.tsx
@@ -0,0 +1,94 @@
1
+ import { MODIFIER_FIELD_PREFIX } from "./form-contracts-0R112spH.js";
2
+ // src/personalization.ts
3
+ const MAX_MODIFIER_GROUPS = 50;
4
+ const MAX_OPTION_QUANTITY = 99;
5
+ const VALUE_FIELD = /^modifier\.([^.]+)\.value$/;
6
+ const OPTION_FIELD = /^modifier\.([^.]+)\.option$/;
7
+ /** Field for the text the buyer types in a `text` customization. */
8
+ function modifierValueField(groupId) {
9
+ return `${MODIFIER_FIELD_PREFIX}${groupId}.value`;
10
+ }
11
+ /** Field for each option the buyer chooses; repeat it for several options. */
12
+ function modifierOptionField(groupId) {
13
+ return `${MODIFIER_FIELD_PREFIX}${groupId}.option`;
14
+ }
15
+ /** Units of a chosen option; leave it out to send one. */
16
+ function modifierQuantityField(groupId, optionId) {
17
+ return `${MODIFIER_FIELD_PREFIX}${groupId}.option.${optionId}.quantity`;
18
+ }
19
+ function optionQuantity(form, groupId, optionId) {
20
+ const raw = form.get(modifierQuantityField(groupId, optionId));
21
+ if (typeof raw !== "string" || raw.trim() === "") return void 0;
22
+ const value = Math.floor(Number(raw));
23
+ if (!Number.isFinite(value) || value < 1) return 1;
24
+ return Math.min(MAX_OPTION_QUANTITY, value);
25
+ }
26
+ /** Customizations sent with the form, ready for `addCartItem`. Empty fields are left out. */
27
+ function readPersonalization(form) {
28
+ const values = /* @__PURE__ */ new Map();
29
+ const options = /* @__PURE__ */ new Map();
30
+ for (const [name, entry] of form.entries()) {
31
+ if (typeof entry !== "string") continue;
32
+ const text = entry.trim();
33
+ if (text === "") continue;
34
+ const value = VALUE_FIELD.exec(name);
35
+ if (value?.[1]) {
36
+ values.set(value[1], text);
37
+ continue;
38
+ }
39
+ const option = OPTION_FIELD.exec(name);
40
+ if (option?.[1]) options.set(option[1], [...options.get(option[1]) ?? [], text]);
41
+ }
42
+ const modifiers = [];
43
+ for (const [modifierGroupId, value] of values) modifiers.push({
44
+ modifierGroupId,
45
+ value
46
+ });
47
+ for (const [modifierGroupId, ids] of options) modifiers.push({
48
+ modifierGroupId,
49
+ options: [...new Set(ids)].map((optionId) => ({
50
+ optionId,
51
+ quantity: optionQuantity(form, modifierGroupId, optionId)
52
+ }))
53
+ });
54
+ return modifiers.slice(0, MAX_MODIFIER_GROUPS);
55
+ }
56
+ /** The customizations of an order or cart line, ready to add the line to a cart again. */
57
+ function cartModifiers(modifiers) {
58
+ const groups = /* @__PURE__ */ new Map();
59
+ for (const modifier of modifiers) {
60
+ if (modifier.value !== null) {
61
+ groups.set(modifier.modifierGroupId, {
62
+ modifierGroupId: modifier.modifierGroupId,
63
+ value: modifier.value
64
+ });
65
+ continue;
66
+ }
67
+ if (modifier.modifierOptionId === null) continue;
68
+ const option = modifier.quantity > 1 ? {
69
+ optionId: modifier.modifierOptionId,
70
+ quantity: modifier.quantity
71
+ } : { optionId: modifier.modifierOptionId };
72
+ groups.set(modifier.modifierGroupId, {
73
+ modifierGroupId: modifier.modifierGroupId,
74
+ options: [...groups.get(modifier.modifierGroupId)?.options ?? [], option]
75
+ });
76
+ }
77
+ return [...groups.values()];
78
+ }
79
+ /** Form fields for these customizations, in the shape `readPersonalization` reads. */
80
+ function personalizationEntries(modifiers) {
81
+ const entries = [];
82
+ for (const modifier of modifiers) {
83
+ if (modifier.value !== void 0) {
84
+ entries.push([modifierValueField(modifier.modifierGroupId), modifier.value]);
85
+ continue;
86
+ }
87
+ for (const option of modifier.options ?? []) {
88
+ entries.push([modifierOptionField(modifier.modifierGroupId), option.optionId]);
89
+ if (option.quantity !== void 0) entries.push([modifierQuantityField(modifier.modifierGroupId, option.optionId), String(option.quantity)]);
90
+ }
91
+ }
92
+ return entries;
93
+ }
94
+ export { cartModifiers, modifierOptionField, modifierQuantityField, modifierValueField, personalizationEntries, readPersonalization };