@foxy.io/elements 1.25.0-beta.2 → 1.25.0-beta.4
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 +85 -3
- 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 +1 -1
- 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 -0
- 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-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.js +1 -1
- package/dist/cdn/foxy-customer-portal.js +1 -1
- package/dist/cdn/foxy-customer.js +3 -3
- 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 +1 -1
- 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-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 +179 -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.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 +1 -1
- package/dist/cdn/foxy-report-form.js +5 -5
- package/dist/cdn/foxy-reports-table.js +1 -1
- package/dist/cdn/foxy-shipment-card.js +1 -14
- 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 +2 -2
- 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 +2 -96
- 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 +95 -1
- package/dist/cdn/foxy-transaction.js +1 -1
- package/dist/cdn/foxy-transactions-table.js +7 -7
- 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-0037b9e6.js +1 -0
- package/dist/cdn/{shared-131988fc.js → shared-00c2793e.js} +1 -1
- package/dist/cdn/{shared-51a5af7e.js → shared-029816d7.js} +1 -1
- package/dist/cdn/{shared-c320cfef.js → shared-02bc0368.js} +1 -1
- package/dist/cdn/{shared-35728235.js → shared-07e9d1fb.js} +1 -1
- package/dist/cdn/{shared-4c2e9064.js → shared-1522d76f.js} +1 -1
- package/dist/cdn/{shared-4d555419.js → shared-174f37e9.js} +1 -1
- package/dist/cdn/{shared-f1b36324.js → shared-20ba4cdc.js} +1 -1
- package/dist/cdn/{shared-800ee6c0.js → shared-250a399a.js} +1 -1
- package/dist/cdn/{shared-8c681381.js → shared-268571df.js} +1 -1
- package/dist/cdn/{shared-4b20fc75.js → shared-293771ba.js} +1 -1
- package/dist/cdn/{shared-7b771301.js → shared-2b27e2e7.js} +1 -1
- package/dist/cdn/{shared-fed6cd4d.js → shared-2bdc99f4.js} +1 -1
- package/dist/cdn/{shared-71b3559f.js → shared-2c8c4b43.js} +1 -1
- package/dist/cdn/shared-2cf08dd4.js +1 -0
- package/dist/cdn/{shared-cb9cdc88.js → shared-2f09d4df.js} +4 -4
- package/dist/cdn/{shared-fd96bcd1.js → shared-30cbf0a6.js} +1 -1
- package/dist/cdn/{shared-417ab233.js → shared-30d00b64.js} +1 -1
- package/dist/cdn/{shared-1a65fd20.js → shared-32e736eb.js} +1 -1
- package/dist/cdn/{shared-e8a85228.js → shared-3d251e6f.js} +1 -1
- package/dist/cdn/shared-43e2c3f6.js +1 -0
- package/dist/cdn/{shared-f3b8de28.js → shared-43f449bb.js} +1 -1
- package/dist/cdn/{shared-9771ef0f.js → shared-4462dc70.js} +2 -2
- package/dist/cdn/{shared-a52c3d8c.js → shared-4aa4d980.js} +1 -1
- package/dist/cdn/{shared-e2db3ab5.js → shared-4c124efc.js} +7 -7
- package/dist/cdn/shared-4c650e5c.js +1 -0
- package/dist/cdn/{shared-96215749.js → shared-4e59fd48.js} +16 -16
- package/dist/cdn/{shared-ca428891.js → shared-54b0e48f.js} +1 -1
- package/dist/cdn/{shared-662c576b.js → shared-5fa697c4.js} +2 -2
- package/dist/cdn/shared-61ade33e.js +6 -0
- package/dist/cdn/{shared-9b12aeac.js → shared-6a7f96c4.js} +1 -1
- package/dist/cdn/{shared-8771fb61.js → shared-6a9ae42e.js} +1 -1
- package/dist/cdn/{shared-1105e4b9.js → shared-76400719.js} +1 -1
- package/dist/cdn/{shared-da5e32c1.js → shared-7dd17943.js} +1 -1
- package/dist/cdn/{shared-76e71481.js → shared-7deff07c.js} +1 -1
- package/dist/cdn/{shared-fff7db77.js → shared-7e1953f5.js} +1 -1
- package/dist/cdn/shared-8201d0b5.js +1 -0
- package/dist/cdn/{shared-5d718eaf.js → shared-8952aeac.js} +1 -1
- package/dist/cdn/{shared-92de4f37.js → shared-896982f9.js} +1 -1
- package/dist/cdn/{shared-b8963ec6.js → shared-8d8bed82.js} +1 -1
- package/dist/cdn/{shared-fc99076a.js → shared-99c0ae04.js} +1 -1
- package/dist/cdn/{shared-6e704d83.js → shared-9c08cfab.js} +1 -1
- package/dist/cdn/{shared-53d66db2.js → shared-9df8f842.js} +3 -3
- package/dist/cdn/{shared-1313f293.js → shared-a8dc23f1.js} +1 -1
- package/dist/cdn/{shared-d01f42d0.js → shared-ac7c5a5e.js} +14 -14
- package/dist/cdn/{shared-1dbad347.js → shared-ad34b6db.js} +1 -1
- package/dist/cdn/{shared-5d795aaf.js → shared-b1b8ea67.js} +1 -1
- package/dist/cdn/{shared-5cf7b194.js → shared-b23c903e.js} +1 -1
- package/dist/cdn/{shared-e60dc924.js → shared-b509bc2c.js} +1 -1
- package/dist/cdn/shared-bab2ea2c.js +1 -0
- package/dist/cdn/{shared-18672d26.js → shared-bc0d8d01.js} +2 -2
- package/dist/cdn/shared-be7bfbb0.js +1 -0
- package/dist/cdn/{shared-21293163.js → shared-bed7aae1.js} +1 -1
- package/dist/cdn/{shared-732bee4b.js → shared-c7b3d22b.js} +3 -3
- package/dist/cdn/{shared-7d933f9d.js → shared-c9ba1b64.js} +3 -3
- package/dist/cdn/{shared-783f5705.js → shared-ca4c5f0f.js} +1 -1
- package/dist/cdn/{shared-093b64b4.js → shared-cdd2358f.js} +1 -1
- package/dist/cdn/{shared-4e05dfb4.js → shared-d21fa1a6.js} +1 -1
- package/dist/cdn/{shared-4c3cb511.js → shared-d57fac94.js} +1 -1
- package/dist/cdn/{shared-3bcc07cd.js → shared-db306674.js} +1 -1
- package/dist/cdn/{shared-2f082f50.js → shared-dbadd9cf.js} +1 -1
- package/dist/cdn/{shared-5742a841.js → shared-e39807f8.js} +1 -1
- package/dist/cdn/shared-e83f2983.js +1 -0
- package/dist/cdn/{shared-f241722a.js → shared-e8621807.js} +1 -1
- package/dist/cdn/{shared-112dbca7.js → shared-e91453df.js} +1 -1
- package/dist/cdn/{shared-c00049b2.js → shared-ea527e98.js} +1 -1
- package/dist/cdn/{shared-e8a51c60.js → shared-eb116b3e.js} +1 -1
- package/dist/cdn/{shared-e006e82c.js → shared-f1e743df.js} +1 -1
- package/dist/cdn/shared-f9a3d1ff.js +6 -0
- package/dist/cdn/{shared-d123bea6.js → shared-fa4f6cd3.js} +1 -1
- package/dist/cdn/shared-fc15a882.js +1 -0
- package/dist/cdn/{shared-b7556b77.js → shared-ff18b2d1.js} +1 -1
- package/dist/cdn/{shared-870074ff.js → shared-ff8ca16b.js} +1 -1
- package/dist/cdn/{shared-fe927c53.js → shared-ff9791cf.js} +1 -1
- package/dist/cdn/translations/billing-address-card/en.json +9 -0
- package/dist/cdn/translations/cart-form/en.json +218 -299
- package/dist/cdn/translations/customer/en.json +151 -29
- package/dist/cdn/translations/customer-portal/en.json +35 -46
- package/dist/cdn/translations/item-card/en.json +13 -1
- package/dist/cdn/translations/item-form/en.json +201 -294
- package/dist/cdn/translations/native-integration-card/en.json +6 -2
- package/dist/cdn/translations/native-integration-form/en.json +17 -1
- package/dist/cdn/translations/payment-card/en.json +4 -0
- package/dist/cdn/translations/payments-api-payment-preset-form/en.json +2 -2
- package/dist/cdn/translations/shipment-card/en.json +6 -446
- package/dist/cdn/translations/store-form/en.json +1 -1
- package/dist/cdn/translations/subscription-form/en.json +35 -15
- package/dist/cdn/translations/template-config-form/en.json +2 -2
- package/dist/cdn/translations/transaction/en.json +1104 -857
- package/dist/cdn/translations/transaction-card/en.json +22 -22
- package/dist/elements/internal/InternalAsyncListControl/InternalAsyncListControl.d.ts +2 -0
- package/dist/elements/internal/InternalAsyncListControl/InternalAsyncListControl.js +43 -21
- package/dist/elements/internal/InternalAsyncListControl/InternalAsyncListControl.js.map +1 -1
- package/dist/elements/internal/InternalControl/InternalControl.js +2 -1
- package/dist/elements/internal/InternalControl/InternalControl.js.map +1 -1
- package/dist/elements/private/Dialog/Dialog.js +7 -1
- package/dist/elements/private/Dialog/Dialog.js.map +1 -1
- package/dist/elements/public/AttributeCard/AttributeCard.js +1 -1
- package/dist/elements/public/AttributeCard/AttributeCard.js.map +1 -1
- package/dist/elements/public/BillingAddressCard/BillingAddressCard.d.ts +15 -0
- package/dist/elements/public/BillingAddressCard/BillingAddressCard.js +28 -0
- package/dist/elements/public/BillingAddressCard/BillingAddressCard.js.map +1 -0
- package/dist/elements/public/BillingAddressCard/index.d.ts +4 -0
- package/dist/elements/public/BillingAddressCard/index.js +6 -0
- package/dist/elements/public/BillingAddressCard/index.js.map +1 -0
- package/dist/elements/public/BillingAddressCard/types.d.ts +3 -0
- package/dist/elements/public/BillingAddressCard/types.js +2 -0
- package/dist/elements/public/BillingAddressCard/types.js.map +1 -0
- package/dist/elements/public/CustomFieldCard/TwoLineCard.js +1 -1
- package/dist/elements/public/CustomFieldCard/TwoLineCard.js.map +1 -1
- package/dist/elements/public/I18n/I18n.d.ts +1 -0
- package/dist/elements/public/I18n/I18n.js +1 -0
- package/dist/elements/public/I18n/I18n.js.map +1 -1
- package/dist/elements/public/ItemCard/ItemCard.d.ts +2 -0
- package/dist/elements/public/ItemCard/ItemCard.js +70 -62
- package/dist/elements/public/ItemCard/ItemCard.js.map +1 -1
- package/dist/elements/public/ItemForm/ItemForm.d.ts +64 -12
- package/dist/elements/public/ItemForm/ItemForm.js +146 -28
- package/dist/elements/public/ItemForm/ItemForm.js.map +1 -1
- package/dist/elements/public/ItemForm/index.d.ts +7 -7
- package/dist/elements/public/ItemForm/index.js +7 -7
- package/dist/elements/public/ItemForm/index.js.map +1 -1
- package/dist/elements/public/ItemForm/types.d.ts +62 -2
- package/dist/elements/public/ItemForm/types.js.map +1 -1
- package/dist/elements/public/ItemsForm/private/Item.js +1 -0
- package/dist/elements/public/ItemsForm/private/Item.js.map +1 -1
- package/dist/elements/public/NativeIntegrationCard/NativeIntegrationCard.js +12 -10
- package/dist/elements/public/NativeIntegrationCard/NativeIntegrationCard.js.map +1 -1
- package/dist/elements/public/NativeIntegrationForm/NativeIntegrationForm.d.ts +2 -0
- package/dist/elements/public/NativeIntegrationForm/NativeIntegrationForm.js +41 -8
- package/dist/elements/public/NativeIntegrationForm/NativeIntegrationForm.js.map +1 -1
- package/dist/elements/public/NativeIntegrationForm/defaults.d.ts +7 -1
- package/dist/elements/public/NativeIntegrationForm/defaults.js +7 -1
- package/dist/elements/public/NativeIntegrationForm/defaults.js.map +1 -1
- package/dist/elements/public/NativeIntegrationForm/types.d.ts +6 -2
- package/dist/elements/public/NativeIntegrationForm/types.js.map +1 -1
- package/dist/elements/public/Pagination/Pagination.js +65 -60
- package/dist/elements/public/Pagination/Pagination.js.map +1 -1
- package/dist/elements/public/PaymentCard/PaymentCard.d.ts +24 -36
- package/dist/elements/public/PaymentCard/PaymentCard.js +139 -158
- package/dist/elements/public/PaymentCard/PaymentCard.js.map +1 -1
- package/dist/elements/public/PaymentCard/index.d.ts +2 -2
- package/dist/elements/public/PaymentCard/index.js +2 -2
- package/dist/elements/public/PaymentCard/index.js.map +1 -1
- package/dist/elements/public/PaymentCard/types.d.ts +2 -16
- package/dist/elements/public/PaymentCard/types.js.map +1 -1
- package/dist/elements/public/ShipmentCard/ShipmentCard.d.ts +9 -13
- package/dist/elements/public/ShipmentCard/ShipmentCard.js +93 -91
- package/dist/elements/public/ShipmentCard/ShipmentCard.js.map +1 -1
- package/dist/elements/public/ShipmentCard/index.d.ts +2 -6
- package/dist/elements/public/ShipmentCard/index.js +2 -6
- package/dist/elements/public/ShipmentCard/index.js.map +1 -1
- package/dist/elements/public/ShipmentCard/types.d.ts +7 -2
- package/dist/elements/public/ShipmentCard/types.js.map +1 -1
- package/dist/elements/public/StoreForm/StoreForm.js +1 -1
- package/dist/elements/public/StoreForm/StoreForm.js.map +1 -1
- package/dist/elements/public/Transaction/Transaction.d.ts +12 -5
- package/dist/elements/public/Transaction/Transaction.js +239 -77
- package/dist/elements/public/Transaction/Transaction.js.map +1 -1
- package/dist/elements/public/Transaction/index.d.ts +4 -3
- package/dist/elements/public/Transaction/index.js +4 -3
- package/dist/elements/public/Transaction/index.js.map +1 -1
- package/dist/elements/public/Transaction/internal/InternalTransactionActionsControl/InternalTransactionActionsControl.d.ts +1 -0
- package/dist/elements/public/Transaction/internal/InternalTransactionActionsControl/InternalTransactionActionsControl.js +17 -4
- package/dist/elements/public/Transaction/internal/InternalTransactionActionsControl/InternalTransactionActionsControl.js.map +1 -1
- package/dist/elements/public/Transaction/internal/InternalTransactionCustomerControl/InternalTransactionCustomerControl.d.ts +7 -1
- package/dist/elements/public/Transaction/internal/InternalTransactionCustomerControl/InternalTransactionCustomerControl.js +81 -24
- package/dist/elements/public/Transaction/internal/InternalTransactionCustomerControl/InternalTransactionCustomerControl.js.map +1 -1
- package/dist/elements/public/Transaction/internal/InternalTransactionCustomerControl/index.d.ts +3 -3
- package/dist/elements/public/Transaction/internal/InternalTransactionCustomerControl/index.js +3 -3
- package/dist/elements/public/Transaction/internal/InternalTransactionCustomerControl/index.js.map +1 -1
- package/dist/elements/public/Transaction/internal/InternalTransactionPostActionControl/InternalTransactionPostActionControl.js +1 -1
- package/dist/elements/public/Transaction/internal/InternalTransactionPostActionControl/InternalTransactionPostActionControl.js.map +1 -1
- package/dist/elements/public/Transaction/internal/InternalTransactionSummaryControl/InternalTransactionSummaryControl.d.ts +5 -3
- package/dist/elements/public/Transaction/internal/InternalTransactionSummaryControl/InternalTransactionSummaryControl.js +110 -61
- package/dist/elements/public/Transaction/internal/InternalTransactionSummaryControl/InternalTransactionSummaryControl.js.map +1 -1
- package/dist/elements/public/Transaction/internal/InternalTransactionSummaryControl/index.d.ts +1 -0
- package/dist/elements/public/Transaction/internal/InternalTransactionSummaryControl/index.js +1 -0
- package/dist/elements/public/Transaction/internal/InternalTransactionSummaryControl/index.js.map +1 -1
- package/dist/elements/public/Transaction/types.d.ts +15 -1
- package/dist/elements/public/Transaction/types.js.map +1 -1
- package/dist/elements/public/TransactionCard/TransactionCard.d.ts +8 -10
- package/dist/elements/public/TransactionCard/TransactionCard.js +71 -51
- package/dist/elements/public/TransactionCard/TransactionCard.js.map +1 -1
- package/dist/elements/public/TransactionCard/index.d.ts +2 -1
- package/dist/elements/public/TransactionCard/index.js +2 -1
- package/dist/elements/public/TransactionCard/index.js.map +1 -1
- package/dist/elements/public/TransactionCard/types.d.ts +8 -2
- package/dist/elements/public/TransactionCard/types.js.map +1 -1
- package/dist/elements/public/index.d.ts +1 -0
- package/dist/elements/public/index.defined.d.ts +1 -0
- package/dist/elements/public/index.defined.js +1 -0
- package/dist/elements/public/index.defined.js.map +1 -1
- package/dist/elements/public/index.js +1 -0
- package/dist/elements/public/index.js.map +1 -1
- package/dist/mixins/themeable.js +20 -0
- package/dist/mixins/themeable.js.map +1 -1
- package/package.json +1 -1
- package/dist/cdn/shared-074a74c3.js +0 -82
- package/dist/cdn/shared-26dea180.js +0 -1
- package/dist/cdn/shared-468de081.js +0 -1
- package/dist/cdn/shared-5e932eb5.js +0 -1
- package/dist/cdn/shared-702eae16.js +0 -1
- package/dist/cdn/shared-8a9c64b2.js +0 -1
- package/dist/cdn/shared-e3096241.js +0 -12
- package/dist/cdn/shared-e312da08.js +0 -1
- package/dist/cdn/shared-e79b5765.js +0 -1
- package/dist/elements/public/ItemForm/internal/InternalItemFormCartControl/InternalItemFormCartControl.d.ts +0 -5
- package/dist/elements/public/ItemForm/internal/InternalItemFormCartControl/InternalItemFormCartControl.js +0 -17
- package/dist/elements/public/ItemForm/internal/InternalItemFormCartControl/InternalItemFormCartControl.js.map +0 -1
- package/dist/elements/public/ItemForm/internal/InternalItemFormCartControl/index.d.ts +0 -6
- package/dist/elements/public/ItemForm/internal/InternalItemFormCartControl/index.js +0 -8
- package/dist/elements/public/ItemForm/internal/InternalItemFormCartControl/index.js.map +0 -1
- package/dist/elements/public/ItemForm/internal/InternalItemFormInventoryControl/InternalItemFormInventoryControl.d.ts +0 -5
- package/dist/elements/public/ItemForm/internal/InternalItemFormInventoryControl/InternalItemFormInventoryControl.js +0 -25
- package/dist/elements/public/ItemForm/internal/InternalItemFormInventoryControl/InternalItemFormInventoryControl.js.map +0 -1
- package/dist/elements/public/ItemForm/internal/InternalItemFormInventoryControl/index.d.ts +0 -5
- package/dist/elements/public/ItemForm/internal/InternalItemFormInventoryControl/index.js +0 -7
- package/dist/elements/public/ItemForm/internal/InternalItemFormInventoryControl/index.js.map +0 -1
- package/dist/elements/public/ItemForm/internal/InternalItemFormLineItemDiscountControl/InternalItemFormLineItemDiscountControl.d.ts +0 -5
- package/dist/elements/public/ItemForm/internal/InternalItemFormLineItemDiscountControl/InternalItemFormLineItemDiscountControl.js +0 -52
- package/dist/elements/public/ItemForm/internal/InternalItemFormLineItemDiscountControl/InternalItemFormLineItemDiscountControl.js.map +0 -1
- package/dist/elements/public/ItemForm/internal/InternalItemFormLineItemDiscountControl/index.d.ts +0 -6
- package/dist/elements/public/ItemForm/internal/InternalItemFormLineItemDiscountControl/index.js +0 -8
- package/dist/elements/public/ItemForm/internal/InternalItemFormLineItemDiscountControl/index.js.map +0 -1
- package/dist/elements/public/ItemForm/internal/InternalItemFormShippingControl/InternalItemFormShippingControl.d.ts +0 -5
- package/dist/elements/public/ItemForm/internal/InternalItemFormShippingControl/InternalItemFormShippingControl.js +0 -26
- package/dist/elements/public/ItemForm/internal/InternalItemFormShippingControl/InternalItemFormShippingControl.js.map +0 -1
- package/dist/elements/public/ItemForm/internal/InternalItemFormShippingControl/index.d.ts +0 -5
- package/dist/elements/public/ItemForm/internal/InternalItemFormShippingControl/index.js +0 -7
- package/dist/elements/public/ItemForm/internal/InternalItemFormShippingControl/index.js.map +0 -1
- package/dist/elements/public/ItemForm/internal/InternalItemFormSubscriptionControl/InternalItemFormSubscriptionControl.d.ts +0 -5
- package/dist/elements/public/ItemForm/internal/InternalItemFormSubscriptionControl/InternalItemFormSubscriptionControl.js +0 -72
- package/dist/elements/public/ItemForm/internal/InternalItemFormSubscriptionControl/InternalItemFormSubscriptionControl.js.map +0 -1
- package/dist/elements/public/ItemForm/internal/InternalItemFormSubscriptionControl/index.d.ts +0 -8
- package/dist/elements/public/ItemForm/internal/InternalItemFormSubscriptionControl/index.js +0 -10
- package/dist/elements/public/ItemForm/internal/InternalItemFormSubscriptionControl/index.js.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { TranslatableMixin } from "../../../mixins/translatable.js";
|
|
2
2
|
import { InternalForm } from "../../internal/InternalForm/InternalForm.js";
|
|
3
|
+
import { ifDefined } from 'lit-html/directives/if-defined';
|
|
3
4
|
import { html } from 'lit-html';
|
|
4
5
|
/**
|
|
5
6
|
* Form element for creating or editing items (`fx:item`).
|
|
@@ -13,20 +14,71 @@ import { html } from 'lit-html';
|
|
|
13
14
|
* @slot quantity:before
|
|
14
15
|
* @slot quantity:after
|
|
15
16
|
*
|
|
16
|
-
* @slot subscription:before
|
|
17
|
-
* @slot subscription:after
|
|
17
|
+
* @slot subscription-frequency:before – new in 1.25.0
|
|
18
|
+
* @slot subscription-frequency:after – new in 1.25.0
|
|
18
19
|
*
|
|
19
|
-
* @slot
|
|
20
|
-
* @slot
|
|
20
|
+
* @slot subscription-start-date:before – new in 1.25.0
|
|
21
|
+
* @slot subscription-start-date:after – new in 1.25.0
|
|
21
22
|
*
|
|
22
|
-
* @slot
|
|
23
|
-
* @slot
|
|
23
|
+
* @slot subscription-end-date:before – new in 1.25.0
|
|
24
|
+
* @slot subscription-end-date:after – new in 1.25.0
|
|
24
25
|
*
|
|
25
|
-
* @slot
|
|
26
|
-
* @slot
|
|
26
|
+
* @slot discount-name:before – new in 1.25.0
|
|
27
|
+
* @slot discount-name:after – new in 1.25.0
|
|
27
28
|
*
|
|
28
|
-
* @slot
|
|
29
|
-
* @slot
|
|
29
|
+
* @slot discount-builder:before – new in 1.25.0
|
|
30
|
+
* @slot discount-builder:after – new in 1.25.0
|
|
31
|
+
*
|
|
32
|
+
* @slot expires:before – new in 1.25.0
|
|
33
|
+
* @slot expires:after – new in 1.25.0
|
|
34
|
+
*
|
|
35
|
+
* @slot url:before – new in 1.25.0
|
|
36
|
+
* @slot url:after – new in 1.25.0
|
|
37
|
+
*
|
|
38
|
+
* @slot image:before – new in 1.25.0
|
|
39
|
+
* @slot image:after – new in 1.25.0
|
|
40
|
+
*
|
|
41
|
+
* @slot quantity-min:before – new in 1.25.0
|
|
42
|
+
* @slot quantity-min:after – new in 1.25.0
|
|
43
|
+
*
|
|
44
|
+
* @slot quantity-max:before – new in 1.25.0
|
|
45
|
+
* @slot quantity-max:after – new in 1.25.0
|
|
46
|
+
*
|
|
47
|
+
* @slot shipto:before – new in 1.25.0
|
|
48
|
+
* @slot shipto:after – new in 1.25.0
|
|
49
|
+
*
|
|
50
|
+
* @slot width:before – new in 1.25.0
|
|
51
|
+
* @slot width:after – new in 1.25.0
|
|
52
|
+
*
|
|
53
|
+
* @slot height:before – new in 1.25.0
|
|
54
|
+
* @slot height:after – new in 1.25.0
|
|
55
|
+
*
|
|
56
|
+
* @slot length:before – new in 1.25.0
|
|
57
|
+
* @slot length:after – new in 1.25.0
|
|
58
|
+
*
|
|
59
|
+
* @slot weight:before – new in 1.25.0
|
|
60
|
+
* @slot weight:after – new in 1.25.0
|
|
61
|
+
*
|
|
62
|
+
* @slot item-category-uri:before – new in 1.25.0
|
|
63
|
+
* @slot item-category-uri:after – new in 1.25.0
|
|
64
|
+
*
|
|
65
|
+
* @slot code:before – new in 1.25.0
|
|
66
|
+
* @slot code:after – new in 1.25.0
|
|
67
|
+
*
|
|
68
|
+
* @slot parent-code:before – new in 1.25.0
|
|
69
|
+
* @slot parent-code:after – new in 1.25.0
|
|
70
|
+
*
|
|
71
|
+
* @slot discount-details:before – new in 1.25.0
|
|
72
|
+
* @slot discount-details:after – new in 1.25.0
|
|
73
|
+
*
|
|
74
|
+
* @slot coupon-details:before – new in 1.25.0
|
|
75
|
+
* @slot coupon-details:after – new in 1.25.0
|
|
76
|
+
*
|
|
77
|
+
* @slot attributes:before – new in 1.25.0
|
|
78
|
+
* @slot attributes:after – new in 1.25.0
|
|
79
|
+
*
|
|
80
|
+
* @slot item-options:before – new in 1.25.0
|
|
81
|
+
* @slot item-options:after – new in 1.25.0
|
|
30
82
|
*
|
|
31
83
|
* @slot timestamps:before
|
|
32
84
|
* @slot timestamps:after
|
|
@@ -49,8 +101,9 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
|
|
|
49
101
|
this.itemCategories = null;
|
|
50
102
|
/** Link to the `fx:locale_codes` property helper for currency formatting. */
|
|
51
103
|
this.localeCodes = null;
|
|
52
|
-
/** Link to the collection of coupons that can be used with this item. */
|
|
104
|
+
/** @deprecated Link to the collection of coupons that can be used with this item. */
|
|
53
105
|
this.coupons = null;
|
|
106
|
+
this.templates = {};
|
|
54
107
|
this.__itemsLink = '';
|
|
55
108
|
}
|
|
56
109
|
static get properties() {
|
|
@@ -72,17 +125,94 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
|
|
|
72
125
|
];
|
|
73
126
|
}
|
|
74
127
|
renderBody() {
|
|
75
|
-
var _a;
|
|
128
|
+
var _a, _b, _c;
|
|
76
129
|
return html `
|
|
77
130
|
<foxy-internal-text-control infer="name"></foxy-internal-text-control>
|
|
78
131
|
|
|
79
|
-
<div class="grid grid-cols-2 gap-
|
|
132
|
+
<div class="grid grid-cols-2 gap-s">
|
|
80
133
|
<foxy-internal-number-control infer="price"></foxy-internal-number-control>
|
|
81
134
|
<foxy-internal-integer-control infer="quantity"></foxy-internal-integer-control>
|
|
82
135
|
</div>
|
|
83
136
|
|
|
84
|
-
<foxy-internal-
|
|
85
|
-
|
|
137
|
+
<foxy-internal-async-combo-box-control
|
|
138
|
+
item-value-path="_links.self.href"
|
|
139
|
+
item-label-path="name"
|
|
140
|
+
first=${ifDefined((_a = this === null || this === void 0 ? void 0 : this.itemCategories) !== null && _a !== void 0 ? _a : undefined)}
|
|
141
|
+
infer="item-category-uri"
|
|
142
|
+
>
|
|
143
|
+
</foxy-internal-async-combo-box-control>
|
|
144
|
+
|
|
145
|
+
<foxy-internal-text-control infer="code"></foxy-internal-text-control>
|
|
146
|
+
<foxy-internal-text-control infer="parent-code"></foxy-internal-text-control>
|
|
147
|
+
|
|
148
|
+
<div class="grid grid-cols-2 gap-s">
|
|
149
|
+
<foxy-internal-integer-control infer="quantity-min"></foxy-internal-integer-control>
|
|
150
|
+
<foxy-internal-integer-control infer="quantity-max"></foxy-internal-integer-control>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
<div>
|
|
154
|
+
<vaadin-details theme="reverse">
|
|
155
|
+
<foxy-i18n infer="" slot="summary" key="dimensions"></foxy-i18n>
|
|
156
|
+
<div class="grid grid-cols-2 gap-s pt-m">
|
|
157
|
+
<foxy-internal-number-control infer="weight"></foxy-internal-number-control>
|
|
158
|
+
<foxy-internal-number-control infer="width"></foxy-internal-number-control>
|
|
159
|
+
<foxy-internal-number-control infer="height"></foxy-internal-number-control>
|
|
160
|
+
<foxy-internal-number-control infer="length"></foxy-internal-number-control>
|
|
161
|
+
</div>
|
|
162
|
+
</vaadin-details>
|
|
163
|
+
|
|
164
|
+
<vaadin-details theme="reverse">
|
|
165
|
+
<foxy-i18n infer="" slot="summary" key="subscriptions"></foxy-i18n>
|
|
166
|
+
<div class="space-y-m pt-m">
|
|
167
|
+
<foxy-internal-frequency-control infer="subscription-frequency">
|
|
168
|
+
</foxy-internal-frequency-control>
|
|
169
|
+
|
|
170
|
+
<foxy-internal-date-control infer="subscription-start-date">
|
|
171
|
+
</foxy-internal-date-control>
|
|
172
|
+
|
|
173
|
+
<foxy-internal-date-control infer="subscription-end-date"></foxy-internal-date-control>
|
|
174
|
+
</div>
|
|
175
|
+
</vaadin-details>
|
|
176
|
+
</div>
|
|
177
|
+
|
|
178
|
+
<foxy-internal-text-area-control infer="url"></foxy-internal-text-area-control>
|
|
179
|
+
<foxy-internal-text-area-control infer="image"></foxy-internal-text-area-control>
|
|
180
|
+
|
|
181
|
+
<vaadin-details theme="reverse">
|
|
182
|
+
<foxy-i18n infer="" slot="summary" key="discount"></foxy-i18n>
|
|
183
|
+
<div class="space-y-m pt-m">
|
|
184
|
+
<foxy-internal-text-control infer="discount-name"></foxy-internal-text-control>
|
|
185
|
+
|
|
186
|
+
<foxy-discount-builder
|
|
187
|
+
infer="discount-builder"
|
|
188
|
+
.parsedValue=${{
|
|
189
|
+
details: this.form.discount_details,
|
|
190
|
+
type: this.form.discount_type,
|
|
191
|
+
name: this.form.discount_name,
|
|
192
|
+
}}
|
|
193
|
+
@change=${(evt) => {
|
|
194
|
+
const builder = evt.currentTarget;
|
|
195
|
+
const value = builder.parsedValue;
|
|
196
|
+
this.edit({
|
|
197
|
+
discount_details: value.details,
|
|
198
|
+
discount_type: value.type,
|
|
199
|
+
discount_name: value.name,
|
|
200
|
+
});
|
|
201
|
+
}}
|
|
202
|
+
>
|
|
203
|
+
</foxy-discount-builder>
|
|
204
|
+
</div>
|
|
205
|
+
</vaadin-details>
|
|
206
|
+
|
|
207
|
+
<foxy-internal-async-combo-box-control
|
|
208
|
+
item-value-path="address_name"
|
|
209
|
+
item-label-path="address_name"
|
|
210
|
+
first=${ifDefined((_b = this === null || this === void 0 ? void 0 : this.customerAddresses) !== null && _b !== void 0 ? _b : undefined)}
|
|
211
|
+
infer="shipto"
|
|
212
|
+
>
|
|
213
|
+
</foxy-internal-async-combo-box-control>
|
|
214
|
+
|
|
215
|
+
<foxy-internal-date-control infer="expires" format="unix"></foxy-internal-date-control>
|
|
86
216
|
|
|
87
217
|
${this.data
|
|
88
218
|
? html `
|
|
@@ -95,23 +225,11 @@ export class ItemForm extends TranslatableMixin(InternalForm, 'item-form') {
|
|
|
95
225
|
item="foxy-item-option-card"
|
|
96
226
|
alert
|
|
97
227
|
.related=${this.__itemOptionRelatedUrls}
|
|
98
|
-
.props=${{ 'locale-codes': (
|
|
228
|
+
.props=${{ 'locale-codes': (_c = this.localeCodes) !== null && _c !== void 0 ? _c : '' }}
|
|
99
229
|
>
|
|
100
230
|
</foxy-internal-async-list-control>
|
|
101
231
|
`
|
|
102
232
|
: ''}
|
|
103
|
-
|
|
104
|
-
<foxy-internal-item-form-line-item-discount-control infer="line-item-discount">
|
|
105
|
-
</foxy-internal-item-form-line-item-discount-control>
|
|
106
|
-
|
|
107
|
-
<foxy-internal-item-form-cart-control infer="cart"></foxy-internal-item-form-cart-control>
|
|
108
|
-
|
|
109
|
-
<foxy-internal-item-form-shipping-control infer="shipping">
|
|
110
|
-
</foxy-internal-item-form-shipping-control>
|
|
111
|
-
|
|
112
|
-
<foxy-internal-item-form-inventory-control infer="inventory">
|
|
113
|
-
</foxy-internal-item-form-inventory-control>
|
|
114
|
-
|
|
115
233
|
${this.data
|
|
116
234
|
? html `
|
|
117
235
|
<foxy-internal-async-list-control
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ItemForm.js","sourceRoot":"","sources":["../../../../src/elements/public/ItemForm/ItemForm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\nimport type { Resource } from '@foxy.io/sdk/core';\nimport type { Rels } from '@foxy.io/sdk/backend';\nimport type { Data } from './types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { html } from 'lit-html';\n\n/**\n * Form element for creating or editing items (`fx:item`).\n *\n * @slot name:before\n * @slot name:after\n *\n * @slot price:before\n * @slot price:after\n *\n * @slot quantity:before\n * @slot quantity:after\n *\n * @slot subscription:before\n * @slot subscription:after\n *\n * @slot line-item-discount:before\n * @slot line-item-discount:after\n *\n * @slot cart:before\n * @slot cart:after\n *\n * @slot shipping:before\n * @slot shipping:after\n *\n * @slot inventory:before\n * @slot inventory:after\n *\n * @slot timestamps:before\n * @slot timestamps:after\n *\n * @slot delete:before\n * @slot delete:after\n *\n * @slot create:before\n * @slot create:after\n *\n * @element foxy-item-form\n * @since 1.17.0\n */\nexport class ItemForm extends TranslatableMixin(InternalForm, 'item-form')<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n customerAddresses: { type: String, attribute: 'customer-addresses' },\n itemCategories: { type: String, attribute: 'item-categories' },\n localeCodes: { attribute: 'locale-codes' },\n coupons: { type: String },\n };\n }\n\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ name: v }) => !!v || 'name:v8n_required',\n ({ name: v }) => (!!v && v.length <= 255) || 'name:v8n_too_long',\n ({ price: v }) => (typeof v === 'number' && !isNaN(v)) || 'price:v8n_required',\n ({ price: v }) => (typeof v === 'number' && v >= 0) || 'price:v8n_negative',\n ({ quantity: v }) => (typeof v === 'number' && v >= 1) || 'quantity:v8n_less_than_one',\n ];\n }\n\n /** Link to the collection of customer addresses that can be used with this item. */\n customerAddresses: string | null = null;\n\n /** Link to the collection of item categories that can be used with this item. */\n itemCategories: string | null = null;\n\n /** Link to the `fx:locale_codes` property helper for currency formatting. */\n localeCodes: string | null = null;\n\n /** Link to the collection of coupons that can be used with this item. */\n coupons: string | null = null;\n\n private __itemsLink = '';\n\n renderBody(): TemplateResult {\n return html`\n <foxy-internal-text-control infer=\"name\"></foxy-internal-text-control>\n\n <div class=\"grid grid-cols-2 gap-m\">\n <foxy-internal-number-control infer=\"price\"></foxy-internal-number-control>\n <foxy-internal-integer-control infer=\"quantity\"></foxy-internal-integer-control>\n </div>\n\n <foxy-internal-item-form-subscription-control infer=\"subscription\">\n </foxy-internal-item-form-subscription-control>\n\n ${this.data\n ? html`\n <foxy-internal-async-list-control\n label=${this.t('item-options.title')}\n infer=\"item-options\"\n first=${this.data._links['fx:item_options'].href}\n limit=\"5\"\n form=\"foxy-item-option-form\"\n item=\"foxy-item-option-card\"\n alert\n .related=${this.__itemOptionRelatedUrls}\n .props=${{ 'locale-codes': this.localeCodes ?? '' }}\n >\n </foxy-internal-async-list-control>\n `\n : ''}\n\n <foxy-internal-item-form-line-item-discount-control infer=\"line-item-discount\">\n </foxy-internal-item-form-line-item-discount-control>\n\n <foxy-internal-item-form-cart-control infer=\"cart\"></foxy-internal-item-form-cart-control>\n\n <foxy-internal-item-form-shipping-control infer=\"shipping\">\n </foxy-internal-item-form-shipping-control>\n\n <foxy-internal-item-form-inventory-control infer=\"inventory\">\n </foxy-internal-item-form-inventory-control>\n\n ${this.data\n ? html`\n <foxy-internal-async-list-control\n label=${this.t('discount-details.title')}\n infer=\"discount-details\"\n first=${this.data._links['fx:discount_details'].href}\n limit=\"5\"\n item=\"foxy-discount-detail-card\"\n >\n </foxy-internal-async-list-control>\n\n <foxy-internal-async-list-control\n label=${this.t('coupon-details.title')}\n infer=\"coupon-details\"\n first=${this.data._links['fx:coupon_details'].href}\n limit=\"5\"\n item=\"foxy-coupon-detail-card\"\n >\n </foxy-internal-async-list-control>\n\n <foxy-internal-async-list-control\n label=${this.t('attributes.title')}\n infer=\"attributes\"\n first=${this.data._links['fx:attributes'].href}\n limit=\"5\"\n item=\"foxy-attribute-card\"\n form=\"foxy-attribute-form\"\n alert\n >\n </foxy-internal-async-list-control>\n `\n : ''}\n ${super.renderBody()}\n `;\n }\n\n protected async _sendGet(): Promise<Data> {\n type TransactionTemplate = Resource<Rels.TransactionTemplate>;\n type Subscription = Resource<Rels.Subscription>;\n type Transaction = Resource<Rels.Transaction>;\n type Cart = Resource<Rels.Cart>;\n\n const item = await super._sendGet();\n\n if (item._links['fx:subscription']) {\n const subscriptionHref = item._links['fx:subscription'].href;\n const subscription = await super._fetch<Subscription>(subscriptionHref);\n\n const transactionTemplateHref = subscription._links['fx:transaction_template'].href;\n const transactionTemplate = await super._fetch<TransactionTemplate>(transactionTemplateHref);\n\n this.__itemsLink = transactionTemplate._links['fx:items'].href;\n return item;\n }\n\n if (item._links['fx:transaction']) {\n const transaction = await super._fetch<Transaction>(item._links['fx:transaction'].href);\n this.__itemsLink = transaction._links['fx:items'].href;\n return item;\n }\n\n if (item._links['fx:cart']) {\n const cart = await super._fetch<Cart>(item._links['fx:cart'].href);\n this.__itemsLink = cart._links['fx:items'].href;\n return item;\n }\n\n return item;\n }\n\n private get __itemOptionRelatedUrls() {\n const links = (this.data?._links ?? {}) as Record<string, { href: string }>;\n const urls: string[] = [];\n\n if (links['fx:subscription']) urls.push(links['fx:subscription'].href);\n if (links['fx:transaction']) urls.push(links['fx:transaction'].href);\n if (links['fx:shipment']) urls.push(links['fx:shipment'].href);\n if (links['fx:cart']) urls.push(links['fx:cart'].href);\n if (this.__itemsLink) urls.push(this.__itemsLink);\n\n return urls;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ItemForm.js","sourceRoot":"","sources":["../../../../src/elements/public/ItemForm/ItemForm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { DiscountBuilder } from '../DiscountBuilder/DiscountBuilder';\nimport type { Data, Templates } from './types';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\nimport type { Resource } from '@foxy.io/sdk/core';\nimport type { Rels } from '@foxy.io/sdk/backend';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { html } from 'lit-html';\n\n/**\n * Form element for creating or editing items (`fx:item`).\n *\n * @slot name:before\n * @slot name:after\n *\n * @slot price:before\n * @slot price:after\n *\n * @slot quantity:before\n * @slot quantity:after\n *\n * @slot subscription-frequency:before – new in 1.25.0\n * @slot subscription-frequency:after – new in 1.25.0\n *\n * @slot subscription-start-date:before – new in 1.25.0\n * @slot subscription-start-date:after – new in 1.25.0\n *\n * @slot subscription-end-date:before – new in 1.25.0\n * @slot subscription-end-date:after – new in 1.25.0\n *\n * @slot discount-name:before – new in 1.25.0\n * @slot discount-name:after – new in 1.25.0\n *\n * @slot discount-builder:before – new in 1.25.0\n * @slot discount-builder:after – new in 1.25.0\n *\n * @slot expires:before – new in 1.25.0\n * @slot expires:after – new in 1.25.0\n *\n * @slot url:before – new in 1.25.0\n * @slot url:after – new in 1.25.0\n *\n * @slot image:before – new in 1.25.0\n * @slot image:after – new in 1.25.0\n *\n * @slot quantity-min:before – new in 1.25.0\n * @slot quantity-min:after – new in 1.25.0\n *\n * @slot quantity-max:before – new in 1.25.0\n * @slot quantity-max:after – new in 1.25.0\n *\n * @slot shipto:before – new in 1.25.0\n * @slot shipto:after – new in 1.25.0\n *\n * @slot width:before – new in 1.25.0\n * @slot width:after – new in 1.25.0\n *\n * @slot height:before – new in 1.25.0\n * @slot height:after – new in 1.25.0\n *\n * @slot length:before – new in 1.25.0\n * @slot length:after – new in 1.25.0\n *\n * @slot weight:before – new in 1.25.0\n * @slot weight:after – new in 1.25.0\n *\n * @slot item-category-uri:before – new in 1.25.0\n * @slot item-category-uri:after – new in 1.25.0\n *\n * @slot code:before – new in 1.25.0\n * @slot code:after – new in 1.25.0\n *\n * @slot parent-code:before – new in 1.25.0\n * @slot parent-code:after – new in 1.25.0\n *\n * @slot discount-details:before – new in 1.25.0\n * @slot discount-details:after – new in 1.25.0\n *\n * @slot coupon-details:before – new in 1.25.0\n * @slot coupon-details:after – new in 1.25.0\n *\n * @slot attributes:before – new in 1.25.0\n * @slot attributes:after – new in 1.25.0\n *\n * @slot item-options:before – new in 1.25.0\n * @slot item-options:after – new in 1.25.0\n *\n * @slot timestamps:before\n * @slot timestamps:after\n *\n * @slot delete:before\n * @slot delete:after\n *\n * @slot create:before\n * @slot create:after\n *\n * @element foxy-item-form\n * @since 1.17.0\n */\nexport class ItemForm extends TranslatableMixin(InternalForm, 'item-form')<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n customerAddresses: { type: String, attribute: 'customer-addresses' },\n itemCategories: { type: String, attribute: 'item-categories' },\n localeCodes: { attribute: 'locale-codes' },\n coupons: { type: String },\n };\n }\n\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ name: v }) => !!v || 'name:v8n_required',\n ({ name: v }) => (!!v && v.length <= 255) || 'name:v8n_too_long',\n ({ price: v }) => (typeof v === 'number' && !isNaN(v)) || 'price:v8n_required',\n ({ price: v }) => (typeof v === 'number' && v >= 0) || 'price:v8n_negative',\n ({ quantity: v }) => (typeof v === 'number' && v >= 1) || 'quantity:v8n_less_than_one',\n ];\n }\n\n /** Link to the collection of customer addresses that can be used with this item. */\n customerAddresses: string | null = null;\n\n /** Link to the collection of item categories that can be used with this item. */\n itemCategories: string | null = null;\n\n /** Link to the `fx:locale_codes` property helper for currency formatting. */\n localeCodes: string | null = null;\n\n /** @deprecated Link to the collection of coupons that can be used with this item. */\n coupons: string | null = null;\n\n templates: Templates = {};\n\n private __itemsLink = '';\n\n renderBody(): TemplateResult {\n return html`\n <foxy-internal-text-control infer=\"name\"></foxy-internal-text-control>\n\n <div class=\"grid grid-cols-2 gap-s\">\n <foxy-internal-number-control infer=\"price\"></foxy-internal-number-control>\n <foxy-internal-integer-control infer=\"quantity\"></foxy-internal-integer-control>\n </div>\n\n <foxy-internal-async-combo-box-control\n item-value-path=\"_links.self.href\"\n item-label-path=\"name\"\n first=${ifDefined(this?.itemCategories ?? undefined)}\n infer=\"item-category-uri\"\n >\n </foxy-internal-async-combo-box-control>\n\n <foxy-internal-text-control infer=\"code\"></foxy-internal-text-control>\n <foxy-internal-text-control infer=\"parent-code\"></foxy-internal-text-control>\n\n <div class=\"grid grid-cols-2 gap-s\">\n <foxy-internal-integer-control infer=\"quantity-min\"></foxy-internal-integer-control>\n <foxy-internal-integer-control infer=\"quantity-max\"></foxy-internal-integer-control>\n </div>\n\n <div>\n <vaadin-details theme=\"reverse\">\n <foxy-i18n infer=\"\" slot=\"summary\" key=\"dimensions\"></foxy-i18n>\n <div class=\"grid grid-cols-2 gap-s pt-m\">\n <foxy-internal-number-control infer=\"weight\"></foxy-internal-number-control>\n <foxy-internal-number-control infer=\"width\"></foxy-internal-number-control>\n <foxy-internal-number-control infer=\"height\"></foxy-internal-number-control>\n <foxy-internal-number-control infer=\"length\"></foxy-internal-number-control>\n </div>\n </vaadin-details>\n\n <vaadin-details theme=\"reverse\">\n <foxy-i18n infer=\"\" slot=\"summary\" key=\"subscriptions\"></foxy-i18n>\n <div class=\"space-y-m pt-m\">\n <foxy-internal-frequency-control infer=\"subscription-frequency\">\n </foxy-internal-frequency-control>\n\n <foxy-internal-date-control infer=\"subscription-start-date\">\n </foxy-internal-date-control>\n\n <foxy-internal-date-control infer=\"subscription-end-date\"></foxy-internal-date-control>\n </div>\n </vaadin-details>\n </div>\n\n <foxy-internal-text-area-control infer=\"url\"></foxy-internal-text-area-control>\n <foxy-internal-text-area-control infer=\"image\"></foxy-internal-text-area-control>\n\n <vaadin-details theme=\"reverse\">\n <foxy-i18n infer=\"\" slot=\"summary\" key=\"discount\"></foxy-i18n>\n <div class=\"space-y-m pt-m\">\n <foxy-internal-text-control infer=\"discount-name\"></foxy-internal-text-control>\n\n <foxy-discount-builder\n infer=\"discount-builder\"\n .parsedValue=${{\n details: this.form.discount_details,\n type: this.form.discount_type,\n name: this.form.discount_name,\n }}\n @change=${(evt: CustomEvent) => {\n const builder = evt.currentTarget as DiscountBuilder;\n const value = builder.parsedValue;\n\n this.edit({\n discount_details: value.details,\n discount_type: value.type,\n discount_name: value.name,\n });\n }}\n >\n </foxy-discount-builder>\n </div>\n </vaadin-details>\n\n <foxy-internal-async-combo-box-control\n item-value-path=\"address_name\"\n item-label-path=\"address_name\"\n first=${ifDefined(this?.customerAddresses ?? undefined)}\n infer=\"shipto\"\n >\n </foxy-internal-async-combo-box-control>\n\n <foxy-internal-date-control infer=\"expires\" format=\"unix\"></foxy-internal-date-control>\n\n ${this.data\n ? html`\n <foxy-internal-async-list-control\n label=${this.t('item-options.title')}\n infer=\"item-options\"\n first=${this.data._links['fx:item_options'].href}\n limit=\"5\"\n form=\"foxy-item-option-form\"\n item=\"foxy-item-option-card\"\n alert\n .related=${this.__itemOptionRelatedUrls}\n .props=${{ 'locale-codes': this.localeCodes ?? '' }}\n >\n </foxy-internal-async-list-control>\n `\n : ''}\n ${this.data\n ? html`\n <foxy-internal-async-list-control\n label=${this.t('discount-details.title')}\n infer=\"discount-details\"\n first=${this.data._links['fx:discount_details'].href}\n limit=\"5\"\n item=\"foxy-discount-detail-card\"\n >\n </foxy-internal-async-list-control>\n\n <foxy-internal-async-list-control\n label=${this.t('coupon-details.title')}\n infer=\"coupon-details\"\n first=${this.data._links['fx:coupon_details'].href}\n limit=\"5\"\n item=\"foxy-coupon-detail-card\"\n >\n </foxy-internal-async-list-control>\n\n <foxy-internal-async-list-control\n label=${this.t('attributes.title')}\n infer=\"attributes\"\n first=${this.data._links['fx:attributes'].href}\n limit=\"5\"\n item=\"foxy-attribute-card\"\n form=\"foxy-attribute-form\"\n alert\n >\n </foxy-internal-async-list-control>\n `\n : ''}\n ${super.renderBody()}\n `;\n }\n\n protected async _sendGet(): Promise<Data> {\n type TransactionTemplate = Resource<Rels.TransactionTemplate>;\n type Subscription = Resource<Rels.Subscription>;\n type Transaction = Resource<Rels.Transaction>;\n type Cart = Resource<Rels.Cart>;\n\n const item = await super._sendGet();\n\n if (item._links['fx:subscription']) {\n const subscriptionHref = item._links['fx:subscription'].href;\n const subscription = await super._fetch<Subscription>(subscriptionHref);\n\n const transactionTemplateHref = subscription._links['fx:transaction_template'].href;\n const transactionTemplate = await super._fetch<TransactionTemplate>(transactionTemplateHref);\n\n this.__itemsLink = transactionTemplate._links['fx:items'].href;\n return item;\n }\n\n if (item._links['fx:transaction']) {\n const transaction = await super._fetch<Transaction>(item._links['fx:transaction'].href);\n this.__itemsLink = transaction._links['fx:items'].href;\n return item;\n }\n\n if (item._links['fx:cart']) {\n const cart = await super._fetch<Cart>(item._links['fx:cart'].href);\n this.__itemsLink = cart._links['fx:items'].href;\n return item;\n }\n\n return item;\n }\n\n private get __itemOptionRelatedUrls() {\n const links = (this.data?._links ?? {}) as Record<string, { href: string }>;\n const urls: string[] = [];\n\n if (links['fx:subscription']) urls.push(links['fx:subscription'].href);\n if (links['fx:transaction']) urls.push(links['fx:transaction'].href);\n if (links['fx:shipment']) urls.push(links['fx:shipment'].href);\n if (links['fx:cart']) urls.push(links['fx:cart'].href);\n if (this.__itemsLink) urls.push(this.__itemsLink);\n\n return urls;\n }\n}\n"]}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
import '
|
|
1
|
+
import '@vaadin/vaadin-details';
|
|
2
|
+
import '../../internal/InternalAsyncComboBoxControl/index';
|
|
2
3
|
import '../../internal/InternalAsyncListControl/index';
|
|
4
|
+
import '../../internal/InternalFrequencyControl/index';
|
|
5
|
+
import '../../internal/InternalTextAreaControl/index';
|
|
6
|
+
import '../../internal/InternalIntegerControl/index';
|
|
3
7
|
import '../../internal/InternalNumberControl/index';
|
|
4
8
|
import '../../internal/InternalTextControl/index';
|
|
9
|
+
import '../../internal/InternalDateControl/index';
|
|
5
10
|
import '../../internal/InternalForm/index';
|
|
6
11
|
import '../DiscountDetailCard/index';
|
|
7
12
|
import '../CouponDetailCard/index';
|
|
13
|
+
import '../DiscountBuilder/index';
|
|
8
14
|
import '../ItemOptionCard/index';
|
|
9
15
|
import '../ItemOptionForm/index';
|
|
10
16
|
import '../AttributeCard/index';
|
|
11
17
|
import '../AttributeForm/index';
|
|
12
|
-
import '../CouponCard/index';
|
|
13
|
-
import './internal/InternalItemFormLineItemDiscountControl/index';
|
|
14
|
-
import './internal/InternalItemFormSubscriptionControl/index';
|
|
15
|
-
import './internal/InternalItemFormInventoryControl/index';
|
|
16
|
-
import './internal/InternalItemFormShippingControl/index';
|
|
17
|
-
import './internal/InternalItemFormCartControl/index';
|
|
18
18
|
import { ItemForm } from './ItemForm';
|
|
19
19
|
export { ItemForm };
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import
|
|
1
|
+
import '@vaadin/vaadin-details';
|
|
2
|
+
import "../../internal/InternalAsyncComboBoxControl/index.js";
|
|
2
3
|
import "../../internal/InternalAsyncListControl/index.js";
|
|
4
|
+
import "../../internal/InternalFrequencyControl/index.js";
|
|
5
|
+
import "../../internal/InternalTextAreaControl/index.js";
|
|
6
|
+
import "../../internal/InternalIntegerControl/index.js";
|
|
3
7
|
import "../../internal/InternalNumberControl/index.js";
|
|
4
8
|
import "../../internal/InternalTextControl/index.js";
|
|
9
|
+
import "../../internal/InternalDateControl/index.js";
|
|
5
10
|
import "../../internal/InternalForm/index.js";
|
|
6
11
|
import "../DiscountDetailCard/index.js";
|
|
7
12
|
import "../CouponDetailCard/index.js";
|
|
13
|
+
import "../DiscountBuilder/index.js";
|
|
8
14
|
import "../ItemOptionCard/index.js";
|
|
9
15
|
import "../ItemOptionForm/index.js";
|
|
10
16
|
import "../AttributeCard/index.js";
|
|
11
17
|
import "../AttributeForm/index.js";
|
|
12
|
-
import "../CouponCard/index.js";
|
|
13
|
-
import "./internal/InternalItemFormLineItemDiscountControl/index.js";
|
|
14
|
-
import "./internal/InternalItemFormSubscriptionControl/index.js";
|
|
15
|
-
import "./internal/InternalItemFormInventoryControl/index.js";
|
|
16
|
-
import "./internal/InternalItemFormShippingControl/index.js";
|
|
17
|
-
import "./internal/InternalItemFormCartControl/index.js";
|
|
18
18
|
import { ItemForm } from "./ItemForm.js";
|
|
19
19
|
customElements.define('foxy-item-form', ItemForm);
|
|
20
20
|
export { ItemForm };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/ItemForm/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/elements/public/ItemForm/index.ts"],"names":[],"mappings":"AAAA,OAAO,wBAAwB,CAAC;AAEhC,8DAA2D;AAC3D,0DAAuD;AACvD,0DAAuD;AACvD,yDAAsD;AACtD,wDAAqD;AACrD,uDAAoD;AACpD,qDAAkD;AAClD,qDAAkD;AAClD,8CAA2C;AAE3C,wCAAqC;AACrC,sCAAmC;AACnC,qCAAkC;AAClC,oCAAiC;AACjC,oCAAiC;AACjC,mCAAgC;AAChC,mCAAgC;AAEhC,OAAO,EAAE,QAAQ,EAAE,sBAAmB;AAEtC,cAAc,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,CAAC","sourcesContent":["import '@vaadin/vaadin-details';\n\nimport '../../internal/InternalAsyncComboBoxControl/index';\nimport '../../internal/InternalAsyncListControl/index';\nimport '../../internal/InternalFrequencyControl/index';\nimport '../../internal/InternalTextAreaControl/index';\nimport '../../internal/InternalIntegerControl/index';\nimport '../../internal/InternalNumberControl/index';\nimport '../../internal/InternalTextControl/index';\nimport '../../internal/InternalDateControl/index';\nimport '../../internal/InternalForm/index';\n\nimport '../DiscountDetailCard/index';\nimport '../CouponDetailCard/index';\nimport '../DiscountBuilder/index';\nimport '../ItemOptionCard/index';\nimport '../ItemOptionForm/index';\nimport '../AttributeCard/index';\nimport '../AttributeForm/index';\n\nimport { ItemForm } from './ItemForm';\n\ncustomElements.define('foxy-item-form', ItemForm);\n\nexport { ItemForm };\n"]}
|
|
@@ -1,3 +1,63 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { Renderer } from '../../../mixins/configurable';
|
|
2
|
+
import type { ItemForm } from './ItemForm';
|
|
3
|
+
import type { Resource } from '@foxy.io/sdk/core';
|
|
4
|
+
import type { Rels } from '@foxy.io/sdk/backend';
|
|
3
5
|
export declare type Data = Resource<Rels.Item>;
|
|
6
|
+
export declare type Templates = {
|
|
7
|
+
'name:before'?: Renderer<ItemForm>;
|
|
8
|
+
'name:after'?: Renderer<ItemForm>;
|
|
9
|
+
'price:before'?: Renderer<ItemForm>;
|
|
10
|
+
'price:after'?: Renderer<ItemForm>;
|
|
11
|
+
'quantity:before'?: Renderer<ItemForm>;
|
|
12
|
+
'quantity:after'?: Renderer<ItemForm>;
|
|
13
|
+
'subscription-frequency:before'?: Renderer<ItemForm>;
|
|
14
|
+
'subscription:frequency:after'?: Renderer<ItemForm>;
|
|
15
|
+
'subscription-start-date:before'?: Renderer<ItemForm>;
|
|
16
|
+
'subscription:start-date:after'?: Renderer<ItemForm>;
|
|
17
|
+
'subscription-end-date:before'?: Renderer<ItemForm>;
|
|
18
|
+
'subscription:end-date:after'?: Renderer<ItemForm>;
|
|
19
|
+
'discount-name:before'?: Renderer<ItemForm>;
|
|
20
|
+
'discount:name:after'?: Renderer<ItemForm>;
|
|
21
|
+
'discount-builder:before'?: Renderer<ItemForm>;
|
|
22
|
+
'discount:builder:after'?: Renderer<ItemForm>;
|
|
23
|
+
'expires:before'?: Renderer<ItemForm>;
|
|
24
|
+
'expires:after'?: Renderer<ItemForm>;
|
|
25
|
+
'url:before'?: Renderer<ItemForm>;
|
|
26
|
+
'url:after'?: Renderer<ItemForm>;
|
|
27
|
+
'image:before'?: Renderer<ItemForm>;
|
|
28
|
+
'image:after'?: Renderer<ItemForm>;
|
|
29
|
+
'quantity-min:before'?: Renderer<ItemForm>;
|
|
30
|
+
'quantity:min:after'?: Renderer<ItemForm>;
|
|
31
|
+
'quantity-max:before'?: Renderer<ItemForm>;
|
|
32
|
+
'quantity:max:after'?: Renderer<ItemForm>;
|
|
33
|
+
'shipto:before'?: Renderer<ItemForm>;
|
|
34
|
+
'shipto:after'?: Renderer<ItemForm>;
|
|
35
|
+
'width:before'?: Renderer<ItemForm>;
|
|
36
|
+
'width:after'?: Renderer<ItemForm>;
|
|
37
|
+
'height:before'?: Renderer<ItemForm>;
|
|
38
|
+
'height:after'?: Renderer<ItemForm>;
|
|
39
|
+
'length:before'?: Renderer<ItemForm>;
|
|
40
|
+
'length:after'?: Renderer<ItemForm>;
|
|
41
|
+
'weight:before'?: Renderer<ItemForm>;
|
|
42
|
+
'weight:after'?: Renderer<ItemForm>;
|
|
43
|
+
'item-category-uri:before'?: Renderer<ItemForm>;
|
|
44
|
+
'item:category-uri:after'?: Renderer<ItemForm>;
|
|
45
|
+
'code:before'?: Renderer<ItemForm>;
|
|
46
|
+
'code:after'?: Renderer<ItemForm>;
|
|
47
|
+
'parent-code:before'?: Renderer<ItemForm>;
|
|
48
|
+
'parent:code:after'?: Renderer<ItemForm>;
|
|
49
|
+
'discount-details:before'?: Renderer<ItemForm>;
|
|
50
|
+
'discount:details:after'?: Renderer<ItemForm>;
|
|
51
|
+
'coupon-details:before'?: Renderer<ItemForm>;
|
|
52
|
+
'coupon:details:after'?: Renderer<ItemForm>;
|
|
53
|
+
'attributes:before'?: Renderer<ItemForm>;
|
|
54
|
+
'attributes:after'?: Renderer<ItemForm>;
|
|
55
|
+
'item-options:before'?: Renderer<ItemForm>;
|
|
56
|
+
'item:options:after'?: Renderer<ItemForm>;
|
|
57
|
+
'delete:before'?: Renderer<ItemForm>;
|
|
58
|
+
'delete:after'?: Renderer<ItemForm>;
|
|
59
|
+
'create:before'?: Renderer<ItemForm>;
|
|
60
|
+
'create:after'?: Renderer<ItemForm>;
|
|
61
|
+
'timestamps:before'?: Renderer<ItemForm>;
|
|
62
|
+
'timestamps:after'?: Renderer<ItemForm>;
|
|
63
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/elements/public/ItemForm/types.ts"],"names":[],"mappings":"","sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/elements/public/ItemForm/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Renderer } from '../../../mixins/configurable';\nimport type { ItemForm } from './ItemForm';\nimport type { Resource } from '@foxy.io/sdk/core';\nimport type { Rels } from '@foxy.io/sdk/backend';\n\nexport type Data = Resource<Rels.Item>;\n\nexport type Templates = {\n 'name:before'?: Renderer<ItemForm>;\n 'name:after'?: Renderer<ItemForm>;\n\n 'price:before'?: Renderer<ItemForm>;\n 'price:after'?: Renderer<ItemForm>;\n\n 'quantity:before'?: Renderer<ItemForm>;\n 'quantity:after'?: Renderer<ItemForm>;\n\n 'subscription-frequency:before'?: Renderer<ItemForm>;\n 'subscription:frequency:after'?: Renderer<ItemForm>;\n\n 'subscription-start-date:before'?: Renderer<ItemForm>;\n 'subscription:start-date:after'?: Renderer<ItemForm>;\n\n 'subscription-end-date:before'?: Renderer<ItemForm>;\n 'subscription:end-date:after'?: Renderer<ItemForm>;\n\n 'discount-name:before'?: Renderer<ItemForm>;\n 'discount:name:after'?: Renderer<ItemForm>;\n\n 'discount-builder:before'?: Renderer<ItemForm>;\n 'discount:builder:after'?: Renderer<ItemForm>;\n\n 'expires:before'?: Renderer<ItemForm>;\n 'expires:after'?: Renderer<ItemForm>;\n\n 'url:before'?: Renderer<ItemForm>;\n 'url:after'?: Renderer<ItemForm>;\n\n 'image:before'?: Renderer<ItemForm>;\n 'image:after'?: Renderer<ItemForm>;\n\n 'quantity-min:before'?: Renderer<ItemForm>;\n 'quantity:min:after'?: Renderer<ItemForm>;\n\n 'quantity-max:before'?: Renderer<ItemForm>;\n 'quantity:max:after'?: Renderer<ItemForm>;\n\n 'shipto:before'?: Renderer<ItemForm>;\n 'shipto:after'?: Renderer<ItemForm>;\n\n 'width:before'?: Renderer<ItemForm>;\n 'width:after'?: Renderer<ItemForm>;\n\n 'height:before'?: Renderer<ItemForm>;\n 'height:after'?: Renderer<ItemForm>;\n\n 'length:before'?: Renderer<ItemForm>;\n 'length:after'?: Renderer<ItemForm>;\n\n 'weight:before'?: Renderer<ItemForm>;\n 'weight:after'?: Renderer<ItemForm>;\n\n 'item-category-uri:before'?: Renderer<ItemForm>;\n 'item:category-uri:after'?: Renderer<ItemForm>;\n\n 'code:before'?: Renderer<ItemForm>;\n 'code:after'?: Renderer<ItemForm>;\n\n 'parent-code:before'?: Renderer<ItemForm>;\n 'parent:code:after'?: Renderer<ItemForm>;\n\n 'discount-details:before'?: Renderer<ItemForm>;\n 'discount:details:after'?: Renderer<ItemForm>;\n\n 'coupon-details:before'?: Renderer<ItemForm>;\n 'coupon:details:after'?: Renderer<ItemForm>;\n\n 'attributes:before'?: Renderer<ItemForm>;\n 'attributes:after'?: Renderer<ItemForm>;\n\n 'item-options:before'?: Renderer<ItemForm>;\n 'item:options:after'?: Renderer<ItemForm>;\n\n 'delete:before'?: Renderer<ItemForm>;\n 'delete:after'?: Renderer<ItemForm>;\n\n 'create:before'?: Renderer<ItemForm>;\n 'create:after'?: Renderer<ItemForm>;\n\n 'timestamps:before'?: Renderer<ItemForm>;\n 'timestamps:after'?: Renderer<ItemForm>;\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Item.js","sourceRoot":"","sources":["../../../../../src/elements/public/ItemsForm/private/Item.ts"],"names":[],"mappings":"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","sourcesContent":["import '@vaadin/vaadin-text-field/vaadin-integer-field';\n\nimport { CSSResultArray, PropertyDeclarations, TemplateResult, css, html } from 'lit-element';\nimport { ErrorScreen, I18N } from '../../../private/index';\nimport { ImageDescription, ItemInterface } from '../types';\n\nimport { Preview } from './Preview';\nimport { SignableFields } from './SignableFields';\n\n/**\n * This component allows a user to configure an item.\n *\n * The item may be configured using HTML properties or a JS object.\n *\n * @csspart picture - Image of the product in preview stack (for single products) or grid (for bundles).\n * @csspart item - The root element inside of the shadow dom.\n */\nexport class Item extends SignableFields {\n // A list of item properties as defined in Foxy Cart Documentation\n\n /** @readonly */\n static get styles(): CSSResultArray {\n return [\n super.styles,\n css`\n :host {\n --quantity-width: 6.5rem;\n --preview-size: 5.5rem;\n --threshold: 20rem;\n }\n\n .min-w-description::before {\n content: '';\n width: var(--threshold);\n display: block;\n overflow: hidden;\n }\n\n .ml-description {\n --min-width: calc(var(--threshold) + var(--preview-size) + var(--lumo-space-l));\n --free-space: calc(100% - var(--min-width));\n --max-margin-left: calc(var(--preview-size) + var(--lumo-space-l));\n --final-margin-left: clamp(0rem, var(--free-space) * 999999999, var(--max-margin-left));\n margin-left: var(--final-margin-left);\n }\n\n .mr-quantity {\n --min-width: var(--threshold);\n --free-space: calc(100% - var(--min-width));\n --max-margin-right: calc(var(--quantity-width) + var(--lumo-space-l));\n --final-margin-right: clamp(0rem, var(--free-space) * 999999999, var(--max-margin-right));\n margin-right: var(--final-margin-right);\n }\n\n :host([data-bundled]:not(:last-of-type)) .separator::after {\n content: ' ';\n display: block;\n position: absolute;\n width: 100vw;\n border-bottom: solid thin var(--lumo-shade-10pct);\n left: 0;\n bottom: 0;\n }\n\n .w-quantity {\n width: var(--quantity-width);\n }\n\n .w-preview {\n width: var(--preview-size);\n }\n\n .h-preview {\n height: var(--preview-size);\n }\n `,\n ];\n }\n\n /** @readonly */\n public static get scopedElements(): Record<string, unknown> {\n return {\n 'vaadin-integer-field': customElements.get('vaadin-integer-field'),\n 'x-error-screen': ErrorScreen,\n 'x-preview': Preview,\n 'x-i18n': I18N,\n };\n }\n\n /** @readonly */\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n __modified: {},\n readonly: { type: Boolean, reflect: true },\n currency: { type: String },\n category: { type: String },\n code: { type: String, reflect: true },\n expires: { type: String },\n height: { type: Number },\n image: { type: String },\n length: { type: Number },\n name: { type: String },\n parent_code: { type: String },\n price: { type: Number },\n quantity: { type: Number, reflect: true },\n quantity_max: { type: Number },\n quantity_min: { type: String },\n shipto: { type: String },\n total: { type: Number, reflect: true, attribute: 'total' },\n url: { type: String },\n value: { type: Object },\n weight: { type: Number },\n width: { type: Number },\n __childPrices: {},\n __childrenCount: {},\n __images: {},\n alt: { type: String },\n isChildItem: { type: Boolean, reflect: true, attribute: 'data-bundled' },\n isItem: { type: Boolean, reflect: true, attribute: 'data-item' },\n open: { type: Object },\n pid: { type: Number, reflect: true },\n items: { type: Array },\n };\n }\n\n public readonly rel = 'product_item';\n\n /**\n * **Required** the name of the item.\n *\n * **Example:** `\"Dog food\"`\n */\n public name?: string;\n\n /**\n * **Required** the price of a unit of this item\n *\n * **Example:** `10`\n */\n public price?: number;\n\n /**\n * Makes quantity input readonly.\n */\n public readonly = false;\n\n /**\n * Optional an image url to be displayed in the form.\n */\n public image?: string;\n\n /**\n * Optional the alt text for the image\n */\n public alt?: string;\n\n /**\n * Optional an image url to be displayed in the foxy cart once the custumer reaches the cart.\n */\n public url?: string;\n\n /**\n * Optional item code. This property affects cart UI only.\n * See [Products](https://wiki.foxycart.com/v/2.0/products) wiki for more details.\n *\n * **Example:** `\"ISBN 978-0-12-345678-9\"`\n */\n public code?: string | number;\n\n /**\n * Optional parent code. This property affects cart UI only.\n * It causes Foxy Cart to recognize the parent-child relationship between two items.\n *\n * Nested items set this property automatically.\n *\n * **Example:** `\"ISBN 978-0-12-345678-9\"`\n */\n public parent_code?: string | number;\n\n /**\n * **Required** The quantity of this item in the cart.\n */\n public quantity = 0;\n\n /**\n * Optional quantity max. The maximum number of items of these to be added.\n */\n public quantity_max?: number;\n\n /**\n * Optional quantity min. The minimum number of items of these to be added.\n */\n public quantity_min?: number;\n\n /**\n * Optional category. Sets the category this item is in.\n * See [Products](https://wiki.foxycart.com/v/2.0/products) wiki for more details.\n *\n * **Example:** `\"heavy\"`\n */\n public category?: string;\n\n /**\n * Optional expires. Sets the expiration time of this item.\n *\n * Advanced usage only: This property affects cart UI only.\n * This web component will not react to this property.\n *\n * The item cannot be purchased after expiration, but if it is part of a\n * subscription, it remains in the subscription as long as it stands.\n *\n * See [Products](https://wiki.foxycart.com/v/2.0/products) wiki for more details.\n *\n * **Example:** `15`\n */\n public expires?: string;\n\n /**\n * Optional per item weight. This property affects cart UI only.\n */\n public weight?: number;\n\n /**\n * Optional. Specify a ship-to address for a specific item.\n *\n * Advanced usage only: This property affects cart UI only.\n * This element does not provide any means for the user to specify this property.\n */\n public shipto?: string;\n\n /**\n * Optional length. This property affects cart UI only.\n */\n public length?: number;\n\n /**\n * Optional width. This property affects cart UI only.\n */\n public width?: number;\n\n /**\n * Optional height. This property affects cart UI only.\n */\n public height?: number;\n\n /**\n * The total price of this item.\n *\n * It takes into account child items and the quantity.\n */\n public total?: number = this.__computeTotalPrice();\n\n /**\n * 3-letter lowercase currency code.\n * It is provided by the form if not set.\n *\n * **Example:** `\"usd\"`\n */\n public currency = '';\n\n /** A boolean indicating that this element is a item **/\n protected isItem = true;\n\n /** Boolean indicating that this item is a child item */\n protected isChildItem = false;\n\n /**\n * A unique id set to the item. Advanced usage only.\n */\n public readonly pid: number = Item.__newId();\n\n // A list of all existing ids to guarantee unicity\n private static __existingIds: number[] = [];\n\n private __childItemsObserver?: MutationObserver;\n\n private __modified = false;\n\n private __childPrices: number[] = [];\n\n private __images: ImageDescription[] = [];\n\n private __childrenCount = 0;\n\n private __itemDescription = '';\n\n private __handleQuantity = {\n handleEvent: (ev: Event) => {\n const newValue = Number((ev.target as HTMLInputElement).value);\n this.quantity = newValue;\n this.__modified = true;\n this.__images = ([this.getImageDescription()] as ImageDescription[]).concat(\n this.__images.slice(1, this.__images.length)\n );\n },\n };\n\n public constructor() {\n super('items-form');\n this.__childItemsObserver = new MutationObserver(this.__observeItems.bind(this));\n this.__childItemsObserver.observe(this, {\n childList: true,\n attributes: false,\n subtree: true,\n });\n this.updateComplete.then(() => {\n this.__setCode();\n this.__acknowledgeChildItems();\n this.__changedChildItem();\n if (!this.__isValid()) {\n console.error('Invalid item', this.value);\n }\n });\n }\n\n /**\n * Each child item is an object that can have any of the public properties of this element.\n * Child elements will be created accordingly.\n */\n public get items(): ItemInterface[] {\n const items: ItemInterface[] = [];\n this.__onEachChildItem([i => items.push(i.value)]);\n return items;\n }\n\n /**\n * Creates child elements from ItemInterface[]\n */\n public set items(value: ItemInterface[]) {\n this.__createItems(value);\n }\n\n public get value(): ItemInterface {\n const r: Partial<Record<keyof ItemInterface, unknown>> = {};\n for (let i = 0; i < this.attributes.length; i++) {\n r[this.attributes[i].name] = this.attributes[i].value;\n }\n r.items = this.items;\n return r as ItemInterface;\n }\n\n public set value(v: ItemInterface) {\n this.__itemDescription = '';\n for (const k in v) {\n let attrValue = '';\n if (k == 'description') {\n this.__itemDescription = v[k] as string;\n continue;\n }\n if (typeof v[k as keyof ItemInterface] == 'object') {\n attrValue = JSON.stringify(v[k as keyof ItemInterface]);\n } else {\n const key = k as keyof ItemInterface;\n if ((v[key] && v[key] !== 'undefined') || v[key] === 0) {\n attrValue = v[k as keyof ItemInterface]!.toString();\n }\n }\n this.setAttribute(k, v[k as keyof ItemInterface] ? attrValue : '');\n }\n }\n\n public updated(changedProperties: Map<string, string>): void {\n changedProperties.forEach((oldValue, prop) => {\n if (prop == '__itemDescription' || prop == 'isChildItem') {\n this.__updateDescriptionEl();\n }\n });\n this.__setTotalPrice();\n this.dispatchEvent(new Event('change'));\n }\n\n public render(): TemplateResult {\n if (!this.__isValid()) {\n return html`<x-error-screen type=\"setup_needed\" class=\"relative\"></x-error-screen>`;\n }\n\n const removedStyle = this.quantity ? '' : 'removed opacity-50';\n const sharedStyle = `font-lumo text-body text-s leading-m transition duration-100 ${removedStyle}`;\n\n if (this.isChildItem) {\n return html`\n <article\n part=\"item\"\n class=\"py-s w-full relative separator item-summary flex justify-between ${sharedStyle}\"\n >\n <div class=\"description flex-1\">\n <h1 class=\"text-header font-medium\">${this.name}</h1>\n <section class=\"description text-secondary\">\n <slot></slot>\n </section>\n </div>\n\n ${this.quantity < 2\n ? ''\n : html`\n <section class=\"quantity font-medium text-tertiary whitespace-nowrap\">\n ${this._t('item.items', { quantity: this.quantity })}\n </section>\n `}\n </article>\n `;\n } else {\n const numericItemPrice = (this.price ?? 0) + this.__childPrices.reduce((p, c) => p + c, 0);\n const totalPrice = this.__translateAmount(numericItemPrice * this.quantity);\n const itemPrice = this.__translateAmount(numericItemPrice);\n\n return html`\n <article\n part=\"item\"\n class=\"p-l relative item ${sharedStyle} ${this.__modified ? 'modified' : ''}\"\n >\n <x-preview\n class=\"preview float-left w-preview h-preview mr-l mb-l\"\n exportparts=\"picture\"\n .image=${this.image}\n .quantity=${this.quantity}\n .items=${[...this.querySelectorAll('[data-bundled]')].map(child => ({\n quantity: (child as Item).quantity,\n image: (child as Item).image ?? '',\n }))}\n >\n </x-preview>\n\n <section class=\"description min-w-description ml-description\">\n <h1 class=\"text-header font-medium text-l leading-none mr-quantity mb-s\">\n ${this.name}\n </h1>\n\n <div class=\"item-description text-secondary mr-quantity mb-s\">\n <slot></slot>\n </div>\n\n <div class=\"child-items mb-s\">\n <slot name=\"items\"></slot>\n </div>\n\n ${itemPrice ? html`<div class=\"font-medium price text-l\">${itemPrice}</div>` : ''}\n </section>\n\n <section class=\"quantity w-quantity absolute top-0 right-0 m-l\">\n <vaadin-integer-field\n class=\"w-full p-0\"\n name=\"quantity\"\n @change=${this.__handleQuantity}\n value=\"${this.quantity}\"\n min=\"0\"\n has-controls\n ?readonly=${this.readonly}\n >\n </vaadin-integer-field>\n\n ${this.quantity > 1\n ? html`\n <x-i18n\n .ns=${this.ns}\n .lang=${this.lang}\n .opts=${{ amount: totalPrice }}\n class=\"price-total text-secondary text-xs text-center block mt-xs\"\n key=\"price.total\"\n >\n </x-i18n>\n `\n : ''}\n </section>\n </article>\n `;\n }\n }\n\n public getImageDescription(): ImageDescription {\n return {\n src: this.image,\n alt: this.alt,\n quantity: this.quantity,\n };\n }\n\n /**\n * Items have their signed names prefixed with their id.\n *\n * @argument fieldName the name of the field to get the signed version.\n * @argument open whether this field is editable by the user.\n * @returns signed version of the name, prefixed with the item id.\n */\n public signedName(fieldName: string): string {\n const signed = super.signedName(fieldName);\n return `${this.pid.toString()}:${signed}`;\n }\n\n /**\n * Creates a new unique id to be used in the form\n *\n * Ids are used to distinguish different items in a single form.\n * Ids are prepended to fields names to allow Foxy Cart to know to what\n * item a particular field relates.\n *\n * @return number the newly created id\n */\n private static __newId(): number {\n // Get the maximum value\n const newId = Item.__existingIds.reduce((accum, curr) => (curr > accum ? curr : accum), 0) + 1;\n Item.__existingIds.push(newId);\n return newId;\n }\n\n private __updateDescriptionEl() {\n if (this.__itemDescription) {\n let descEl: HTMLElement | null = this.shadowRoot!.querySelector('data-item-description');\n if (!descEl) {\n descEl = document.createElement('p') as HTMLElement;\n descEl.dataset.itemDescription = 'true';\n this.__addSlottedEl(descEl);\n }\n descEl.innerText = this.__itemDescription;\n } else {\n const descEl: HTMLElement | null = this.shadowRoot!.querySelector('data-item-description');\n if (descEl) descEl.remove();\n }\n }\n\n /**\n * Add an element to the default slot\n */\n private __addSlottedEl(el: HTMLElement) {\n const slot = this.shadowRoot!.querySelector('article');\n if (slot) {\n slot!.appendChild(el);\n }\n }\n\n /**\n * Creates a code if none is provided by the user\n */\n private __setCode(): void {\n if (!this.code) {\n this.code = `RAND${Math.random()}`;\n }\n }\n\n /**\n * Create child items from items field.\n */\n private __createItems(valuesArray: ItemInterface[]): void {\n valuesArray.forEach(p => {\n // Use a reference to the constructor of the instance in order to avoid issues in tests\n const item = document.createElement(this.tagName) as Item;\n item.value = p;\n item.currency = this.currency;\n item.__computeTotalPrice();\n this.__acknowledgeItem(item);\n this.appendChild(item);\n });\n }\n\n private __setTotalPrice(): void {\n this.total = this.__computeTotalPrice();\n }\n\n /**\n * The price of the total qty of each of the child items\n */\n private __computeTotalPrice(): number {\n if (!this.__childPrices) {\n if (!this.price) return 0;\n return this.price * this.quantity;\n }\n let myPrice = 0;\n this.__childPrices.forEach(p => {\n myPrice += p;\n });\n myPrice += this.price!;\n myPrice *= this.quantity;\n return myPrice;\n }\n\n /**\n * Constraints Items must eventually adhere to.\n **/\n private __isValid(): boolean {\n const error = [];\n if (!this.name || !this.name.length) {\n error.push('The name attribute of an item is required.');\n }\n if (!this.price && this.price !== 0) {\n error.push('The price attribute of an item is required.');\n }\n if (this.price && this.price! < 0) {\n error.push('Item added with negative price.');\n }\n if (this.quantity_min && this.quantity && this.quantity < this.quantity_min) {\n error.push('Quantity amount is less than minimum quantity.');\n }\n if (this.quantity_max && this.quantity && this.quantity > this.quantity_max) {\n error.push('Quantity amount is more than maximum quantity.');\n }\n console.error(...error);\n return !error.length;\n }\n\n private __translateAmount(amount: number) {\n if (!this.currency) {\n return '';\n }\n return amount.toLocaleString(this.lang, {\n minimumFractionDigits: 2,\n currency: this.currency,\n style: 'currency',\n });\n }\n\n private __observeItems(mutationList: MutationRecord[]): void {\n mutationList.forEach(m => {\n if (m.type == 'childList') {\n m.addedNodes.forEach(n => {\n if (n.nodeType === Node.DOCUMENT_NODE) {\n this.__acknowledgeItem(n as Item);\n }\n });\n }\n });\n this.__setTotalPrice();\n }\n\n private __acknowledgeChildItems() {\n this.shadowRoot\n ?.querySelectorAll('[data-item]')\n .forEach(e => this.__acknowledgeItem(e as Item));\n this.querySelectorAll('[data-item]').forEach(e => this.__acknowledgeItem(e as Item));\n }\n\n private __acknowledgeItem(e: Item): void {\n e.addEventListener('change', this.__changedChildItem.bind(this));\n e.currency = this.currency;\n e.isItem = false;\n e.isChildItem = true;\n if (this.code) {\n e.parent_code = this.code;\n }\n }\n\n /** React to changes in child items */\n private __changedChildItem() {\n // Reset child attributes lists\n const newItemPrices: number[] = [];\n const newItemImages: ImageDescription[] = [];\n let newChildrenCount = 0;\n\n // Create collection functions\n const collectPrices = (p: Item) => {\n if (p.total !== undefined) {\n newItemPrices.push(p.total);\n }\n };\n const collectImages = (p: Item) => {\n newItemImages.push(p.getImageDescription());\n };\n const countChildren = () => (newChildrenCount += 1);\n // Collect information of every child\n this.__onEachChildItem([collectPrices, collectImages, countChildren]);\n\n if (this.image && newItemImages.length === 0) {\n newItemImages.push(this.getImageDescription());\n }\n\n // Update atributes regarding child items\n this.__childPrices = newItemPrices;\n this.__images = newItemImages;\n this.__childrenCount = newChildrenCount;\n this.__setTotalPrice();\n }\n\n /** Execute a list of actions against all child items */\n private __onEachChildItem(actions: ((c: Item) => void)[]) {\n const myChildItems = this.querySelectorAll('[data-bundled]');\n for (const c of myChildItems) {\n for (const actOn of actions) {\n actOn(c as Item);\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Item.js","sourceRoot":"","sources":["../../../../../src/elements/public/ItemsForm/private/Item.ts"],"names":[],"mappings":"AAAA,OAAO,gDAAgD,CAAC;AAExD,OAAO,EAAwD,GAAG,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,kCAA+B;AAG3D,OAAO,EAAE,OAAO,EAAE,qBAAkB;AACpC,OAAO,EAAE,cAAc,EAAE,4BAAyB;AAElD;;;;;;;GAOG;AACH,MAAM,OAAO,IAAK,SAAQ,cAAc;IAyRtC;QACE,KAAK,CAAC,YAAY,CAAC,CAAC;QA7KN,QAAG,GAAG,cAAc,CAAC;QAgBrC;;WAEG;QACI,aAAQ,GAAG,KAAK,CAAC;QAmCxB;;WAEG;QACI,aAAQ,GAAG,CAAC,CAAC;QA+DpB;;;;WAIG;QACI,UAAK,GAAY,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAEnD;;;;;WAKG;QACI,aAAQ,GAAG,EAAE,CAAC;QAErB,wDAAwD;QAC9C,WAAM,GAAG,IAAI,CAAC;QAExB,wDAAwD;QAC9C,gBAAW,GAAG,KAAK,CAAC;QAE9B;;WAEG;QACa,QAAG,GAAW,IAAI,CAAC,OAAO,EAAE,CAAC;QAOrC,eAAU,GAAG,KAAK,CAAC;QAEnB,kBAAa,GAAa,EAAE,CAAC;QAE7B,aAAQ,GAAuB,EAAE,CAAC;QAElC,oBAAe,GAAG,CAAC,CAAC;QAEpB,sBAAiB,GAAG,EAAE,CAAC;QAEvB,qBAAgB,GAAG;YACzB,WAAW,EAAE,CAAC,EAAS,EAAE,EAAE;gBACzB,MAAM,QAAQ,GAAG,MAAM,CAAE,EAAE,CAAC,MAA2B,CAAC,KAAK,CAAC,CAAC;gBAC/D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACzB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,QAAQ,GAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAwB,CAAC,MAAM,CACzE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC7C,CAAC;YACJ,CAAC;SACF,CAAC;QAIA,IAAI,CAAC,oBAAoB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,EAAE;YACtC,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/B,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;gBACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aAC3C;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAxSD,kEAAkE;IAElE,gBAAgB;IAChB,MAAM,KAAK,MAAM;QACf,OAAO;YACL,KAAK,CAAC,MAAM;YACZ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmDF;SACF,CAAC;IACJ,CAAC;IAED,gBAAgB;IACT,MAAM,KAAK,cAAc;QAC9B,OAAO;YACL,sBAAsB,EAAE,cAAc,CAAC,GAAG,CAAC,sBAAsB,CAAC;YAClE,gBAAgB,EAAE,WAAW;YAC7B,WAAW,EAAE,OAAO;YACpB,QAAQ,EAAE,IAAI;SACf,CAAC;IACJ,CAAC;IAED,gBAAgB;IAChB,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;YAC1C,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YAC1B,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YAC1B,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;YACrC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACzB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACxB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACvB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACxB,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACtB,WAAW,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YAC7B,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACvB,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;YACzC,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YAC9B,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YAC9B,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACxB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE;YAC1D,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACrB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACvB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACxB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACvB,aAAa,EAAE,EAAE;YACjB,eAAe,EAAE,EAAE;YACnB,QAAQ,EAAE,EAAE;YACZ,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACrB,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE;YACxE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE;YAChE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACtB,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;YACpC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;SACvB,CAAC;IACJ,CAAC;IAgMD;;;OAGG;IACH,IAAW,KAAK;QACd,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,IAAW,KAAK,CAAC,KAAsB;QACrC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,IAAW,KAAK;QACd,MAAM,CAAC,GAAkD,EAAE,CAAC;QAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/C,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;SACvD;QACD,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACrB,OAAO,CAAkB,CAAC;IAC5B,CAAC;IAED,IAAW,KAAK,CAAC,CAAgB;QAC/B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,CAAC,EAAE;YACjB,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,aAAa,EAAE;gBACtB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAW,CAAC;gBACxC,SAAS;aACV;YACD,IAAI,OAAO,CAAC,CAAC,CAAwB,CAAC,IAAI,QAAQ,EAAE;gBAClD,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAwB,CAAC,CAAC,CAAC;aACzD;iBAAM;gBACL,MAAM,GAAG,GAAG,CAAwB,CAAC;gBACrC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBACtD,SAAS,GAAG,CAAC,CAAC,CAAwB,CAAE,CAAC,QAAQ,EAAE,CAAC;iBACrD;aACF;YACD,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAwB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACpE;IACH,CAAC;IAEM,OAAO,CAAC,iBAAsC;QACnD,iBAAiB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;YAC3C,IAAI,IAAI,IAAI,mBAAmB,IAAI,IAAI,IAAI,aAAa,EAAE;gBACxD,IAAI,CAAC,qBAAqB,EAAE,CAAC;aAC9B;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1C,CAAC;IAEM,MAAM;;QACX,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;YACrB,OAAO,IAAI,CAAA,wEAAwE,CAAC;SACrF;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC;QAC/D,MAAM,WAAW,GAAG,gEAAgE,YAAY,EAAE,CAAC;QAEnG,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAO,IAAI,CAAA;;;oFAGmE,WAAW;;;kDAG7C,IAAI,CAAC,IAAI;;;;;;YAM/C,IAAI,CAAC,QAAQ,GAAG,CAAC;gBACjB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,IAAI,CAAA;;oBAEE,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;;eAEvD;;OAER,CAAC;SACH;aAAM;YACL,MAAM,gBAAgB,GAAG,OAAC,IAAI,CAAC,KAAK,mCAAI,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3F,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;YAE3D,OAAO,IAAI,CAAA;;;qCAGoB,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;;;;;qBAKhE,IAAI,CAAC,KAAK;wBACP,IAAI,CAAC,QAAQ;qBAChB,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;;gBAAC,OAAA,CAAC;oBAClE,QAAQ,EAAG,KAAc,CAAC,QAAQ;oBAClC,KAAK,QAAG,KAAc,CAAC,KAAK,mCAAI,EAAE;iBACnC,CAAC,CAAA;aAAA,CAAC;;;;;;gBAMC,IAAI,CAAC,IAAI;;;;;;;;;;;cAWX,SAAS,CAAC,CAAC,CAAC,IAAI,CAAA,yCAAyC,SAAS,QAAQ,CAAC,CAAC,CAAC,EAAE;;;;;;;wBAOrE,IAAI,CAAC,gBAAgB;uBACtB,IAAI,CAAC,QAAQ;;;0BAGV,IAAI,CAAC,QAAQ;;;;cAIzB,IAAI,CAAC,QAAQ,GAAG,CAAC;gBACjB,CAAC,CAAC,IAAI,CAAA;;0BAEM,IAAI,CAAC,EAAE;4BACL,IAAI,CAAC,IAAI;4BACT,EAAE,MAAM,EAAE,UAAU,EAAE;;;;;iBAKjC;gBACH,CAAC,CAAC,EAAE;;;OAGX,CAAC;SACH;IACH,CAAC;IAEM,mBAAmB;QACxB,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,KAAK;YACf,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACI,UAAU,CAAC,SAAiB;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3C,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,MAAM,EAAE,CAAC;IAC5C,CAAC;IAED;;;;;;;;OAQG;IACK,MAAM,CAAC,OAAO;QACpB,wBAAwB;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/F,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,qBAAqB;QAC3B,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,MAAM,GAAuB,IAAI,CAAC,UAAW,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;YACzF,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAgB,CAAC;gBACpD,MAAM,CAAC,OAAO,CAAC,eAAe,GAAG,MAAM,CAAC;gBACxC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;aAC7B;YACD,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC;SAC3C;aAAM;YACL,MAAM,MAAM,GAAuB,IAAI,CAAC,UAAW,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;YAC3F,IAAI,MAAM;gBAAE,MAAM,CAAC,MAAM,EAAE,CAAC;SAC7B;IACH,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,EAAe;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,IAAI,EAAE;YACR,IAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;SACvB;IACH,CAAC;IAED;;OAEG;IACK,SAAS;QACf,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,IAAI,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;SACpC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,WAA4B;QAChD,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACtB,uFAAuF;YACvF,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAS,CAAC;YAC1D,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC9B,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC1C,CAAC;IAED;;OAEG;IACK,mBAAmB;QACzB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,CAAC;YAC1B,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;SACnC;QACD,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YAC7B,OAAO,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,IAAI,CAAC,KAAM,CAAC;QACvB,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC;QACzB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;QAEI;IACI,SAAS;QACf,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YACnC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;SAC1D;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,EAAE;YACnC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;SAC3D;QACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAM,GAAG,CAAC,EAAE;YACjC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;SAC/C;QACD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;YAC3E,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;SAC9D;QACD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;YAC3E,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;SAC9D;QACD,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;IACvB,CAAC;IAEO,iBAAiB,CAAC,MAAc;QACtC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,OAAO,EAAE,CAAC;SACX;QACD,OAAO,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE;YACtC,qBAAqB,EAAE,CAAC;YACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,UAAU;SAClB,CAAC,CAAC;IACL,CAAC;IAEO,cAAc,CAAC,YAA8B;QACnD,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACvB,IAAI,CAAC,CAAC,IAAI,IAAI,WAAW,EAAE;gBACzB,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACvB,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,aAAa,EAAE;wBACrC,IAAI,CAAC,iBAAiB,CAAC,CAAS,CAAC,CAAC;qBACnC;gBACH,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAEO,uBAAuB;;QAC7B,MAAA,IAAI,CAAC,UAAU,0CACX,gBAAgB,CAAC,aAAa,EAC/B,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAS,CAAC,EAAE;QACnD,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAS,CAAC,CAAC,CAAC;IACvF,CAAC;IAEO,iBAAiB,CAAC,CAAO;QAC/B,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC3B,CAAC,CAAC,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;SAC3B;IACH,CAAC;IAED,sCAAsC;IAC9B,kBAAkB;QACxB,+BAA+B;QAC/B,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,MAAM,aAAa,GAAuB,EAAE,CAAC;QAC7C,IAAI,gBAAgB,GAAG,CAAC,CAAC;QAEzB,8BAA8B;QAC9B,MAAM,aAAa,GAAG,CAAC,CAAO,EAAE,EAAE;YAChC,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE;gBACzB,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;aAC7B;QACH,CAAC,CAAC;QACF,MAAM,aAAa,GAAG,CAAC,CAAO,EAAE,EAAE;YAChC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC;QACF,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC;QACpD,qCAAqC;QACrC,IAAI,CAAC,iBAAiB,CAAC,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;QAEtE,IAAI,IAAI,CAAC,KAAK,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5C,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;SAChD;QAED,yCAAyC;QACzC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,gBAAgB,CAAC;QACxC,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAED,wDAAwD;IAChD,iBAAiB,CAAC,OAA8B;QACtD,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QAC7D,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE;YAC5B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;gBAC3B,KAAK,CAAC,CAAS,CAAC,CAAC;aAClB;SACF;IACH,CAAC;;AAzZD,kDAAkD;AACnC,kBAAa,GAAa,EAAE,CAAC","sourcesContent":["import '@vaadin/vaadin-text-field/vaadin-integer-field';\n\nimport { CSSResultArray, PropertyDeclarations, TemplateResult, css, html } from 'lit-element';\nimport { ErrorScreen, I18N } from '../../../private/index';\nimport { ImageDescription, ItemInterface } from '../types';\n\nimport { Preview } from './Preview';\nimport { SignableFields } from './SignableFields';\n\n/**\n * This component allows a user to configure an item.\n *\n * The item may be configured using HTML properties or a JS object.\n *\n * @csspart picture - Image of the product in preview stack (for single products) or grid (for bundles).\n * @csspart item - The root element inside of the shadow dom.\n */\nexport class Item extends SignableFields {\n // A list of item properties as defined in Foxy Cart Documentation\n\n /** @readonly */\n static get styles(): CSSResultArray {\n return [\n super.styles,\n css`\n :host {\n --quantity-width: 6.5rem;\n --preview-size: 5.5rem;\n --threshold: 20rem;\n }\n\n .min-w-description::before {\n content: '';\n width: var(--threshold);\n display: block;\n overflow: hidden;\n }\n\n .ml-description {\n --min-width: calc(var(--threshold) + var(--preview-size) + var(--lumo-space-l));\n --free-space: calc(100% - var(--min-width));\n --max-margin-left: calc(var(--preview-size) + var(--lumo-space-l));\n --final-margin-left: clamp(0rem, var(--free-space) * 999999999, var(--max-margin-left));\n margin-left: var(--final-margin-left);\n }\n\n .mr-quantity {\n --min-width: var(--threshold);\n --free-space: calc(100% - var(--min-width));\n --max-margin-right: calc(var(--quantity-width) + var(--lumo-space-l));\n --final-margin-right: clamp(0rem, var(--free-space) * 999999999, var(--max-margin-right));\n margin-right: var(--final-margin-right);\n }\n\n :host([data-bundled]:not(:last-of-type)) .separator::after {\n content: ' ';\n display: block;\n position: absolute;\n width: 100vw;\n border-bottom: solid thin var(--lumo-shade-10pct);\n left: 0;\n bottom: 0;\n }\n\n .w-quantity {\n width: var(--quantity-width);\n }\n\n .w-preview {\n width: var(--preview-size);\n }\n\n .h-preview {\n height: var(--preview-size);\n }\n `,\n ];\n }\n\n /** @readonly */\n public static get scopedElements(): Record<string, unknown> {\n return {\n 'vaadin-integer-field': customElements.get('vaadin-integer-field'),\n 'x-error-screen': ErrorScreen,\n 'x-preview': Preview,\n 'x-i18n': I18N,\n };\n }\n\n /** @readonly */\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n __modified: {},\n readonly: { type: Boolean, reflect: true },\n currency: { type: String },\n category: { type: String },\n code: { type: String, reflect: true },\n expires: { type: String },\n height: { type: Number },\n image: { type: String },\n length: { type: Number },\n name: { type: String },\n parent_code: { type: String },\n price: { type: Number },\n quantity: { type: Number, reflect: true },\n quantity_max: { type: Number },\n quantity_min: { type: String },\n shipto: { type: String },\n total: { type: Number, reflect: true, attribute: 'total' },\n url: { type: String },\n value: { type: Object },\n weight: { type: Number },\n width: { type: Number },\n __childPrices: {},\n __childrenCount: {},\n __images: {},\n alt: { type: String },\n isChildItem: { type: Boolean, reflect: true, attribute: 'data-bundled' },\n isItem: { type: Boolean, reflect: true, attribute: 'data-item' },\n open: { type: Object },\n pid: { type: Number, reflect: true },\n items: { type: Array },\n };\n }\n\n public readonly rel = 'product_item';\n\n /**\n * **Required** the name of the item.\n *\n * **Example:** `\"Dog food\"`\n */\n public name?: string;\n\n /**\n * **Required** the price of a unit of this item\n *\n * **Example:** `10`\n */\n public price?: number;\n\n /**\n * Makes quantity input readonly.\n */\n public readonly = false;\n\n /**\n * Optional an image url to be displayed in the form.\n */\n public image?: string;\n\n /**\n * Optional the alt text for the image\n */\n public alt?: string;\n\n /**\n * Optional an image url to be displayed in the foxy cart once the custumer reaches the cart.\n */\n public url?: string;\n\n /**\n * Optional item code. This property affects cart UI only.\n * See [Products](https://wiki.foxycart.com/v/2.0/products) wiki for more details.\n *\n * **Example:** `\"ISBN 978-0-12-345678-9\"`\n */\n public code?: string | number;\n\n /**\n * Optional parent code. This property affects cart UI only.\n * It causes Foxy Cart to recognize the parent-child relationship between two items.\n *\n * Nested items set this property automatically.\n *\n * **Example:** `\"ISBN 978-0-12-345678-9\"`\n */\n public parent_code?: string | number;\n\n /**\n * **Required** The quantity of this item in the cart.\n */\n public quantity = 0;\n\n /**\n * Optional quantity max. The maximum number of items of these to be added.\n */\n public quantity_max?: number;\n\n /**\n * Optional quantity min. The minimum number of items of these to be added.\n */\n public quantity_min?: number;\n\n /**\n * Optional category. Sets the category this item is in.\n * See [Products](https://wiki.foxycart.com/v/2.0/products) wiki for more details.\n *\n * **Example:** `\"heavy\"`\n */\n public category?: string;\n\n /**\n * Optional expires. Sets the expiration time of this item.\n *\n * Advanced usage only: This property affects cart UI only.\n * This web component will not react to this property.\n *\n * The item cannot be purchased after expiration, but if it is part of a\n * subscription, it remains in the subscription as long as it stands.\n *\n * See [Products](https://wiki.foxycart.com/v/2.0/products) wiki for more details.\n *\n * **Example:** `15`\n */\n public expires?: string;\n\n /**\n * Optional per item weight. This property affects cart UI only.\n */\n public weight?: number;\n\n /**\n * Optional. Specify a ship-to address for a specific item.\n *\n * Advanced usage only: This property affects cart UI only.\n * This element does not provide any means for the user to specify this property.\n */\n public shipto?: string;\n\n /**\n * Optional length. This property affects cart UI only.\n */\n public length?: number;\n\n /**\n * Optional width. This property affects cart UI only.\n */\n public width?: number;\n\n /**\n * Optional height. This property affects cart UI only.\n */\n public height?: number;\n\n /**\n * The total price of this item.\n *\n * It takes into account child items and the quantity.\n */\n public total?: number = this.__computeTotalPrice();\n\n /**\n * 3-letter lowercase currency code.\n * It is provided by the form if not set.\n *\n * **Example:** `\"usd\"`\n */\n public currency = '';\n\n /** A boolean indicating that this element is a item **/\n protected isItem = true;\n\n /** Boolean indicating that this item is a child item */\n protected isChildItem = false;\n\n /**\n * A unique id set to the item. Advanced usage only.\n */\n public readonly pid: number = Item.__newId();\n\n // A list of all existing ids to guarantee unicity\n private static __existingIds: number[] = [];\n\n private __childItemsObserver?: MutationObserver;\n\n private __modified = false;\n\n private __childPrices: number[] = [];\n\n private __images: ImageDescription[] = [];\n\n private __childrenCount = 0;\n\n private __itemDescription = '';\n\n private __handleQuantity = {\n handleEvent: (ev: Event) => {\n const newValue = Number((ev.target as HTMLInputElement).value);\n this.quantity = newValue;\n this.__modified = true;\n this.__images = ([this.getImageDescription()] as ImageDescription[]).concat(\n this.__images.slice(1, this.__images.length)\n );\n },\n };\n\n public constructor() {\n super('items-form');\n this.__childItemsObserver = new MutationObserver(this.__observeItems.bind(this));\n this.__childItemsObserver.observe(this, {\n childList: true,\n attributes: false,\n subtree: true,\n });\n this.updateComplete.then(() => {\n this.__setCode();\n this.__acknowledgeChildItems();\n this.__changedChildItem();\n if (!this.__isValid()) {\n console.error('Invalid item', this.value);\n }\n });\n }\n\n /**\n * Each child item is an object that can have any of the public properties of this element.\n * Child elements will be created accordingly.\n */\n public get items(): ItemInterface[] {\n const items: ItemInterface[] = [];\n this.__onEachChildItem([i => items.push(i.value)]);\n return items;\n }\n\n /**\n * Creates child elements from ItemInterface[]\n */\n public set items(value: ItemInterface[]) {\n this.__createItems(value);\n }\n\n public get value(): ItemInterface {\n const r: Partial<Record<keyof ItemInterface, unknown>> = {};\n for (let i = 0; i < this.attributes.length; i++) {\n r[this.attributes[i].name] = this.attributes[i].value;\n }\n r.items = this.items;\n return r as ItemInterface;\n }\n\n public set value(v: ItemInterface) {\n this.__itemDescription = '';\n for (const k in v) {\n let attrValue = '';\n if (k == 'description') {\n this.__itemDescription = v[k] as string;\n continue;\n }\n if (typeof v[k as keyof ItemInterface] == 'object') {\n attrValue = JSON.stringify(v[k as keyof ItemInterface]);\n } else {\n const key = k as keyof ItemInterface;\n if ((v[key] && v[key] !== 'undefined') || v[key] === 0) {\n attrValue = v[k as keyof ItemInterface]!.toString();\n }\n }\n this.setAttribute(k, v[k as keyof ItemInterface] ? attrValue : '');\n }\n }\n\n public updated(changedProperties: Map<string, string>): void {\n changedProperties.forEach((oldValue, prop) => {\n if (prop == '__itemDescription' || prop == 'isChildItem') {\n this.__updateDescriptionEl();\n }\n });\n this.__setTotalPrice();\n this.dispatchEvent(new Event('change'));\n }\n\n public render(): TemplateResult {\n if (!this.__isValid()) {\n return html`<x-error-screen type=\"setup_needed\" class=\"relative\"></x-error-screen>`;\n }\n\n const removedStyle = this.quantity ? '' : 'removed opacity-50';\n const sharedStyle = `font-lumo text-body text-s leading-m transition duration-100 ${removedStyle}`;\n\n if (this.isChildItem) {\n return html`\n <article\n part=\"item\"\n class=\"py-s w-full relative separator item-summary flex justify-between ${sharedStyle}\"\n >\n <div class=\"description flex-1\">\n <h1 class=\"text-header font-medium\">${this.name}</h1>\n <section class=\"description text-secondary\">\n <slot></slot>\n </section>\n </div>\n\n ${this.quantity < 2\n ? ''\n : html`\n <section class=\"quantity font-medium text-tertiary whitespace-nowrap\">\n ${this._t('item.items', { quantity: this.quantity })}\n </section>\n `}\n </article>\n `;\n } else {\n const numericItemPrice = (this.price ?? 0) + this.__childPrices.reduce((p, c) => p + c, 0);\n const totalPrice = this.__translateAmount(numericItemPrice * this.quantity);\n const itemPrice = this.__translateAmount(numericItemPrice);\n\n return html`\n <article\n part=\"item\"\n class=\"p-l relative item ${sharedStyle} ${this.__modified ? 'modified' : ''}\"\n >\n <x-preview\n class=\"preview float-left w-preview h-preview mr-l mb-l\"\n exportparts=\"picture\"\n .image=${this.image}\n .quantity=${this.quantity}\n .items=${[...this.querySelectorAll('[data-bundled]')].map(child => ({\n quantity: (child as Item).quantity,\n image: (child as Item).image ?? '',\n }))}\n >\n </x-preview>\n\n <section class=\"description min-w-description ml-description\">\n <h1 class=\"text-header font-medium text-l leading-none mr-quantity mb-s\">\n ${this.name}\n </h1>\n\n <div class=\"item-description text-secondary mr-quantity mb-s\">\n <slot></slot>\n </div>\n\n <div class=\"child-items mb-s\">\n <slot name=\"items\"></slot>\n </div>\n\n ${itemPrice ? html`<div class=\"font-medium price text-l\">${itemPrice}</div>` : ''}\n </section>\n\n <section class=\"quantity w-quantity absolute top-0 right-0 m-l\">\n <vaadin-integer-field\n class=\"w-full p-0\"\n name=\"quantity\"\n @change=${this.__handleQuantity}\n value=\"${this.quantity}\"\n min=\"0\"\n has-controls\n ?readonly=${this.readonly}\n >\n </vaadin-integer-field>\n\n ${this.quantity > 1\n ? html`\n <x-i18n\n .ns=${this.ns}\n .lang=${this.lang}\n .opts=${{ amount: totalPrice }}\n class=\"price-total text-secondary text-xs text-center block mt-xs\"\n key=\"price.total\"\n >\n </x-i18n>\n `\n : ''}\n </section>\n </article>\n `;\n }\n }\n\n public getImageDescription(): ImageDescription {\n return {\n src: this.image,\n alt: this.alt,\n quantity: this.quantity,\n };\n }\n\n /**\n * Items have their signed names prefixed with their id.\n *\n * @argument fieldName the name of the field to get the signed version.\n * @argument open whether this field is editable by the user.\n * @returns signed version of the name, prefixed with the item id.\n */\n public signedName(fieldName: string): string {\n const signed = super.signedName(fieldName);\n return `${this.pid.toString()}:${signed}`;\n }\n\n /**\n * Creates a new unique id to be used in the form\n *\n * Ids are used to distinguish different items in a single form.\n * Ids are prepended to fields names to allow Foxy Cart to know to what\n * item a particular field relates.\n *\n * @return number the newly created id\n */\n private static __newId(): number {\n // Get the maximum value\n const newId = Item.__existingIds.reduce((accum, curr) => (curr > accum ? curr : accum), 0) + 1;\n Item.__existingIds.push(newId);\n return newId;\n }\n\n private __updateDescriptionEl() {\n if (this.__itemDescription) {\n let descEl: HTMLElement | null = this.shadowRoot!.querySelector('data-item-description');\n if (!descEl) {\n descEl = document.createElement('p') as HTMLElement;\n descEl.dataset.itemDescription = 'true';\n this.__addSlottedEl(descEl);\n }\n descEl.innerText = this.__itemDescription;\n } else {\n const descEl: HTMLElement | null = this.shadowRoot!.querySelector('data-item-description');\n if (descEl) descEl.remove();\n }\n }\n\n /**\n * Add an element to the default slot\n */\n private __addSlottedEl(el: HTMLElement) {\n const slot = this.shadowRoot!.querySelector('article');\n if (slot) {\n slot!.appendChild(el);\n }\n }\n\n /**\n * Creates a code if none is provided by the user\n */\n private __setCode(): void {\n if (!this.code) {\n this.code = `RAND${Math.random()}`;\n }\n }\n\n /**\n * Create child items from items field.\n */\n private __createItems(valuesArray: ItemInterface[]): void {\n valuesArray.forEach(p => {\n // Use a reference to the constructor of the instance in order to avoid issues in tests\n const item = document.createElement(this.tagName) as Item;\n item.value = p;\n item.currency = this.currency;\n item.__computeTotalPrice();\n this.__acknowledgeItem(item);\n this.appendChild(item);\n });\n }\n\n private __setTotalPrice(): void {\n this.total = this.__computeTotalPrice();\n }\n\n /**\n * The price of the total qty of each of the child items\n */\n private __computeTotalPrice(): number {\n if (!this.__childPrices) {\n if (!this.price) return 0;\n return this.price * this.quantity;\n }\n let myPrice = 0;\n this.__childPrices.forEach(p => {\n myPrice += p;\n });\n myPrice += this.price!;\n myPrice *= this.quantity;\n return myPrice;\n }\n\n /**\n * Constraints Items must eventually adhere to.\n **/\n private __isValid(): boolean {\n const error = [];\n if (!this.name || !this.name.length) {\n error.push('The name attribute of an item is required.');\n }\n if (!this.price && this.price !== 0) {\n error.push('The price attribute of an item is required.');\n }\n if (this.price && this.price! < 0) {\n error.push('Item added with negative price.');\n }\n if (this.quantity_min && this.quantity && this.quantity < this.quantity_min) {\n error.push('Quantity amount is less than minimum quantity.');\n }\n if (this.quantity_max && this.quantity && this.quantity > this.quantity_max) {\n error.push('Quantity amount is more than maximum quantity.');\n }\n console.error(...error);\n return !error.length;\n }\n\n private __translateAmount(amount: number) {\n if (!this.currency) {\n return '';\n }\n return amount.toLocaleString(this.lang, {\n minimumFractionDigits: 2,\n currency: this.currency,\n style: 'currency',\n });\n }\n\n private __observeItems(mutationList: MutationRecord[]): void {\n mutationList.forEach(m => {\n if (m.type == 'childList') {\n m.addedNodes.forEach(n => {\n if (n.nodeType === Node.DOCUMENT_NODE) {\n this.__acknowledgeItem(n as Item);\n }\n });\n }\n });\n this.__setTotalPrice();\n }\n\n private __acknowledgeChildItems() {\n this.shadowRoot\n ?.querySelectorAll('[data-item]')\n .forEach(e => this.__acknowledgeItem(e as Item));\n this.querySelectorAll('[data-item]').forEach(e => this.__acknowledgeItem(e as Item));\n }\n\n private __acknowledgeItem(e: Item): void {\n e.addEventListener('change', this.__changedChildItem.bind(this));\n e.currency = this.currency;\n e.isItem = false;\n e.isChildItem = true;\n e.setAttribute('data-bundled', '');\n if (this.code) {\n e.parent_code = this.code;\n }\n }\n\n /** React to changes in child items */\n private __changedChildItem() {\n // Reset child attributes lists\n const newItemPrices: number[] = [];\n const newItemImages: ImageDescription[] = [];\n let newChildrenCount = 0;\n\n // Create collection functions\n const collectPrices = (p: Item) => {\n if (p.total !== undefined) {\n newItemPrices.push(p.total);\n }\n };\n const collectImages = (p: Item) => {\n newItemImages.push(p.getImageDescription());\n };\n const countChildren = () => (newChildrenCount += 1);\n // Collect information of every child\n this.__onEachChildItem([collectPrices, collectImages, countChildren]);\n\n if (this.image && newItemImages.length === 0) {\n newItemImages.push(this.getImageDescription());\n }\n\n // Update atributes regarding child items\n this.__childPrices = newItemPrices;\n this.__images = newItemImages;\n this.__childrenCount = newChildrenCount;\n this.__setTotalPrice();\n }\n\n /** Execute a list of actions against all child items */\n private __onEachChildItem(actions: ((c: Item) => void)[]) {\n const myChildItems = this.querySelectorAll('[data-bundled]');\n for (const c of myChildItems) {\n for (const actOn of actions) {\n actOn(c as Item);\n }\n }\n }\n}\n"]}
|