@foxy.io/elements 1.28.0 → 1.29.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn/foxy-access-recovery-form.js +1 -1
- package/dist/cdn/foxy-address-card.js +5 -5
- package/dist/cdn/foxy-address-form.js +1 -1
- package/dist/cdn/foxy-admin-subscription-card.js +1 -1
- package/dist/cdn/foxy-api-browser.js +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 -1
- package/dist/cdn/foxy-cancellation-form.js +1 -1
- package/dist/cdn/foxy-cart-card.js +1 -1
- package/dist/cdn/foxy-cart-form.js +57 -1
- package/dist/cdn/foxy-client-card.js +1 -1
- package/dist/cdn/foxy-client-form.js +1 -1
- package/dist/cdn/foxy-collection-page.js +1 -1
- package/dist/cdn/foxy-collection-pages.js +1 -1
- package/dist/cdn/foxy-copy-to-clipboard.js +1 -1
- package/dist/cdn/foxy-coupon-card.js +1 -1
- package/dist/cdn/foxy-coupon-code-card.js +1 -1
- package/dist/cdn/foxy-coupon-code-form.js +1 -1
- package/dist/cdn/foxy-coupon-codes-form.js +1 -1
- package/dist/cdn/foxy-coupon-detail-card.js +1 -1
- package/dist/cdn/foxy-coupon-form.js +1 -1
- package/dist/cdn/foxy-custom-field-card.js +1 -1
- package/dist/cdn/foxy-custom-field-form.js +1 -1
- package/dist/cdn/foxy-customer-api.js +1 -1
- package/dist/cdn/foxy-customer-card.js +1 -1
- package/dist/cdn/foxy-customer-form.js +1 -1
- package/dist/cdn/foxy-customer-portal-settings-form.js +1 -1
- package/dist/cdn/foxy-customer-portal-settings.js +1 -1
- package/dist/cdn/foxy-customer-portal.js +2 -2
- package/dist/cdn/foxy-customer.js +4 -4
- 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-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 +3 -3
- package/dist/cdn/foxy-item-option-card.js +1 -1
- package/dist/cdn/foxy-item-option-form.js +1 -1
- package/dist/cdn/foxy-items-form.js +1 -1
- package/dist/cdn/foxy-native-integration-card.js +1 -1
- package/dist/cdn/foxy-native-integration-form.js +1 -1
- package/dist/cdn/foxy-nucleon-element.js +1 -1
- package/dist/cdn/foxy-pagination.js +1 -1
- package/dist/cdn/foxy-passkey-card.js +1 -1
- package/dist/cdn/foxy-passkey-form.js +1 -1
- package/dist/cdn/foxy-payment-card-embed.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 +1 -1
- package/dist/cdn/foxy-reports-table.js +5 -5
- package/dist/cdn/foxy-shipment-card.js +1 -1
- package/dist/cdn/foxy-shipping-container-card.js +1 -1
- package/dist/cdn/foxy-shipping-drop-type-card.js +1 -1
- package/dist/cdn/foxy-shipping-method-card.js +1 -1
- package/dist/cdn/foxy-shipping-service-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 +1 -1
- package/dist/cdn/foxy-subscription-settings-form.js +1 -1
- package/dist/cdn/foxy-subscriptions-table.js +1 -1
- package/dist/cdn/foxy-table.js +1 -1
- package/dist/cdn/foxy-tax-card.js +1 -1
- package/dist/cdn/foxy-tax-form.js +1 -1
- package/dist/cdn/foxy-template-config-form.js +1 -1
- package/dist/cdn/foxy-template-form.js +1 -1
- package/dist/cdn/foxy-template-set-card.js +1 -1
- package/dist/cdn/foxy-template-set-form.js +1 -1
- package/dist/cdn/foxy-transaction-card.js +1 -1
- package/dist/cdn/foxy-transaction.js +1 -1
- package/dist/cdn/foxy-transactions-table.js +7 -7
- package/dist/cdn/foxy-update-payment-method-form.js +1 -1
- 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-c2128988.js → shared-01b2cad8.js} +1 -1
- package/dist/cdn/{shared-a05fe56c.js → shared-02d9cca5.js} +1 -1
- package/dist/cdn/{shared-57e4bcb0.js → shared-06119334.js} +1 -1
- package/dist/cdn/{shared-23061fb2.js → shared-088655e0.js} +1 -1
- package/dist/cdn/{shared-fee535ca.js → shared-0b01f721.js} +1 -1
- package/dist/cdn/{shared-f300193c.js → shared-0b5eb6d1.js} +1 -1
- package/dist/cdn/{shared-701157ac.js → shared-0f6e4584.js} +1 -1
- package/dist/cdn/{shared-293f9c07.js → shared-1101a938.js} +1 -1
- package/dist/cdn/{shared-042969fe.js → shared-12a7a15d.js} +1 -1
- package/dist/cdn/{shared-b44cf5a9.js → shared-1a6877b1.js} +1 -1
- package/dist/cdn/shared-248c08ac.js +1 -0
- package/dist/cdn/{shared-cbeb8587.js → shared-24d71d01.js} +1 -1
- package/dist/cdn/{shared-b3681c71.js → shared-2ae42363.js} +1 -1
- package/dist/cdn/{shared-44b101d0.js → shared-30792d92.js} +1 -1
- package/dist/cdn/shared-30e7450c.js +1 -0
- package/dist/cdn/{shared-414a0c9b.js → shared-39c40d76.js} +1 -1
- package/dist/cdn/{shared-58095d4b.js → shared-3df30d85.js} +1 -1
- package/dist/cdn/shared-3f0e394a.js +1 -0
- package/dist/cdn/{shared-a08d509a.js → shared-4b7f8c12.js} +1 -1
- package/dist/cdn/{shared-32cac4bd.js → shared-4f0975c8.js} +3 -3
- package/dist/cdn/{shared-80c6f97e.js → shared-4feadd89.js} +1 -1
- package/dist/cdn/{shared-a28c9952.js → shared-509a1775.js} +1 -1
- package/dist/cdn/{shared-baaa1e47.js → shared-50db6104.js} +1 -1
- package/dist/cdn/{shared-ecec6a10.js → shared-522a172d.js} +1 -1
- package/dist/cdn/{shared-fad783a0.js → shared-5318a742.js} +1 -1
- package/dist/cdn/shared-55b621e8.js +1 -0
- package/dist/cdn/{shared-fd410dee.js → shared-5860410a.js} +1 -1
- package/dist/cdn/{shared-484b31eb.js → shared-59978b05.js} +1 -1
- package/dist/cdn/{shared-ae200b9f.js → shared-5ec4c4b3.js} +1 -1
- package/dist/cdn/shared-61c0bc51.js +1 -0
- package/dist/cdn/{shared-850e441a.js → shared-6271dae8.js} +1 -1
- package/dist/cdn/shared-6474675f.js +1 -0
- package/dist/cdn/{shared-e4cc1191.js → shared-64d3d924.js} +1 -1
- package/dist/cdn/shared-64fcd0da.js +1 -0
- package/dist/cdn/{shared-25c57c74.js → shared-665965d3.js} +1 -1
- package/dist/cdn/{shared-4761504a.js → shared-67aa8143.js} +1 -1
- package/dist/cdn/{shared-059680a0.js → shared-69a37aba.js} +1 -1
- package/dist/cdn/{shared-bb35ee61.js → shared-6ac0d05e.js} +1 -1
- package/dist/cdn/{shared-7063f5af.js → shared-6d645dc5.js} +1 -1
- package/dist/cdn/{shared-c0e56e97.js → shared-704ad583.js} +1 -1
- package/dist/cdn/{shared-add044d3.js → shared-70d41727.js} +1 -1
- package/dist/cdn/{shared-6d1556a0.js → shared-730e6ac7.js} +1 -1
- package/dist/cdn/{shared-80b9cb48.js → shared-74a6f365.js} +1 -1
- package/dist/cdn/{shared-421708b0.js → shared-7e39ec54.js} +1 -1
- package/dist/cdn/{shared-ec696e1b.js → shared-80bfcae3.js} +1 -1
- package/dist/cdn/{shared-9f44b81f.js → shared-83451a72.js} +1 -1
- package/dist/cdn/{shared-aac73acd.js → shared-84c5aab1.js} +1 -1
- package/dist/cdn/{shared-cfdd6c21.js → shared-8d6749b3.js} +1 -1
- package/dist/cdn/{shared-49d678ad.js → shared-91f5e0b3.js} +1 -1
- package/dist/cdn/shared-94bae3fb.js +1 -0
- package/dist/cdn/{shared-24586cfb.js → shared-94ddc918.js} +1 -1
- package/dist/cdn/shared-963d252e.js +1 -0
- package/dist/cdn/{shared-cf9c48f9.js → shared-9da63461.js} +1 -1
- package/dist/cdn/shared-9db46672.js +1 -0
- package/dist/cdn/{shared-ba5c9c0b.js → shared-9df5667e.js} +1 -1
- package/dist/cdn/{shared-ae462b8e.js → shared-9ee0844c.js} +1 -1
- package/dist/cdn/{shared-a79dbeb9.js → shared-a3abd1de.js} +1 -1
- package/dist/cdn/{shared-b42c6fe3.js → shared-a636184a.js} +1 -1
- package/dist/cdn/{shared-bba917bf.js → shared-a917b3e5.js} +1 -1
- package/dist/cdn/{shared-9ee719e6.js → shared-ae013b1a.js} +1 -1
- package/dist/cdn/shared-b4d20b03.js +1 -0
- package/dist/cdn/{shared-4b209827.js → shared-b5cd2b39.js} +1 -1
- package/dist/cdn/{shared-f91d5706.js → shared-bc0421a7.js} +1 -1
- package/dist/cdn/{shared-1708eb3c.js → shared-bc409d96.js} +1 -1
- package/dist/cdn/{shared-f2335b72.js → shared-bedfd929.js} +2 -2
- package/dist/cdn/{shared-59d8b64e.js → shared-c1b96673.js} +1 -1
- package/dist/cdn/shared-c286c5ad.js +1 -0
- package/dist/cdn/{shared-2e6bda84.js → shared-c47c9449.js} +1 -1
- package/dist/cdn/{shared-66084f2e.js → shared-c5a48553.js} +1 -1
- package/dist/cdn/{shared-789e3185.js → shared-cc4dabfb.js} +1 -1
- package/dist/cdn/{shared-0ed41a9e.js → shared-cfe1bd8c.js} +1 -1
- package/dist/cdn/shared-d6b4d84f.js +1 -0
- package/dist/cdn/{shared-2782886e.js → shared-ddde3914.js} +1 -1
- package/dist/cdn/{shared-824d0804.js → shared-deab9fa5.js} +1 -1
- package/dist/cdn/{shared-5c1e607b.js → shared-dfab3fb1.js} +1 -1
- package/dist/cdn/{shared-c4f5b03b.js → shared-e5a04929.js} +1 -1
- package/dist/cdn/{shared-fbfa45bb.js → shared-ee36b83f.js} +1 -1
- package/dist/cdn/{shared-7004839c.js → shared-ee67d0e4.js} +2 -2
- package/dist/cdn/{shared-41d57c3b.js → shared-ef2b5ceb.js} +1 -1
- package/dist/cdn/{shared-a4e0a78b.js → shared-f1e4e392.js} +1 -1
- package/dist/cdn/{shared-db108ddb.js → shared-f293f1ae.js} +1 -1
- package/dist/cdn/{shared-a5c48bf4.js → shared-f7a1193f.js} +1 -1
- package/dist/cdn/translations/address-form/en.json +3 -3
- package/dist/cdn/translations/api-browser/en.json +2 -5
- package/dist/cdn/translations/cart-form/en.json +598 -169
- package/dist/cdn/translations/customer/en.json +3 -3
- package/dist/cdn/translations/item-form/en.json +0 -1
- package/dist/elements/internal/InternalCalendar/InternalCalendar.js +2 -1
- package/dist/elements/internal/InternalCalendar/InternalCalendar.js.map +1 -1
- package/dist/elements/internal/InternalCard/InternalCard.js +1 -1
- package/dist/elements/internal/InternalCard/InternalCard.js.map +1 -1
- package/dist/elements/internal/InternalControl/InternalControl.d.ts +1 -0
- package/dist/elements/internal/InternalControl/InternalControl.js +10 -7
- package/dist/elements/internal/InternalControl/InternalControl.js.map +1 -1
- package/dist/elements/internal/InternalForm/InternalForm.d.ts +2 -0
- package/dist/elements/internal/InternalForm/InternalForm.js +26 -29
- package/dist/elements/internal/InternalForm/InternalForm.js.map +1 -1
- package/dist/elements/internal/InternalResourcePickerControl/InternalResourcePickerControl.d.ts +11 -1
- package/dist/elements/internal/InternalResourcePickerControl/InternalResourcePickerControl.js +115 -20
- package/dist/elements/internal/InternalResourcePickerControl/InternalResourcePickerControl.js.map +1 -1
- package/dist/elements/internal/InternalResourcePickerControl/InternalResourcePickerControlForm.js +0 -4
- package/dist/elements/internal/InternalResourcePickerControl/InternalResourcePickerControlForm.js.map +1 -1
- package/dist/elements/internal/InternalResourcePickerControl/index.d.ts +2 -0
- package/dist/elements/internal/InternalResourcePickerControl/index.js +2 -0
- package/dist/elements/internal/InternalResourcePickerControl/index.js.map +1 -1
- package/dist/elements/internal/InternalSelectControl/InternalSelectControl.d.ts +4 -1
- package/dist/elements/internal/InternalSelectControl/InternalSelectControl.js +70 -2
- package/dist/elements/internal/InternalSelectControl/InternalSelectControl.js.map +1 -1
- package/dist/elements/internal/InternalSummaryControl/InternalSummaryControl.d.ts +8 -0
- package/dist/elements/internal/InternalSummaryControl/InternalSummaryControl.js +28 -0
- package/dist/elements/internal/InternalSummaryControl/InternalSummaryControl.js.map +1 -0
- package/dist/elements/internal/InternalSummaryControl/index.d.ts +4 -0
- package/dist/elements/internal/InternalSummaryControl/index.js +6 -0
- package/dist/elements/internal/InternalSummaryControl/index.js.map +1 -0
- package/dist/elements/internal/InternalSwitchControl/InternalSwitchControl.d.ts +7 -0
- package/dist/elements/internal/InternalSwitchControl/InternalSwitchControl.js +75 -0
- package/dist/elements/internal/InternalSwitchControl/InternalSwitchControl.js.map +1 -0
- package/dist/elements/internal/InternalSwitchControl/index.d.ts +4 -0
- package/dist/elements/internal/InternalSwitchControl/index.js +6 -0
- package/dist/elements/internal/InternalSwitchControl/index.js.map +1 -0
- package/dist/elements/internal/InternalTextControl/InternalTextControl.d.ts +4 -1
- package/dist/elements/internal/InternalTextControl/InternalTextControl.js +74 -1
- package/dist/elements/internal/InternalTextControl/InternalTextControl.js.map +1 -1
- package/dist/elements/private/Dialog/Dialog.js +1 -1
- package/dist/elements/private/Dialog/Dialog.js.map +1 -1
- package/dist/elements/public/AddressForm/AddressForm.d.ts +1 -1
- package/dist/elements/public/AddressForm/AddressForm.js +5 -5
- package/dist/elements/public/AddressForm/AddressForm.js.map +1 -1
- package/dist/elements/public/ApiBrowser/internal/InternalApiBrowserResourceForm/InternalApiBrowserResourceForm.js +4 -1
- package/dist/elements/public/ApiBrowser/internal/InternalApiBrowserResourceForm/InternalApiBrowserResourceForm.js.map +1 -1
- package/dist/elements/public/AttributeCard/AttributeCard.js +3 -4
- package/dist/elements/public/AttributeCard/AttributeCard.js.map +1 -1
- package/dist/elements/public/CartForm/CartForm.d.ts +17 -35
- package/dist/elements/public/CartForm/CartForm.js +264 -502
- package/dist/elements/public/CartForm/CartForm.js.map +1 -1
- package/dist/elements/public/CartForm/index.d.ts +10 -5
- package/dist/elements/public/CartForm/index.js +10 -5
- package/dist/elements/public/CartForm/index.js.map +1 -1
- package/dist/elements/public/CartForm/internal/InternalCartFormAddressSummaryItem/InternalCartFormAddressSummaryItem.d.ts +33 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormAddressSummaryItem/InternalCartFormAddressSummaryItem.js +293 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormAddressSummaryItem/InternalCartFormAddressSummaryItem.js.map +1 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormAddressSummaryItem/index.d.ts +7 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormAddressSummaryItem/index.js +9 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormAddressSummaryItem/index.js.map +1 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormAddressSummaryItem/style.d.ts +1 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormAddressSummaryItem/style.js +58 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormAddressSummaryItem/style.js.map +1 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormAddressSummaryItem/types.d.ts +11 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormAddressSummaryItem/types.js +2 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormAddressSummaryItem/types.js.map +1 -0
- package/dist/elements/public/CartForm/internal/{InternalCartFormViewAsCustomerControl/InternalCartFormViewAsCustomerControl.d.ts → InternalCartFormCreateSessionAction/InternalCartFormCreateSessionAction.d.ts} +1 -1
- package/dist/elements/public/CartForm/internal/{InternalCartFormViewAsCustomerControl/InternalCartFormViewAsCustomerControl.js → InternalCartFormCreateSessionAction/InternalCartFormCreateSessionAction.js} +5 -5
- package/dist/elements/public/CartForm/internal/InternalCartFormCreateSessionAction/InternalCartFormCreateSessionAction.js.map +1 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormCreateSessionAction/index.d.ts +4 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormCreateSessionAction/index.js +6 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormCreateSessionAction/index.js.map +1 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodCard/InternalCartFormPaymentMethodCard.d.ts +6 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodCard/InternalCartFormPaymentMethodCard.js +35 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodCard/InternalCartFormPaymentMethodCard.js.map +1 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodCard/index.d.ts +4 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodCard/index.js +6 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodCard/index.js.map +1 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodCard/types.d.ts +5 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodCard/types.js +2 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodCard/types.js.map +1 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodForm/InternalCartFormPaymentMethodForm.d.ts +13 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodForm/InternalCartFormPaymentMethodForm.js +68 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodForm/InternalCartFormPaymentMethodForm.js.map +1 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodForm/index.d.ts +6 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodForm/index.js +8 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodForm/index.js.map +1 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodForm/types.d.ts +5 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodForm/types.js +2 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormPaymentMethodForm/types.js.map +1 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormTotalsControl/InternalCartFormTotalsControl.d.ts +9 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormTotalsControl/InternalCartFormTotalsControl.js +91 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormTotalsControl/InternalCartFormTotalsControl.js.map +1 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormTotalsControl/index.d.ts +5 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormTotalsControl/index.js +7 -0
- package/dist/elements/public/CartForm/internal/InternalCartFormTotalsControl/index.js.map +1 -0
- package/dist/elements/public/CartForm/types.d.ts +11 -1
- package/dist/elements/public/CartForm/types.js.map +1 -1
- package/dist/elements/public/CustomFieldCard/TwoLineCard.js +1 -1
- package/dist/elements/public/CustomFieldCard/TwoLineCard.js.map +1 -1
- package/dist/elements/public/FormDialog/FormDialog.d.ts +2 -0
- package/dist/elements/public/FormDialog/FormDialog.js +7 -3
- package/dist/elements/public/FormDialog/FormDialog.js.map +1 -1
- package/dist/mixins/themeable.js +14 -6
- package/dist/mixins/themeable.js.map +1 -1
- package/package.json +1 -1
- package/dist/cdn/shared-004fc193.js +0 -1
- package/dist/cdn/shared-08d018f5.js +0 -1
- package/dist/cdn/shared-0da6e42c.js +0 -1
- package/dist/cdn/shared-0e038fda.js +0 -1
- package/dist/cdn/shared-1d8edd03.js +0 -1
- package/dist/cdn/shared-365c8437.js +0 -1
- package/dist/cdn/shared-57266e2a.js +0 -1
- package/dist/cdn/shared-5cb6aca6.js +0 -1
- package/dist/cdn/shared-6740ee7a.js +0 -1
- package/dist/cdn/shared-7af96c0a.js +0 -1
- package/dist/cdn/shared-8f0251e9.js +0 -1
- package/dist/cdn/shared-b6376c8f.js +0 -1
- package/dist/cdn/shared-d82f9e35.js +0 -1
- package/dist/elements/public/CartForm/internal/InternalCartFormViewAsCustomerControl/InternalCartFormViewAsCustomerControl.js.map +0 -1
- package/dist/elements/public/CartForm/internal/InternalCartFormViewAsCustomerControl/index.d.ts +0 -4
- package/dist/elements/public/CartForm/internal/InternalCartFormViewAsCustomerControl/index.js +0 -6
- package/dist/elements/public/CartForm/internal/InternalCartFormViewAsCustomerControl/index.js.map +0 -1
|
@@ -28,11 +28,11 @@
|
|
|
28
28
|
},
|
|
29
29
|
"address-form": {
|
|
30
30
|
"header": {
|
|
31
|
+
"title_default_shipping": "Default shipping address",
|
|
32
|
+
"title_default_billing": "Default billing address",
|
|
31
33
|
"title_existing": "Customer address #{{ id }}",
|
|
32
34
|
"title_new": "New customer address",
|
|
33
|
-
"
|
|
34
|
-
"subtitle_default_billing": "Default billing address",
|
|
35
|
-
"subtitle_custom": "Custom address",
|
|
35
|
+
"subtitle": "",
|
|
36
36
|
"copy-id": {
|
|
37
37
|
"failed_to_copy": "Failed to copy",
|
|
38
38
|
"click_to_copy": "Copy ID",
|
|
@@ -130,7 +130,8 @@ export class InternalCalendar extends ThemeableMixin(LitElement) {
|
|
|
130
130
|
return html `
|
|
131
131
|
<label
|
|
132
132
|
class=${classMap({
|
|
133
|
-
'
|
|
133
|
+
'relative flex w-m h-m items-center justify-center rounded-s': true,
|
|
134
|
+
'font-tnum text-l select-none leading-none': true,
|
|
134
135
|
'cursor-pointer focus-within-ring-2 focus-within-ring-primary-50': !disabled,
|
|
135
136
|
'bg-contrast-5 hover-bg-contrast-10': !checked && !disabled,
|
|
136
137
|
'bg-primary text-primary-contrast': checked && !disabled,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InternalCalendar.js","sourceRoot":"","sources":["../../../../src/elements/internal/InternalCalendar/InternalCalendar.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, PropertyDeclarations, TemplateResult, html } from 'lit-element';\n\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { classMap } from '../../../utils/class-map';\nimport { parseDate } from '../../../utils/parse-date';\nimport { serializeDate } from '../../../utils/serialize-date';\n\nexport class InternalCalendar extends ThemeableMixin(LitElement) {\n static get properties(): PropertyDeclarations {\n return {\n checkAvailability: { attribute: false },\n readonly: { type: Boolean, reflect: true },\n disabled: { type: Boolean, reflect: true },\n value: { type: String },\n start: { type: String },\n lang: { type: String },\n };\n }\n\n checkAvailability: (date: Date) => boolean = () => true;\n\n readonly = false;\n\n disabled = false;\n\n value = '';\n\n start = '';\n\n lang = '';\n\n render(): TemplateResult {\n const thisMonth = new Date(this.__startAsDate ?? this.__valueAsDate ?? Date.now());\n const prevMonth = new Date(thisMonth);\n const nextMonth = new Date(thisMonth);\n const lang = this.lang || navigator.language;\n\n prevMonth.setMonth(prevMonth.getMonth() - 1);\n nextMonth.setMonth(nextMonth.getMonth() + 1);\n\n return html`\n <div class=\"text-m text-body font-lumo leading-m\">\n <div class=\"grid p-xs\" style=\"grid-template: auto / max-content auto max-content\">\n <vaadin-button\n data-testid=\"prev\"\n aria-label=${prevMonth.toLocaleString(lang, { year: 'numeric', month: 'long' })}\n theme=\"icon tertiary\"\n class=\"px-xs\"\n ?disabled=${this.disabled}\n @click=${this.__handlePrevButtonClick}\n >\n <iron-icon icon=\"icons:chevron-left\"></iron-icon>\n </vaadin-button>\n\n <span\n data-testid=\"month\"\n class=${classMap({\n 'text-center self-center font-medium': true,\n 'text-disabled': this.disabled,\n })}\n >\n ${thisMonth.toLocaleDateString(lang, { month: 'long', year: 'numeric' })}\n </span>\n\n <vaadin-button\n data-testid=\"next\"\n aria-label=${nextMonth.toLocaleString(lang, { year: 'numeric', month: 'long' })}\n theme=\"icon tertiary\"\n class=\"px-xs\"\n ?disabled=${this.disabled}\n @click=${this.__handleNextButtonClick}\n >\n <iron-icon icon=\"icons:chevron-right\"></iron-icon>\n </vaadin-button>\n </div>\n\n ${this.__renderMonth(thisMonth.getMonth(), thisMonth.getFullYear())}\n </div>\n `;\n }\n\n private get __valueAsDate(): Date | null {\n return parseDate(this.value);\n }\n\n private set __valueAsDate(value: Date | null) {\n this.value = value ? serializeDate(value) : '';\n }\n\n private get __startAsDate(): Date | null {\n return parseDate(this.start);\n }\n\n private set __startAsDate(value: Date | null) {\n this.start = value ? serializeDate(value) : '';\n }\n\n private __renderMonth(month: number, year: number) {\n const lang = this.lang || navigator.language;\n const date = new Date(year, month, 1, 0, 0, 0, 0);\n const items: TemplateResult[] = [];\n\n for (let i = 0; i < 7; ++i) {\n const weekdayDate = new Date();\n while (weekdayDate.getDay() !== i) weekdayDate.setDate(weekdayDate.getDate() + 1);\n\n items.push(html`\n <span\n class=${classMap({\n 'self-center text-xxs uppercase font-medium tracking-wider': true,\n 'text-secondary': !this.disabled,\n 'text-disabled': this.disabled,\n })}\n >\n ${weekdayDate.toLocaleString(lang, { weekday: 'short' })}\n </span>\n `);\n }\n\n while (date.getMonth() === month) {\n const checked =\n date.getFullYear() === this.__valueAsDate?.getFullYear() &&\n date.getMonth() === this.__valueAsDate?.getMonth() &&\n date.getDate() === this.__valueAsDate?.getDate();\n\n items.push(html`\n <div style=\"grid-column: ${date.getDay() + 1}\" data-testclass=\"day-of-month\">\n ${this.__renderDate(date.getDate(), month, year, checked)}\n </div>\n `);\n\n date.setDate(date.getDate() + 1);\n }\n\n return html`\n <form\n data-testid=\"grid\"\n class=\"grid gap-s p-s text-center\"\n style=\"grid-template: auto / repeat(7, 1fr);\"\n >\n ${items}\n </form>\n `;\n }\n\n private __renderDate(date: number, month: number, year: number, checked = false) {\n const disabled =\n this.disabled || this.readonly || !this.checkAvailability(new Date(year, month, date));\n\n return html`\n <label\n class=${classMap({\n 'font-tnum select-none relative flex h-m items-center justify-center rounded': true,\n 'cursor-pointer focus-within-ring-2 focus-within-ring-primary-50': !disabled,\n 'bg-contrast-5 hover-bg-contrast-10': !checked && !disabled,\n 'bg-primary text-primary-contrast': checked && !disabled,\n 'border border-dashed border-contrast-20 text-disabled': !checked && disabled,\n 'border border-dashed border-primary text-primary': checked && disabled,\n })}\n >\n <input\n name=\"date\"\n type=\"radio\"\n value=${date}\n class=\"sr-only\"\n ?disabled=${this.readonly || this.disabled || disabled}\n @change=${() => {\n this.__valueAsDate = new Date(year, month, date);\n this.dispatchEvent(new CustomEvent('change'));\n }}\n />\n\n ${date}\n </label>\n `;\n }\n\n private __handlePrevButtonClick() {\n const currentStart = this.__startAsDate ?? new Date();\n this.__startAsDate = new Date(currentStart.setMonth(currentStart.getMonth() - 1));\n }\n\n private __handleNextButtonClick() {\n const currentStart = this.__startAsDate ?? new Date();\n this.__startAsDate = new Date(currentStart.setMonth(currentStart.getMonth() + 1));\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"InternalCalendar.js","sourceRoot":"","sources":["../../../../src/elements/internal/InternalCalendar/InternalCalendar.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, PropertyDeclarations, TemplateResult, html } from 'lit-element';\n\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { classMap } from '../../../utils/class-map';\nimport { parseDate } from '../../../utils/parse-date';\nimport { serializeDate } from '../../../utils/serialize-date';\n\nexport class InternalCalendar extends ThemeableMixin(LitElement) {\n static get properties(): PropertyDeclarations {\n return {\n checkAvailability: { attribute: false },\n readonly: { type: Boolean, reflect: true },\n disabled: { type: Boolean, reflect: true },\n value: { type: String },\n start: { type: String },\n lang: { type: String },\n };\n }\n\n checkAvailability: (date: Date) => boolean = () => true;\n\n readonly = false;\n\n disabled = false;\n\n value = '';\n\n start = '';\n\n lang = '';\n\n render(): TemplateResult {\n const thisMonth = new Date(this.__startAsDate ?? this.__valueAsDate ?? Date.now());\n const prevMonth = new Date(thisMonth);\n const nextMonth = new Date(thisMonth);\n const lang = this.lang || navigator.language;\n\n prevMonth.setMonth(prevMonth.getMonth() - 1);\n nextMonth.setMonth(nextMonth.getMonth() + 1);\n\n return html`\n <div class=\"text-m text-body font-lumo leading-m\">\n <div class=\"grid p-xs\" style=\"grid-template: auto / max-content auto max-content\">\n <vaadin-button\n data-testid=\"prev\"\n aria-label=${prevMonth.toLocaleString(lang, { year: 'numeric', month: 'long' })}\n theme=\"icon tertiary\"\n class=\"px-xs\"\n ?disabled=${this.disabled}\n @click=${this.__handlePrevButtonClick}\n >\n <iron-icon icon=\"icons:chevron-left\"></iron-icon>\n </vaadin-button>\n\n <span\n data-testid=\"month\"\n class=${classMap({\n 'text-center self-center font-medium': true,\n 'text-disabled': this.disabled,\n })}\n >\n ${thisMonth.toLocaleDateString(lang, { month: 'long', year: 'numeric' })}\n </span>\n\n <vaadin-button\n data-testid=\"next\"\n aria-label=${nextMonth.toLocaleString(lang, { year: 'numeric', month: 'long' })}\n theme=\"icon tertiary\"\n class=\"px-xs\"\n ?disabled=${this.disabled}\n @click=${this.__handleNextButtonClick}\n >\n <iron-icon icon=\"icons:chevron-right\"></iron-icon>\n </vaadin-button>\n </div>\n\n ${this.__renderMonth(thisMonth.getMonth(), thisMonth.getFullYear())}\n </div>\n `;\n }\n\n private get __valueAsDate(): Date | null {\n return parseDate(this.value);\n }\n\n private set __valueAsDate(value: Date | null) {\n this.value = value ? serializeDate(value) : '';\n }\n\n private get __startAsDate(): Date | null {\n return parseDate(this.start);\n }\n\n private set __startAsDate(value: Date | null) {\n this.start = value ? serializeDate(value) : '';\n }\n\n private __renderMonth(month: number, year: number) {\n const lang = this.lang || navigator.language;\n const date = new Date(year, month, 1, 0, 0, 0, 0);\n const items: TemplateResult[] = [];\n\n for (let i = 0; i < 7; ++i) {\n const weekdayDate = new Date();\n while (weekdayDate.getDay() !== i) weekdayDate.setDate(weekdayDate.getDate() + 1);\n\n items.push(html`\n <span\n class=${classMap({\n 'self-center text-xxs uppercase font-medium tracking-wider': true,\n 'text-secondary': !this.disabled,\n 'text-disabled': this.disabled,\n })}\n >\n ${weekdayDate.toLocaleString(lang, { weekday: 'short' })}\n </span>\n `);\n }\n\n while (date.getMonth() === month) {\n const checked =\n date.getFullYear() === this.__valueAsDate?.getFullYear() &&\n date.getMonth() === this.__valueAsDate?.getMonth() &&\n date.getDate() === this.__valueAsDate?.getDate();\n\n items.push(html`\n <div style=\"grid-column: ${date.getDay() + 1}\" data-testclass=\"day-of-month\">\n ${this.__renderDate(date.getDate(), month, year, checked)}\n </div>\n `);\n\n date.setDate(date.getDate() + 1);\n }\n\n return html`\n <form\n data-testid=\"grid\"\n class=\"grid gap-s p-s text-center\"\n style=\"grid-template: auto / repeat(7, 1fr);\"\n >\n ${items}\n </form>\n `;\n }\n\n private __renderDate(date: number, month: number, year: number, checked = false) {\n const disabled =\n this.disabled || this.readonly || !this.checkAvailability(new Date(year, month, date));\n\n return html`\n <label\n class=${classMap({\n 'relative flex w-m h-m items-center justify-center rounded-s': true,\n 'font-tnum text-l select-none leading-none': true,\n 'cursor-pointer focus-within-ring-2 focus-within-ring-primary-50': !disabled,\n 'bg-contrast-5 hover-bg-contrast-10': !checked && !disabled,\n 'bg-primary text-primary-contrast': checked && !disabled,\n 'border border-dashed border-contrast-20 text-disabled': !checked && disabled,\n 'border border-dashed border-primary text-primary': checked && disabled,\n })}\n >\n <input\n name=\"date\"\n type=\"radio\"\n value=${date}\n class=\"sr-only\"\n ?disabled=${this.readonly || this.disabled || disabled}\n @change=${() => {\n this.__valueAsDate = new Date(year, month, date);\n this.dispatchEvent(new CustomEvent('change'));\n }}\n />\n\n ${date}\n </label>\n `;\n }\n\n private __handlePrevButtonClick() {\n const currentStart = this.__startAsDate ?? new Date();\n this.__startAsDate = new Date(currentStart.setMonth(currentStart.getMonth() - 1));\n }\n\n private __handleNextButtonClick() {\n const currentStart = this.__startAsDate ?? new Date();\n this.__startAsDate = new Date(currentStart.setMonth(currentStart.getMonth() + 1));\n }\n}\n"]}
|
|
@@ -40,13 +40,13 @@ export class InternalCard extends ThemeableMixin(NucleonElement) {
|
|
|
40
40
|
<div
|
|
41
41
|
class=${classMap({
|
|
42
42
|
'transition duration-500 ease-in-out absolute inset-0 flex': true,
|
|
43
|
+
'items-center justify-center': true,
|
|
43
44
|
'opacity-0 pointer-events-none': this.isBodyReady,
|
|
44
45
|
})}
|
|
45
46
|
>
|
|
46
47
|
<foxy-spinner
|
|
47
48
|
layout=${spinnerState === 'busy' ? 'no-label' : 'horizontal'}
|
|
48
49
|
state=${spinnerState}
|
|
49
|
-
class="m-auto"
|
|
50
50
|
infer="spinner"
|
|
51
51
|
>
|
|
52
52
|
</foxy-spinner>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InternalCard.js","sourceRoot":"","sources":["../../../../src/elements/internal/InternalCard/InternalCard.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,qCAAkC;AAC3D,OAAO,EAAE,cAAc,EAAE,sDAAmD;AAC5E,OAAO,EAAE,QAAQ,EAAE,oCAAiC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,OAAO,YAAiC,SAAQ,cAAc,CAAC,cAAc,CAAQ;IACzF;;;OAGG;IACH,UAAU;QACR,OAAO,IAAI,CAAA,EAAE,CAAC;IAChB,CAAC;IAED,MAAM;QACJ,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;YAClC,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;gBAC/B,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,MAAM,CAAC;QAEX,OAAO,IAAI,CAAA;;oBAEK,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;;;;;kBAKjB,QAAQ,CAAC;YACf,qCAAqC,EAAE,IAAI;YAC3C,+BAA+B,EAAE,CAAC,IAAI,CAAC,WAAW;SACnD,CAAC;;YAEA,IAAI,CAAC,UAAU,EAAE;;;;kBAIX,QAAQ,CAAC;YACf,2DAA2D,EAAE,IAAI;YACjE,+BAA+B,EAAE,IAAI,CAAC,WAAW;SAClD,CAAC;;;qBAGS,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY;oBACpD,YAAY
|
|
1
|
+
{"version":3,"file":"InternalCard.js","sourceRoot":"","sources":["../../../../src/elements/internal/InternalCard/InternalCard.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,qCAAkC;AAC3D,OAAO,EAAE,cAAc,EAAE,sDAAmD;AAC5E,OAAO,EAAE,QAAQ,EAAE,oCAAiC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC;;;;;GAKG;AACH,MAAM,OAAO,YAAiC,SAAQ,cAAc,CAAC,cAAc,CAAQ;IACzF;;;OAGG;IACH,UAAU;QACR,OAAO,IAAI,CAAA,EAAE,CAAC;IAChB,CAAC;IAED,MAAM;QACJ,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;YAClC,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;gBAC/B,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,MAAM,CAAC;QAEX,OAAO,IAAI,CAAA;;oBAEK,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;;;;;kBAKjB,QAAQ,CAAC;YACf,qCAAqC,EAAE,IAAI;YAC3C,+BAA+B,EAAE,CAAC,IAAI,CAAC,WAAW;SACnD,CAAC;;YAEA,IAAI,CAAC,UAAU,EAAE;;;;kBAIX,QAAQ,CAAC;YACf,2DAA2D,EAAE,IAAI;YACjE,6BAA6B,EAAE,IAAI;YACnC,+BAA+B,EAAE,IAAI,CAAC,WAAW;SAClD,CAAC;;;qBAGS,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY;oBACpD,YAAY;;;;;;KAM3B,CAAC;IACJ,CAAC;IAED,IAAI,WAAW;QACb,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;CACF","sourcesContent":["import type { HALJSONResource as Data } from '../../public/NucleonElement/types';\nimport type { TemplateResult } from 'lit-html';\n\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { NucleonElement } from '../../public/NucleonElement/NucleonElement';\nimport { classMap } from '../../../utils/class-map';\nimport { html } from 'lit-html';\n\n/**\n * Internal base element for cards.\n *\n * @since 1.17.0\n * @element foxy-internal-card\n */\nexport class InternalCard<TData extends Data> extends ThemeableMixin(NucleonElement)<TData> {\n /**\n * Invoked together with `.render()` to obtain a template for card contents.\n * When extending `InternalCard`, prefer overriding this method to `.render()`.\n */\n renderBody(): TemplateResult {\n return html``;\n }\n\n render(): TemplateResult {\n const spinnerState = this.in('fail')\n ? 'error'\n : this.in({ idle: 'template' })\n ? 'empty'\n : 'busy';\n\n return html`\n <div\n aria-busy=${this.in('busy')}\n aria-live=\"polite\"\n class=\"relative leading-m text-body text-m font-lumo\"\n >\n <div\n class=${classMap({\n 'transition duration-500 ease-in-out': true,\n 'opacity-0 pointer-events-none': !this.isBodyReady,\n })}\n >\n ${this.renderBody()}\n </div>\n\n <div\n class=${classMap({\n 'transition duration-500 ease-in-out absolute inset-0 flex': true,\n 'items-center justify-center': true,\n 'opacity-0 pointer-events-none': this.isBodyReady,\n })}\n >\n <foxy-spinner\n layout=${spinnerState === 'busy' ? 'no-label' : 'horizontal'}\n state=${spinnerState}\n infer=\"spinner\"\n >\n </foxy-spinner>\n </div>\n </div>\n `;\n }\n\n get isBodyReady(): boolean {\n return !!this.data;\n }\n}\n"]}
|
|
@@ -26,6 +26,7 @@ export declare class InternalControl extends InternalControl_base {
|
|
|
26
26
|
nucleon: NucleonElement<any> | null;
|
|
27
27
|
inferFromElement(key: string, element: HTMLElement): unknown | undefined;
|
|
28
28
|
applyInferredProperties(context: Map<string, unknown>): void;
|
|
29
|
+
renderLightDom(): void;
|
|
29
30
|
updated(changes: Map<keyof this, unknown>): void;
|
|
30
31
|
/**
|
|
31
32
|
* Renders the control itself. In most cases, you will need to implement
|
|
@@ -43,15 +43,18 @@ export class InternalControl extends ConfigurableMixin(TranslatableMixin(Themeab
|
|
|
43
43
|
if (((_b = this.nucleon) === null || _b === void 0 ? void 0 : _b.in('idle')) === false)
|
|
44
44
|
this.disabled = true;
|
|
45
45
|
}
|
|
46
|
+
renderLightDom() {
|
|
47
|
+
if (typeof this.infer !== 'string')
|
|
48
|
+
return;
|
|
49
|
+
const lightDomTemplate = html `
|
|
50
|
+
<slot name="${this.infer}:before" slot="before"></slot>
|
|
51
|
+
<slot name="${this.infer}:after" slot="after"></slot>
|
|
52
|
+
`;
|
|
53
|
+
render(lightDomTemplate, this);
|
|
54
|
+
}
|
|
46
55
|
updated(changes) {
|
|
47
56
|
super.updated(changes);
|
|
48
|
-
|
|
49
|
-
const lightDomTemplate = html `
|
|
50
|
-
<slot name="${this.infer}:before" slot="before"></slot>
|
|
51
|
-
<slot name="${this.infer}:after" slot="after"></slot>
|
|
52
|
-
`;
|
|
53
|
-
render(lightDomTemplate, this);
|
|
54
|
-
}
|
|
57
|
+
this.renderLightDom();
|
|
55
58
|
}
|
|
56
59
|
/**
|
|
57
60
|
* Renders the control itself. In most cases, you will need to implement
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InternalControl.js","sourceRoot":"","sources":["../../../../src/elements/internal/InternalControl/InternalControl.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,sCAAmC;AAC7D,OAAO,EAAE,cAAc,EAAE,qCAAkC;AAC3D,OAAO,EAAE,cAAc,EAAE,sDAAmD;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;;;;;;;GAUG;AACH,MAAM,OAAO,eAAgB,SAAQ,iBAAiB,CACpD,iBAAiB,CAAC,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAC/D;IAFD;;QAcE,wDAAwD;QACxD,YAAO,GAA+B,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"InternalControl.js","sourceRoot":"","sources":["../../../../src/elements/internal/InternalControl/InternalControl.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,sCAAmC;AAC7D,OAAO,EAAE,cAAc,EAAE,qCAAkC;AAC3D,OAAO,EAAE,cAAc,EAAE,sDAAmD;AAC5E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;;;;;;;;;GAUG;AACH,MAAM,OAAO,eAAgB,SAAQ,iBAAiB,CACpD,iBAAiB,CAAC,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAC/D;IAFD;;QAcE,wDAAwD;QACxD,YAAO,GAA+B,IAAI,CAAC;IAkD7C,CAAC;IA9DC,MAAM,KAAK,kBAAkB;QAC3B,OAAO,CAAC,GAAG,KAAK,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;SAC9B,CAAC;IACJ,CAAC;IAKD,gBAAgB,CAAC,GAAW,EAAE,OAAoB;QAChD,IAAI,GAAG,KAAK,SAAS,IAAI,OAAO,YAAY,cAAc;YAAE,OAAO,OAAO,CAAC;QAC3E,OAAO,KAAK,CAAC,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAED,uBAAuB,CAAC,OAA6B;;QACnD,KAAK,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAEvC,IAAI,CAAC,OAAO,SAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAqC,mCAAI,IAAI,CAAC;QACnF,IAAI,OAAA,IAAI,CAAC,OAAO,0CAAE,EAAE,CAAC,MAAM,OAAM,KAAK;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC/D,CAAC;IAED,cAAc;QACZ,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,OAAO;QAE3C,MAAM,gBAAgB,GAAG,IAAI,CAAA;oBACb,IAAI,CAAC,KAAK;oBACV,IAAI,CAAC,KAAK;KACzB,CAAC;QAEF,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,CAAC,OAAiC;QACvC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACvB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,aAAa;QACX,OAAO,IAAI,CAAA,EAAE,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA,EAAE,CAAC;QAE/B,OAAO,IAAI,CAAA;QACP,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE;QACzE,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;KACnD,CAAC;IACJ,CAAC;CACF","sourcesContent":["import type { PropertyDeclarations, TemplateResult } from 'lit-element';\n\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { html, LitElement } from 'lit-element';\nimport { InferrableMixin } from '../../../mixins/inferrable';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { NucleonElement } from '../../public/NucleonElement/NucleonElement';\nimport { render } from 'lit-html';\n\n/**\n * An internal base class for any control in a Nucleon form. That control can be as simple as a text field bound\n * to a property or as complex as a query builder, and it infers property values from the\n * parent Nucleon/Configurable/Translatable element, saving the need to manually calculate\n * and bind properties in Lit templates. Each control renders before and after slots in the regular DOM + its\n * own layout in the shadow DOM. When hidden via `hiddencontrols` in the parent,\n * uses `display: none` to hide itself.\n *\n * @element foxy-internal-control\n * @since 1.17.0\n */\nexport class InternalControl extends ConfigurableMixin(\n TranslatableMixin(ThemeableMixin(InferrableMixin(LitElement)))\n) {\n static get inferredProperties(): string[] {\n return [...super.inferredProperties, 'nucleon'];\n }\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n nucleon: { attribute: false },\n };\n }\n\n /** NucleonElement instance this control is bound to. */\n nucleon: NucleonElement<any> | null = null;\n\n inferFromElement(key: string, element: HTMLElement): unknown | undefined {\n if (key === 'nucleon' && element instanceof NucleonElement) return element;\n return super.inferFromElement(key, element);\n }\n\n applyInferredProperties(context: Map<string, unknown>): void {\n super.applyInferredProperties(context);\n\n this.nucleon = (context.get('nucleon') as NucleonElement<any> | undefined) ?? null;\n if (this.nucleon?.in('idle') === false) this.disabled = true;\n }\n\n renderLightDom(): void {\n if (typeof this.infer !== 'string') return;\n\n const lightDomTemplate = html`\n <slot name=\"${this.infer}:before\" slot=\"before\"></slot>\n <slot name=\"${this.infer}:after\" slot=\"after\"></slot>\n `;\n\n render(lightDomTemplate, this);\n }\n\n updated(changes: Map<keyof this, unknown>): void {\n super.updated(changes);\n this.renderLightDom();\n }\n\n /**\n * Renders the control itself. In most cases, you will need to implement\n * this method instead of `.render()` in your class to keep the before and after templates/slots.\n */\n renderControl(): TemplateResult {\n return html``;\n }\n\n /**\n * Renders the control (if visible) and the before/after templates/slots.\n * You should probably implement `.renderControl()` method instead of this one in your class.\n */\n render(): TemplateResult {\n if (this.hidden) return html``;\n\n return html`\n ${this.renderTemplateOrSlot('before', this.nucleon)} ${this.renderControl()}\n ${this.renderTemplateOrSlot('after', this.nucleon)}\n `;\n }\n}\n"]}
|
|
@@ -2,6 +2,7 @@ import type { PropertyDeclarations } from 'lit-element';
|
|
|
2
2
|
import type { HALJSONResource } from '../../public/NucleonElement/types';
|
|
3
3
|
import type { TemplateResult } from 'lit-html';
|
|
4
4
|
import type { Status } from './types';
|
|
5
|
+
import { BooleanSelector } from '@foxy.io/sdk/core';
|
|
5
6
|
import { NucleonElement } from '../../public/NucleonElement/NucleonElement';
|
|
6
7
|
declare const Base: typeof NucleonElement & {
|
|
7
8
|
styles: import("lit-element").CSSResultArray;
|
|
@@ -34,6 +35,7 @@ export declare class InternalForm<TData extends HALJSONResource> extends Base<TD
|
|
|
34
35
|
get headerSubtitleOptions(): Record<string, unknown>;
|
|
35
36
|
/** ID that will be written to clipboard when Copy ID button in header is clicked. */
|
|
36
37
|
get headerCopyIdValue(): string | number;
|
|
38
|
+
get hiddenSelector(): BooleanSelector;
|
|
37
39
|
/**
|
|
38
40
|
* Renders optional form header.
|
|
39
41
|
* - Customize which actions are rendered with `.renderHeaderActions()` method.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { BooleanSelector, getResourceId } from '@foxy.io/sdk/core';
|
|
1
2
|
import { ConfigurableMixin } from "../../../mixins/configurable.js";
|
|
2
3
|
import { ThemeableMixin } from "../../../mixins/themeable.js";
|
|
3
4
|
import { NucleonElement } from "../../public/NucleonElement/NucleonElement.js";
|
|
4
|
-
import { getResourceId } from '@foxy.io/sdk/core';
|
|
5
5
|
import { classMap } from "../../../utils/class-map.js";
|
|
6
6
|
import { html } from 'lit-html';
|
|
7
7
|
const Base = ConfigurableMixin(ThemeableMixin(NucleonElement));
|
|
@@ -58,6 +58,16 @@ export class InternalForm extends Base {
|
|
|
58
58
|
var _a;
|
|
59
59
|
return this.data ? (_a = getResourceId(this.data._links.self.href)) !== null && _a !== void 0 ? _a : '' : '';
|
|
60
60
|
}
|
|
61
|
+
get hiddenSelector() {
|
|
62
|
+
const alwaysMatch = [super.hiddenSelector.toString()];
|
|
63
|
+
if (this.href)
|
|
64
|
+
alwaysMatch.unshift('create');
|
|
65
|
+
if (!this.href)
|
|
66
|
+
alwaysMatch.unshift('delete', 'timestamps', 'submit');
|
|
67
|
+
if (!this.in({ idle: { snapshot: 'dirty' } }))
|
|
68
|
+
alwaysMatch.unshift('undo');
|
|
69
|
+
return new BooleanSelector(alwaysMatch.join(' ').trim());
|
|
70
|
+
}
|
|
61
71
|
/**
|
|
62
72
|
* Renders optional form header.
|
|
63
73
|
* - Customize which actions are rendered with `.renderHeaderActions()` method.
|
|
@@ -130,34 +140,21 @@ export class InternalForm extends Base {
|
|
|
130
140
|
* don't forget to add `super.renderBody()` to your template.
|
|
131
141
|
*/
|
|
132
142
|
renderBody() {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
<foxy-internal-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
</div>
|
|
149
|
-
`
|
|
150
|
-
: ''}
|
|
151
|
-
`;
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
return html `
|
|
155
|
-
<div class="flex">
|
|
156
|
-
<foxy-internal-submit-control infer="create" theme="primary success" class="ml-auto">
|
|
157
|
-
</foxy-internal-submit-control>
|
|
158
|
-
</div>
|
|
159
|
-
`;
|
|
160
|
-
}
|
|
143
|
+
const nested = ['delete', 'undo', 'submit', 'create'];
|
|
144
|
+
return html `
|
|
145
|
+
<foxy-internal-timestamps-control infer="timestamps"></foxy-internal-timestamps-control>
|
|
146
|
+
|
|
147
|
+
<div class="flex gap-m" ?hidden=${nested.every(v => this.hiddenSelector.matches(v, true))}>
|
|
148
|
+
<foxy-internal-delete-control infer="delete"></foxy-internal-delete-control>
|
|
149
|
+
|
|
150
|
+
<div class="w-full"></div>
|
|
151
|
+
|
|
152
|
+
<foxy-internal-undo-control infer="undo"> </foxy-internal-undo-control>
|
|
153
|
+
<foxy-internal-submit-control infer="submit"> </foxy-internal-submit-control>
|
|
154
|
+
<foxy-internal-submit-control infer="create" theme="primary success">
|
|
155
|
+
</foxy-internal-submit-control>
|
|
156
|
+
</div>
|
|
157
|
+
`;
|
|
161
158
|
}
|
|
162
159
|
/**
|
|
163
160
|
* Renders the entire form. You should probably implement `.renderBody()`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InternalForm.js","sourceRoot":"","sources":["../../../../src/elements/internal/InternalForm/InternalForm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { HALJSONResource } from '../../public/NucleonElement/types';\nimport type { TemplateResult } from 'lit-html';\nimport type { Status } from './types';\n\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { NucleonElement } from '../../public/NucleonElement/NucleonElement';\nimport { getResourceId } from '@foxy.io/sdk/core';\nimport { classMap } from '../../../utils/class-map';\nimport { html } from 'lit-html';\n\nconst Base = ConfigurableMixin(ThemeableMixin(NucleonElement));\n\n/**\n * An internal base class for any nucleon-powered form. Renders create/delete\n * buttons and timestamps by default, displays a spinner in non-idle states.\n *\n * @element foxy-internal-form\n * @since 1.17.0\n */\nexport class InternalForm<TData extends HALJSONResource> extends Base<TData> {\n /** Validation errors with this prefix will show up at the top of the form. */\n static generalErrorPrefix = 'error:';\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n status: { type: Object },\n };\n }\n\n /** Status message to render at the top of the form. If `null`, the message is hidden. */\n status: null | Status = null;\n\n /**\n * Renders header actions when the optional header is rendered.\n * Empty by default.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n renderHeaderActions(data: TData): TemplateResult | null {\n return null;\n }\n\n /** Getter that returns a i18n key for the optional form header title. */\n get headerTitleKey(): string {\n return 'title';\n }\n\n /** I18next options to pass to the header title translation function. */\n get headerTitleOptions(): Record<string, unknown> {\n return {\n ...this.data,\n context: this.data ? 'existing' : 'new',\n id: this.data ? getResourceId(this.data._links.self.href) : null,\n };\n }\n\n /** Getter that returns a i18n key for the optional form header subtitle. Note that subtitle is shown only when data is avaiable. */\n get headerSubtitleKey(): string {\n return 'subtitle';\n }\n\n /** I18next options to pass to the header subtitle translation function. Note that subtitle is shown only when data is avaiable. */\n get headerSubtitleOptions(): Record<string, unknown> {\n return this.data ?? {};\n }\n\n /** ID that will be written to clipboard when Copy ID button in header is clicked. */\n get headerCopyIdValue(): string | number {\n return this.data ? getResourceId(this.data._links.self.href) ?? '' : '';\n }\n\n /**\n * Renders optional form header.\n * - Customize which actions are rendered with `.renderHeaderActions()` method.\n * - Customize the header title and subtitle with `.headerTitleKey` and `.headerSubtitleKey` getters.\n * - Customize the header title and subtitle options with `.headerTitleOptions` and `.headerSubtitleOptions` getters.\n * - To hide the header completely, add `header` to `hidden-controls` attribute.\n */\n renderHeader(): TemplateResult {\n if (this.hiddenSelector.matches('header', true)) return html``;\n\n const data = this.data;\n const actions = data ? this.renderHeaderActions(data) : null;\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('header:before')}\n <h2>\n <span class=\"flex items-center gap-s leading-xs text-xl font-medium break-all\">\n <foxy-i18n\n options=${JSON.stringify(this.headerTitleOptions)}\n infer=\"header\"\n key=${this.headerTitleKey}\n >\n </foxy-i18n>\n ${data\n ? html`\n ${this.hiddenSelector.matches('header:copy-id', true)\n ? ''\n : html`\n <foxy-copy-to-clipboard\n infer=\"header copy-id\"\n class=\"text-m\"\n text=${this.headerCopyIdValue}\n >\n </foxy-copy-to-clipboard>\n `}\n ${this.hiddenSelector.matches('header:copy-json', true)\n ? ''\n : html`\n <foxy-copy-to-clipboard\n infer=\"header copy-json\"\n class=\"text-m\"\n icon=\"icons:code\"\n text=${JSON.stringify(data, null, 2)}\n >\n </foxy-copy-to-clipboard>\n `}\n `\n : ''}\n </span>\n ${data\n ? html`\n <foxy-i18n\n infer=\"header\"\n class=\"text-m text-secondary\"\n key=${this.headerSubtitleKey}\n .options=${this.headerSubtitleOptions}\n >\n </foxy-i18n>\n ${actions ? html`<div class=\"mt-xs flex gap-m\">${actions}</div>` : ''}\n `\n : ''}\n </h2>\n ${this.renderTemplateOrSlot('header:after')}\n </div>\n `;\n }\n\n /**\n * Renders form body. This is the method you should implement in your forms\n * instead of `.render()`. If you'd like to keep the submit button and the timestamps,\n * don't forget to add `super.renderBody()` to your template.\n */\n renderBody(): TemplateResult {\n if (this.data) {\n const isSnapshotDirty = this.in({ idle: { snapshot: 'dirty' } });\n const isDeleteHidden = this.hiddenSelector.matches('delete', true);\n const actionClass = classMap({ 'transition-opacity': true, 'opacity-0': !isSnapshotDirty });\n\n return html`\n <foxy-internal-timestamps-control infer=\"timestamps\"></foxy-internal-timestamps-control>\n ${!isDeleteHidden || isSnapshotDirty\n ? html`\n <div class=\"flex gap-s\">\n <foxy-internal-delete-control infer=\"delete\"></foxy-internal-delete-control>\n <div class=\"w-full\"></div>\n <foxy-internal-undo-control class=${actionClass} infer=\"undo\">\n </foxy-internal-undo-control>\n <foxy-internal-submit-control class=${actionClass} infer=\"submit\">\n </foxy-internal-submit-control>\n </div>\n `\n : ''}\n `;\n } else {\n return html`\n <div class=\"flex\">\n <foxy-internal-submit-control infer=\"create\" theme=\"primary success\" class=\"ml-auto\">\n </foxy-internal-submit-control>\n </div>\n `;\n }\n }\n\n /**\n * Renders the entire form. You should probably implement `.renderBody()`\n * instead of this method in your form to keep the spinner and the common layout features.\n */\n render(): TemplateResult {\n const isSpinnerVisible = !this.in('idle') && (!this.in({ busy: 'fetching' }) || !this.data);\n\n return html`\n <div aria-busy=${this.in('busy')} aria-live=\"polite\" class=\"relative\">\n <div\n class=${classMap({\n 'space-y-m': true,\n 'transition-opacity': true,\n 'opacity-0 pointer-events-none': isSpinnerVisible,\n })}\n >\n ${this.__generalErrors.map(err => this.__renderGeneralError(err))}\n ${this.status ? this.__renderStatus(this.status) : ''} ${this.renderBody()}\n </div>\n\n <div\n data-testid=\"spinner\"\n class=${classMap({\n 'flex flex-col items-center justify-center gap-m': true,\n 'transition-opacity absolute inset-0': true,\n 'opacity-0 pointer-events-none': !isSpinnerVisible,\n })}\n >\n <foxy-spinner\n layout=${this.in('fail') ? 'vertical' : 'no-label'}\n state=${this.in('fail') ? 'error' : 'busy'}\n infer=\"spinner\"\n >\n </foxy-spinner>\n ${this.href && this.in('fail')\n ? html`\n <vaadin-button theme=\"small contrast\" @click=${() => this.refresh()}>\n <foxy-i18n infer=\"spinner\" key=\"refresh\"></foxy-i18n>\n </vaadin-button>\n `\n : ''}\n </div>\n </div>\n `;\n }\n\n private get __generalErrors() {\n const prefix = (this.constructor as typeof InternalForm).generalErrorPrefix;\n return this.errors.filter(v => v.startsWith(prefix));\n }\n\n private __renderGeneralError(err: string) {\n return html`\n <foxy-i18n\n class=\"leading-xs text-body rounded bg-error-10 block\"\n style=\"padding: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n infer=\"error\"\n key=${err.replace('error:', '')}\n >\n </foxy-i18n>\n `;\n }\n\n private __renderStatus({ key, options }: Status) {\n if (this.hiddenSelector.matches('status', true)) return;\n return html`\n <p\n data-testid=\"status\"\n class=\"leading-xs text-body rounded bg-success-10 flex items-start gap-m\"\n style=\"padding: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n >\n <foxy-i18n class=\"flex-1\" infer=\"status\" key=${key} .options=${options}></foxy-i18n>\n <vaadin-button\n class=\"flex-shrink-0\"\n theme=\"success tertiary-inline\"\n @click=${() => (this.status = null)}\n >\n <foxy-i18n class=\"flex-1\" infer=\"status\" key=\"close\"></foxy-i18n>\n </vaadin-button>\n </p>\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"InternalForm.js","sourceRoot":"","sources":["../../../../src/elements/internal/InternalForm/InternalForm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyDeclarations } from 'lit-element';\nimport type { HALJSONResource } from '../../public/NucleonElement/types';\nimport type { TemplateResult } from 'lit-html';\nimport type { Status } from './types';\n\nimport { BooleanSelector, getResourceId } from '@foxy.io/sdk/core';\nimport { ConfigurableMixin } from '../../../mixins/configurable';\nimport { ThemeableMixin } from '../../../mixins/themeable';\nimport { NucleonElement } from '../../public/NucleonElement/NucleonElement';\nimport { classMap } from '../../../utils/class-map';\nimport { html } from 'lit-html';\n\nconst Base = ConfigurableMixin(ThemeableMixin(NucleonElement));\n\n/**\n * An internal base class for any nucleon-powered form. Renders create/delete\n * buttons and timestamps by default, displays a spinner in non-idle states.\n *\n * @element foxy-internal-form\n * @since 1.17.0\n */\nexport class InternalForm<TData extends HALJSONResource> extends Base<TData> {\n /** Validation errors with this prefix will show up at the top of the form. */\n static generalErrorPrefix = 'error:';\n\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n status: { type: Object },\n };\n }\n\n /** Status message to render at the top of the form. If `null`, the message is hidden. */\n status: null | Status = null;\n\n /**\n * Renders header actions when the optional header is rendered.\n * Empty by default.\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n renderHeaderActions(data: TData): TemplateResult | null {\n return null;\n }\n\n /** Getter that returns a i18n key for the optional form header title. */\n get headerTitleKey(): string {\n return 'title';\n }\n\n /** I18next options to pass to the header title translation function. */\n get headerTitleOptions(): Record<string, unknown> {\n return {\n ...this.data,\n context: this.data ? 'existing' : 'new',\n id: this.data ? getResourceId(this.data._links.self.href) : null,\n };\n }\n\n /** Getter that returns a i18n key for the optional form header subtitle. Note that subtitle is shown only when data is avaiable. */\n get headerSubtitleKey(): string {\n return 'subtitle';\n }\n\n /** I18next options to pass to the header subtitle translation function. Note that subtitle is shown only when data is avaiable. */\n get headerSubtitleOptions(): Record<string, unknown> {\n return this.data ?? {};\n }\n\n /** ID that will be written to clipboard when Copy ID button in header is clicked. */\n get headerCopyIdValue(): string | number {\n return this.data ? getResourceId(this.data._links.self.href) ?? '' : '';\n }\n\n get hiddenSelector(): BooleanSelector {\n const alwaysMatch = [super.hiddenSelector.toString()];\n if (this.href) alwaysMatch.unshift('create');\n if (!this.href) alwaysMatch.unshift('delete', 'timestamps', 'submit');\n if (!this.in({ idle: { snapshot: 'dirty' } })) alwaysMatch.unshift('undo');\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n /**\n * Renders optional form header.\n * - Customize which actions are rendered with `.renderHeaderActions()` method.\n * - Customize the header title and subtitle with `.headerTitleKey` and `.headerSubtitleKey` getters.\n * - Customize the header title and subtitle options with `.headerTitleOptions` and `.headerSubtitleOptions` getters.\n * - To hide the header completely, add `header` to `hidden-controls` attribute.\n */\n renderHeader(): TemplateResult {\n if (this.hiddenSelector.matches('header', true)) return html``;\n\n const data = this.data;\n const actions = data ? this.renderHeaderActions(data) : null;\n\n return html`\n <div>\n ${this.renderTemplateOrSlot('header:before')}\n <h2>\n <span class=\"flex items-center gap-s leading-xs text-xl font-medium break-all\">\n <foxy-i18n\n options=${JSON.stringify(this.headerTitleOptions)}\n infer=\"header\"\n key=${this.headerTitleKey}\n >\n </foxy-i18n>\n ${data\n ? html`\n ${this.hiddenSelector.matches('header:copy-id', true)\n ? ''\n : html`\n <foxy-copy-to-clipboard\n infer=\"header copy-id\"\n class=\"text-m\"\n text=${this.headerCopyIdValue}\n >\n </foxy-copy-to-clipboard>\n `}\n ${this.hiddenSelector.matches('header:copy-json', true)\n ? ''\n : html`\n <foxy-copy-to-clipboard\n infer=\"header copy-json\"\n class=\"text-m\"\n icon=\"icons:code\"\n text=${JSON.stringify(data, null, 2)}\n >\n </foxy-copy-to-clipboard>\n `}\n `\n : ''}\n </span>\n ${data\n ? html`\n <foxy-i18n\n infer=\"header\"\n class=\"text-m text-secondary\"\n key=${this.headerSubtitleKey}\n .options=${this.headerSubtitleOptions}\n >\n </foxy-i18n>\n ${actions ? html`<div class=\"mt-xs flex gap-m\">${actions}</div>` : ''}\n `\n : ''}\n </h2>\n ${this.renderTemplateOrSlot('header:after')}\n </div>\n `;\n }\n\n /**\n * Renders form body. This is the method you should implement in your forms\n * instead of `.render()`. If you'd like to keep the submit button and the timestamps,\n * don't forget to add `super.renderBody()` to your template.\n */\n renderBody(): TemplateResult {\n const nested = ['delete', 'undo', 'submit', 'create'];\n\n return html`\n <foxy-internal-timestamps-control infer=\"timestamps\"></foxy-internal-timestamps-control>\n\n <div class=\"flex gap-m\" ?hidden=${nested.every(v => this.hiddenSelector.matches(v, true))}>\n <foxy-internal-delete-control infer=\"delete\"></foxy-internal-delete-control>\n\n <div class=\"w-full\"></div>\n\n <foxy-internal-undo-control infer=\"undo\"> </foxy-internal-undo-control>\n <foxy-internal-submit-control infer=\"submit\"> </foxy-internal-submit-control>\n <foxy-internal-submit-control infer=\"create\" theme=\"primary success\">\n </foxy-internal-submit-control>\n </div>\n `;\n }\n\n /**\n * Renders the entire form. You should probably implement `.renderBody()`\n * instead of this method in your form to keep the spinner and the common layout features.\n */\n render(): TemplateResult {\n const isSpinnerVisible = !this.in('idle') && (!this.in({ busy: 'fetching' }) || !this.data);\n\n return html`\n <div aria-busy=${this.in('busy')} aria-live=\"polite\" class=\"relative\">\n <div\n class=${classMap({\n 'space-y-m': true,\n 'transition-opacity': true,\n 'opacity-0 pointer-events-none': isSpinnerVisible,\n })}\n >\n ${this.__generalErrors.map(err => this.__renderGeneralError(err))}\n ${this.status ? this.__renderStatus(this.status) : ''} ${this.renderBody()}\n </div>\n\n <div\n data-testid=\"spinner\"\n class=${classMap({\n 'flex flex-col items-center justify-center gap-m': true,\n 'transition-opacity absolute inset-0': true,\n 'opacity-0 pointer-events-none': !isSpinnerVisible,\n })}\n >\n <foxy-spinner\n layout=${this.in('fail') ? 'vertical' : 'no-label'}\n state=${this.in('fail') ? 'error' : 'busy'}\n infer=\"spinner\"\n >\n </foxy-spinner>\n ${this.href && this.in('fail')\n ? html`\n <vaadin-button theme=\"small contrast\" @click=${() => this.refresh()}>\n <foxy-i18n infer=\"spinner\" key=\"refresh\"></foxy-i18n>\n </vaadin-button>\n `\n : ''}\n </div>\n </div>\n `;\n }\n\n private get __generalErrors() {\n const prefix = (this.constructor as typeof InternalForm).generalErrorPrefix;\n return this.errors.filter(v => v.startsWith(prefix));\n }\n\n private __renderGeneralError(err: string) {\n return html`\n <foxy-i18n\n class=\"leading-xs text-body rounded bg-error-10 block\"\n style=\"padding: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n infer=\"error\"\n key=${err.replace('error:', '')}\n >\n </foxy-i18n>\n `;\n }\n\n private __renderStatus({ key, options }: Status) {\n if (this.hiddenSelector.matches('status', true)) return;\n return html`\n <p\n data-testid=\"status\"\n class=\"leading-xs text-body rounded bg-success-10 flex items-start gap-m\"\n style=\"padding: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n >\n <foxy-i18n class=\"flex-1\" infer=\"status\" key=${key} .options=${options}></foxy-i18n>\n <vaadin-button\n class=\"flex-shrink-0\"\n theme=\"success tertiary-inline\"\n @click=${() => (this.status = null)}\n >\n <foxy-i18n class=\"flex-1\" infer=\"status\" key=\"close\"></foxy-i18n>\n </vaadin-button>\n </p>\n `;\n }\n}\n"]}
|
package/dist/elements/internal/InternalResourcePickerControl/InternalResourcePickerControl.d.ts
CHANGED
|
@@ -1,16 +1,26 @@
|
|
|
1
1
|
import type { PropertyDeclarations, TemplateResult } from 'lit-element';
|
|
2
|
+
import type { HALJSONResource } from '../../public/NucleonElement/types';
|
|
3
|
+
import type { FormRenderer } from '../../public/FormDialog/types';
|
|
2
4
|
import type { Option } from '../../public/QueryBuilder/types';
|
|
3
5
|
import { InternalEditableControl } from '../InternalEditableControl/InternalEditableControl';
|
|
6
|
+
declare type DisplayValueOptionsCb = (resource: HALJSONResource | null, context: string) => Record<string, unknown>;
|
|
4
7
|
export declare class InternalResourcePickerControl extends InternalEditableControl {
|
|
5
8
|
static get properties(): PropertyDeclarations;
|
|
9
|
+
getDisplayValueOptions: DisplayValueOptionsCb;
|
|
6
10
|
virtualHost: string;
|
|
11
|
+
formProps: Record<string, unknown>;
|
|
7
12
|
filters: Option[];
|
|
13
|
+
layout: 'summary-item' | 'standalone' | null;
|
|
8
14
|
first: string | null;
|
|
9
15
|
item: string | null;
|
|
16
|
+
form: string | null | FormRenderer;
|
|
10
17
|
private readonly __getItemRenderer;
|
|
11
18
|
renderControl(): TemplateResult;
|
|
12
19
|
updated(changes: Map<keyof this, unknown>): void;
|
|
20
|
+
private __renderSummaryItemLayout;
|
|
21
|
+
private __renderStandaloneLayout;
|
|
13
22
|
private __handleFetchEvent;
|
|
14
|
-
private __handleEmpty;
|
|
15
23
|
private __handleSelect;
|
|
24
|
+
private __handleEmpty;
|
|
16
25
|
}
|
|
26
|
+
export {};
|
package/dist/elements/internal/InternalResourcePickerControl/InternalResourcePickerControl.js
CHANGED
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
import { InternalEditableControl } from "../InternalEditableControl/InternalEditableControl.js";
|
|
2
2
|
import { FetchEvent } from "../../public/NucleonElement/FetchEvent.js";
|
|
3
|
+
import { ifDefined } from 'lit-html/directives/if-defined';
|
|
4
|
+
import { html, svg } from 'lit-html';
|
|
3
5
|
import { classMap } from "../../../utils/class-map.js";
|
|
4
6
|
import { uniqueId } from 'lodash-es';
|
|
5
7
|
import { spread } from '@open-wc/lit-helpers';
|
|
6
|
-
import { html } from 'lit-html';
|
|
7
8
|
import memoize from 'lodash-es/memoize';
|
|
8
9
|
export class InternalResourcePickerControl extends InternalEditableControl {
|
|
9
10
|
constructor() {
|
|
10
11
|
super(...arguments);
|
|
12
|
+
this.getDisplayValueOptions = (r, c) => ({ resource: r, context: c });
|
|
11
13
|
this.virtualHost = uniqueId('internal-resource-picker-control-');
|
|
14
|
+
this.formProps = {};
|
|
12
15
|
this.filters = [];
|
|
16
|
+
this.layout = null;
|
|
13
17
|
this.first = null;
|
|
14
18
|
this.item = null;
|
|
19
|
+
this.form = null;
|
|
15
20
|
this.__getItemRenderer = memoize((item) => {
|
|
16
21
|
return new Function('ctx', `return ctx.html\`
|
|
17
22
|
<${item !== null && item !== void 0 ? item : 'foxy-null'}
|
|
@@ -27,31 +32,127 @@ export class InternalResourcePickerControl extends InternalEditableControl {
|
|
|
27
32
|
static get properties() {
|
|
28
33
|
return {
|
|
29
34
|
...super.properties,
|
|
35
|
+
getDisplayValueOptions: { attribute: false },
|
|
30
36
|
virtualHost: {},
|
|
37
|
+
formProps: { type: Object },
|
|
31
38
|
filters: { type: Array },
|
|
39
|
+
layout: {},
|
|
32
40
|
first: {},
|
|
33
41
|
item: {},
|
|
42
|
+
form: {},
|
|
34
43
|
};
|
|
35
44
|
}
|
|
36
45
|
renderControl() {
|
|
37
|
-
var _a
|
|
46
|
+
var _a;
|
|
47
|
+
const dialogProps = {
|
|
48
|
+
...this.formProps,
|
|
49
|
+
'.selectionProps': { '.filters': this.filters, '.first': this.first, '.item': this.item },
|
|
50
|
+
};
|
|
38
51
|
return html `
|
|
39
52
|
<foxy-form-dialog
|
|
40
53
|
parent="foxy://${this.virtualHost}/select"
|
|
54
|
+
header="header"
|
|
41
55
|
infer="dialog"
|
|
42
|
-
form="foxy-internal-resource-picker-control-form"
|
|
43
56
|
alert
|
|
44
|
-
.props=${
|
|
45
|
-
|
|
46
|
-
'.filters': this.filters,
|
|
47
|
-
'.first': this.first,
|
|
48
|
-
'.item': this.item,
|
|
49
|
-
},
|
|
50
|
-
}}
|
|
57
|
+
.props=${dialogProps}
|
|
58
|
+
.form=${(_a = this.form) !== null && _a !== void 0 ? _a : 'foxy-internal-resource-picker-control-form'}
|
|
51
59
|
@fetch=${this.__handleFetchEvent}
|
|
52
60
|
>
|
|
53
61
|
</foxy-form-dialog>
|
|
54
62
|
|
|
63
|
+
${this.layout === 'summary-item'
|
|
64
|
+
? this.__renderSummaryItemLayout()
|
|
65
|
+
: this.__renderStandaloneLayout()}
|
|
66
|
+
`;
|
|
67
|
+
}
|
|
68
|
+
updated(changes) {
|
|
69
|
+
var _a, _b;
|
|
70
|
+
super.updated(changes);
|
|
71
|
+
if (changes.has('item'))
|
|
72
|
+
(_b = (_a = this.__getItemRenderer.cache).clear) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
73
|
+
}
|
|
74
|
+
__renderSummaryItemLayout() {
|
|
75
|
+
var _a;
|
|
76
|
+
const resource = this.renderRoot.querySelector('#value');
|
|
77
|
+
const onClick = (evt) => {
|
|
78
|
+
if (this.disabled || this.readonly)
|
|
79
|
+
return;
|
|
80
|
+
const button = evt.currentTarget;
|
|
81
|
+
const dialog = this.renderRoot.querySelector('foxy-form-dialog');
|
|
82
|
+
dialog.href = '';
|
|
83
|
+
dialog.show(button);
|
|
84
|
+
};
|
|
85
|
+
return html `
|
|
86
|
+
<div class="flex items-start leading-xs gap-m">
|
|
87
|
+
<div class="flex-1">
|
|
88
|
+
<div class="text-m text-body whitespace-nowrap">${this.label}</div>
|
|
89
|
+
<div class="text-s text-secondary">${this.helperText}</div>
|
|
90
|
+
<div class="text-s text-error" ?hidden=${this.disabled || this.readonly}>
|
|
91
|
+
${this._errorMessage}
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
|
|
95
|
+
<div class="flex items-center gap-xs">
|
|
96
|
+
<button
|
|
97
|
+
aria-label=${this.t('select')}
|
|
98
|
+
class=${classMap({
|
|
99
|
+
'text-right min-w-0 transition-colors transition-opacity': true,
|
|
100
|
+
'rounded-s focus-outline-none focus-ring-2 focus-ring-primary-50': true,
|
|
101
|
+
'text-secondary': this.readonly,
|
|
102
|
+
'text-disabled': this.disabled,
|
|
103
|
+
'cursor-pointer text-body hover-opacity-80': !this.disabled && !this.readonly,
|
|
104
|
+
'font-medium': !this.readonly,
|
|
105
|
+
})}
|
|
106
|
+
?disabled=${this.disabled || this.readonly}
|
|
107
|
+
@click=${onClick}
|
|
108
|
+
>
|
|
109
|
+
<div class="truncate min-w-0">
|
|
110
|
+
${this._value
|
|
111
|
+
? html `
|
|
112
|
+
<foxy-i18n
|
|
113
|
+
infer=""
|
|
114
|
+
key="value"
|
|
115
|
+
.options=${this.getDisplayValueOptions((_a = resource === null || resource === void 0 ? void 0 : resource.data) !== null && _a !== void 0 ? _a : null, (resource === null || resource === void 0 ? void 0 : resource.data) ? '' : (resource === null || resource === void 0 ? void 0 : resource.in('fail')) ? 'fail' : 'busy')}
|
|
116
|
+
>
|
|
117
|
+
</foxy-i18n>
|
|
118
|
+
`
|
|
119
|
+
: this.placeholder}
|
|
120
|
+
</div>
|
|
121
|
+
</button>
|
|
122
|
+
|
|
123
|
+
<button
|
|
124
|
+
aria-label=${this.t('clear')}
|
|
125
|
+
class=${classMap({
|
|
126
|
+
'rounded-full transition-colors': true,
|
|
127
|
+
'focus-outline-none focus-ring-2 focus-ring-primary-50': true,
|
|
128
|
+
'cursor-pointer text-tertiary hover-text-body': !this.disabled,
|
|
129
|
+
'cursor-default text-disabled': this.disabled,
|
|
130
|
+
})}
|
|
131
|
+
style="width: 1em; height: 1em;"
|
|
132
|
+
?disabled=${this.disabled}
|
|
133
|
+
?hidden=${this.readonly || !this._value}
|
|
134
|
+
@click=${() => {
|
|
135
|
+
this._value = '';
|
|
136
|
+
this.dispatchEvent(new CustomEvent('clear'));
|
|
137
|
+
}}
|
|
138
|
+
>
|
|
139
|
+
${svg `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" style="width: 1em; height: 1em; transform: scale(1.25); margin-right: -0.16em"><path d="M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z" /></svg>`}
|
|
140
|
+
</button>
|
|
141
|
+
</div>
|
|
142
|
+
</div>
|
|
143
|
+
|
|
144
|
+
<foxy-nucleon
|
|
145
|
+
infer=""
|
|
146
|
+
href=${ifDefined(this._value || void 0)}
|
|
147
|
+
id="value"
|
|
148
|
+
@update=${() => this.requestUpdate()}
|
|
149
|
+
>
|
|
150
|
+
</foxy-nucleon>
|
|
151
|
+
`;
|
|
152
|
+
}
|
|
153
|
+
__renderStandaloneLayout() {
|
|
154
|
+
var _a, _b;
|
|
155
|
+
return html `
|
|
55
156
|
<div class="block group">
|
|
56
157
|
<div
|
|
57
158
|
class=${classMap({
|
|
@@ -130,12 +231,6 @@ export class InternalResourcePickerControl extends InternalEditableControl {
|
|
|
130
231
|
</div>
|
|
131
232
|
`;
|
|
132
233
|
}
|
|
133
|
-
updated(changes) {
|
|
134
|
-
var _a, _b;
|
|
135
|
-
super.updated(changes);
|
|
136
|
-
if (changes.has('item'))
|
|
137
|
-
(_b = (_a = this.__getItemRenderer.cache).clear) === null || _b === void 0 ? void 0 : _b.call(_a);
|
|
138
|
-
}
|
|
139
234
|
__handleFetchEvent(event) {
|
|
140
235
|
if (!(event instanceof FetchEvent))
|
|
141
236
|
return;
|
|
@@ -149,15 +244,15 @@ export class InternalResourcePickerControl extends InternalEditableControl {
|
|
|
149
244
|
return event.respondWith(this.__handleEmpty());
|
|
150
245
|
}
|
|
151
246
|
}
|
|
152
|
-
async
|
|
247
|
+
async __handleSelect(request) {
|
|
248
|
+
const body = (await request.clone().json());
|
|
249
|
+
this._value = body.selection;
|
|
153
250
|
return new Response(JSON.stringify({
|
|
154
251
|
_links: { self: { href: `foxy://${this.virtualHost}/empty` } },
|
|
155
252
|
message: 'Resource selected.',
|
|
156
253
|
}));
|
|
157
254
|
}
|
|
158
|
-
async
|
|
159
|
-
const body = (await request.clone().json());
|
|
160
|
-
this._value = body.selection;
|
|
255
|
+
async __handleEmpty() {
|
|
161
256
|
return new Response(JSON.stringify({
|
|
162
257
|
_links: { self: { href: `foxy://${this.virtualHost}/empty` } },
|
|
163
258
|
message: 'Resource selected.',
|