@foxy.io/elements 1.27.0-beta.6 → 1.27.0-beta.8
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/dist/cdn/foxy-access-recovery-form.js +1 -1
- package/dist/cdn/foxy-address-card.js +5 -5
- package/dist/cdn/foxy-address-form.js +1 -1
- package/dist/cdn/foxy-admin-subscription-card.js +1 -1
- package/dist/cdn/foxy-api-browser.js +2 -2
- package/dist/cdn/foxy-applied-coupon-code-card.js +1 -1
- package/dist/cdn/foxy-applied-coupon-code-form.js +1 -1
- package/dist/cdn/foxy-applied-tax-card.js +1 -1
- package/dist/cdn/foxy-attribute-card.js +1 -1
- package/dist/cdn/foxy-attribute-form.js +1 -1
- package/dist/cdn/foxy-billing-address-card.js +1 -1
- package/dist/cdn/foxy-cancellation-form.js +1 -1
- package/dist/cdn/foxy-cart-card.js +1 -1
- package/dist/cdn/foxy-cart-form.js +1 -1
- package/dist/cdn/foxy-client-card.js +1 -1
- package/dist/cdn/foxy-client-form.js +1 -1
- package/dist/cdn/foxy-collection-page.js +1 -1
- package/dist/cdn/foxy-collection-pages.js +1 -1
- package/dist/cdn/foxy-copy-to-clipboard.js +1 -1
- package/dist/cdn/foxy-coupon-card.js +1 -1
- package/dist/cdn/foxy-coupon-code-card.js +1 -1
- package/dist/cdn/foxy-coupon-code-form.js +1 -1
- package/dist/cdn/foxy-coupon-codes-form.js +1 -1
- package/dist/cdn/foxy-coupon-detail-card.js +1 -1
- package/dist/cdn/foxy-coupon-form.js +1 -1
- package/dist/cdn/foxy-custom-field-card.js +1 -1
- package/dist/cdn/foxy-custom-field-form.js +1 -1
- package/dist/cdn/foxy-customer-api.js +1 -1
- package/dist/cdn/foxy-customer-card.js +1 -1
- package/dist/cdn/foxy-customer-form.js +1 -1
- package/dist/cdn/foxy-customer-portal-settings-form.js +1 -1
- package/dist/cdn/foxy-customer-portal-settings.js +1 -1
- package/dist/cdn/foxy-customer-portal.js +13 -13
- package/dist/cdn/foxy-customer.js +6 -6
- package/dist/cdn/foxy-customers-table.js +1 -1
- package/dist/cdn/foxy-discount-builder.js +1 -1
- package/dist/cdn/foxy-discount-card.js +1 -1
- package/dist/cdn/foxy-discount-detail-card.js +1 -1
- package/dist/cdn/foxy-donation.js +1 -1
- package/dist/cdn/foxy-downloadable-card.js +1 -1
- package/dist/cdn/foxy-downloadable-form.js +7 -7
- package/dist/cdn/foxy-email-template-card.js +1 -1
- package/dist/cdn/foxy-email-template-form.js +1 -1
- package/dist/cdn/foxy-error-entry-card.js +1 -1
- package/dist/cdn/foxy-filter-attribute-card.js +1 -1
- package/dist/cdn/foxy-filter-attribute-form.js +1 -1
- package/dist/cdn/foxy-form-dialog.js +1 -1
- package/dist/cdn/foxy-generate-codes-form.js +1 -1
- package/dist/cdn/foxy-gift-card-card.js +1 -1
- package/dist/cdn/foxy-gift-card-code-card.js +1 -0
- package/dist/cdn/foxy-gift-card-code-form.js +1 -1
- package/dist/cdn/foxy-gift-card-code-log-card.js +1 -1
- package/dist/cdn/foxy-gift-card-codes-form.js +1 -1
- package/dist/cdn/foxy-gift-card-form.js +1 -1
- package/dist/cdn/foxy-i18n-editor.js +2 -2
- package/dist/cdn/foxy-i18n.js +1 -1
- package/dist/cdn/foxy-integration-card.js +1 -1
- package/dist/cdn/foxy-integration-form.js +1 -1
- package/dist/cdn/foxy-item-card.js +1 -1
- package/dist/cdn/foxy-item-category-card.js +1 -1
- package/dist/cdn/foxy-item-category-form.js +1 -1
- package/dist/cdn/foxy-item-form.js +1 -1
- package/dist/cdn/foxy-item-option-card.js +1 -1
- package/dist/cdn/foxy-item-option-form.js +1 -1
- package/dist/cdn/foxy-items-form.js +1 -1
- package/dist/cdn/foxy-native-integration-card.js +1 -1
- package/dist/cdn/foxy-native-integration-form.js +1 -1
- package/dist/cdn/foxy-nucleon-element.js +1 -1
- package/dist/cdn/foxy-pagination.js +1 -1
- package/dist/cdn/foxy-passkey-card.js +1 -1
- package/dist/cdn/foxy-passkey-form.js +1 -1
- package/dist/cdn/foxy-payment-card-embed-element.js +1 -0
- package/dist/cdn/foxy-payment-card.js +1 -1
- package/dist/cdn/foxy-payment-method-card.js +1 -1
- package/dist/cdn/foxy-payments-api-fraud-protection-card.js +1 -1
- package/dist/cdn/foxy-payments-api-fraud-protection-form.js +1 -1
- package/dist/cdn/foxy-payments-api-payment-method-card.js +1 -1
- package/dist/cdn/foxy-payments-api-payment-method-form.js +1 -1
- package/dist/cdn/foxy-payments-api-payment-preset-card.js +1 -1
- package/dist/cdn/foxy-payments-api-payment-preset-form.js +1 -1
- package/dist/cdn/foxy-payments-api.js +1 -1
- package/dist/cdn/foxy-query-builder.js +64 -1
- package/dist/cdn/foxy-report-form.js +2 -2
- package/dist/cdn/foxy-reports-table.js +3 -3
- package/dist/cdn/foxy-shipment-card.js +1 -1
- package/dist/cdn/foxy-shipping-method-card.js +1 -1
- package/dist/cdn/foxy-sign-in-form.js +1 -1
- package/dist/cdn/foxy-spinner.js +1 -1
- package/dist/cdn/foxy-store-card.js +1 -1
- package/dist/cdn/foxy-store-form.js +1 -1
- package/dist/cdn/foxy-store-shipping-method-form.js +1 -1
- package/dist/cdn/foxy-subscription-card.js +1 -1
- package/dist/cdn/foxy-subscription-form.js +1 -1
- package/dist/cdn/foxy-subscription-settings-form.js +1 -1
- package/dist/cdn/foxy-subscriptions-table.js +1 -1
- package/dist/cdn/foxy-table.js +1 -1
- package/dist/cdn/foxy-tax-card.js +1 -1
- package/dist/cdn/foxy-tax-form.js +1 -1
- package/dist/cdn/foxy-template-config-form.js +1 -1
- package/dist/cdn/foxy-template-form.js +1 -1
- package/dist/cdn/foxy-template-set-card.js +1 -1
- package/dist/cdn/foxy-template-set-form.js +1 -1
- package/dist/cdn/foxy-transaction-card.js +1 -1
- package/dist/cdn/foxy-transaction.js +1 -1
- package/dist/cdn/foxy-transactions-table.js +1 -1
- package/dist/cdn/foxy-update-payment-method-form.js +1 -0
- package/dist/cdn/foxy-user-card.js +1 -1
- package/dist/cdn/foxy-user-form.js +1 -1
- package/dist/cdn/foxy-users-table.js +1 -1
- package/dist/cdn/foxy-webhook-card.js +1 -1
- package/dist/cdn/foxy-webhook-form.js +1 -1
- package/dist/cdn/foxy-webhook-log-card.js +1 -1
- package/dist/cdn/foxy-webhook-status-card.js +1 -1
- package/dist/cdn/{shared-205721a3.js → shared-0062cab1.js} +1 -1
- package/dist/cdn/{shared-c5f57aa8.js → shared-036b25a3.js} +1 -1
- package/dist/cdn/shared-04d8a434.js +1 -0
- package/dist/cdn/{shared-065dbdf6.js → shared-0aa511d0.js} +1 -1
- package/dist/cdn/shared-102dfbe0.js +1 -0
- package/dist/cdn/shared-12e531b8.js +1 -0
- package/dist/cdn/{shared-f7a5b12a.js → shared-15fe01fe.js} +1 -1
- package/dist/cdn/{shared-cc723108.js → shared-1ab8b12e.js} +1 -1
- package/dist/cdn/{shared-f2a8fb36.js → shared-1d12db26.js} +1 -1
- package/dist/cdn/{shared-0e5ea9cf.js → shared-25fc0ceb.js} +1 -1
- package/dist/cdn/shared-272e7269.js +1 -0
- package/dist/cdn/{shared-8def6325.js → shared-2808f43a.js} +1 -1
- package/dist/cdn/{shared-61f67b16.js → shared-292585a0.js} +1 -1
- package/dist/cdn/shared-2e2d45c4.js +1 -0
- package/dist/cdn/{shared-48b76c74.js → shared-2f2b5a28.js} +1 -1
- package/dist/cdn/{shared-bfa30d93.js → shared-30143820.js} +1 -1
- package/dist/cdn/{shared-4329ffa1.js → shared-328e5fdc.js} +1 -1
- package/dist/cdn/{shared-80eb1fee.js → shared-337f2fe9.js} +1 -1
- package/dist/cdn/{shared-039de1fd.js → shared-34f4330c.js} +1 -1
- package/dist/cdn/shared-37391934.js +1 -0
- package/dist/cdn/shared-39fc8fed.js +1 -0
- package/dist/cdn/{shared-11014aad.js → shared-3c58ddf1.js} +1 -1
- package/dist/cdn/{shared-589e5d06.js → shared-40cbbbae.js} +1 -1
- package/dist/cdn/{shared-da7a0bfb.js → shared-4128d453.js} +1 -1
- package/dist/cdn/{shared-850e2ae1.js → shared-41e9ef02.js} +2 -2
- package/dist/cdn/{shared-f03dacf5.js → shared-432d66f4.js} +1 -1
- package/dist/cdn/{shared-6e977271.js → shared-4885670b.js} +1 -1
- package/dist/cdn/{shared-5c542149.js → shared-550608b8.js} +1 -1
- package/dist/cdn/shared-5758adbc.js +1 -0
- package/dist/cdn/{shared-bb08b5ce.js → shared-5a18985c.js} +2 -2
- package/dist/cdn/{shared-dccfe5e7.js → shared-5e9395ec.js} +1 -1
- package/dist/cdn/{shared-845f8bf1.js → shared-62f3fc5a.js} +1 -1
- package/dist/cdn/{shared-fd041b18.js → shared-66a515e3.js} +1 -1
- package/dist/cdn/shared-66d2a0d7.js +1 -0
- package/dist/cdn/{shared-b81aa01c.js → shared-68aebcc4.js} +1 -1
- package/dist/cdn/{shared-1d6beb48.js → shared-6dfb57b1.js} +1 -1
- package/dist/cdn/{shared-85979316.js → shared-739a8fe4.js} +1 -1
- package/dist/cdn/{shared-e966f1ef.js → shared-7535b32d.js} +1 -1
- package/dist/cdn/{shared-931db653.js → shared-7c819ebc.js} +1 -1
- package/dist/cdn/{shared-9a5da74d.js → shared-84215d13.js} +1 -1
- package/dist/cdn/{shared-b30f9b10.js → shared-8452c492.js} +1 -1
- package/dist/cdn/{shared-5f09205d.js → shared-8540c2c7.js} +1 -1
- package/dist/cdn/shared-8874ec69.js +1 -0
- package/dist/cdn/{shared-208e37af.js → shared-8c5b4c81.js} +1 -1
- package/dist/cdn/{shared-5dbb9630.js → shared-8d7e2e2c.js} +1 -1
- package/dist/cdn/{shared-ca15d510.js → shared-8e59a71e.js} +1 -1
- package/dist/cdn/shared-8e75c372.js +1 -0
- package/dist/cdn/shared-90ddf541.js +1 -0
- package/dist/cdn/{shared-e35297c9.js → shared-91009494.js} +1 -1
- package/dist/cdn/shared-9f5c636a.js +1 -0
- package/dist/cdn/{shared-fda63db8.js → shared-a30fcaf6.js} +4 -4
- package/dist/cdn/shared-a33be18f.js +6 -0
- package/dist/cdn/{shared-7e201abd.js → shared-a911ab73.js} +1 -1
- package/dist/cdn/{shared-fe7b3ed2.js → shared-b1c7300a.js} +1 -1
- package/dist/cdn/{shared-bc95d87e.js → shared-b2ce84fa.js} +1 -1
- package/dist/cdn/{shared-1a9e80fa.js → shared-b55f1de3.js} +1 -1
- package/dist/cdn/{shared-8cd0f36d.js → shared-b6c1aa47.js} +1 -1
- package/dist/cdn/{shared-fb8c09b8.js → shared-b73fd633.js} +1 -1
- package/dist/cdn/{shared-a0cbfb2f.js → shared-b99daf13.js} +1 -1
- package/dist/cdn/{shared-1d257548.js → shared-bac00622.js} +1 -1
- package/dist/cdn/{shared-6af480b8.js → shared-bd99107c.js} +1 -1
- package/dist/cdn/{shared-2c70f0b6.js → shared-c0b1a51d.js} +1 -1
- package/dist/cdn/shared-c5106605.js +1 -0
- package/dist/cdn/{shared-0e8dceb8.js → shared-cb732375.js} +1 -1
- package/dist/cdn/shared-cd96ff03.js +1 -0
- package/dist/cdn/{shared-93812e51.js → shared-da2a367a.js} +1 -1
- package/dist/cdn/{shared-a73e7be4.js → shared-e075ca81.js} +1 -1
- package/dist/cdn/{shared-d04c2e0c.js → shared-e10b5dca.js} +1 -1
- package/dist/cdn/{shared-cab2aa63.js → shared-e2cbc382.js} +1 -1
- package/dist/cdn/{shared-bba8ae80.js → shared-e4403332.js} +1 -1
- package/dist/cdn/{shared-befe135a.js → shared-e5f6ca48.js} +1 -1
- package/dist/cdn/{shared-56addb06.js → shared-e989e47e.js} +2 -2
- package/dist/cdn/{shared-683145e5.js → shared-ecb7a183.js} +1 -1
- package/dist/cdn/{shared-e48fbf50.js → shared-f090c63a.js} +1 -1
- package/dist/cdn/{shared-4877ed05.js → shared-f14856e0.js} +1 -1
- package/dist/cdn/{shared-abf72e2f.js → shared-f2721fae.js} +1 -1
- package/dist/cdn/{shared-d4322854.js → shared-f548d023.js} +1 -1
- package/dist/cdn/{shared-724e9a20.js → shared-fd95cd52.js} +1 -1
- package/dist/cdn/translations/customer/en.json +149 -2
- package/dist/cdn/translations/customer-portal/README.md +4 -0
- package/dist/cdn/translations/customer-portal/de.json +1063 -113
- package/dist/cdn/translations/customer-portal/en.json +151 -5
- package/dist/cdn/translations/customer-portal/es.json +1072 -123
- package/dist/cdn/translations/customer-portal/fr.json +1084 -134
- package/dist/cdn/translations/customer-portal/nl.json +1085 -135
- package/dist/cdn/translations/customer-portal/pl.json +1092 -142
- package/dist/cdn/translations/customer-portal/sv.json +1173 -0
- package/dist/cdn/translations/customer-portal/zh-hk.json +1110 -160
- package/dist/cdn/translations/gift-card-code-card/en.json +10 -0
- package/dist/cdn/translations/gift-card-code-form/en.json +86 -0
- package/dist/cdn/translations/gift-card-form/en.json +638 -397
- package/dist/cdn/translations/payment-card-embed/en.json +48 -0
- package/dist/cdn/translations/payment-method-card/en.json +149 -2
- package/dist/cdn/translations/payments-api-payment-method-form/en.json +2 -2
- package/dist/cdn/translations/update-payment-method-form/en.json +140 -0
- package/dist/elements/internal/InternalAsyncListControl/InternalAsyncListControl.js +15 -7
- package/dist/elements/internal/InternalAsyncListControl/InternalAsyncListControl.js.map +1 -1
- package/dist/elements/internal/InternalBulkAddActionControl/InternalBulkAddActionControl.d.ts +10 -0
- package/dist/elements/{public/CouponForm/internal/InternalCouponFormBulkAddControl/InternalCouponFormBulkAddControl.js → internal/InternalBulkAddActionControl/InternalBulkAddActionControl.js} +9 -9
- package/dist/elements/internal/InternalBulkAddActionControl/InternalBulkAddActionControl.js.map +1 -0
- package/dist/elements/internal/InternalBulkAddActionControl/index.d.ts +6 -0
- package/dist/elements/internal/InternalBulkAddActionControl/index.js +8 -0
- package/dist/elements/internal/InternalBulkAddActionControl/index.js.map +1 -0
- package/dist/elements/internal/InternalForm/InternalForm.js +2 -0
- package/dist/elements/internal/InternalForm/InternalForm.js.map +1 -1
- package/dist/elements/internal/InternalResourcePickerControl/InternalResourcePickerControl.d.ts +16 -0
- package/dist/elements/internal/InternalResourcePickerControl/InternalResourcePickerControl.js +167 -0
- package/dist/elements/internal/InternalResourcePickerControl/InternalResourcePickerControl.js.map +1 -0
- package/dist/elements/internal/InternalResourcePickerControl/InternalResourcePickerControlForm.d.ts +14 -0
- package/dist/elements/internal/InternalResourcePickerControl/InternalResourcePickerControlForm.js +40 -0
- package/dist/elements/internal/InternalResourcePickerControl/InternalResourcePickerControlForm.js.map +1 -0
- package/dist/elements/internal/InternalResourcePickerControl/index.d.ts +6 -0
- package/dist/elements/internal/InternalResourcePickerControl/index.js +10 -0
- package/dist/elements/internal/InternalResourcePickerControl/index.js.map +1 -0
- package/dist/elements/public/CouponForm/CouponForm.js +6 -4
- package/dist/elements/public/CouponForm/CouponForm.js.map +1 -1
- package/dist/elements/public/CouponForm/index.d.ts +1 -1
- package/dist/elements/public/CouponForm/index.js +1 -1
- package/dist/elements/public/CouponForm/index.js.map +1 -1
- package/dist/elements/public/CouponForm/types.d.ts +1 -10
- package/dist/elements/public/CouponForm/types.js.map +1 -1
- package/dist/elements/public/Customer/Customer.d.ts +5 -0
- package/dist/elements/public/Customer/Customer.js +13 -6
- package/dist/elements/public/Customer/Customer.js.map +1 -1
- package/dist/elements/public/Customer/index.d.ts +1 -0
- package/dist/elements/public/Customer/index.js +1 -0
- package/dist/elements/public/Customer/index.js.map +1 -1
- package/dist/elements/public/CustomerPortal/CustomerPortal.d.ts +14 -0
- package/dist/elements/public/CustomerPortal/CustomerPortal.js +23 -6
- package/dist/elements/public/CustomerPortal/CustomerPortal.js.map +1 -1
- package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedInView.d.ts +1 -0
- package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedInView.js +7 -2
- package/dist/elements/public/CustomerPortal/InternalCustomerPortalLoggedInView.js.map +1 -1
- package/dist/elements/public/CustomerPortalSettingsForm/CustomerPortalSettingsForm.js +0 -6
- package/dist/elements/public/CustomerPortalSettingsForm/CustomerPortalSettingsForm.js.map +1 -1
- package/dist/elements/public/DownloadableForm/DownloadableForm.js.map +1 -1
- package/dist/elements/public/FormDialog/FormDialog.d.ts +2 -0
- package/dist/elements/public/FormDialog/FormDialog.js +8 -4
- package/dist/elements/public/FormDialog/FormDialog.js.map +1 -1
- package/dist/elements/public/GiftCardCodeCard/GiftCardCodeCard.d.ts +21 -0
- package/dist/elements/public/GiftCardCodeCard/GiftCardCodeCard.js +78 -0
- package/dist/elements/public/GiftCardCodeCard/GiftCardCodeCard.js.map +1 -0
- package/dist/elements/public/GiftCardCodeCard/index.d.ts +5 -0
- package/dist/elements/public/GiftCardCodeCard/index.js +7 -0
- package/dist/elements/public/GiftCardCodeCard/index.js.map +1 -0
- package/dist/elements/public/GiftCardCodeCard/types.d.ts +3 -0
- package/dist/elements/public/GiftCardCodeCard/types.js +2 -0
- package/dist/elements/public/GiftCardCodeCard/types.js.map +1 -0
- package/dist/elements/public/GiftCardCodeForm/GiftCardCodeForm.d.ts +12 -0
- package/dist/elements/public/GiftCardCodeForm/GiftCardCodeForm.js +69 -4
- package/dist/elements/public/GiftCardCodeForm/GiftCardCodeForm.js.map +1 -1
- package/dist/elements/public/GiftCardCodeForm/index.d.ts +2 -0
- package/dist/elements/public/GiftCardCodeForm/index.js +2 -0
- package/dist/elements/public/GiftCardCodeForm/index.js.map +1 -1
- package/dist/elements/public/GiftCardCodeForm/types.d.ts +5 -1
- package/dist/elements/public/GiftCardCodeForm/types.js.map +1 -1
- package/dist/elements/public/GiftCardForm/GiftCardForm.d.ts +22 -28
- package/dist/elements/public/GiftCardForm/GiftCardForm.js +183 -633
- package/dist/elements/public/GiftCardForm/GiftCardForm.js.map +1 -1
- package/dist/elements/public/GiftCardForm/index.d.ts +13 -12
- package/dist/elements/public/GiftCardForm/index.js +13 -12
- package/dist/elements/public/GiftCardForm/index.js.map +1 -1
- package/dist/elements/public/GiftCardForm/types.d.ts +2 -27
- package/dist/elements/public/GiftCardForm/types.js.map +1 -1
- package/dist/elements/public/NucleonElement/NucleonElement.js +7 -1
- package/dist/elements/public/NucleonElement/NucleonElement.js.map +1 -1
- package/dist/elements/public/NucleonElement/UpdateEvent.d.ts +3 -1
- package/dist/elements/public/NucleonElement/UpdateEvent.js +2 -0
- package/dist/elements/public/NucleonElement/UpdateEvent.js.map +1 -1
- package/dist/elements/public/PaymentCardEmbedElement/PaymentCardEmbedElement.d.ts +47 -0
- package/dist/elements/public/PaymentCardEmbedElement/PaymentCardEmbedElement.js +198 -0
- package/dist/elements/public/PaymentCardEmbedElement/PaymentCardEmbedElement.js.map +1 -0
- package/dist/elements/public/PaymentCardEmbedElement/index.d.ts +4 -0
- package/dist/elements/public/PaymentCardEmbedElement/index.js +6 -0
- package/dist/elements/public/PaymentCardEmbedElement/index.js.map +1 -0
- package/dist/elements/public/PaymentMethodCard/PaymentMethodCard.d.ts +14 -4
- package/dist/elements/public/PaymentMethodCard/PaymentMethodCard.js +79 -10
- package/dist/elements/public/PaymentMethodCard/PaymentMethodCard.js.map +1 -1
- package/dist/elements/public/PaymentMethodCard/index.d.ts +2 -0
- package/dist/elements/public/PaymentMethodCard/index.js +2 -0
- package/dist/elements/public/PaymentMethodCard/index.js.map +1 -1
- package/dist/elements/public/PaymentsApiPaymentMethodForm/PaymentsApiPaymentMethodForm.js +66 -56
- package/dist/elements/public/PaymentsApiPaymentMethodForm/PaymentsApiPaymentMethodForm.js.map +1 -1
- package/dist/elements/public/PaymentsApiPaymentPresetForm/PaymentsApiPaymentPresetForm.js +1 -0
- package/dist/elements/public/PaymentsApiPaymentPresetForm/PaymentsApiPaymentPresetForm.js.map +1 -1
- package/dist/elements/public/SubscriptionForm/SubscriptionForm.js.map +1 -1
- package/dist/elements/public/UpdatePaymentMethodForm/UpdatePaymentMethodForm.d.ts +37 -0
- package/dist/elements/public/UpdatePaymentMethodForm/UpdatePaymentMethodForm.js +142 -0
- package/dist/elements/public/UpdatePaymentMethodForm/UpdatePaymentMethodForm.js.map +1 -0
- package/dist/elements/public/UpdatePaymentMethodForm/index.d.ts +8 -0
- package/dist/elements/public/UpdatePaymentMethodForm/index.js +10 -0
- package/dist/elements/public/UpdatePaymentMethodForm/index.js.map +1 -0
- package/dist/elements/public/{CouponForm/internal/InternalCouponFormBulkAddControl/InternalCouponFormBulkAddControl.d.ts → UpdatePaymentMethodForm/internal/InternalUpdatePaymentMethodFormCcTokenControl/InternalUpdatePaymentMethodFormCcTokenControl.d.ts} +3 -3
- package/dist/elements/public/UpdatePaymentMethodForm/internal/InternalUpdatePaymentMethodFormCcTokenControl/InternalUpdatePaymentMethodFormCcTokenControl.js +46 -0
- package/dist/elements/public/UpdatePaymentMethodForm/internal/InternalUpdatePaymentMethodFormCcTokenControl/InternalUpdatePaymentMethodFormCcTokenControl.js.map +1 -0
- package/dist/elements/public/UpdatePaymentMethodForm/internal/InternalUpdatePaymentMethodFormCcTokenControl/index.d.ts +6 -0
- package/dist/elements/public/UpdatePaymentMethodForm/internal/InternalUpdatePaymentMethodFormCcTokenControl/index.js +8 -0
- package/dist/elements/public/UpdatePaymentMethodForm/internal/InternalUpdatePaymentMethodFormCcTokenControl/index.js.map +1 -0
- package/dist/elements/public/UpdatePaymentMethodForm/types.d.ts +13 -0
- package/dist/elements/public/UpdatePaymentMethodForm/types.js +2 -0
- package/dist/elements/public/UpdatePaymentMethodForm/types.js.map +1 -0
- package/dist/elements/public/index.d.ts +3 -0
- package/dist/elements/public/index.defined.d.ts +3 -0
- package/dist/elements/public/index.defined.js +3 -0
- package/dist/elements/public/index.defined.js.map +1 -1
- package/dist/elements/public/index.js +3 -0
- package/dist/elements/public/index.js.map +1 -1
- package/dist/mixins/themeable.js +45 -0
- package/dist/mixins/themeable.js.map +1 -1
- package/dist/mixins/translatable.js +89 -79
- package/dist/mixins/translatable.js.map +1 -1
- package/package.json +2 -2
- package/dist/cdn/shared-03ccfd62.js +0 -1
- package/dist/cdn/shared-07d5e225.js +0 -1
- package/dist/cdn/shared-250e652f.js +0 -1
- package/dist/cdn/shared-29f2468c.js +0 -6
- package/dist/cdn/shared-3ab0306f.js +0 -1
- package/dist/cdn/shared-400240f8.js +0 -1
- package/dist/cdn/shared-5e35c5a5.js +0 -1
- package/dist/cdn/shared-6c4affb9.js +0 -1
- package/dist/cdn/shared-77fd8dae.js +0 -1
- package/dist/cdn/shared-8a04bea3.js +0 -1
- package/dist/cdn/shared-bfeff3bb.js +0 -1
- package/dist/cdn/shared-e07b24ca.js +0 -1
- package/dist/cdn/shared-e84be1c2.js +0 -64
- package/dist/cdn/translations/customer-portal/se.json +0 -223
- package/dist/elements/private/EditableList/EditableList.d.ts +0 -23
- package/dist/elements/private/EditableList/EditableList.js +0 -127
- package/dist/elements/private/EditableList/EditableList.js.map +0 -1
- package/dist/elements/public/CouponForm/internal/InternalCouponFormBulkAddControl/InternalCouponFormBulkAddControl.js.map +0 -1
- package/dist/elements/public/CouponForm/internal/InternalCouponFormBulkAddControl/index.d.ts +0 -6
- package/dist/elements/public/CouponForm/internal/InternalCouponFormBulkAddControl/index.js +0 -8
- package/dist/elements/public/CouponForm/internal/InternalCouponFormBulkAddControl/index.js.map +0 -1
- package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPage.d.ts +0 -20
- package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPage.js +0 -99
- package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPage.js.map +0 -1
- package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPageItem.d.ts +0 -18
- package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPageItem.js +0 -50
- package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPageItem.js.map +0 -1
- package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPageItemContent.d.ts +0 -18
- package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPageItemContent.js +0 -53
- package/dist/elements/public/GiftCardForm/private/CategoryRestrictionsPageItemContent.js.map +0 -1
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { TranslatableMixin } from "../../../mixins/translatable.js";
|
|
2
|
+
import { ConfigurableMixin } from "../../../mixins/configurable.js";
|
|
3
|
+
import { LitElement, html } from 'lit-element';
|
|
4
|
+
import { PaymentCardEmbed } from '@foxy.io/sdk/customer';
|
|
5
|
+
import { InferrableMixin } from "../../../mixins/inferrable.js";
|
|
6
|
+
import { ThemeableMixin } from "../../../mixins/themeable.js";
|
|
7
|
+
import { classMap } from "../../../utils/class-map.js";
|
|
8
|
+
import { set } from 'lodash-es';
|
|
9
|
+
const NS = 'payment-card-embed';
|
|
10
|
+
const Base = ConfigurableMixin(TranslatableMixin(InferrableMixin(ThemeableMixin(LitElement)), NS));
|
|
11
|
+
/**
|
|
12
|
+
* A secure, PCI-compliant element for collecting payment card information with
|
|
13
|
+
* support for Stripe, Square and embedded gateways.
|
|
14
|
+
*
|
|
15
|
+
* @fires CustomEvent - Instance of `CustomEvent` with type `submit`. Dispatched when the user submits the form (not available for Stripe).
|
|
16
|
+
*
|
|
17
|
+
* @element foxy-payment-card-embed
|
|
18
|
+
* @since 1.27.0
|
|
19
|
+
*/
|
|
20
|
+
export class PaymentCardEmbedElement extends Base {
|
|
21
|
+
constructor() {
|
|
22
|
+
super(...arguments);
|
|
23
|
+
/**
|
|
24
|
+
* Full Bank Card Embed URL, e.g. `https://embed.foxy.io/v1.html?template_set_id=123`.
|
|
25
|
+
*
|
|
26
|
+
* The following demo URLs are available:
|
|
27
|
+
* - `https://embed.foxy.io/v1.html?demo=default` (Default form)
|
|
28
|
+
* - `https://embed.foxy.io/v1.html?demo=stripe` (Stripe Card Element)
|
|
29
|
+
* - `https://embed.foxy.io/v1.html?demo=square` (Square Card Element)
|
|
30
|
+
*/
|
|
31
|
+
this.url = null;
|
|
32
|
+
this.__configRefreshInterval = null;
|
|
33
|
+
this.__embed = null;
|
|
34
|
+
this.__ready = false;
|
|
35
|
+
}
|
|
36
|
+
static get properties() {
|
|
37
|
+
return {
|
|
38
|
+
...super.properties,
|
|
39
|
+
__ready: { attribute: false },
|
|
40
|
+
url: {},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
disconnectedCallback() {
|
|
44
|
+
var _a;
|
|
45
|
+
super.disconnectedCallback();
|
|
46
|
+
clearInterval((_a = this.__configRefreshInterval) !== null && _a !== void 0 ? _a : undefined);
|
|
47
|
+
}
|
|
48
|
+
connectedCallback() {
|
|
49
|
+
super.connectedCallback();
|
|
50
|
+
this.__configRefreshInterval = setInterval(() => {
|
|
51
|
+
var _a;
|
|
52
|
+
const config = this.__config;
|
|
53
|
+
if (config)
|
|
54
|
+
(_a = this.__embed) === null || _a === void 0 ? void 0 : _a.configure(config);
|
|
55
|
+
}, 1000);
|
|
56
|
+
}
|
|
57
|
+
/** Tokenizes payment card info. Resolves with a token on success or rejects otherwise. */
|
|
58
|
+
tokenize() {
|
|
59
|
+
var _a, _b;
|
|
60
|
+
return (_b = (_a = this.__embed) === null || _a === void 0 ? void 0 : _a.tokenize()) !== null && _b !== void 0 ? _b : Promise.reject();
|
|
61
|
+
}
|
|
62
|
+
updated(changes) {
|
|
63
|
+
super.updated(changes);
|
|
64
|
+
if (changes.has('hidden') || changes.has('url'))
|
|
65
|
+
this.__setupEmbed();
|
|
66
|
+
}
|
|
67
|
+
render() {
|
|
68
|
+
return html `
|
|
69
|
+
<div class="relative">
|
|
70
|
+
<div
|
|
71
|
+
class=${classMap({ 'transition-opacity relative': true, 'opacity-0': !this.__ready })}
|
|
72
|
+
id="iframe-container"
|
|
73
|
+
></div>
|
|
74
|
+
|
|
75
|
+
<div
|
|
76
|
+
class=${classMap({
|
|
77
|
+
'absolute inset-0 flex items-center justify-center': true,
|
|
78
|
+
'transition-opacity pointer-events-none': true,
|
|
79
|
+
'opacity-0': this.__ready,
|
|
80
|
+
})}
|
|
81
|
+
>
|
|
82
|
+
<foxy-spinner infer="spinner" layout="no-label"></foxy-spinner>
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<div
|
|
86
|
+
class="hidden ml-m mr-s bg-contrast-5 text-contrast-10 h-m w-xs rounded-tr-m rounded-br-s font-lumo text-m leading-xs"
|
|
87
|
+
style="border-top-color: var(--lumo-primary-color); border-bottom-color: var(--lumo-primary-text-color); border-left-color: var(--lumo-primary-color-50pct); border-right-color: var(--lumo-secondary-text-color);"
|
|
88
|
+
id="d1"
|
|
89
|
+
></div>
|
|
90
|
+
|
|
91
|
+
<div
|
|
92
|
+
class="hidden text-s text-disabled"
|
|
93
|
+
style="background-color: var(--lumo-body-text-color); border-top-color: var(--lumo-error-text-color); border-bottom-color: var(--lumo-error-color-10pct); border-left-color: var(--lumo-error-color-50pct);"
|
|
94
|
+
id="d2"
|
|
95
|
+
></div>
|
|
96
|
+
|
|
97
|
+
<div class="hidden text-contrast-50 text-xs bg-base" id="d3"></div>
|
|
98
|
+
</div>
|
|
99
|
+
`;
|
|
100
|
+
}
|
|
101
|
+
/** Clears form fields. */
|
|
102
|
+
clear() {
|
|
103
|
+
var _a;
|
|
104
|
+
(_a = this.__embed) === null || _a === void 0 ? void 0 : _a.clear();
|
|
105
|
+
}
|
|
106
|
+
get __config() {
|
|
107
|
+
const i18nKeys = [
|
|
108
|
+
'stripe.label',
|
|
109
|
+
'stripe.status.idle',
|
|
110
|
+
'stripe.status.busy',
|
|
111
|
+
'stripe.status.fail',
|
|
112
|
+
'square.label',
|
|
113
|
+
'square.status.idle',
|
|
114
|
+
'square.status.busy',
|
|
115
|
+
'square.status.fail',
|
|
116
|
+
'default.cc-number.label',
|
|
117
|
+
'default.cc-number.placeholder',
|
|
118
|
+
'default.cc-number.v8n_required',
|
|
119
|
+
'default.cc-number.v8n_invalid',
|
|
120
|
+
'default.cc-number.v8n_unsupported',
|
|
121
|
+
'default.cc-exp.label',
|
|
122
|
+
'default.cc-exp.placeholder',
|
|
123
|
+
'default.cc-exp.v8n_required',
|
|
124
|
+
'default.cc-exp.v8n_invalid',
|
|
125
|
+
'default.cc-exp.v8n_expired',
|
|
126
|
+
'default.cc-csc.label',
|
|
127
|
+
'default.cc-csc.placeholder',
|
|
128
|
+
'default.cc-csc.v8n_required',
|
|
129
|
+
'default.cc-csc.v8n_invalid',
|
|
130
|
+
'default.status.idle',
|
|
131
|
+
'default.status.busy',
|
|
132
|
+
'default.status.fail',
|
|
133
|
+
'default.status.misconfigured',
|
|
134
|
+
];
|
|
135
|
+
const d1 = this.renderRoot.querySelector('#d1');
|
|
136
|
+
const d2 = this.renderRoot.querySelector('#d2');
|
|
137
|
+
const d3 = this.renderRoot.querySelector('#d3');
|
|
138
|
+
if (!d1 || !d2 || !d3)
|
|
139
|
+
return null;
|
|
140
|
+
const d1Style = getComputedStyle(d1);
|
|
141
|
+
const d2Style = getComputedStyle(d2);
|
|
142
|
+
const d3Style = getComputedStyle(d3);
|
|
143
|
+
const style = {
|
|
144
|
+
'--lumo-space-m': d1Style.marginLeft,
|
|
145
|
+
'--lumo-space-s': d1Style.marginRight,
|
|
146
|
+
'--lumo-contrast-5pct': d1Style.backgroundColor,
|
|
147
|
+
'--lumo-contrast-10pct': d1Style.color,
|
|
148
|
+
'--lumo-contrast-50pct': d3Style.color,
|
|
149
|
+
'--lumo-size-m': d1Style.height,
|
|
150
|
+
'--lumo-size-xs': d1Style.width,
|
|
151
|
+
'--lumo-border-radius-m': d1Style.borderTopRightRadius,
|
|
152
|
+
'--lumo-border-radius-s': d1Style.borderBottomRightRadius,
|
|
153
|
+
'--lumo-font-family': d1Style.fontFamily,
|
|
154
|
+
'--lumo-font-size-m': d1Style.fontSize,
|
|
155
|
+
'--lumo-font-size-s': d2Style.fontSize,
|
|
156
|
+
'--lumo-font-size-xs': d3Style.fontSize,
|
|
157
|
+
'--lumo-primary-color': d1Style.borderTopColor,
|
|
158
|
+
'--lumo-primary-text-color': d1Style.borderBottomColor,
|
|
159
|
+
'--lumo-primary-color-50pct': d1Style.borderLeftColor,
|
|
160
|
+
'--lumo-secondary-text-color': d1Style.borderRightColor,
|
|
161
|
+
'--lumo-disabled-text-color': d2Style.color,
|
|
162
|
+
'--lumo-body-text-color': d2Style.backgroundColor,
|
|
163
|
+
'--lumo-error-text-color': d2Style.borderTopColor,
|
|
164
|
+
'--lumo-error-color-10pct': d2Style.borderBottomColor,
|
|
165
|
+
'--lumo-error-color-50pct': d2Style.borderLeftColor,
|
|
166
|
+
'--lumo-line-height-xs': d1Style.lineHeight,
|
|
167
|
+
'--lumo-base-color': d3Style.backgroundColor,
|
|
168
|
+
};
|
|
169
|
+
const translations = {};
|
|
170
|
+
i18nKeys.forEach(key => set(translations, key, this.t(key)));
|
|
171
|
+
return {
|
|
172
|
+
translations: translations,
|
|
173
|
+
disabled: this.disabled,
|
|
174
|
+
readonly: this.readonly,
|
|
175
|
+
style: style,
|
|
176
|
+
lang: this.lang,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
__setupEmbed() {
|
|
180
|
+
if (this.__embed)
|
|
181
|
+
this.__embed.unmount();
|
|
182
|
+
const config = this.__config;
|
|
183
|
+
const root = this.renderRoot.querySelector('#iframe-container');
|
|
184
|
+
const url = this.url;
|
|
185
|
+
if (url === null || !root || !config || this.hidden) {
|
|
186
|
+
this.__ready = false;
|
|
187
|
+
this.__embed = null;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
const This = this.constructor;
|
|
191
|
+
this.__embed = new This.PaymentCardEmbed({ url, ...config });
|
|
192
|
+
this.__embed.mount(root).then(() => (this.__ready = true));
|
|
193
|
+
this.__embed.onsubmit = () => this.dispatchEvent(new CustomEvent('submit'));
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
PaymentCardEmbedElement.PaymentCardEmbed = PaymentCardEmbed;
|
|
198
|
+
//# sourceMappingURL=PaymentCardEmbedElement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PaymentCardEmbedElement.js","sourceRoot":"","sources":["../../../../src/elements/public/PaymentCardEmbedElement/PaymentCardEmbedElement.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PaymentCardEmbedConfig } from '@foxy.io/sdk/dist/types/customer/types';\nimport type { PropertyDeclarations } from 'lit-element';\nimport type { TemplateResult } from 'lit-html';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { LitElement, html } from 'lit-element';\nimport { PaymentCardEmbed } from '@foxy.io/sdk/customer';\nimport { InferrableMixin } from '../../../mixins/inferrable';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { classMap } from '../../../utils/class-map';\nimport { set } from 'lodash-es';\n\nconst NS = 'payment-card-embed';\nconst Base = ConfigurableMixin(TranslatableMixin(InferrableMixin(ThemeableMixin(LitElement)), NS));\n\n/**\n * A secure, PCI-compliant element for collecting payment card information with\n * support for Stripe, Square and embedded gateways.\n *\n * @fires CustomEvent - Instance of `CustomEvent` with type `submit`. Dispatched when the user submits the form (not available for Stripe).\n *\n * @element foxy-payment-card-embed\n * @since 1.27.0\n */\nexport class PaymentCardEmbedElement extends Base {\n static readonly PaymentCardEmbed = PaymentCardEmbed;\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n __ready: { attribute: false },\n url: {},\n };\n }\n\n /**\n * Full Bank Card Embed URL, e.g. `https://embed.foxy.io/v1.html?template_set_id=123`.\n *\n * The following demo URLs are available:\n * - `https://embed.foxy.io/v1.html?demo=default` (Default form)\n * - `https://embed.foxy.io/v1.html?demo=stripe` (Stripe Card Element)\n * - `https://embed.foxy.io/v1.html?demo=square` (Square Card Element)\n */\n url: string | null = null;\n\n private __configRefreshInterval: NodeJS.Timeout | null = null;\n\n private __embed: PaymentCardEmbed | null = null;\n\n private __ready = false;\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n clearInterval(this.__configRefreshInterval ?? undefined);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.__configRefreshInterval = setInterval(() => {\n const config = this.__config;\n if (config) this.__embed?.configure(config);\n }, 1000);\n }\n\n /** Tokenizes payment card info. Resolves with a token on success or rejects otherwise. */\n tokenize(): Promise<string> {\n return this.__embed?.tokenize() ?? Promise.reject();\n }\n\n updated(changes: Map<keyof this, unknown>): void {\n super.updated(changes);\n if (changes.has('hidden') || changes.has('url')) this.__setupEmbed();\n }\n\n render(): TemplateResult {\n return html`\n <div class=\"relative\">\n <div\n class=${classMap({ 'transition-opacity relative': true, 'opacity-0': !this.__ready })}\n id=\"iframe-container\"\n ></div>\n\n <div\n class=${classMap({\n 'absolute inset-0 flex items-center justify-center': true,\n 'transition-opacity pointer-events-none': true,\n 'opacity-0': this.__ready,\n })}\n >\n <foxy-spinner infer=\"spinner\" layout=\"no-label\"></foxy-spinner>\n </div>\n\n <div\n class=\"hidden ml-m mr-s bg-contrast-5 text-contrast-10 h-m w-xs rounded-tr-m rounded-br-s font-lumo text-m leading-xs\"\n style=\"border-top-color: var(--lumo-primary-color); border-bottom-color: var(--lumo-primary-text-color); border-left-color: var(--lumo-primary-color-50pct); border-right-color: var(--lumo-secondary-text-color);\"\n id=\"d1\"\n ></div>\n\n <div\n class=\"hidden text-s text-disabled\"\n style=\"background-color: var(--lumo-body-text-color); border-top-color: var(--lumo-error-text-color); border-bottom-color: var(--lumo-error-color-10pct); border-left-color: var(--lumo-error-color-50pct);\"\n id=\"d2\"\n ></div>\n\n <div class=\"hidden text-contrast-50 text-xs bg-base\" id=\"d3\"></div>\n </div>\n `;\n }\n\n /** Clears form fields. */\n clear(): void {\n this.__embed?.clear();\n }\n\n private get __config(): PaymentCardEmbedConfig | null {\n type Leaves<T> = T extends Record<string, unknown>\n ? {\n [K in keyof T]: `${Exclude<K, symbol>}${Leaves<T[K]> extends never\n ? ''\n : `.${Leaves<T[K]>}`}`;\n }[keyof T]\n : never;\n\n const i18nKeys: Leaves<Required<PaymentCardEmbedConfig['translations']>>[] = [\n 'stripe.label',\n 'stripe.status.idle',\n 'stripe.status.busy',\n 'stripe.status.fail',\n 'square.label',\n 'square.status.idle',\n 'square.status.busy',\n 'square.status.fail',\n 'default.cc-number.label',\n 'default.cc-number.placeholder',\n 'default.cc-number.v8n_required',\n 'default.cc-number.v8n_invalid',\n 'default.cc-number.v8n_unsupported',\n 'default.cc-exp.label',\n 'default.cc-exp.placeholder',\n 'default.cc-exp.v8n_required',\n 'default.cc-exp.v8n_invalid',\n 'default.cc-exp.v8n_expired',\n 'default.cc-csc.label',\n 'default.cc-csc.placeholder',\n 'default.cc-csc.v8n_required',\n 'default.cc-csc.v8n_invalid',\n 'default.status.idle',\n 'default.status.busy',\n 'default.status.fail',\n 'default.status.misconfigured',\n ];\n\n const d1 = this.renderRoot.querySelector('#d1');\n const d2 = this.renderRoot.querySelector('#d2');\n const d3 = this.renderRoot.querySelector('#d3');\n\n if (!d1 || !d2 || !d3) return null;\n\n const d1Style = getComputedStyle(d1);\n const d2Style = getComputedStyle(d2);\n const d3Style = getComputedStyle(d3);\n\n const style: Record<string, string> = {\n '--lumo-space-m': d1Style.marginLeft,\n '--lumo-space-s': d1Style.marginRight,\n '--lumo-contrast-5pct': d1Style.backgroundColor,\n '--lumo-contrast-10pct': d1Style.color,\n '--lumo-contrast-50pct': d3Style.color,\n '--lumo-size-m': d1Style.height,\n '--lumo-size-xs': d1Style.width,\n '--lumo-border-radius-m': d1Style.borderTopRightRadius,\n '--lumo-border-radius-s': d1Style.borderBottomRightRadius,\n '--lumo-font-family': d1Style.fontFamily,\n '--lumo-font-size-m': d1Style.fontSize,\n '--lumo-font-size-s': d2Style.fontSize,\n '--lumo-font-size-xs': d3Style.fontSize,\n '--lumo-primary-color': d1Style.borderTopColor,\n '--lumo-primary-text-color': d1Style.borderBottomColor,\n '--lumo-primary-color-50pct': d1Style.borderLeftColor,\n '--lumo-secondary-text-color': d1Style.borderRightColor,\n '--lumo-disabled-text-color': d2Style.color,\n '--lumo-body-text-color': d2Style.backgroundColor,\n '--lumo-error-text-color': d2Style.borderTopColor,\n '--lumo-error-color-10pct': d2Style.borderBottomColor,\n '--lumo-error-color-50pct': d2Style.borderLeftColor,\n '--lumo-line-height-xs': d1Style.lineHeight,\n '--lumo-base-color': d3Style.backgroundColor,\n };\n\n const translations: PaymentCardEmbedConfig['translations'] = {};\n i18nKeys.forEach(key => set(translations, key, this.t(key)));\n\n return {\n translations: translations,\n disabled: this.disabled,\n readonly: this.readonly,\n style: style,\n lang: this.lang,\n };\n }\n\n private __setupEmbed() {\n if (this.__embed) this.__embed.unmount();\n\n const config = this.__config;\n const root = this.renderRoot.querySelector('#iframe-container');\n const url = this.url;\n\n if (url === null || !root || !config || this.hidden) {\n this.__ready = false;\n this.__embed = null;\n } else {\n const This = this.constructor as typeof PaymentCardEmbedElement;\n this.__embed = new This.PaymentCardEmbed({ url, ...config });\n this.__embed.mount(root).then(() => (this.__ready = true));\n this.__embed.onsubmit = () => this.dispatchEvent(new CustomEvent('submit'));\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import "../Spinner/index.js";
|
|
2
|
+
import "../I18n/index.js";
|
|
3
|
+
import { PaymentCardEmbedElement } from "./PaymentCardEmbedElement.js";
|
|
4
|
+
customElements.define('foxy-payment-card-embed', PaymentCardEmbedElement);
|
|
5
|
+
export { PaymentCardEmbedElement };
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/PaymentCardEmbedElement/index.ts"],"names":[],"mappings":"AAAA,6BAA0B;AAC1B,0BAAuB;AAEvB,OAAO,EAAE,uBAAuB,EAAE,qCAAkC;AAEpE,cAAc,CAAC,MAAM,CAAC,yBAAyB,EAAE,uBAAuB,CAAC,CAAC;AAE1E,OAAO,EAAE,uBAAuB,EAAE,CAAC","sourcesContent":["import '../Spinner/index';\nimport '../I18n/index';\n\nimport { PaymentCardEmbedElement } from './PaymentCardEmbedElement';\n\ncustomElements.define('foxy-payment-card-embed', PaymentCardEmbedElement);\n\nexport { PaymentCardEmbedElement };\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { CSSResultArray } from 'lit-element';
|
|
2
|
-
import { Data, Templates } from './types';
|
|
3
|
-
import { TemplateResult } from 'lit-html';
|
|
1
|
+
import type { CSSResultArray, PropertyDeclarations } from 'lit-element';
|
|
2
|
+
import type { Data, Templates } from './types';
|
|
3
|
+
import type { TemplateResult } from 'lit-html';
|
|
4
4
|
import { NucleonElement } from '../NucleonElement/index';
|
|
5
5
|
declare const Base: typeof NucleonElement & import("lit-element").Constructor<import("../../../mixins/translatable").TranslatableMixinHost> & {
|
|
6
6
|
defaultNS: string;
|
|
@@ -14,13 +14,23 @@ declare const Base: typeof NucleonElement & import("lit-element").Constructor<im
|
|
|
14
14
|
* @slot actions:after - **new in v1.4.0**
|
|
15
15
|
* @slot actions:delete:before - **new in v1.4.0**
|
|
16
16
|
* @slot actions:delete:after - **new in v1.4.0**
|
|
17
|
+
* @slot actions:update:before - **new in v1.27.0**
|
|
18
|
+
* @slot actions:update:after - **new in v1.27.0**
|
|
17
19
|
*
|
|
18
|
-
* @element foxy-payment-method-
|
|
20
|
+
* @element foxy-payment-method-card
|
|
19
21
|
* @since 1.2.0
|
|
20
22
|
*/
|
|
21
23
|
export declare class PaymentMethodCard extends Base<Data> {
|
|
24
|
+
static get properties(): PropertyDeclarations;
|
|
22
25
|
static get styles(): CSSResultArray;
|
|
23
26
|
templates: Templates;
|
|
27
|
+
/**
|
|
28
|
+
* Configuration URL for the Payment Card Embed. If provided,
|
|
29
|
+
* the card will have an option of updating payment method.
|
|
30
|
+
* Otherwise, only the delete option will be available.
|
|
31
|
+
*/
|
|
32
|
+
embedUrl: string | null;
|
|
33
|
+
private readonly __renderActionsUpdate;
|
|
24
34
|
private readonly __renderActionsDelete;
|
|
25
35
|
private readonly __renderActions;
|
|
26
36
|
render(): TemplateResult;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import * as logos from "./logos.js";
|
|
2
|
-
import { css } from 'lit-element';
|
|
3
|
-
import { html } from 'lit-html';
|
|
4
|
-
import { BooleanSelector } from '@foxy.io/sdk/core';
|
|
5
2
|
import { ConfigurableMixin } from "../../../mixins/configurable.js";
|
|
3
|
+
import { TranslatableMixin } from "../../../mixins/translatable.js";
|
|
4
|
+
import { BooleanSelector } from '@foxy.io/sdk/core';
|
|
6
5
|
import { NucleonElement } from "../NucleonElement/index.js";
|
|
7
6
|
import { ThemeableMixin } from "../../../mixins/themeable.js";
|
|
8
|
-
import { TranslatableMixin } from "../../../mixins/translatable.js";
|
|
9
7
|
import { backgrounds } from "./backgrounds.js";
|
|
8
|
+
import { ifDefined } from 'lit-html/directives/if-defined';
|
|
9
|
+
import { css, html } from 'lit-element';
|
|
10
10
|
import { classMap } from "../../../utils/class-map.js";
|
|
11
11
|
const NS = 'payment-method-card';
|
|
12
12
|
const Base = ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, NS)));
|
|
@@ -17,14 +17,71 @@ const Base = ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement,
|
|
|
17
17
|
* @slot actions:after - **new in v1.4.0**
|
|
18
18
|
* @slot actions:delete:before - **new in v1.4.0**
|
|
19
19
|
* @slot actions:delete:after - **new in v1.4.0**
|
|
20
|
+
* @slot actions:update:before - **new in v1.27.0**
|
|
21
|
+
* @slot actions:update:after - **new in v1.27.0**
|
|
20
22
|
*
|
|
21
|
-
* @element foxy-payment-method-
|
|
23
|
+
* @element foxy-payment-method-card
|
|
22
24
|
* @since 1.2.0
|
|
23
25
|
*/
|
|
24
26
|
export class PaymentMethodCard extends Base {
|
|
25
27
|
constructor() {
|
|
26
28
|
super(...arguments);
|
|
27
29
|
this.templates = {};
|
|
30
|
+
/**
|
|
31
|
+
* Configuration URL for the Payment Card Embed. If provided,
|
|
32
|
+
* the card will have an option of updating payment method.
|
|
33
|
+
* Otherwise, only the delete option will be available.
|
|
34
|
+
*/
|
|
35
|
+
this.embedUrl = null;
|
|
36
|
+
this.__renderActionsUpdate = () => {
|
|
37
|
+
var _a;
|
|
38
|
+
const hasCC = !!((_a = this.data) === null || _a === void 0 ? void 0 : _a.save_cc);
|
|
39
|
+
const buttonStyle = hasCC
|
|
40
|
+
? '--lumo-primary-text-color: #fff; --lumo-primary-color-50pct: rgba(255, 255, 255, 0.5); --lumo-contrast-5pct: rgba(255, 255, 255, 0.05)'
|
|
41
|
+
: void 0;
|
|
42
|
+
return html `
|
|
43
|
+
<div class="flex">
|
|
44
|
+
${this.renderTemplateOrSlot('actions:update:before')}
|
|
45
|
+
|
|
46
|
+
<foxy-form-dialog
|
|
47
|
+
data-testid="update-dialog"
|
|
48
|
+
readonlycontrols=${this.readonlySelector.zoom('actions:update:form')}
|
|
49
|
+
disabledcontrols=${this.disabledSelector.zoom('actions:update:form')}
|
|
50
|
+
hiddencontrols="status ${this.hiddenSelector.zoom('actions:update:form')}"
|
|
51
|
+
header=${hasCC ? 'dialog_header_update' : 'dialog_header_add'}
|
|
52
|
+
group=${this.group}
|
|
53
|
+
form="foxy-update-payment-method-form"
|
|
54
|
+
href=${this.href}
|
|
55
|
+
lang=${this.lang}
|
|
56
|
+
ns="${this.ns} dialog"
|
|
57
|
+
alert
|
|
58
|
+
close-on-patch
|
|
59
|
+
.props=${{ '.embedUrl': this.embedUrl }}
|
|
60
|
+
>
|
|
61
|
+
</foxy-form-dialog>
|
|
62
|
+
|
|
63
|
+
<vaadin-button
|
|
64
|
+
class=${ifDefined(hasCC ? 'px-xs rounded' : void 0)}
|
|
65
|
+
theme=${hasCC ? 'icon' : 'contrast small'}
|
|
66
|
+
style=${ifDefined(buttonStyle)}
|
|
67
|
+
aria-label=${this.t(hasCC ? 'update' : 'add')}
|
|
68
|
+
data-testid="actions:update"
|
|
69
|
+
?disabled=${this.disabledSelector.matches('actions:update', true)}
|
|
70
|
+
@click=${(evt) => {
|
|
71
|
+
const button = evt.currentTarget;
|
|
72
|
+
const dialog = button.previousElementSibling;
|
|
73
|
+
dialog.show(button);
|
|
74
|
+
}}
|
|
75
|
+
>
|
|
76
|
+
${hasCC
|
|
77
|
+
? html `<iron-icon icon="icons:create"></iron-icon>`
|
|
78
|
+
: html `<foxy-i18n infer="" key="add"></foxy-i18n>`}
|
|
79
|
+
</vaadin-button>
|
|
80
|
+
|
|
81
|
+
${this.renderTemplateOrSlot('actions:update:after')}
|
|
82
|
+
</div>
|
|
83
|
+
`;
|
|
84
|
+
};
|
|
28
85
|
this.__renderActionsDelete = () => {
|
|
29
86
|
return html `
|
|
30
87
|
<div class="flex">
|
|
@@ -47,15 +104,24 @@ export class PaymentMethodCard extends Base {
|
|
|
47
104
|
`;
|
|
48
105
|
};
|
|
49
106
|
this.__renderActions = () => {
|
|
107
|
+
const isUpdateHidden = this.hiddenSelector.matches('actions:update', true) || !this.embedUrl;
|
|
108
|
+
const isDeleteHidden = this.hiddenSelector.matches('actions:delete', true);
|
|
50
109
|
return html `
|
|
51
|
-
<div class="flex" data-testid="actions">
|
|
110
|
+
<div class="flex gap-s" data-testid="actions">
|
|
52
111
|
${this.renderTemplateOrSlot('actions:before')}
|
|
53
|
-
${
|
|
112
|
+
${isUpdateHidden ? '' : this.__renderActionsUpdate()}
|
|
113
|
+
${isDeleteHidden ? '' : this.__renderActionsDelete()}
|
|
54
114
|
${this.renderTemplateOrSlot('actions:after')}
|
|
55
115
|
</div>
|
|
56
116
|
`;
|
|
57
117
|
};
|
|
58
118
|
}
|
|
119
|
+
static get properties() {
|
|
120
|
+
return {
|
|
121
|
+
...super.properties,
|
|
122
|
+
embedUrl: { attribute: 'embed-url' },
|
|
123
|
+
};
|
|
124
|
+
}
|
|
59
125
|
static get styles() {
|
|
60
126
|
return [
|
|
61
127
|
super.styles,
|
|
@@ -81,6 +147,7 @@ export class PaymentMethodCard extends Base {
|
|
|
81
147
|
const { data, lang, ns } = this;
|
|
82
148
|
if (this.in({ idle: 'template' }) || !(data === null || data === void 0 ? void 0 : data.save_cc) || !this.in('idle')) {
|
|
83
149
|
const spinnerState = this.in('fail') ? 'error' : this.in('busy') ? 'busy' : 'empty';
|
|
150
|
+
const isUpdateHidden = this.hiddenSelector.matches('actions:update', true) || !this.embedUrl || !this.data;
|
|
84
151
|
return html `
|
|
85
152
|
<div
|
|
86
153
|
class="ratio-card"
|
|
@@ -89,14 +156,16 @@ export class PaymentMethodCard extends Base {
|
|
|
89
156
|
data-testid="wrapper"
|
|
90
157
|
>
|
|
91
158
|
<div class="h-full bg-contrast-5"></div>
|
|
92
|
-
<div class="absolute inset-0 flex items-center justify-center">
|
|
159
|
+
<div class="absolute inset-0 flex flex-col gap-m items-center justify-center">
|
|
93
160
|
<foxy-spinner
|
|
94
161
|
data-testid="spinner"
|
|
162
|
+
layout="vertical"
|
|
95
163
|
state=${spinnerState}
|
|
96
164
|
lang=${this.lang}
|
|
97
165
|
ns="${ns} ${(_b = (_a = customElements.get('foxy-spinner')) === null || _a === void 0 ? void 0 : _a.defaultNS) !== null && _b !== void 0 ? _b : ''}"
|
|
98
166
|
>
|
|
99
167
|
</foxy-spinner>
|
|
168
|
+
${isUpdateHidden ? '' : this.__renderActionsUpdate()}
|
|
100
169
|
</div>
|
|
101
170
|
</div>
|
|
102
171
|
`;
|
|
@@ -130,11 +199,11 @@ export class PaymentMethodCard extends Base {
|
|
|
130
199
|
'justify-end': this.readonlyControls === BooleanSelector.True,
|
|
131
200
|
})}
|
|
132
201
|
>
|
|
202
|
+
<div class="mr-auto rounded h-m">${logo}</div>
|
|
133
203
|
${this.hiddenSelector.matches('actions', true) ? '' : this.__renderActions()}
|
|
134
|
-
<div class="ml-auto rounded h-m">${logo}</div>
|
|
135
204
|
</div>
|
|
136
205
|
|
|
137
|
-
<div class="font-tnum leading-none flex justify-between">
|
|
206
|
+
<div class="font-tnum leading-none flex justify-between" style="color: white">
|
|
138
207
|
<div data-testid="expiry">
|
|
139
208
|
${data.cc_exp_month && data.cc_exp_year
|
|
140
209
|
? html `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PaymentMethodCard.js","sourceRoot":"","sources":["../../../../src/elements/public/PaymentMethodCard/PaymentMethodCard.ts"],"names":[],"mappings":"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","sourcesContent":["import * as logos from './logos';\n\nimport { CSSResultArray, css } from 'lit-element';\nimport { Data, Templates } from './types';\nimport { TemplateResult, html } from 'lit-html';\n\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { DialogHideEvent } from '../../private/Dialog/DialogHideEvent';\nimport { InternalConfirmDialog } from '../../internal/InternalConfirmDialog/InternalConfirmDialog';\nimport { NucleonElement } from '../NucleonElement/index';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { backgrounds } from './backgrounds';\nimport { classMap } from '../../../utils/class-map';\n\nconst NS = 'payment-method-card';\nconst Base = ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, NS)));\n\n/**\n * Basic card displaying a payment method.\n *\n * @slot actions:before - **new in v1.4.0**\n * @slot actions:after - **new in v1.4.0**\n * @slot actions:delete:before - **new in v1.4.0**\n * @slot actions:delete:after - **new in v1.4.0**\n *\n * @element foxy-payment-method-form\n * @since 1.2.0\n */\nexport class PaymentMethodCard extends Base<Data> {\n static get styles(): CSSResultArray {\n return [\n super.styles,\n backgrounds,\n css`\n .ratio-card {\n padding-top: 63%;\n position: relative;\n height: 0;\n }\n\n .ratio-card > * {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n `,\n ];\n }\n\n templates: Templates = {};\n\n private readonly __renderActionsDelete = () => {\n return html`\n <div class=\"flex\">\n ${this.renderTemplateOrSlot('actions:delete:before')}\n\n <vaadin-button\n class=\"px-xs rounded\"\n theme=\"icon\"\n style=\"--lumo-primary-text-color: #fff; --lumo-primary-color-50pct: rgba(255, 255, 255, 0.5); --lumo-contrast-5pct: rgba(255, 255, 255, 0.05)\"\n aria-label=${this.t('delete').toString()}\n data-testid=\"actions:delete\"\n ?disabled=${this.disabledSelector.matches('actions:delete', true)}\n @click=${this.__handleDelete}\n >\n <iron-icon icon=\"icons:delete\"></iron-icon>\n </vaadin-button>\n\n ${this.renderTemplateOrSlot('actions:delete:after')}\n </div>\n `;\n };\n\n private readonly __renderActions = () => {\n return html`\n <div class=\"flex\" data-testid=\"actions\">\n ${this.renderTemplateOrSlot('actions:before')}\n ${this.hiddenSelector.matches('actions:delete', true) ? '' : this.__renderActionsDelete()}\n ${this.renderTemplateOrSlot('actions:after')}\n </div>\n `;\n };\n\n render(): TemplateResult {\n const { data, lang, ns } = this;\n\n if (this.in({ idle: 'template' }) || !data?.save_cc || !this.in('idle')) {\n const spinnerState = this.in('fail') ? 'error' : this.in('busy') ? 'busy' : 'empty';\n\n return html`\n <div\n class=\"ratio-card\"\n aria-live=\"polite\"\n aria-busy=${this.in('busy')}\n data-testid=\"wrapper\"\n >\n <div class=\"h-full bg-contrast-5\"></div>\n <div class=\"absolute inset-0 flex items-center justify-center\">\n <foxy-spinner\n data-testid=\"spinner\"\n state=${spinnerState}\n lang=${this.lang}\n ns=\"${ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n </div>\n </div>\n `;\n }\n\n const type = data!.cc_type?.toLowerCase() ?? 'unknown';\n const logo = logos[type as keyof typeof logos] ?? logos.unknown;\n const last4Digits = data!.cc_number_masked?.substring(data!.cc_number_masked.length - 4);\n\n return html`\n <foxy-internal-confirm-dialog\n data-testid=\"confirm\"\n message=\"delete_prompt\"\n confirm=\"delete\"\n cancel=\"cancel\"\n header=\"delete\"\n theme=\"primary error\"\n lang=${lang}\n ns=${ns}\n id=\"confirm\"\n @hide=${this.__handleConfirmHide}\n >\n </foxy-internal-confirm-dialog>\n\n <div class=\"ratio-card\" data-testid=\"wrapper\" aria-busy=${this.in('busy')} aria-live=\"polite\">\n <div\n class=\"flex flex-col justify-between text-base text-m leading-m font-lumo p-m bg-unknown bg-${type}\"\n >\n <div\n class=${classMap({\n 'flex items-start': true,\n 'justify-between': this.readonlyControls === BooleanSelector.False,\n 'justify-end': this.readonlyControls === BooleanSelector.True,\n })}\n >\n ${this.hiddenSelector.matches('actions', true) ? '' : this.__renderActions()}\n <div class=\"ml-auto rounded h-m\">${logo}</div>\n </div>\n\n <div class=\"font-tnum leading-none flex justify-between\">\n <div data-testid=\"expiry\">\n ${data!.cc_exp_month && data.cc_exp_year\n ? html`\n <span class=\"sr-only\">${this.t('expires').toString()} </span>\n <span>${data!.cc_exp_month} / ${data!.cc_exp_year}</span>\n `\n : ''}\n </div>\n\n <div data-testid=\"number\">\n ${last4Digits\n ? html`\n <span class=\"sr-only\">${this.t('last_4_digits').toString()} </span>\n <span aria-hidden=\"true\">••••</span>\n <span>${last4Digits}</span>\n `\n : ''}\n </div>\n </div>\n </div>\n </div>\n `;\n }\n\n protected async _sendDelete(): Promise<null> {\n const body = JSON.stringify({ save_cc: false });\n await this._fetch(this.href, { method: 'PATCH', body });\n const rumour = NucleonElement.Rumour(this.group);\n\n rumour.share({ data: null, source: this.href, related: [this.parent] });\n return null;\n }\n\n private __handleDelete(evt: Event) {\n const confirm = this.renderRoot.querySelector('#confirm');\n (confirm as InternalConfirmDialog).show(evt.currentTarget as HTMLElement);\n }\n\n private __handleConfirmHide(evt: DialogHideEvent) {\n if (!evt.detail.cancelled) this.delete();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PaymentMethodCard.js","sourceRoot":"","sources":["../../../../src/elements/public/PaymentMethodCard/PaymentMethodCard.ts"],"names":[],"mappings":"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","sourcesContent":["import type { CSSResultArray, PropertyDeclarations } from 'lit-element';\nimport type { Data, Templates } from './types';\nimport type { DialogHideEvent } from '../../private/Dialog/DialogHideEvent';\nimport type { TemplateResult } from 'lit-html';\nimport type { FormDialog } from '../FormDialog/FormDialog';\n\nimport * as logos from './logos';\n\nimport { InternalConfirmDialog } from '../../internal/InternalConfirmDialog/InternalConfirmDialog';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { NucleonElement } from '../NucleonElement/index';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { backgrounds } from './backgrounds';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { css, html } from 'lit-element';\nimport { classMap } from '../../../utils/class-map';\n\nconst NS = 'payment-method-card';\nconst Base = ThemeableMixin(ConfigurableMixin(TranslatableMixin(NucleonElement, NS)));\n\n/**\n * Basic card displaying a payment method.\n *\n * @slot actions:before - **new in v1.4.0**\n * @slot actions:after - **new in v1.4.0**\n * @slot actions:delete:before - **new in v1.4.0**\n * @slot actions:delete:after - **new in v1.4.0**\n * @slot actions:update:before - **new in v1.27.0**\n * @slot actions:update:after - **new in v1.27.0**\n *\n * @element foxy-payment-method-card\n * @since 1.2.0\n */\nexport class PaymentMethodCard extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n embedUrl: { attribute: 'embed-url' },\n };\n }\n\n static get styles(): CSSResultArray {\n return [\n super.styles,\n backgrounds,\n css`\n .ratio-card {\n padding-top: 63%;\n position: relative;\n height: 0;\n }\n\n .ratio-card > * {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n }\n `,\n ];\n }\n\n templates: Templates = {};\n\n /**\n * Configuration URL for the Payment Card Embed. If provided,\n * the card will have an option of updating payment method.\n * Otherwise, only the delete option will be available.\n */\n embedUrl: string | null = null;\n\n private readonly __renderActionsUpdate = () => {\n const hasCC = !!this.data?.save_cc;\n const buttonStyle = hasCC\n ? '--lumo-primary-text-color: #fff; --lumo-primary-color-50pct: rgba(255, 255, 255, 0.5); --lumo-contrast-5pct: rgba(255, 255, 255, 0.05)'\n : void 0;\n\n return html`\n <div class=\"flex\">\n ${this.renderTemplateOrSlot('actions:update:before')}\n\n <foxy-form-dialog\n data-testid=\"update-dialog\"\n readonlycontrols=${this.readonlySelector.zoom('actions:update:form')}\n disabledcontrols=${this.disabledSelector.zoom('actions:update:form')}\n hiddencontrols=\"status ${this.hiddenSelector.zoom('actions:update:form')}\"\n header=${hasCC ? 'dialog_header_update' : 'dialog_header_add'}\n group=${this.group}\n form=\"foxy-update-payment-method-form\"\n href=${this.href}\n lang=${this.lang}\n ns=\"${this.ns} dialog\"\n alert\n close-on-patch\n .props=${{ '.embedUrl': this.embedUrl }}\n >\n </foxy-form-dialog>\n\n <vaadin-button\n class=${ifDefined(hasCC ? 'px-xs rounded' : void 0)}\n theme=${hasCC ? 'icon' : 'contrast small'}\n style=${ifDefined(buttonStyle)}\n aria-label=${this.t(hasCC ? 'update' : 'add')}\n data-testid=\"actions:update\"\n ?disabled=${this.disabledSelector.matches('actions:update', true)}\n @click=${(evt: CustomEvent) => {\n const button = evt.currentTarget as HTMLElement;\n const dialog = button.previousElementSibling as FormDialog;\n dialog.show(button);\n }}\n >\n ${hasCC\n ? html`<iron-icon icon=\"icons:create\"></iron-icon>`\n : html`<foxy-i18n infer=\"\" key=\"add\"></foxy-i18n>`}\n </vaadin-button>\n\n ${this.renderTemplateOrSlot('actions:update:after')}\n </div>\n `;\n };\n\n private readonly __renderActionsDelete = () => {\n return html`\n <div class=\"flex\">\n ${this.renderTemplateOrSlot('actions:delete:before')}\n\n <vaadin-button\n class=\"px-xs rounded\"\n theme=\"icon\"\n style=\"--lumo-primary-text-color: #fff; --lumo-primary-color-50pct: rgba(255, 255, 255, 0.5); --lumo-contrast-5pct: rgba(255, 255, 255, 0.05)\"\n aria-label=${this.t('delete').toString()}\n data-testid=\"actions:delete\"\n ?disabled=${this.disabledSelector.matches('actions:delete', true)}\n @click=${this.__handleDelete}\n >\n <iron-icon icon=\"icons:delete\"></iron-icon>\n </vaadin-button>\n\n ${this.renderTemplateOrSlot('actions:delete:after')}\n </div>\n `;\n };\n\n private readonly __renderActions = () => {\n const isUpdateHidden = this.hiddenSelector.matches('actions:update', true) || !this.embedUrl;\n const isDeleteHidden = this.hiddenSelector.matches('actions:delete', true);\n\n return html`\n <div class=\"flex gap-s\" data-testid=\"actions\">\n ${this.renderTemplateOrSlot('actions:before')}\n ${isUpdateHidden ? '' : this.__renderActionsUpdate()}\n ${isDeleteHidden ? '' : this.__renderActionsDelete()}\n ${this.renderTemplateOrSlot('actions:after')}\n </div>\n `;\n };\n\n render(): TemplateResult {\n const { data, lang, ns } = this;\n\n if (this.in({ idle: 'template' }) || !data?.save_cc || !this.in('idle')) {\n const spinnerState = this.in('fail') ? 'error' : this.in('busy') ? 'busy' : 'empty';\n const isUpdateHidden =\n this.hiddenSelector.matches('actions:update', true) || !this.embedUrl || !this.data;\n\n return html`\n <div\n class=\"ratio-card\"\n aria-live=\"polite\"\n aria-busy=${this.in('busy')}\n data-testid=\"wrapper\"\n >\n <div class=\"h-full bg-contrast-5\"></div>\n <div class=\"absolute inset-0 flex flex-col gap-m items-center justify-center\">\n <foxy-spinner\n data-testid=\"spinner\"\n layout=\"vertical\"\n state=${spinnerState}\n lang=${this.lang}\n ns=\"${ns} ${customElements.get('foxy-spinner')?.defaultNS ?? ''}\"\n >\n </foxy-spinner>\n ${isUpdateHidden ? '' : this.__renderActionsUpdate()}\n </div>\n </div>\n `;\n }\n\n const type = data!.cc_type?.toLowerCase() ?? 'unknown';\n const logo = logos[type as keyof typeof logos] ?? logos.unknown;\n const last4Digits = data!.cc_number_masked?.substring(data!.cc_number_masked.length - 4);\n\n return html`\n <foxy-internal-confirm-dialog\n data-testid=\"confirm\"\n message=\"delete_prompt\"\n confirm=\"delete\"\n cancel=\"cancel\"\n header=\"delete\"\n theme=\"primary error\"\n lang=${lang}\n ns=${ns}\n id=\"confirm\"\n @hide=${this.__handleConfirmHide}\n >\n </foxy-internal-confirm-dialog>\n\n <div class=\"ratio-card\" data-testid=\"wrapper\" aria-busy=${this.in('busy')} aria-live=\"polite\">\n <div\n class=\"flex flex-col justify-between text-base text-m leading-m font-lumo p-m bg-unknown bg-${type}\"\n >\n <div\n class=${classMap({\n 'flex items-start': true,\n 'justify-between': this.readonlyControls === BooleanSelector.False,\n 'justify-end': this.readonlyControls === BooleanSelector.True,\n })}\n >\n <div class=\"mr-auto rounded h-m\">${logo}</div>\n ${this.hiddenSelector.matches('actions', true) ? '' : this.__renderActions()}\n </div>\n\n <div class=\"font-tnum leading-none flex justify-between\" style=\"color: white\">\n <div data-testid=\"expiry\">\n ${data!.cc_exp_month && data.cc_exp_year\n ? html`\n <span class=\"sr-only\">${this.t('expires').toString()} </span>\n <span>${data!.cc_exp_month} / ${data!.cc_exp_year}</span>\n `\n : ''}\n </div>\n\n <div data-testid=\"number\">\n ${last4Digits\n ? html`\n <span class=\"sr-only\">${this.t('last_4_digits').toString()} </span>\n <span aria-hidden=\"true\">••••</span>\n <span>${last4Digits}</span>\n `\n : ''}\n </div>\n </div>\n </div>\n </div>\n `;\n }\n\n protected async _sendDelete(): Promise<null> {\n const body = JSON.stringify({ save_cc: false });\n await this._fetch(this.href, { method: 'PATCH', body });\n const rumour = NucleonElement.Rumour(this.group);\n\n rumour.share({ data: null, source: this.href, related: [this.parent] });\n return null;\n }\n\n private __handleDelete(evt: Event) {\n const confirm = this.renderRoot.querySelector('#confirm');\n (confirm as InternalConfirmDialog).show(evt.currentTarget as HTMLElement);\n }\n\n private __handleConfirmHide(evt: DialogHideEvent) {\n if (!evt.detail.cancelled) this.delete();\n }\n}\n"]}
|
|
@@ -3,6 +3,8 @@ import '@polymer/iron-icons';
|
|
|
3
3
|
import '@vaadin/vaadin-button';
|
|
4
4
|
import '../../internal/InternalConfirmDialog/index';
|
|
5
5
|
import '../../internal/InternalSandbox/index';
|
|
6
|
+
import '../UpdatePaymentMethodForm/index';
|
|
7
|
+
import '../FormDialog/index';
|
|
6
8
|
import '../Spinner/index';
|
|
7
9
|
import '../I18n/index';
|
|
8
10
|
import { PaymentMethodCard } from './PaymentMethodCard';
|
|
@@ -3,6 +3,8 @@ import '@polymer/iron-icons';
|
|
|
3
3
|
import '@vaadin/vaadin-button';
|
|
4
4
|
import "../../internal/InternalConfirmDialog/index.js";
|
|
5
5
|
import "../../internal/InternalSandbox/index.js";
|
|
6
|
+
import "../UpdatePaymentMethodForm/index.js";
|
|
7
|
+
import "../FormDialog/index.js";
|
|
6
8
|
import "../Spinner/index.js";
|
|
7
9
|
import "../I18n/index.js";
|
|
8
10
|
import { PaymentMethodCard } from "./PaymentMethodCard.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/PaymentMethodCard/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAC5B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,uBAAuB,CAAC;AAC/B,uDAAoD;AACpD,iDAA8C;AAC9C,6BAA0B;AAC1B,0BAAuB;AAEvB,OAAO,EAAE,iBAAiB,EAAE,+BAA4B;AAExD,cAAc,CAAC,MAAM,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import '@polymer/iron-icon';\nimport '@polymer/iron-icons';\nimport '@vaadin/vaadin-button';\nimport '../../internal/InternalConfirmDialog/index';\nimport '../../internal/InternalSandbox/index';\nimport '../Spinner/index';\nimport '../I18n/index';\n\nimport { PaymentMethodCard } from './PaymentMethodCard';\n\ncustomElements.define('foxy-payment-method-card', PaymentMethodCard);\n\nexport { PaymentMethodCard };\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/PaymentMethodCard/index.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAC5B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,uBAAuB,CAAC;AAC/B,uDAAoD;AACpD,iDAA8C;AAC9C,6CAA0C;AAC1C,gCAA6B;AAC7B,6BAA0B;AAC1B,0BAAuB;AAEvB,OAAO,EAAE,iBAAiB,EAAE,+BAA4B;AAExD,cAAc,CAAC,MAAM,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,CAAC","sourcesContent":["import '@polymer/iron-icon';\nimport '@polymer/iron-icons';\nimport '@vaadin/vaadin-button';\nimport '../../internal/InternalConfirmDialog/index';\nimport '../../internal/InternalSandbox/index';\nimport '../UpdatePaymentMethodForm/index';\nimport '../FormDialog/index';\nimport '../Spinner/index';\nimport '../I18n/index';\n\nimport { PaymentMethodCard } from './PaymentMethodCard';\n\ncustomElements.define('foxy-payment-method-card', PaymentMethodCard);\n\nexport { PaymentMethodCard };\n"]}
|