fontdue-js 2.22.0 → 2.22.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.
- package/CHANGELOG.md +5 -0
- package/dist/components/ConfigContext.d.ts +3 -0
- package/dist/components/ConfigContext.js +2 -1
- package/dist/components/FontdueProvider/FontdueProviderClientComponent.js +2 -0
- package/dist/corsError.d.ts +1 -0
- package/dist/corsError.js +16 -9
- package/dist/global-shim.d.ts +1 -0
- package/dist/global-shim.js +8 -0
- package/dist/relay/environment.js +51 -42
- package/dist-cjs/__generated__/AddToCartBannerQuery.graphql.js +194 -0
- package/dist-cjs/__generated__/AddToCartBanner_item.graphql.js +107 -0
- package/dist-cjs/__generated__/AddToCartBanner_order.graphql.js +131 -0
- package/dist-cjs/__generated__/AddressFieldsRefetchQuery.graphql.js +170 -0
- package/dist-cjs/__generated__/AddressFields_viewer.graphql.js +125 -0
- package/dist-cjs/__generated__/BuyButtonIDQuery.graphql.js +121 -0
- package/dist-cjs/__generated__/BuyButtonSlugQuery.graphql.js +146 -0
- package/dist-cjs/__generated__/BuyButton_collection.graphql.js +56 -0
- package/dist-cjs/__generated__/CartButtonQuery.graphql.js +139 -0
- package/dist-cjs/__generated__/CartButton_order.graphql.js +71 -0
- package/dist-cjs/__generated__/CartItemAdditionalLicenses_licenses.graphql.js +42 -0
- package/dist-cjs/__generated__/CartItemAdditionalLicenses_orderItem.graphql.js +52 -0
- package/dist-cjs/__generated__/CartItemLicense_selection.graphql.js +80 -0
- package/dist-cjs/__generated__/CartItemProduct_product.graphql.js +113 -0
- package/dist-cjs/__generated__/CartItemVariable_selection.graphql.js +107 -0
- package/dist-cjs/__generated__/CartItemVariable_variable.graphql.js +58 -0
- package/dist-cjs/__generated__/CartItem_node.graphql.js +166 -0
- package/dist-cjs/__generated__/CartOrderCompleteOrderMutation.graphql.js +783 -0
- package/dist-cjs/__generated__/CartOrderRemoveDiscountMutation.graphql.js +760 -0
- package/dist-cjs/__generated__/CartOrderUpdateMutation.graphql.js +795 -0
- package/dist-cjs/__generated__/CartOrder_UpdateErrors.graphql.js +43 -0
- package/dist-cjs/__generated__/CartOrder_order.graphql.js +264 -0
- package/dist-cjs/__generated__/CartOrder_viewer.graphql.js +51 -0
- package/dist-cjs/__generated__/CartQuery.graphql.js +887 -0
- package/dist-cjs/__generated__/CartStateRemoveDiscountMutation.graphql.js +422 -0
- package/dist-cjs/__generated__/CartStateUpdateMutation.graphql.js +790 -0
- package/dist-cjs/__generated__/CartState_order.graphql.js +122 -0
- package/dist-cjs/__generated__/CartTotals_order.graphql.js +140 -0
- package/dist-cjs/__generated__/CharacterViewerIDQuery.graphql.js +332 -0
- package/dist-cjs/__generated__/CharacterViewerSlugQuery.graphql.js +362 -0
- package/dist-cjs/__generated__/CharacterViewerStyleRefetchQuery.graphql.js +226 -0
- package/dist-cjs/__generated__/CharacterViewer_collection.graphql.js +197 -0
- package/dist-cjs/__generated__/CharacterViewer_family.graphql.js +101 -0
- package/dist-cjs/__generated__/CharacterViewer_style.graphql.js +161 -0
- package/dist-cjs/__generated__/CheckoutUpdateCustomerMutation.graphql.js +770 -0
- package/dist-cjs/__generated__/CheckoutUpdateOrderMutation.graphql.js +811 -0
- package/dist-cjs/__generated__/Checkout_UpdateOrderErrors.graphql.js +97 -0
- package/dist-cjs/__generated__/Checkout_identity.graphql.js +94 -0
- package/dist-cjs/__generated__/Checkout_order.graphql.js +144 -0
- package/dist-cjs/__generated__/Checkout_viewer.graphql.js +74 -0
- package/dist-cjs/__generated__/CollectionAa_Query.graphql.js +192 -0
- package/dist-cjs/__generated__/CollectionAa_product.graphql.js +69 -0
- package/dist-cjs/__generated__/CouponCodeInputApplyCouponMutation.graphql.js +432 -0
- package/dist-cjs/__generated__/CouponText_coupon.graphql.js +73 -0
- package/dist-cjs/__generated__/CustomerLoginFormLoginMutation.graphql.js +72 -0
- package/dist-cjs/__generated__/CustomerLoginFormQuery.graphql.js +91 -0
- package/dist-cjs/__generated__/DownloadRefetchQuery.graphql.js +124 -0
- package/dist-cjs/__generated__/Download_order.graphql.js +61 -0
- package/dist-cjs/__generated__/FamilyList_node.graphql.js +96 -0
- package/dist-cjs/__generated__/Family_node.graphql.js +160 -0
- package/dist-cjs/__generated__/FontFamiliesQuery.graphql.js +368 -0
- package/dist-cjs/__generated__/FontStyle_fontStyle.graphql.js +32 -0
- package/dist-cjs/__generated__/IdentityBox_identity.graphql.js +52 -0
- package/dist-cjs/__generated__/License_node.graphql.js +97 -0
- package/dist-cjs/__generated__/NewsletterSignupQuery.graphql.js +110 -0
- package/dist-cjs/__generated__/NewsletterSignupUpdateCustomerMutation.graphql.js +81 -0
- package/dist-cjs/__generated__/NodePasswordFormAccessNodeMutation.graphql.js +72 -0
- package/dist-cjs/__generated__/NodePasswordFormIDQuery.graphql.js +93 -0
- package/dist-cjs/__generated__/NodePasswordFormSlugQuery.graphql.js +115 -0
- package/dist-cjs/__generated__/OrderVariableSelectionReduxRefetchQuery.graphql.js +154 -0
- package/dist-cjs/__generated__/OrderVariableSelectionRedux_viewer.graphql.js +75 -0
- package/dist-cjs/__generated__/OrderVariableSelection_variables.graphql.js +107 -0
- package/dist-cjs/__generated__/PrecartAddToCartMutation.graphql.js +793 -0
- package/dist-cjs/__generated__/PrecartClearCartMutation.graphql.js +81 -0
- package/dist-cjs/__generated__/PrecartQuery.graphql.js +308 -0
- package/dist-cjs/__generated__/Precart_collection.graphql.js +81 -0
- package/dist-cjs/__generated__/Precart_license.graphql.js +67 -0
- package/dist-cjs/__generated__/Precart_viewer.graphql.js +161 -0
- package/dist-cjs/__generated__/PriceBarSectionRefetchQuery.graphql.js +184 -0
- package/dist-cjs/__generated__/PriceBarSection_node.graphql.js +121 -0
- package/dist-cjs/__generated__/PriceBar_node.graphql.js +60 -0
- package/dist-cjs/__generated__/Price_price.graphql.js +40 -0
- package/dist-cjs/__generated__/SKUPrice_sku.graphql.js +69 -0
- package/dist-cjs/__generated__/SelectButton_sku.graphql.js +54 -0
- package/{dist-bundle/chunks/index-o29NNufd.js → dist-cjs/__generated__/ServerConfigProviderQuery.graphql.js} +7 -30
- package/dist-cjs/__generated__/ShareCartCreateSnapshotMutation.graphql.js +84 -0
- package/dist-cjs/__generated__/SpecimenLinkQuery.graphql.js +120 -0
- package/dist-cjs/__generated__/StoreModalBundleButton_bundle.graphql.js +85 -0
- package/dist-cjs/__generated__/StoreModalCartQuery.graphql.js +1017 -0
- package/dist-cjs/__generated__/StoreModalCheckoutQuery.graphql.js +194 -0
- package/dist-cjs/__generated__/StoreModalContainerQuery.graphql.js +228 -0
- package/dist-cjs/__generated__/StoreModalDownloadRefetchQuery.graphql.js +102 -0
- package/dist-cjs/__generated__/StoreModalDownload_order.graphql.js +40 -0
- package/dist-cjs/__generated__/StoreModalFamilyButton_collection.graphql.js +135 -0
- package/dist-cjs/__generated__/StoreModalFamily_collection.graphql.js +130 -0
- package/dist-cjs/__generated__/StoreModalIndexItem_fontCollection.graphql.js +98 -0
- package/dist-cjs/__generated__/StoreModalIndexQuery.graphql.js +263 -0
- package/dist-cjs/__generated__/StoreModalOrderVariableSelection_order.graphql.js +98 -0
- package/dist-cjs/__generated__/StoreModalOrderVariableSelection_viewer.graphql.js +66 -0
- package/dist-cjs/__generated__/StoreModalProductContent_collection.graphql.js +92 -0
- package/dist-cjs/__generated__/StoreModalProductLicenseSelection_collection.graphql.js +47 -0
- package/dist-cjs/__generated__/StoreModalProductLicense_license.graphql.js +104 -0
- package/dist-cjs/__generated__/StoreModalProductQuery.graphql.js +702 -0
- package/dist-cjs/__generated__/StoreModalProductRefetchQuery.graphql.js +433 -0
- package/dist-cjs/__generated__/StoreModalProductSummaryAddToCartMutation.graphql.js +149 -0
- package/dist-cjs/__generated__/StoreModalProductSummaryClearCartMutation.graphql.js +81 -0
- package/dist-cjs/__generated__/StoreModalProductSummaryRefetchQuery.graphql.js +281 -0
- package/dist-cjs/__generated__/StoreModalProductSummary_viewer.graphql.js +243 -0
- package/dist-cjs/__generated__/StoreModalReviewIdentity_identity.graphql.js +52 -0
- package/dist-cjs/__generated__/StoreModalStyleButton_fontStyle.graphql.js +113 -0
- package/dist-cjs/__generated__/StoreModalUnifiedCheckoutCompleteOrderMutation.graphql.js +302 -0
- package/dist-cjs/__generated__/StoreModalUnifiedCheckoutUpdateCustomerMutation.graphql.js +323 -0
- package/dist-cjs/__generated__/StoreModalUnifiedCheckoutUpdateOrderMutation.graphql.js +473 -0
- package/dist-cjs/__generated__/StoreModalUnifiedCheckout_order.graphql.js +237 -0
- package/dist-cjs/__generated__/StoreModalUnifiedCheckout_viewer.graphql.js +117 -0
- package/dist-cjs/__generated__/StripeProviderCreateCheckoutSessionMutation.graphql.js +105 -0
- package/dist-cjs/__generated__/StripeProvider_viewer.graphql.js +139 -0
- package/dist-cjs/__generated__/TestFontsFormUpdateCustomerMutation.graphql.js +770 -0
- package/dist-cjs/__generated__/TestFontsForm_Query.graphql.js +126 -0
- package/dist-cjs/__generated__/TestModeBannerQuery.graphql.js +87 -0
- package/dist-cjs/__generated__/ThemeConfigQuery.graphql.js +87 -0
- package/dist-cjs/__generated__/TypeTesterFeaturesButton_fontStyle.graphql.js +32 -0
- package/dist-cjs/__generated__/TypeTesterFeatures_fontStyle.graphql.js +36 -0
- package/dist-cjs/__generated__/TypeTesterFloatingToolbar_testers.graphql.js +53 -0
- package/dist-cjs/__generated__/TypeTesterStandaloneChangedStylesQuery.graphql.js +347 -0
- package/dist-cjs/__generated__/TypeTesterStandaloneQuery.graphql.js +450 -0
- package/dist-cjs/__generated__/TypeTesterStyleSelectData_fontStyle.graphql.js +106 -0
- package/dist-cjs/__generated__/TypeTesterStyleSelectData_fontStyleData.graphql.js +88 -0
- package/dist-cjs/__generated__/TypeTesterStyleSelectData_viewer.graphql.js +166 -0
- package/dist-cjs/__generated__/TypeTesterToolbar_fontStyle.graphql.js +36 -0
- package/dist-cjs/__generated__/TypeTesterVariableAxes_fontStyle.graphql.js +61 -0
- package/dist-cjs/__generated__/TypeTester_fontStyle.graphql.js +106 -0
- package/dist-cjs/__generated__/TypeTester_viewer.graphql.js +40 -0
- package/dist-cjs/__generated__/TypeTestersChangedStylesQuery.graphql.js +347 -0
- package/dist-cjs/__generated__/TypeTestersIDQuery.graphql.js +637 -0
- package/dist-cjs/__generated__/TypeTestersRefetchQuery.graphql.js +554 -0
- package/dist-cjs/__generated__/TypeTestersSlugQuery.graphql.js +644 -0
- package/dist-cjs/__generated__/TypeTesters_collection.graphql.js +258 -0
- package/dist-cjs/__generated__/TypeTesters_viewer.graphql.js +40 -0
- package/dist-cjs/__generated__/VariableTableAmounts_option.graphql.js +34 -0
- package/dist-cjs/__generated__/VariableTableAmounts_variable.graphql.js +34 -0
- package/dist-cjs/__generated__/productState_Query.graphql.js +184 -0
- package/dist-cjs/__generated__/productState_bundle.graphql.js +79 -0
- package/dist-cjs/__generated__/productState_collection.graphql.js +90 -0
- package/dist-cjs/__generated__/productState_collectionBundle.graphql.js +88 -0
- package/dist-cjs/__generated__/productState_node.graphql.js +122 -0
- package/dist-cjs/__generated__/productState_sku.graphql.js +51 -0
- package/dist-cjs/__generated__/useFeaturesData_fontStyle.graphql.js +64 -0
- package/dist-cjs/__generated__/useFontStyle_fontStyle.graphql.js +94 -0
- package/dist-cjs/__generated__/useTotalStyles_fontCollection.graphql.js +57 -0
- package/dist-cjs/__tests__/collectionBundleSelection.test.js +1630 -0
- package/dist-cjs/components/AddToCartBanner/index.js +75 -0
- package/dist-cjs/components/BuyButton/index.js +124 -0
- package/dist-cjs/components/BuyButton/index.server.js +36 -0
- package/dist-cjs/components/BuyingOptions/index.js +23 -0
- package/dist-cjs/components/Cart/AddressFields.js +162 -0
- package/dist-cjs/components/Cart/CartItem/CartItemAdditionalLicenses.js +33 -0
- package/dist-cjs/components/Cart/CartItem/CartItemLicense.js +66 -0
- package/dist-cjs/components/Cart/CartItem/CartItemProduct.js +36 -0
- package/dist-cjs/components/Cart/CartItem/CartItemVariable.js +66 -0
- package/dist-cjs/components/Cart/CartItem/VariableTextInput.js +79 -0
- package/dist-cjs/components/Cart/CartItem/index.js +95 -0
- package/dist-cjs/components/Cart/CartOrder.js +314 -0
- package/dist-cjs/components/Cart/CartState.js +93 -0
- package/dist-cjs/components/Cart/CartTotals.js +97 -0
- package/dist-cjs/components/Cart/Checkout.js +473 -0
- package/dist-cjs/components/Cart/CheckoutSteps.js +15 -0
- package/dist-cjs/components/Cart/CouponCodeInput.js +90 -0
- package/dist-cjs/components/Cart/CustomerFields.js +80 -0
- package/dist-cjs/components/Cart/Download.js +62 -0
- package/dist-cjs/components/Cart/EmptyCart.js +42 -0
- package/dist-cjs/components/Cart/IdentityBox.js +37 -0
- package/dist-cjs/components/Cart/ShareCart.js +87 -0
- package/dist-cjs/components/Cart/index.js +36 -0
- package/dist-cjs/components/Cart/injectRelayEnvironment.js +21 -0
- package/dist-cjs/components/Cart/types.js +5 -0
- package/dist-cjs/components/Cart/utils.js +8 -0
- package/dist-cjs/components/CartButton/index.js +127 -0
- package/dist-cjs/components/CartButton/index.server.js +18 -0
- package/dist-cjs/components/CharacterViewer/StyleSelect.js +60 -0
- package/dist-cjs/components/CharacterViewer/index.js +441 -0
- package/dist-cjs/components/CharacterViewer/index.server.js +36 -0
- package/dist-cjs/components/Checkbox/index.js +27 -0
- package/dist-cjs/components/CollectionAa/index.js +38 -0
- package/dist-cjs/components/ComponentsContext.js +12 -0
- package/dist-cjs/components/ConfigContext.js +86 -0
- package/{dist-bundle/chunks/consent-DMvR5rEh.js → dist-cjs/components/ConsentBanner/consent.js} +12 -4
- package/dist-cjs/components/ConsentBanner/index.js +84 -0
- package/dist-cjs/components/CookieNotification/index.js +83 -0
- package/{dist-bundle/chunks/CorsErrorModal-C1g_-3Re.js → dist-cjs/components/CorsErrorModal.js} +19 -16
- package/dist-cjs/components/CouponText/index.js +38 -0
- package/dist-cjs/components/CustomerLoginForm/index.js +88 -0
- package/dist-cjs/components/Family/FamilyList.js +43 -0
- package/dist-cjs/components/Family/index.js +77 -0
- package/dist-cjs/components/FontFamilies/index.js +53 -0
- package/dist-cjs/components/FontStyle/index.js +37 -0
- package/dist-cjs/components/FontdueProvider/FontdueProviderClientComponent.js +74 -0
- package/dist-cjs/components/FontdueProvider/index.js +43 -0
- package/dist-cjs/components/FontdueProvider/index.server.js +35 -0
- package/dist-cjs/components/FontdueProvider/useAuxUIOwner.js +32 -0
- package/dist-cjs/components/Icons/Align.js +58 -0
- package/dist-cjs/components/Icons/ArrowDownRight.js +19 -0
- package/dist-cjs/components/Icons/ArrowLeft.js +22 -0
- package/dist-cjs/components/Icons/ArrowRight.js +19 -0
- package/dist-cjs/components/Icons/CarrotDown.js +19 -0
- package/dist-cjs/components/Icons/CarrotUp.js +19 -0
- package/dist-cjs/components/Icons/Cart.js +23 -0
- package/dist-cjs/components/Icons/CartNew.js +33 -0
- package/dist-cjs/components/Icons/Check.js +19 -0
- package/dist-cjs/components/Icons/Checkbox.js +24 -0
- package/dist-cjs/components/Icons/CheckboxChecked.js +24 -0
- package/dist-cjs/components/Icons/CheckboxCrossed.js +26 -0
- package/dist-cjs/components/Icons/CircledCheck.js +21 -0
- package/dist-cjs/components/Icons/CircledInfo.js +21 -0
- package/dist-cjs/components/Icons/CircledMinus.js +21 -0
- package/dist-cjs/components/Icons/ColorPicker.js +19 -0
- package/dist-cjs/components/Icons/CreditCard.js +21 -0
- package/dist-cjs/components/Icons/DownArrow.js +24 -0
- package/dist-cjs/components/Icons/DownloadFonts.js +25 -0
- package/dist-cjs/components/Icons/FrowningFace.js +25 -0
- package/dist-cjs/components/Icons/License.js +19 -0
- package/dist-cjs/components/Icons/Receipt.js +34 -0
- package/dist-cjs/components/Icons/User.js +19 -0
- package/dist-cjs/components/Icons/X.js +19 -0
- package/dist-cjs/components/Icons/index.js +167 -0
- package/dist-cjs/components/NewsletterSignup/NewsletterSignupElement.js +15 -0
- package/dist-cjs/components/NewsletterSignup/index.js +192 -0
- package/dist-cjs/components/NewsletterSignup/index.server.js +18 -0
- package/dist-cjs/components/NodePasswordForm/index.js +114 -0
- package/dist-cjs/components/OrderVariableSelection/OrderVariableSelectionRedux.js +66 -0
- package/dist-cjs/components/OrderVariableSelection/index.js +199 -0
- package/dist-cjs/components/Precart/License.js +70 -0
- package/dist-cjs/components/Precart/index.js +331 -0
- package/dist-cjs/components/Price/index.js +111 -0
- package/dist-cjs/components/PriceBar/PriceBarSection.js +61 -0
- package/dist-cjs/components/PriceBar/index.js +49 -0
- package/dist-cjs/components/Root/index.js +208 -0
- package/dist-cjs/components/Root/productState.js +143 -0
- package/dist-cjs/components/SKUPrice/index.js +46 -0
- package/dist-cjs/components/Select/index.js +36 -0
- package/dist-cjs/components/SelectButton/index.js +79 -0
- package/dist-cjs/components/ServerConfigProvider/index.js +39 -0
- package/dist-cjs/components/SpecimenLink/index.js +37 -0
- package/dist-cjs/components/StickyNav/index.js +80 -0
- package/dist-cjs/components/StoreModal/StoreModalBundleButton.js +47 -0
- package/dist-cjs/components/StoreModal/StoreModalCart.js +79 -0
- package/dist-cjs/components/StoreModal/StoreModalCheckout.js +24 -0
- package/dist-cjs/components/StoreModal/StoreModalCheckoutContext.js +14 -0
- package/dist-cjs/components/StoreModal/StoreModalContainer.js +117 -0
- package/dist-cjs/components/StoreModal/StoreModalDownload.js +38 -0
- package/dist-cjs/components/StoreModal/StoreModalFamily.js +58 -0
- package/dist-cjs/components/StoreModal/StoreModalFamilyButton.js +69 -0
- package/dist-cjs/components/StoreModal/StoreModalIndex.js +27 -0
- package/dist-cjs/components/StoreModal/StoreModalIndexItem.js +63 -0
- package/dist-cjs/components/StoreModal/StoreModalLicenseeIsBillingSelection.js +30 -0
- package/dist-cjs/components/StoreModal/StoreModalLoader.js +22 -0
- package/dist-cjs/components/StoreModal/StoreModalOrderVariableSelection.js +89 -0
- package/dist-cjs/components/StoreModal/StoreModalProduct.js +154 -0
- package/dist-cjs/components/StoreModal/StoreModalReviewIdentity.js +18 -0
- package/dist-cjs/components/StoreModal/StoreModalRouter.js +28 -0
- package/dist-cjs/components/StoreModal/StoreModalStyleButton.js +52 -0
- package/dist-cjs/components/StoreModal/index.js +39 -0
- package/dist-cjs/components/StoreModal/routes.js +51 -0
- package/dist-cjs/components/StoreModal/types.js +5 -0
- package/dist-cjs/components/StoreModalProductLicenseSelection/LicenseElement.js +46 -0
- package/dist-cjs/components/StoreModalProductLicenseSelection/LicenseVariableElement.js +35 -0
- package/dist-cjs/components/StoreModalProductLicenseSelection/LicenseVariableRadioElement.js +47 -0
- package/dist-cjs/components/StoreModalProductLicenseSelection/StoreModalProductLicense.js +133 -0
- package/dist-cjs/components/StoreModalProductLicenseSelection/index.js +31 -0
- package/dist-cjs/components/StoreModalProductSummary/index.js +219 -0
- package/dist-cjs/components/StripeLogo.js +17 -0
- package/dist-cjs/components/StripeProvider/index.js +172 -0
- package/dist-cjs/components/Switch/index.js +7 -0
- package/dist-cjs/components/TestFontsForm/TestFontsFormElement.js +15 -0
- package/dist-cjs/components/TestFontsForm/index.js +208 -0
- package/dist-cjs/components/TestFontsForm/index.server.js +18 -0
- package/dist-cjs/components/TestModeBanner/index.js +34 -0
- package/dist-cjs/components/TextField/index.js +42 -0
- package/dist-cjs/components/ThemeConfig/index.js +41 -0
- package/dist-cjs/components/ThemeConfig/index.server.js +17 -0
- package/{dist-bundle/chunks/index-DsvF5W13.js → dist-cjs/components/Tracking/index.js} +19 -14
- package/dist-cjs/components/TypeTester/TypeTesterAlignButtons.js +34 -0
- package/dist-cjs/components/TypeTester/TypeTesterBullet.js +23 -0
- package/dist-cjs/components/TypeTester/TypeTesterContent.js +58 -0
- package/dist-cjs/components/TypeTester/TypeTesterContext.js +166 -0
- package/dist-cjs/components/TypeTester/TypeTesterEditAll.js +36 -0
- package/dist-cjs/components/TypeTester/TypeTesterFeatures.js +133 -0
- package/dist-cjs/components/TypeTester/TypeTesterFeaturesButton.js +82 -0
- package/dist-cjs/components/TypeTester/TypeTesterFitter.js +21 -0
- package/dist-cjs/components/TypeTester/TypeTesterFloatingToolbar.js +79 -0
- package/dist-cjs/components/TypeTester/TypeTesterInput.js +72 -0
- package/dist-cjs/components/TypeTester/TypeTesterSlider.js +76 -0
- package/dist-cjs/components/TypeTester/TypeTesterStandalone.js +137 -0
- package/dist-cjs/components/TypeTester/TypeTesterStandalone.preload.js +27 -0
- package/dist-cjs/components/TypeTester/TypeTesterStandalone.server.js +26 -0
- package/dist-cjs/components/TypeTester/TypeTesterStandaloneElement.js +65 -0
- package/dist-cjs/components/TypeTester/TypeTesterState.js +133 -0
- package/dist-cjs/components/TypeTester/TypeTesterStyleSelect.js +101 -0
- package/dist-cjs/components/TypeTester/TypeTesterStyleSelectData.js +102 -0
- package/dist-cjs/components/TypeTester/TypeTesterToolbar.js +94 -0
- package/dist-cjs/components/TypeTester/TypeTesterVariableAxes.js +65 -0
- package/dist-cjs/components/TypeTester/features.js +150 -0
- package/dist-cjs/components/TypeTester/index.js +169 -0
- package/dist-cjs/components/TypeTester/types.js +14 -0
- package/dist-cjs/components/TypeTester/useFeaturesData.js +36 -0
- package/dist-cjs/components/TypeTester/useTypeTesterStyler.js +83 -0
- package/dist-cjs/components/TypeTesters/TypeTestersElement.js +33 -0
- package/dist-cjs/components/TypeTesters/index.js +271 -0
- package/dist-cjs/components/TypeTesters/index.server.js +44 -0
- package/dist-cjs/components/UrlContext.js +16 -0
- package/dist-cjs/components/VariableTableAmounts/index.js +28 -0
- package/dist-cjs/components/elements/Button/index.js +21 -0
- package/dist-cjs/components/elements/EmptyCart/index.js +30 -0
- package/dist-cjs/components/elements/StoreModalCartLayout/index.js +38 -0
- package/dist-cjs/components/elements/StoreModalContainer/StoreModalContainerContext.js +11 -0
- package/dist-cjs/components/elements/StoreModalContainer/index.js +77 -0
- package/dist-cjs/components/elements/StoreModalDownloadLayout/index.js +25 -0
- package/dist-cjs/components/elements/StoreModalFamily/index.js +31 -0
- package/dist-cjs/components/elements/StoreModalFamilyButton/index.js +45 -0
- package/dist-cjs/components/elements/StoreModalIndexItem/index.js +35 -0
- package/dist-cjs/components/elements/StoreModalLicenseeIsBillingIdentityElement.js +59 -0
- package/dist-cjs/components/elements/StoreModalLoadingScreen/index.js +14 -0
- package/dist-cjs/components/elements/StoreModalPageContainer/index.js +22 -0
- package/dist-cjs/components/elements/StoreModalStyleButton/index.js +37 -0
- package/dist-cjs/components/elements/StoreModalUnifiedCheckout.js +753 -0
- package/dist-cjs/components/useConsent.js +26 -0
- package/dist-cjs/components/useFont.js +76 -0
- package/dist-cjs/components/useFontStyle.js +58 -0
- package/dist-cjs/components/useInterval.js +28 -0
- package/dist-cjs/components/useTotalStyles.js +26 -0
- package/{dist-bundle/index.js → dist-cjs/config.js} +8 -4
- package/dist-cjs/corsError.js +89 -0
- package/dist-cjs/data/unicodeData.js +1 -0
- package/dist-cjs/fontLoader.js +55 -0
- package/dist-cjs/global-shim.js +12 -0
- package/dist-cjs/hooks/useAutofit.js +114 -0
- package/dist-cjs/hooks/useLicenseAndOrderVariables.js +25 -0
- package/dist-cjs/hooks/useRefetchOnLicenseChanges.js +60 -0
- package/dist-cjs/hooks.js +18 -0
- package/dist-cjs/index.js +18 -0
- package/dist-cjs/package.json +1 -0
- package/dist-cjs/react-ranger.d.js +1 -0
- package/dist-cjs/react-ranger.js +301 -0
- package/dist-cjs/reducer.js +291 -0
- package/dist-cjs/relay/environment.js +148 -0
- package/{dist-bundle/TypeTester.preload.js → dist-cjs/relay/loadSerializableQuery.js} +8 -26
- package/dist-cjs/relay/useSerializablePreloadedQuery.js +52 -0
- package/dist-cjs/retryImport.js +24 -0
- package/dist-cjs/scripts/updateUnicodeData.js +49 -0
- package/dist-cjs/utils.js +107 -0
- package/dist-cjs/vanilla/FontStyle.js +58 -0
- package/dist-cjs/vanilla/TruncatedMarkdown.js +28 -0
- package/package.json +1 -1
- package/dist-bundle/FontdueProvider.js +0 -6
- package/dist-bundle/FontdueProvider.js.map +0 -1
- package/dist-bundle/TypeTester.js +0 -7
- package/dist-bundle/TypeTester.js.map +0 -1
- package/dist-bundle/TypeTester.preload.js.map +0 -1
- package/dist-bundle/chunks/ComponentsContext-CmkN9J4X.js +0 -20843
- package/dist-bundle/chunks/ComponentsContext-CmkN9J4X.js.map +0 -1
- package/dist-bundle/chunks/CorsErrorModal-C1g_-3Re.js.map +0 -1
- package/dist-bundle/chunks/TypeTesterStandalone-BMWuv8Ca.js +0 -27486
- package/dist-bundle/chunks/TypeTesterStandalone-BMWuv8Ca.js.map +0 -1
- package/dist-bundle/chunks/consent-DMvR5rEh.js.map +0 -1
- package/dist-bundle/chunks/index-BNSbxp7B.js +0 -78
- package/dist-bundle/chunks/index-BNSbxp7B.js.map +0 -1
- package/dist-bundle/chunks/index-C4ak9qTL.js +0 -423
- package/dist-bundle/chunks/index-C4ak9qTL.js.map +0 -1
- package/dist-bundle/chunks/index-DsvF5W13.js.map +0 -1
- package/dist-bundle/chunks/index-o29NNufd.js.map +0 -1
- package/dist-bundle/index.js.map +0 -1
|
@@ -0,0 +1,753 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = StoreModalUnifiedCheckout;
|
|
7
|
+
var _StoreModalUnifiedCheckoutCompleteOrderMutation2 = _interopRequireDefault(require("../../__generated__/StoreModalUnifiedCheckoutCompleteOrderMutation.graphql"));
|
|
8
|
+
var _StoreModalUnifiedCheckoutUpdateOrderMutation2 = _interopRequireDefault(require("../../__generated__/StoreModalUnifiedCheckoutUpdateOrderMutation.graphql"));
|
|
9
|
+
var _StoreModalUnifiedCheckoutUpdateCustomerMutation2 = _interopRequireDefault(require("../../__generated__/StoreModalUnifiedCheckoutUpdateCustomerMutation.graphql"));
|
|
10
|
+
var _StoreModalUnifiedCheckout_order2 = _interopRequireDefault(require("../../__generated__/StoreModalUnifiedCheckout_order.graphql"));
|
|
11
|
+
var _StoreModalUnifiedCheckout_viewer2 = _interopRequireDefault(require("../../__generated__/StoreModalUnifiedCheckout_viewer.graphql"));
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
13
|
+
var _reactGoogleRecaptcha = _interopRequireDefault(require("react-google-recaptcha"));
|
|
14
|
+
var Sentry = _interopRequireWildcard(require("@sentry/react"));
|
|
15
|
+
var _reactRelay = require("react-relay");
|
|
16
|
+
var _AddressFields = _interopRequireDefault(require("../Cart/AddressFields"));
|
|
17
|
+
var _CustomerFields = _interopRequireDefault(require("../Cart/CustomerFields"));
|
|
18
|
+
var _reactStripeJs = require("@stripe/react-stripe-js");
|
|
19
|
+
var _StoreModalLicenseeIsBillingIdentityElement = _interopRequireDefault(require("./StoreModalLicenseeIsBillingIdentityElement"));
|
|
20
|
+
var _reactRedux = require("react-redux");
|
|
21
|
+
var _StripeLogo = _interopRequireDefault(require("../StripeLogo"));
|
|
22
|
+
var _Icons = require("../Icons");
|
|
23
|
+
var _ConfigContext = _interopRequireDefault(require("../ConfigContext"));
|
|
24
|
+
var _Price = require("../Price");
|
|
25
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
26
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
27
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
28
|
+
/**
|
|
29
|
+
* StoreModalUnifiedCheckout
|
|
30
|
+
*
|
|
31
|
+
* This component handles the checkout flow for orders, collecting customer information,
|
|
32
|
+
* billing/licensee details, and processing payment through Stripe.
|
|
33
|
+
*
|
|
34
|
+
* Key implementation details:
|
|
35
|
+
*
|
|
36
|
+
* 1. Auto-save billing identity (fontdue tax system only):
|
|
37
|
+
* - When using fontdue's tax system (not Stripe Tax), we need the billing address
|
|
38
|
+
* to calculate taxes before showing the final amount
|
|
39
|
+
* - The billing identity is auto-saved (with 500ms debounce) once the Stripe Address
|
|
40
|
+
* Element reports complete (name + address fields)
|
|
41
|
+
* - Email is a separate field (not part of Address Element), so auto-save may trigger
|
|
42
|
+
* before email is filled, which will cause backend validation errors to display
|
|
43
|
+
* - This ensures taxes are calculated and displayed before the user clicks Pay
|
|
44
|
+
* - On page reload, if billing identity already exists, billingAddressComplete starts
|
|
45
|
+
* as true to prevent re-triggering auto-save
|
|
46
|
+
*
|
|
47
|
+
* 2. Billing identity diff tracking:
|
|
48
|
+
* - We track differences between local state and saved backend data (billingIdentityDiff)
|
|
49
|
+
* - This determines isBillingIdentitySaved, which controls when payment can proceed
|
|
50
|
+
* - If the user edits any field after auto-save, it triggers another save cycle
|
|
51
|
+
* - All fields are normalized (null/undefined/empty string treated as equivalent)
|
|
52
|
+
*
|
|
53
|
+
* 3. Pay button validation:
|
|
54
|
+
* - The Pay button is always enabled (as long as EULA is checked) even if billing
|
|
55
|
+
* info isn't fully saved yet
|
|
56
|
+
* - This is intentional: we need to allow the user to click Pay so we can call
|
|
57
|
+
* elements.submit(), which triggers Stripe's validation and shows any validation
|
|
58
|
+
* errors inline in the Stripe UI elements
|
|
59
|
+
* - After Stripe validation passes, we check if billing identity is saved
|
|
60
|
+
* - If not saved, we show an error message above the Pay button asking them to
|
|
61
|
+
* complete billing information (validation errors should now be visible above)
|
|
62
|
+
*
|
|
63
|
+
* 4. Customer info pre-fill:
|
|
64
|
+
* - When customer submits their contact info, if billing name/email are empty,
|
|
65
|
+
* we pre-fill them from customer data as a convenience
|
|
66
|
+
*
|
|
67
|
+
* 5. Country mismatch handling (order snapshots):
|
|
68
|
+
* - When loading a hydrated order (e.g., from quote/snapshot), the order may have
|
|
69
|
+
* a country variable that differs from the user's detected country
|
|
70
|
+
* - In this case, we force licenseeIsBillingIdentity to false and always collect
|
|
71
|
+
* separate licensee information to ensure the licensee country matches the quote
|
|
72
|
+
* - This preserves pricing/availability from the original quote
|
|
73
|
+
*
|
|
74
|
+
* 6. Licensee country syncing:
|
|
75
|
+
* - When licensee country changes, it automatically updates any country-type order
|
|
76
|
+
* variables to maintain consistent pricing based on the selected country
|
|
77
|
+
*
|
|
78
|
+
* 7. Zero-order/coupon flow:
|
|
79
|
+
* - Orders with $0 total (due to coupons) bypass Stripe payment entirely
|
|
80
|
+
* - These use the completeOrder mutation instead of confirmPayment
|
|
81
|
+
*
|
|
82
|
+
* 8. Tax system variations:
|
|
83
|
+
* - Stripe Tax system: Uses embedded checkout, billing handled by Stripe
|
|
84
|
+
* - Fontdue tax system: Collects billing info directly, auto-saves for tax calculation
|
|
85
|
+
*/
|
|
86
|
+
|
|
87
|
+
/* const LICENSEE_REQUIRED_FIELDS = ['organization', 'country'] as (keyof Identity)[]; */
|
|
88
|
+
|
|
89
|
+
const IDENTITY_REQUIRED_FIELDS = ['name', 'email', 'country'];
|
|
90
|
+
const defaultIdentity = {
|
|
91
|
+
name: '',
|
|
92
|
+
organization: '',
|
|
93
|
+
email: '',
|
|
94
|
+
phone: '',
|
|
95
|
+
country: '',
|
|
96
|
+
administrativeArea: null,
|
|
97
|
+
street: '',
|
|
98
|
+
locality: '',
|
|
99
|
+
sublocality: '',
|
|
100
|
+
zip: '',
|
|
101
|
+
vatNumber: ''
|
|
102
|
+
};
|
|
103
|
+
function getIdentityFields(object) {
|
|
104
|
+
if (!object) return;
|
|
105
|
+
return {
|
|
106
|
+
name: object.name ?? '',
|
|
107
|
+
organization: object.organization ?? null,
|
|
108
|
+
email: object.email ?? '',
|
|
109
|
+
phone: object.phoneNullable ?? '',
|
|
110
|
+
country: object.country ?? '',
|
|
111
|
+
administrativeArea: object.administrativeArea ?? null,
|
|
112
|
+
street: object.street ?? null,
|
|
113
|
+
locality: object.locality ?? null,
|
|
114
|
+
sublocality: object.sublocality ?? null,
|
|
115
|
+
zip: object.zip ?? null,
|
|
116
|
+
vatNumber: object.vatNumber ?? null
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function EditableSection({
|
|
120
|
+
onSubmit,
|
|
121
|
+
onCancel,
|
|
122
|
+
onEdit,
|
|
123
|
+
disabled,
|
|
124
|
+
disableSubmit,
|
|
125
|
+
cancelable,
|
|
126
|
+
editing,
|
|
127
|
+
children: {
|
|
128
|
+
show,
|
|
129
|
+
edit,
|
|
130
|
+
save
|
|
131
|
+
}
|
|
132
|
+
}) {
|
|
133
|
+
const [submitting, setSubmitting] = (0, _react.useState)(false);
|
|
134
|
+
const handleSubmit = (0, _react.useCallback)(e => {
|
|
135
|
+
e.preventDefault();
|
|
136
|
+
setSubmitting(true);
|
|
137
|
+
onSubmit({
|
|
138
|
+
onSuccess: () => {
|
|
139
|
+
setSubmitting(false);
|
|
140
|
+
},
|
|
141
|
+
onError: () => setSubmitting(false)
|
|
142
|
+
});
|
|
143
|
+
}, [setSubmitting, onSubmit]);
|
|
144
|
+
const handleCancel = (0, _react.useCallback)(() => {
|
|
145
|
+
setSubmitting(false);
|
|
146
|
+
onCancel?.();
|
|
147
|
+
}, [setSubmitting, onCancel]);
|
|
148
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
149
|
+
className: "store-modal__cart__checkout-section",
|
|
150
|
+
"data-editing": editing,
|
|
151
|
+
"data-disabled": disabled
|
|
152
|
+
}, editing ? /*#__PURE__*/_react.default.createElement("form", {
|
|
153
|
+
onSubmit: handleSubmit
|
|
154
|
+
}, edit, /*#__PURE__*/_react.default.createElement("div", {
|
|
155
|
+
className: "store-modal__cart__buttons"
|
|
156
|
+
}, cancelable ? /*#__PURE__*/_react.default.createElement("button", {
|
|
157
|
+
className: "store-modal__cart__button",
|
|
158
|
+
type: "button",
|
|
159
|
+
onClick: handleCancel
|
|
160
|
+
}, "Cancel") : null, /*#__PURE__*/_react.default.createElement("button", {
|
|
161
|
+
className: "store-modal__cart__button",
|
|
162
|
+
type: "submit",
|
|
163
|
+
disabled: submitting || disableSubmit
|
|
164
|
+
}, submitting ? 'Submitting...' : save))) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, show, /*#__PURE__*/_react.default.createElement("button", {
|
|
165
|
+
type: "button",
|
|
166
|
+
className: "store-modal__cart__edit-button",
|
|
167
|
+
onClick: onEdit
|
|
168
|
+
}, "Change")));
|
|
169
|
+
}
|
|
170
|
+
function StoreModalUnifiedCheckout({
|
|
171
|
+
order: orderKey,
|
|
172
|
+
viewer: viewerKey,
|
|
173
|
+
onScrollToTop,
|
|
174
|
+
onUpdateOrderVariableSelections
|
|
175
|
+
}) {
|
|
176
|
+
const viewer = (0, _reactRelay.useFragment)((_StoreModalUnifiedCheckout_viewer2.default.hash && _StoreModalUnifiedCheckout_viewer2.default.hash !== "048ce405742611f6684cb5306d28478b" && console.error("The definition of 'StoreModalUnifiedCheckout_viewer' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _StoreModalUnifiedCheckout_viewer2.default), viewerKey);
|
|
177
|
+
const order = (0, _reactRelay.useFragment)((_StoreModalUnifiedCheckout_order2.default.hash && _StoreModalUnifiedCheckout_order2.default.hash !== "7c5503876a562732ebaead9b2ae97180" && console.error("The definition of 'StoreModalUnifiedCheckout_order' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _StoreModalUnifiedCheckout_order2.default), orderKey);
|
|
178
|
+
|
|
179
|
+
// Check if order has a country-type order variable with a different country than detected
|
|
180
|
+
// This is important for order snapshot/quote functionality where a quote was created for
|
|
181
|
+
// a different country than the user's detected country. In this case, we must collect
|
|
182
|
+
// licensee information to ensure the country variable matches the licensee's country.
|
|
183
|
+
// If the countries match (or no country variable exists), allow the normal checkout flow.
|
|
184
|
+
const countryVariableSelection = order.orderVariableSelections?.find(selection => selection.orderVariable.variableType === 'country');
|
|
185
|
+
const hasCountryMismatch = countryVariableSelection && countryVariableSelection.countryCode && countryVariableSelection.countryCode !== viewer.detectedCountry;
|
|
186
|
+
|
|
187
|
+
// When loading a hydrated order (e.g., from order snapshot/quote), initialize the
|
|
188
|
+
// licensee country from the order variable country if no licensee country exists yet.
|
|
189
|
+
// This is useful for the "order snapshot" functionality where we want to preserve
|
|
190
|
+
// the original country selection from the quote.
|
|
191
|
+
const getInitialCountry = () => {
|
|
192
|
+
// If order already has a licensee identity with country, use that
|
|
193
|
+
if (order?.licenseeIdentity?.country) {
|
|
194
|
+
return order.licenseeIdentity.country;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
// Otherwise, check if there's a country-type order variable selection
|
|
198
|
+
const countryVariableSelection = order?.orderVariableSelections?.find(selection => selection.orderVariable.variableType === 'country');
|
|
199
|
+
if (countryVariableSelection?.countryCode) {
|
|
200
|
+
return countryVariableSelection.countryCode;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// Fall back to detected country or viewer country
|
|
204
|
+
return viewer.detectedCountry ?? viewer.country;
|
|
205
|
+
};
|
|
206
|
+
const initialIdentity = {
|
|
207
|
+
...defaultIdentity,
|
|
208
|
+
country: getInitialCountry()
|
|
209
|
+
};
|
|
210
|
+
const [customer, setCustomer] = (0, _react.useState)(order?.customer ?? {
|
|
211
|
+
name: null,
|
|
212
|
+
email: null,
|
|
213
|
+
newsletterOptIn: false
|
|
214
|
+
});
|
|
215
|
+
const [licenseeIdentity, setLicenseeIdentity] = (0, _react.useState)(getIdentityFields(order?.licenseeIdentity) ?? initialIdentity);
|
|
216
|
+
const [billingIdentity, setBillingIdentity] = (0, _react.useState)(getIdentityFields(order?.billingIdentity) ?? initialIdentity);
|
|
217
|
+
|
|
218
|
+
// Track if the Stripe Address Element reports as complete
|
|
219
|
+
// Start as true if order already has billing identity (page reload case)
|
|
220
|
+
const [billingAddressComplete, setBillingAddressComplete] = (0, _react.useState)(!!order?.billingIdentity);
|
|
221
|
+
|
|
222
|
+
// Track differences between local state and saved backend data
|
|
223
|
+
const billingIdentityDiff = (0, _react.useMemo)(() => {
|
|
224
|
+
const savedIdentity = order?.billingIdentity;
|
|
225
|
+
if (!savedIdentity) return null;
|
|
226
|
+
|
|
227
|
+
// Helper to normalize values (treat null, undefined, and empty string as equivalent)
|
|
228
|
+
const normalize = val => val || '';
|
|
229
|
+
const differences = {};
|
|
230
|
+
const checkField = (field, localValue, savedValue) => {
|
|
231
|
+
const normalizedLocal = normalize(localValue);
|
|
232
|
+
const normalizedSaved = normalize(savedValue);
|
|
233
|
+
if (normalizedLocal !== normalizedSaved) {
|
|
234
|
+
differences[field] = {
|
|
235
|
+
local: normalizedLocal,
|
|
236
|
+
saved: normalizedSaved
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
checkField('name', billingIdentity.name, savedIdentity.name);
|
|
241
|
+
checkField('email', billingIdentity.email, savedIdentity.email);
|
|
242
|
+
checkField('phone', billingIdentity.phone, savedIdentity.phoneNullable);
|
|
243
|
+
checkField('country', billingIdentity.country, savedIdentity.country);
|
|
244
|
+
checkField('street', billingIdentity.street, savedIdentity.street);
|
|
245
|
+
checkField('locality', billingIdentity.locality, savedIdentity.locality);
|
|
246
|
+
checkField('sublocality', billingIdentity.sublocality, savedIdentity.sublocality);
|
|
247
|
+
checkField('administrativeArea', billingIdentity.administrativeArea, savedIdentity.administrativeArea);
|
|
248
|
+
checkField('zip', billingIdentity.zip, savedIdentity.zip);
|
|
249
|
+
checkField('organization', billingIdentity.organization, savedIdentity.organization);
|
|
250
|
+
checkField('vatNumber', billingIdentity.vatNumber, savedIdentity.vatNumber);
|
|
251
|
+
return Object.keys(differences).length > 0 ? differences : null;
|
|
252
|
+
}, [billingIdentity, order?.billingIdentity]);
|
|
253
|
+
const isBillingIdentitySaved = billingIdentityDiff === null && !!order?.billingIdentity;
|
|
254
|
+
const handleCustomerChange = (0, _react.useCallback)(value => setCustomer(currentValue => ({
|
|
255
|
+
...currentValue,
|
|
256
|
+
...value
|
|
257
|
+
})), [setCustomer]);
|
|
258
|
+
const handleLicenseeChange = (0, _react.useCallback)(value => {
|
|
259
|
+
setErrorsObject(currentValue => {
|
|
260
|
+
if (currentValue?.licenseeIdentity) {
|
|
261
|
+
const keys = Object.keys(value);
|
|
262
|
+
return {
|
|
263
|
+
...currentValue,
|
|
264
|
+
licenseeIdentity: {
|
|
265
|
+
...currentValue.licenseeIdentity,
|
|
266
|
+
...keys.reduce((acc, field) => {
|
|
267
|
+
acc[field] = null;
|
|
268
|
+
return acc;
|
|
269
|
+
}, {})
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
return currentValue;
|
|
274
|
+
});
|
|
275
|
+
setLicenseeIdentity(currentValue => ({
|
|
276
|
+
...currentValue,
|
|
277
|
+
...value
|
|
278
|
+
}));
|
|
279
|
+
}, [setLicenseeIdentity]);
|
|
280
|
+
const environment = (0, _reactRelay.useRelayEnvironment)();
|
|
281
|
+
const [error, setError] = (0, _react.useState)(null);
|
|
282
|
+
const [errorsObject, setErrorsObject] = (0, _react.useState)(null);
|
|
283
|
+
const [customerErrorsObject, setCustomerErrorsObject] = (0, _react.useState)(null);
|
|
284
|
+
const [_submitting, setSubmitting] = (0, _react.useState)(false);
|
|
285
|
+
/* const [licenseeRequiredFields, setLicenseeRequiredFields] = useState<
|
|
286
|
+
* (keyof Identity)[]
|
|
287
|
+
* >(LICENSEE_REQUIRED_FIELDS); */
|
|
288
|
+
const [acceptedEULA, setAcceptedEULA] = (0, _react.useState)(false);
|
|
289
|
+
const {
|
|
290
|
+
form: config
|
|
291
|
+
} = (0, _react.useContext)(_ConfigContext.default);
|
|
292
|
+
|
|
293
|
+
// reCAPTCHA state
|
|
294
|
+
const [recaptchaToken, setRecaptchaToken] = (0, _react.useState)(null);
|
|
295
|
+
const [pendingCustomerSubmit, setPendingCustomerSubmit] = (0, _react.useState)(null);
|
|
296
|
+
const recaptchaRef = (0, _react.useRef)(null);
|
|
297
|
+
const recaptchaEnabled = viewer.settings?.recaptchaEnabled ?? false;
|
|
298
|
+
const recaptchaSiteKey = viewer.settings?.recaptchaSiteKey;
|
|
299
|
+
const onCompleted = (res, errors, onSuccess, onError) => {
|
|
300
|
+
if (errors && errors.length > 0) {
|
|
301
|
+
setError(errors[0].message);
|
|
302
|
+
setSubmitting(false);
|
|
303
|
+
onError?.();
|
|
304
|
+
} else if ('updateCustomer' in res && res.updateCustomer?.errors && (res.updateCustomer.errors.name || res.updateCustomer.errors.email || res.updateCustomer.errors.newsletterOptIn)) {
|
|
305
|
+
setSubmitting(false);
|
|
306
|
+
setCustomerErrorsObject(res.updateCustomer.errors);
|
|
307
|
+
onError?.();
|
|
308
|
+
} else if ('updateOrder' in res && res.updateOrder?.errors) {
|
|
309
|
+
setSubmitting(false);
|
|
310
|
+
setErrorsObject(res.updateOrder.errors);
|
|
311
|
+
onError?.();
|
|
312
|
+
} else {
|
|
313
|
+
onSuccess?.();
|
|
314
|
+
setSubmitting(false);
|
|
315
|
+
setError(null);
|
|
316
|
+
setCustomerErrorsObject(null);
|
|
317
|
+
setErrorsObject(null);
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
const onError = error => {
|
|
321
|
+
setError(error.message);
|
|
322
|
+
setSubmitting(false);
|
|
323
|
+
};
|
|
324
|
+
const updateCustomer = (0, _react.useCallback)((variables, onSuccess, onErrorCallback) => {
|
|
325
|
+
(0, _reactRelay.commitMutation)(environment, {
|
|
326
|
+
mutation: (_StoreModalUnifiedCheckoutUpdateCustomerMutation2.default.hash && _StoreModalUnifiedCheckoutUpdateCustomerMutation2.default.hash !== "a41e423a93ba20f15ebbe826dd802514" && console.error("The definition of 'StoreModalUnifiedCheckoutUpdateCustomerMutation' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _StoreModalUnifiedCheckoutUpdateCustomerMutation2.default),
|
|
327
|
+
variables,
|
|
328
|
+
onCompleted: (res, errors) => onCompleted(res, errors, onSuccess, onErrorCallback),
|
|
329
|
+
onError
|
|
330
|
+
});
|
|
331
|
+
}, [environment]);
|
|
332
|
+
const updateOrder = (0, _react.useCallback)((variables, onSuccess, onError) => {
|
|
333
|
+
(0, _reactRelay.commitMutation)(environment, {
|
|
334
|
+
mutation: (_StoreModalUnifiedCheckoutUpdateOrderMutation2.default.hash && _StoreModalUnifiedCheckoutUpdateOrderMutation2.default.hash !== "189cd7ac579c6898dca2f4b6e07861d1" && console.error("The definition of 'StoreModalUnifiedCheckoutUpdateOrderMutation' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _StoreModalUnifiedCheckoutUpdateOrderMutation2.default),
|
|
335
|
+
variables,
|
|
336
|
+
onCompleted: (res, errors) => onCompleted(res, errors, onSuccess, onError),
|
|
337
|
+
onError
|
|
338
|
+
});
|
|
339
|
+
}, [environment]);
|
|
340
|
+
|
|
341
|
+
// Update country order variable when licensee address country changes
|
|
342
|
+
(0, _react.useEffect)(() => {
|
|
343
|
+
if (!licenseeIdentity.country || !order.orderVariableSelections) return;
|
|
344
|
+
|
|
345
|
+
// Find country-type order variable
|
|
346
|
+
const countryVariableSelection = order.orderVariableSelections.find(selection => selection.orderVariable.variableType === 'country');
|
|
347
|
+
if (!countryVariableSelection) return;
|
|
348
|
+
|
|
349
|
+
// Only update if the country has actually changed
|
|
350
|
+
if (countryVariableSelection.countryCode === licenseeIdentity.country) return;
|
|
351
|
+
|
|
352
|
+
// Build updated selections array
|
|
353
|
+
const updatedSelections = order.orderVariableSelections.map(selection => ({
|
|
354
|
+
orderVariableId: selection.orderVariable.id,
|
|
355
|
+
orderVariableOptionId: selection.orderVariableOption?.id ?? null,
|
|
356
|
+
countryCode: selection.orderVariable.variableType === 'country' ? licenseeIdentity.country : selection.countryCode ?? null
|
|
357
|
+
}));
|
|
358
|
+
|
|
359
|
+
// Update the order with new country via callback
|
|
360
|
+
onUpdateOrderVariableSelections(updatedSelections);
|
|
361
|
+
}, [licenseeIdentity.country, order.orderVariableSelections, onUpdateOrderVariableSelections]);
|
|
362
|
+
|
|
363
|
+
// When a country mismatch exists, force licenseeIsBillingIdentity to false
|
|
364
|
+
// This ensures we always collect licensee information for orders with mismatched country
|
|
365
|
+
(0, _react.useEffect)(() => {
|
|
366
|
+
if (hasCountryMismatch && (order.licenseeIsBillingIdentity ?? true)) {
|
|
367
|
+
// Update order to force separate licensee collection
|
|
368
|
+
updateOrder({
|
|
369
|
+
input: {
|
|
370
|
+
licenseeIsBillingIdentity: false
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
}, [hasCountryMismatch, order.licenseeIsBillingIdentity, updateOrder]);
|
|
375
|
+
|
|
376
|
+
// Auto-save billing identity when complete (for fontdue tax system only)
|
|
377
|
+
// This ensures taxes are calculated before showing the payment element
|
|
378
|
+
(0, _react.useEffect)(() => {
|
|
379
|
+
const taxSystem = viewer.settings.taxSystem;
|
|
380
|
+
const canUseEmbeddedCheckout = taxSystem === 'stripe';
|
|
381
|
+
|
|
382
|
+
// Only for fontdue tax system (not Stripe Tax/embedded checkout)
|
|
383
|
+
if (!canUseEmbeddedCheckout && order.customer && !isBillingIdentitySaved) {
|
|
384
|
+
// Check if the Stripe Address Element reports as complete AND email is filled
|
|
385
|
+
const isComplete = billingAddressComplete;
|
|
386
|
+
if (isComplete) {
|
|
387
|
+
// Debounce the update to avoid sending on every character change
|
|
388
|
+
const timeoutId = setTimeout(() => {
|
|
389
|
+
// Save billing identity to backend for tax calculation
|
|
390
|
+
updateOrder({
|
|
391
|
+
input: {
|
|
392
|
+
billingIdentity
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
}, 500); // 500ms debounce
|
|
396
|
+
|
|
397
|
+
return () => clearTimeout(timeoutId);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}, [billingIdentity, isBillingIdentitySaved, billingAddressComplete, order.customer, updateOrder, viewer.settings]);
|
|
401
|
+
let initialEditingState = null;
|
|
402
|
+
// set initial state depending on if checkout is already in progress
|
|
403
|
+
if (!order.customer) initialEditingState = 'customer';
|
|
404
|
+
const [editing, setEditing] = (0, _react.useState)(initialEditingState);
|
|
405
|
+
|
|
406
|
+
// Submit customer data with optional reCAPTCHA token
|
|
407
|
+
const submitCustomer = (0, _react.useCallback)((token, callbacks) => {
|
|
408
|
+
setPendingCustomerSubmit(null);
|
|
409
|
+
if (!billingIdentity.name && !billingIdentity.email) {
|
|
410
|
+
setBillingIdentity({
|
|
411
|
+
...billingIdentity,
|
|
412
|
+
name: customer.name ?? '',
|
|
413
|
+
email: customer.email ?? ''
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
updateCustomer({
|
|
417
|
+
input: {
|
|
418
|
+
...customer,
|
|
419
|
+
recaptchaToken: token ?? undefined
|
|
420
|
+
}
|
|
421
|
+
}, () => {
|
|
422
|
+
callbacks.onSuccess();
|
|
423
|
+
setEditing(null);
|
|
424
|
+
// Reset reCAPTCHA after successful submission
|
|
425
|
+
recaptchaRef.current?.reset();
|
|
426
|
+
setRecaptchaToken(null);
|
|
427
|
+
}, () => {
|
|
428
|
+
callbacks.onError();
|
|
429
|
+
// Reset reCAPTCHA on error so user can retry
|
|
430
|
+
recaptchaRef.current?.reset();
|
|
431
|
+
setRecaptchaToken(null);
|
|
432
|
+
});
|
|
433
|
+
}, [customer, billingIdentity, updateCustomer]);
|
|
434
|
+
const handleRecaptchaChange = (0, _react.useCallback)(token => {
|
|
435
|
+
setRecaptchaToken(token);
|
|
436
|
+
// If we were waiting for a token to submit, do it now
|
|
437
|
+
if (token && pendingCustomerSubmit) {
|
|
438
|
+
submitCustomer(token, pendingCustomerSubmit.callbacks);
|
|
439
|
+
}
|
|
440
|
+
}, [pendingCustomerSubmit, submitCustomer]);
|
|
441
|
+
const handleRecaptchaExpired = (0, _react.useCallback)(() => {
|
|
442
|
+
setRecaptchaToken(null);
|
|
443
|
+
}, []);
|
|
444
|
+
const handleCustomerSubmit = callbacks => {
|
|
445
|
+
// If reCAPTCHA is enabled but no token, execute it and wait for callback
|
|
446
|
+
if (recaptchaEnabled && recaptchaSiteKey && !recaptchaToken) {
|
|
447
|
+
setPendingCustomerSubmit({
|
|
448
|
+
callbacks
|
|
449
|
+
});
|
|
450
|
+
recaptchaRef.current?.execute();
|
|
451
|
+
return;
|
|
452
|
+
}
|
|
453
|
+
submitCustomer(recaptchaToken, callbacks);
|
|
454
|
+
};
|
|
455
|
+
const handleLicenseeIsBillingIdentityChange = (0, _react.useCallback)(value => {
|
|
456
|
+
updateOrder({
|
|
457
|
+
input: {
|
|
458
|
+
licenseeIsBillingIdentity: value
|
|
459
|
+
}
|
|
460
|
+
});
|
|
461
|
+
}, [updateOrder]);
|
|
462
|
+
const handleBillingChange = (0, _react.useCallback)((value, complete) => {
|
|
463
|
+
setError(null);
|
|
464
|
+
setErrorsObject(currentValue => {
|
|
465
|
+
if (currentValue?.billingIdentity) {
|
|
466
|
+
const keys = Object.keys(value);
|
|
467
|
+
return {
|
|
468
|
+
...currentValue,
|
|
469
|
+
billingIdentity: {
|
|
470
|
+
...currentValue.billingIdentity,
|
|
471
|
+
...keys.reduce((acc, field) => {
|
|
472
|
+
acc[field] = null;
|
|
473
|
+
return acc;
|
|
474
|
+
}, {})
|
|
475
|
+
}
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
return currentValue;
|
|
479
|
+
});
|
|
480
|
+
setBillingIdentity(currentValue => {
|
|
481
|
+
const newValue = {
|
|
482
|
+
...currentValue,
|
|
483
|
+
...value
|
|
484
|
+
};
|
|
485
|
+
if (typeof complete === 'boolean') {
|
|
486
|
+
setBillingAddressComplete(complete);
|
|
487
|
+
}
|
|
488
|
+
return newValue;
|
|
489
|
+
});
|
|
490
|
+
}, [order?.billingIdentity]);
|
|
491
|
+
const stripe = (0, _reactStripeJs.useStripe)();
|
|
492
|
+
const elements = (0, _reactStripeJs.useElements)();
|
|
493
|
+
const [completing, setCompleting] = (0, _react.useState)(false);
|
|
494
|
+
const [checkingOut, setCheckingOut] = (0, _react.useState)(false);
|
|
495
|
+
const dispatch = (0, _reactRedux.useDispatch)();
|
|
496
|
+
|
|
497
|
+
// When a country mismatch exists, always show licensee section (force collection)
|
|
498
|
+
// Otherwise, only show when user has selected "Your client" option
|
|
499
|
+
const showLicenseeSection = order.customer && (hasCountryMismatch || !(order.licenseeIsBillingIdentity ?? false));
|
|
500
|
+
const handleCheckout = (0, _react.useCallback)(async () => {
|
|
501
|
+
// Validate Stripe elements first
|
|
502
|
+
if (elements) {
|
|
503
|
+
const result = await elements.submit();
|
|
504
|
+
if (result.error) {
|
|
505
|
+
// Stripe will show validation errors in the UI
|
|
506
|
+
return;
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
// If licensee section is shown, save licensee data before navigating to checkout
|
|
511
|
+
if (showLicenseeSection) {
|
|
512
|
+
setCheckingOut(true);
|
|
513
|
+
updateOrder({
|
|
514
|
+
input: {
|
|
515
|
+
licenseeIdentity
|
|
516
|
+
}
|
|
517
|
+
}, () => {
|
|
518
|
+
setCheckingOut(false);
|
|
519
|
+
dispatch({
|
|
520
|
+
type: 'STORE_MODAL_NAVIGATE',
|
|
521
|
+
route: 'checkout'
|
|
522
|
+
});
|
|
523
|
+
}, () => {
|
|
524
|
+
setCheckingOut(false);
|
|
525
|
+
});
|
|
526
|
+
} else {
|
|
527
|
+
dispatch({
|
|
528
|
+
type: 'STORE_MODAL_NAVIGATE',
|
|
529
|
+
route: 'checkout'
|
|
530
|
+
});
|
|
531
|
+
}
|
|
532
|
+
}, [showLicenseeSection, licenseeIdentity, updateOrder, dispatch, elements]);
|
|
533
|
+
const handleComplete = async e => {
|
|
534
|
+
e.preventDefault();
|
|
535
|
+
if (!order) return;
|
|
536
|
+
if (!billingIdentity) {
|
|
537
|
+
console.error('No billing identity, required for payment');
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
// Validate Stripe elements first
|
|
542
|
+
if (elements) {
|
|
543
|
+
const result = await elements.submit();
|
|
544
|
+
if (result.error) {
|
|
545
|
+
// Stripe will show validation errors in the UI
|
|
546
|
+
return;
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
// If billing identity is not saved yet, don't proceed with payment
|
|
551
|
+
// The validation above will show errors for incomplete fields
|
|
552
|
+
if (!isBillingIdentitySaved) {
|
|
553
|
+
setError('Please complete all billing information above');
|
|
554
|
+
return;
|
|
555
|
+
}
|
|
556
|
+
setCompleting(true);
|
|
557
|
+
setError(null);
|
|
558
|
+
const processPayment = () => {
|
|
559
|
+
if (order.canCompleteWithCoupon) {
|
|
560
|
+
(0, _reactRelay.commitMutation)(environment, {
|
|
561
|
+
mutation: (_StoreModalUnifiedCheckoutCompleteOrderMutation2.default.hash && _StoreModalUnifiedCheckoutCompleteOrderMutation2.default.hash !== "ea880419670573334e55529f454f8026" && console.error("The definition of 'StoreModalUnifiedCheckoutCompleteOrderMutation' appears to have changed. Run `relay-compiler` to update the generated files to receive the expected data."), _StoreModalUnifiedCheckoutCompleteOrderMutation2.default),
|
|
562
|
+
variables: {},
|
|
563
|
+
onCompleted: (_response, errors) => {
|
|
564
|
+
if (errors && errors.length > 0) {
|
|
565
|
+
setCompleting(false);
|
|
566
|
+
setError(errors[0].message);
|
|
567
|
+
return;
|
|
568
|
+
}
|
|
569
|
+
window.location.href = order.completeUrl;
|
|
570
|
+
}
|
|
571
|
+
});
|
|
572
|
+
return;
|
|
573
|
+
}
|
|
574
|
+
if (!stripe || !elements) return;
|
|
575
|
+
stripe?.confirmPayment({
|
|
576
|
+
elements,
|
|
577
|
+
confirmParams: {
|
|
578
|
+
return_url: order.completeUrl,
|
|
579
|
+
payment_method_data: {
|
|
580
|
+
billing_details: {
|
|
581
|
+
email: billingIdentity.email,
|
|
582
|
+
name: billingIdentity.name,
|
|
583
|
+
phone: billingIdentity.phone,
|
|
584
|
+
address: {
|
|
585
|
+
line1: billingIdentity.street?.split(/\n/)[0],
|
|
586
|
+
line2: billingIdentity.street?.split(/\n/)[1] ?? '',
|
|
587
|
+
city: billingIdentity.locality ?? '',
|
|
588
|
+
state: billingIdentity.administrativeArea ?? '',
|
|
589
|
+
country: billingIdentity.country,
|
|
590
|
+
postal_code: billingIdentity.zip ?? ''
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
}).then(result => {
|
|
596
|
+
if ('error' in result) {
|
|
597
|
+
setCompleting(false);
|
|
598
|
+
setError(result.error.message ?? 'Payment failed. Please try another payment method.');
|
|
599
|
+
}
|
|
600
|
+
}).catch(error => {
|
|
601
|
+
console.log(error);
|
|
602
|
+
setCompleting(false);
|
|
603
|
+
});
|
|
604
|
+
};
|
|
605
|
+
|
|
606
|
+
// Save both licensee (if shown) and billing info before processing payment
|
|
607
|
+
const orderInput = {
|
|
608
|
+
billingIdentity
|
|
609
|
+
};
|
|
610
|
+
if (showLicenseeSection) {
|
|
611
|
+
orderInput.licenseeIdentity = licenseeIdentity;
|
|
612
|
+
}
|
|
613
|
+
updateOrder({
|
|
614
|
+
input: orderInput
|
|
615
|
+
}, () => {
|
|
616
|
+
processPayment();
|
|
617
|
+
}, () => {
|
|
618
|
+
setCompleting(false);
|
|
619
|
+
});
|
|
620
|
+
};
|
|
621
|
+
const taxSystem = viewer.settings.taxSystem;
|
|
622
|
+
const canUseEmbeddedCheckout = taxSystem === 'stripe';
|
|
623
|
+
const showBillingSection = !canUseEmbeddedCheckout && order.customer;
|
|
624
|
+
|
|
625
|
+
// billing info will be handled by embedded checkout
|
|
626
|
+
const showCheckoutButton = canUseEmbeddedCheckout && order.customer;
|
|
627
|
+
const zeroOrder = order.canCompleteWithCoupon;
|
|
628
|
+
const showPaymentSection = !canUseEmbeddedCheckout && order.customer;
|
|
629
|
+
const billingComplete = IDENTITY_REQUIRED_FIELDS.every(key => Boolean(billingIdentity[key]));
|
|
630
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(EditableSection, {
|
|
631
|
+
editing: editing === 'customer',
|
|
632
|
+
disabled: false,
|
|
633
|
+
onEdit: () => setEditing('customer'),
|
|
634
|
+
onSubmit: handleCustomerSubmit,
|
|
635
|
+
disableSubmit: false
|
|
636
|
+
}, {
|
|
637
|
+
save: canUseEmbeddedCheckout ? order.customer ? 'Save' : 'Continue' : 'Checkout',
|
|
638
|
+
show: /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("h3", {
|
|
639
|
+
className: "store-modal__cart__checkout-section-title"
|
|
640
|
+
}, "Contact information"), order.customer ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, order.customer.name, /*#__PURE__*/_react.default.createElement("br", null), order.customer.email) : 'Loading...'),
|
|
641
|
+
edit: /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h3", {
|
|
642
|
+
className: "store-modal__cart__checkout-section-title"
|
|
643
|
+
}, "Contact information"), /*#__PURE__*/_react.default.createElement(_CustomerFields.default, {
|
|
644
|
+
value: customer,
|
|
645
|
+
onChange: handleCustomerChange,
|
|
646
|
+
optInLabel: viewer.settings?.newsletterOptInLabel,
|
|
647
|
+
errors: customerErrorsObject
|
|
648
|
+
}), recaptchaEnabled && recaptchaSiteKey && /*#__PURE__*/_react.default.createElement(_reactGoogleRecaptcha.default, {
|
|
649
|
+
ref: recaptchaRef,
|
|
650
|
+
sitekey: recaptchaSiteKey,
|
|
651
|
+
size: "invisible",
|
|
652
|
+
onChange: handleRecaptchaChange,
|
|
653
|
+
onExpired: handleRecaptchaExpired
|
|
654
|
+
}))
|
|
655
|
+
}), order.customer && !hasCountryMismatch ? /*#__PURE__*/_react.default.createElement(_StoreModalLicenseeIsBillingIdentityElement.default, {
|
|
656
|
+
disabled: false,
|
|
657
|
+
value: order.licenseeIsBillingIdentity ?? false,
|
|
658
|
+
onChange: handleLicenseeIsBillingIdentityChange
|
|
659
|
+
}, {
|
|
660
|
+
label: /*#__PURE__*/_react.default.createElement("div", {
|
|
661
|
+
dangerouslySetInnerHTML: {
|
|
662
|
+
__html: viewer.settings?.storeModalSelectLicenseeLabel ?? ''
|
|
663
|
+
}
|
|
664
|
+
})
|
|
665
|
+
}) : null, showLicenseeSection ? /*#__PURE__*/_react.default.createElement("div", {
|
|
666
|
+
className: "store-modal__cart__checkout-section"
|
|
667
|
+
}, /*#__PURE__*/_react.default.createElement("h3", {
|
|
668
|
+
className: "store-modal__cart__checkout-section-title"
|
|
669
|
+
}, hasCountryMismatch ? 'Licensee information' : 'Licensee information (your client)'), /*#__PURE__*/_react.default.createElement("div", {
|
|
670
|
+
className: "store-modal__cart__identity-fields"
|
|
671
|
+
}, /*#__PURE__*/_react.default.createElement(_AddressFields.default, {
|
|
672
|
+
viewer: viewer,
|
|
673
|
+
value: licenseeIdentity,
|
|
674
|
+
onChange: handleLicenseeChange,
|
|
675
|
+
errorsObject: errorsObject?.licenseeIdentity,
|
|
676
|
+
identityType: "licensee"
|
|
677
|
+
}))) : null, showBillingSection ? /*#__PURE__*/_react.default.createElement("div", {
|
|
678
|
+
className: "store-modal__cart__checkout-section",
|
|
679
|
+
"data-disabled": !order.customer
|
|
680
|
+
}, /*#__PURE__*/_react.default.createElement("h3", {
|
|
681
|
+
className: "store-modal__cart__checkout-section-title"
|
|
682
|
+
}, "Billing information"), /*#__PURE__*/_react.default.createElement("div", {
|
|
683
|
+
className: "store-modal__cart__identity-fields"
|
|
684
|
+
}, /*#__PURE__*/_react.default.createElement(_AddressFields.default, {
|
|
685
|
+
viewer: viewer,
|
|
686
|
+
value: billingIdentity,
|
|
687
|
+
onChange: handleBillingChange,
|
|
688
|
+
errorsObject: errorsObject?.billingIdentity,
|
|
689
|
+
identityType: "billing"
|
|
690
|
+
}))) : null, showCheckoutButton ? /*#__PURE__*/_react.default.createElement("div", {
|
|
691
|
+
className: "store-modal__cart__checkout-section",
|
|
692
|
+
"data-disabled": false
|
|
693
|
+
}, /*#__PURE__*/_react.default.createElement("button", {
|
|
694
|
+
type: "button",
|
|
695
|
+
className: "store-modal__cart__button",
|
|
696
|
+
onClick: handleCheckout,
|
|
697
|
+
disabled: checkingOut
|
|
698
|
+
}, checkingOut ? 'Submitting...' : 'Checkout')) : null, showPaymentSection ? /*#__PURE__*/_react.default.createElement("div", {
|
|
699
|
+
className: "store-modal__cart__checkout-section",
|
|
700
|
+
"data-disabled": false
|
|
701
|
+
}, /*#__PURE__*/_react.default.createElement("form", {
|
|
702
|
+
onSubmit: handleComplete
|
|
703
|
+
}, !zeroOrder && order.stripePaymentIntent?.clientSecret && /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h3", {
|
|
704
|
+
className: "store-modal__cart__checkout-section-title"
|
|
705
|
+
}, "Payment information", /*#__PURE__*/_react.default.createElement("span", {
|
|
706
|
+
className: "store-modal__cart__checkout-section-subtitle"
|
|
707
|
+
}, /*#__PURE__*/_react.default.createElement("a", {
|
|
708
|
+
href: "https://stripe.com",
|
|
709
|
+
target: "_blank",
|
|
710
|
+
rel: "noopener"
|
|
711
|
+
}, "Powered by ", /*#__PURE__*/_react.default.createElement(_StripeLogo.default, null)))), /*#__PURE__*/_react.default.createElement("div", {
|
|
712
|
+
className: "store-modal__cart__payment"
|
|
713
|
+
}, /*#__PURE__*/_react.default.createElement(Sentry.ErrorBoundary, {
|
|
714
|
+
fallback: /*#__PURE__*/_react.default.createElement("div", null, "Something went wrong")
|
|
715
|
+
}, /*#__PURE__*/_react.default.createElement(_reactStripeJs.PaymentElement, {
|
|
716
|
+
options: {
|
|
717
|
+
layout: {
|
|
718
|
+
type: 'tabs',
|
|
719
|
+
defaultCollapsed: false,
|
|
720
|
+
radios: true,
|
|
721
|
+
spacedAccordionItems: true
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
})))), error && /*#__PURE__*/_react.default.createElement("div", {
|
|
725
|
+
className: "store-modal__cart__error"
|
|
726
|
+
}, error), /*#__PURE__*/_react.default.createElement("div", {
|
|
727
|
+
className: "store-modal__cart__agreement"
|
|
728
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
729
|
+
className: "checkbox"
|
|
730
|
+
}, /*#__PURE__*/_react.default.createElement("input", {
|
|
731
|
+
type: "checkbox",
|
|
732
|
+
id: "eula-agreement",
|
|
733
|
+
checked: acceptedEULA,
|
|
734
|
+
onChange: event => setAcceptedEULA(event.target.checked)
|
|
735
|
+
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
736
|
+
className: "checkbox__icon"
|
|
737
|
+
}, config.checkboxStyle === 'check' ? /*#__PURE__*/_react.default.createElement(_Icons.Check, null) : /*#__PURE__*/_react.default.createElement(_Icons.X, null))), /*#__PURE__*/_react.default.createElement("label", {
|
|
738
|
+
htmlFor: "eula-agreement"
|
|
739
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
740
|
+
dangerouslySetInnerHTML: {
|
|
741
|
+
__html: viewer.settings?.eulaAgreementLabel ?? ''
|
|
742
|
+
}
|
|
743
|
+
}))), /*#__PURE__*/_react.default.createElement("button", {
|
|
744
|
+
type: "submit",
|
|
745
|
+
className: "store-modal__cart__button",
|
|
746
|
+
disabled: completing || !acceptedEULA
|
|
747
|
+
}, completing ? 'Submitting...' : zeroOrder ? 'Complete order' : /*#__PURE__*/_react.default.createElement("span", null, "Pay", ' ', order.stripePaymentIntent?.amount && order.stripePaymentIntent?.currency ? /*#__PURE__*/_react.default.createElement(_Price.Price, {
|
|
748
|
+
price: {
|
|
749
|
+
amount: order.stripePaymentIntent.amount,
|
|
750
|
+
currency: order.stripePaymentIntent.currency
|
|
751
|
+
}
|
|
752
|
+
}) : null)))) : null);
|
|
753
|
+
}
|