@foxy.io/elements 1.45.0-beta.1 → 1.45.0-beta.3
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 +1 -1
- package/dist/cdn/foxy-address-form.js +1 -1
- package/dist/cdn/foxy-admin-subscription-card.js +1 -1
- package/dist/cdn/foxy-admin-subscription-form.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 +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-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-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.js +1 -1
- package/dist/cdn/foxy-customer.js +1 -1
- package/dist/cdn/foxy-customers-table.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-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-experimental-add-to-cart-builder.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-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 +1 -1
- package/dist/cdn/foxy-integration-card.js +1 -1
- package/dist/cdn/foxy-integration-form.js +1 -1
- package/dist/cdn/foxy-item-card.js +1 -1
- package/dist/cdn/foxy-item-category-card.js +1 -1
- package/dist/cdn/foxy-item-category-form.js +1 -1
- package/dist/cdn/foxy-item-form.js +1 -1
- package/dist/cdn/foxy-item-option-card.js +1 -1
- package/dist/cdn/foxy-item-option-form.js +1 -1
- package/dist/cdn/foxy-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-query-builder.js +1 -1
- package/dist/cdn/foxy-report-form.js +1 -1
- package/dist/cdn/foxy-reports-table.js +1 -1
- 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-store-card.js +1 -1
- package/dist/cdn/foxy-store-form.js +1 -1
- package/dist/cdn/foxy-store-shipping-method-form.js +1 -1
- package/dist/cdn/foxy-subscription-card.js +1 -1
- package/dist/cdn/foxy-subscription-form.js +1 -1
- package/dist/cdn/foxy-subscription-settings-form.js +1 -1
- package/dist/cdn/foxy-subscriptions-table.js +1 -1
- package/dist/cdn/foxy-table.js +1 -1
- package/dist/cdn/foxy-tax-card.js +1 -1
- package/dist/cdn/foxy-tax-form.js +1 -1
- package/dist/cdn/foxy-template-config-form.js +1 -1
- package/dist/cdn/foxy-template-form.js +1 -1
- package/dist/cdn/foxy-template-set-card.js +1 -1
- package/dist/cdn/foxy-template-set-form.js +1 -1
- package/dist/cdn/foxy-transaction-card.js +1 -1
- package/dist/cdn/foxy-transaction.js +1 -1
- package/dist/cdn/foxy-transactions-table.js +1 -1
- package/dist/cdn/foxy-update-payment-method-form.js +1 -1
- package/dist/cdn/foxy-user-card.js +1 -1
- package/dist/cdn/foxy-user-form.js +1 -1
- package/dist/cdn/foxy-user-invitation-card.js +1 -1
- package/dist/cdn/foxy-user-invitation-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-f00cd094.js → shared-05e997ae.js} +1 -1
- package/dist/cdn/{shared-d0c1664e.js → shared-0abec247.js} +1 -1
- package/dist/cdn/{shared-9b599205.js → shared-0b3dbac6.js} +1 -1
- package/dist/cdn/{shared-15a7e329.js → shared-1b04321a.js} +1 -1
- package/dist/cdn/{shared-8a83a6eb.js → shared-461a25ae.js} +1 -1
- package/dist/cdn/{shared-cee1c6f1.js → shared-4e279e77.js} +1 -1
- package/dist/cdn/{shared-e6559d84.js → shared-4e4766ee.js} +1 -1
- package/dist/cdn/{shared-d525b69b.js → shared-4f36f302.js} +1 -1
- package/dist/cdn/{shared-c4df3a2a.js → shared-52053d0d.js} +1 -1
- package/dist/cdn/{shared-57b7386e.js → shared-6783fe5e.js} +1 -1
- package/dist/cdn/{shared-da95bb48.js → shared-69074dae.js} +1 -1
- package/dist/cdn/{shared-da4f539a.js → shared-7933d898.js} +1 -1
- package/dist/cdn/{shared-8f2da12b.js → shared-7f4e3256.js} +1 -1
- package/dist/cdn/{shared-b56949d3.js → shared-8ba4b5bf.js} +1 -1
- package/dist/cdn/{shared-b4a3d776.js → shared-8bda01cf.js} +1 -1
- package/dist/cdn/{shared-6c2a7d2f.js → shared-92c211bd.js} +1 -1
- package/dist/cdn/shared-9585cf5b.js +1 -0
- package/dist/cdn/shared-96e4f603.js +1 -0
- package/dist/cdn/{shared-64c855e5.js → shared-ada2d315.js} +1 -1
- package/dist/cdn/{shared-5b93d193.js → shared-adfed461.js} +1 -1
- package/dist/cdn/{shared-438e41ab.js → shared-b148b310.js} +1 -1
- package/dist/cdn/{shared-090ee4eb.js → shared-b7401886.js} +1 -1
- package/dist/cdn/{shared-264fb8a2.js → shared-ba0d1f31.js} +1 -1
- package/dist/cdn/{shared-a1f181bf.js → shared-bc89d3fb.js} +1 -1
- package/dist/cdn/{shared-8ee6bff5.js → shared-c84bb30e.js} +1 -1
- package/dist/cdn/{shared-af39ffd8.js → shared-d674d2ce.js} +1 -1
- package/dist/cdn/{shared-597fffaa.js → shared-df92d411.js} +1 -1
- package/dist/cdn/{shared-73c199ae.js → shared-f58068b0.js} +1 -1
- package/dist/cdn/translations/admin-subscription-form/en.json +2 -2
- package/dist/cdn/translations/cart-form/en.json +2 -2
- package/dist/cdn/translations/coupon-card/en.json +8 -8
- package/dist/cdn/translations/coupon-form/en.json +10 -10
- package/dist/cdn/translations/discount-builder/en.json +2 -2
- package/dist/cdn/translations/experimental-add-to-cart-builder/en.json +15 -7
- package/dist/cdn/translations/item-category-form/en.json +2 -2
- package/dist/cdn/translations/item-form/en.json +2 -2
- package/dist/cdn/translations/transaction/en.json +2 -2
- package/dist/elements/public/ExperimentalAddToCartBuilder/ExperimentalAddToCartBuilder.js +195 -167
- package/dist/elements/public/ExperimentalAddToCartBuilder/ExperimentalAddToCartBuilder.js.map +1 -1
- package/dist/elements/public/NucleonElement/NucleonElement.js +11 -6
- package/dist/elements/public/NucleonElement/NucleonElement.js.map +1 -1
- package/dist/elements/public/UserInvitationForm/internal/InternalUserInvitationFormAsyncAction/InternalUserInvitationFormAsyncAction.js +0 -2
- package/dist/elements/public/UserInvitationForm/internal/InternalUserInvitationFormAsyncAction/InternalUserInvitationFormAsyncAction.js.map +1 -1
- package/dist/utils/get-subscription-status.js +1 -1
- package/dist/utils/get-subscription-status.js.map +1 -1
- package/package.json +1 -1
- package/dist/cdn/shared-02dd05dd.js +0 -1
- package/dist/cdn/shared-ada5e9f5.js +0 -1
package/dist/elements/public/ExperimentalAddToCartBuilder/ExperimentalAddToCartBuilder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExperimentalAddToCartBuilder.js","sourceRoot":"","sources":["../../../../src/elements/public/ExperimentalAddToCartBuilder/ExperimentalAddToCartBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { PropertyDeclarations, TemplateResult } from 'lit-element';\nimport type { InternalSummaryControl } from '../../internal/InternalSummaryControl/InternalSummaryControl';\nimport type { NucleonElement } from '../NucleonElement/NucleonElement';\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 { ResponsiveMixin } from '../../../mixins/responsive';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { decode, encode } from 'html-entities';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { previewCSS } from './preview.css';\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html';\nimport { html, svg } from 'lit-element';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { classMap } from '../../../utils/class-map';\n\nimport debounce from 'lodash-es/debounce';\nimport hljsxml from 'highlight.js/lib/languages/xml.js';\nimport hljs from 'highlight.js/lib/core.js';\n\nconst NS = 'experimental-add-to-cart-builder';\nconst Base = ResponsiveMixin(TranslatableMixin(InternalForm, NS));\nhljs.registerLanguage('xml', hljsxml);\n\n// TODO use proper encoding when encoding API supports HTML entities\nconst weakEncode = (value: string, checkHmacCompatibility: boolean) => {\n if (checkHmacCompatibility) {\n if (decode(value) !== value) throw new Error('error_html_entities_present');\n if (value.includes('\"')) throw new Error('error_double_quotes_present');\n }\n\n return value.replace(/\"/g, '"');\n};\n\n/**\n * WARNING: this element is marked as experimental and is subject to change in future releases.\n * We will not be maintaining backwards compatibility for elements in the experimental namespace.\n * If you are using this element, please make sure to use a fixed version of the package in your `package.json`.\n *\n * This element allows you to create an add-to-cart form and link for your store.\n *\n * @element foxy-experimental-add-to-cart-builder\n */\nexport class ExperimentalAddToCartBuilder extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n defaultDomain: { attribute: 'default-domain' },\n encodeHelper: { attribute: 'encode-helper' },\n localeCodes: { attribute: 'locale-codes' },\n store: {},\n __previousUnsignedCode: { attribute: false },\n __previousSignedCode: { attribute: false },\n __signingState: { attribute: false },\n __openState: { attribute: false },\n };\n }\n\n /** Default host domain for stores that don't use a custom domain name, e.g. `foxycart.com`. */\n defaultDomain: string | null = null;\n\n /** URL of the HMAC encoder endpoint. */\n encodeHelper: string | null = null;\n\n /** URL of the `fx:locale_codes` property helper. This will be used to determine the currency code. */\n localeCodes: string | null = null;\n\n /** URL of the store this add-to-cart code is created for. */\n store: string | null = null;\n\n private readonly __signingSeparator = `--${Date.now()}${(Math.random() * 100000).toFixed(0)}--`;\n\n private readonly __emptyOptions = [\n { label: 'option_false', value: 'false' },\n { label: 'option_true', value: 'true' },\n { label: 'option_reset', value: 'reset' },\n ];\n\n private readonly __cartOptions = [\n { label: 'option_add', value: 'add' },\n { label: 'option_checkout', value: 'checkout' },\n { label: 'option_redirect', value: 'redirect' },\n ];\n\n private readonly __signAsync = debounce(async (html: string, encodeHelper: string) => {\n if (html === this.__previousUnsignedCode && this.__previousSignedCode) return;\n\n const isCancelled = () => html !== this.__previousUnsignedCode;\n this.__signingState = 'busy';\n\n try {\n const res = await new ExperimentalAddToCartBuilder.API(this).fetch(encodeHelper, {\n headers: { 'Content-Type': 'text/plain' },\n method: 'POST',\n body: html,\n });\n\n if (!isCancelled()) {\n if (res.ok) {\n const result = (await res.json()).result as string;\n if (!isCancelled()) {\n this.__signingState = 'idle';\n this.__previousSignedCode = result.replace(/value=\"--OPEN--\" data-replace/gi, 'value');\n }\n } else {\n this.__signingState = 'fail';\n }\n }\n } catch {\n if (!isCancelled()) this.__signingState = 'fail';\n }\n }, 500);\n\n private __previousUnsignedCode = '';\n\n private __previousSignedCode = '';\n\n private __signingState: 'idle' | 'busy' | 'fail' = 'idle';\n\n private __openState: boolean[] = [];\n\n get hiddenSelector(): BooleanSelector {\n const alwaysMatch = [super.hiddenSelector.toString()];\n alwaysMatch.unshift('header:copy-id', 'header:copy-json', 'undo');\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n renderBody(): TemplateResult {\n const addToCartCode = this.__getAddToCartCode();\n const storeUrl = this.data?._links['fx:store'].href ?? this.store ?? void 0;\n const store = this.__storeLoader?.data;\n\n return html`\n <div class=\"grid gap-m items-start sm-grid-cols-2 md-grid-cols-3 h-full overflow-auto\">\n <foxy-internal-summary-control layout=\"section\" class=\"space-y-s\" infer=\"items\">\n ${this.form.items?.map((product, index) => {\n return html`\n <foxy-internal-summary-control\n layout=\"details\"\n label=${ifDefined(product.name.trim() || void 0)}\n infer=\"item-group\"\n ?open=${ifDefined(this.__openState[index])}\n @toggle=${(evt: CustomEvent) => {\n const details = evt.currentTarget as InternalSummaryControl;\n this.__openState[index] = details.open;\n this.__openState = [...this.__openState];\n }}\n >\n <foxy-internal-experimental-add-to-cart-builder-item-control\n item-categories=${ifDefined(store?._links['fx:item_categories'].href)}\n currency-code=${ifDefined(this.__resolvedCurrencyCode ?? void 0)}\n store=${ifDefined(storeUrl)}\n index=${index}\n infer=\"item\"\n ?use-cart-validation=${ifDefined(store?.use_cart_validation)}\n .defaultItemCategory=${this.__defaultItemCategory}\n @remove=${() => {\n const newProducts = this.form.items?.filter((_, i) => i !== index);\n this.edit({ items: newProducts });\n this.__openState = this.__openState.filter((_, i) => i !== index);\n }}\n >\n </foxy-internal-experimental-add-to-cart-builder-item-control>\n </foxy-internal-summary-control>\n `;\n })}\n\n <vaadin-button\n class=\"w-full\"\n theme=\"success\"\n ?disabled=${this.disabled}\n @click=${() => {\n const newItem = { name: '', price: 0, custom_options: [], sub_frequency: '1m' };\n const existingItems = this.form.items ?? [];\n this.edit({ items: [...existingItems, newItem] });\n this.__openState = [...new Array(existingItems.length).fill(false), true];\n }}\n >\n <foxy-i18n infer=\"add-product\" key=\"caption\"></foxy-i18n>\n </vaadin-button>\n </foxy-internal-summary-control>\n\n <div class=\"space-y-m md-col-span-2 sticky top-0\">\n ${addToCartCode && !addToCartCode.error\n ? html`\n <foxy-internal-summary-control infer=\"preview\">\n <div class=\"flex\">\n <iframe\n srcdoc=\"${previewCSS}${addToCartCode.formHTML}\"\n style=\"margin: calc(-1 * (0.625em + (var(--lumo-border-radius) / 4) - 1px))\"\n class=${classMap({\n 'flex-1 transition-all filter': true,\n 'blur-sm': this.__signingState !== 'idle',\n })}\n @load=${(evt: Event) => {\n const iframe = evt.currentTarget as HTMLIFrameElement;\n const root = iframe.contentWindow?.document.documentElement;\n if (root) iframe.style.height = root.scrollHeight + 'px';\n }}\n >\n </iframe>\n </div>\n\n <div\n class=\"flex leading-s text-s min-w-0 relative\"\n style=\"gap: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n >\n <div\n style=\"font-family: monospace; max-height: calc(8 * (1em * var(--lumo-line-height-s)))\"\n class=${classMap({\n 'break-all overflow-auto flex-1 min-w-0 transition-all filter': true,\n 'blur-sm': this.__signingState !== 'idle',\n })}\n >\n <code class=\"whitespace-pre\"\n >${unsafeHTML(\n hljs.highlight(addToCartCode.formHTML, { language: 'xml' }).value\n )}</code\n >\n </div>\n\n <div\n style=\"top: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px); right: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n class=${classMap({\n 'absolute right-0 bg-base rounded-s transition-opacity': true,\n 'opacity-0 pointer-events-none': this.__signingState !== 'busy',\n })}\n >\n <div class=\"bg-contrast-10 rounded-s\">\n <foxy-spinner infer=\"spinner\" class=\"-mx-xs\" style=\"transform: scale(0.8)\">\n </foxy-spinner>\n </div>\n </div>\n\n <foxy-copy-to-clipboard\n infer=\"copy-to-clipboard\"\n text=${addToCartCode.formHTML}\n class=${classMap({\n 'flex-shrink-0 text-m transition-opacity': true,\n 'opacity-0 pointer-events-none': this.__signingState === 'busy',\n })}\n >\n </foxy-copy-to-clipboard>\n </div>\n\n <div\n class=\"flex items-start text-xs leading-xs text-secondary\"\n style=\"gap: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n >\n ${svg`<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\" class=\"flex-shrink-0 text-contrast-70\" style=\"width: 1.25em\"><path fill-rule=\"evenodd\" d=\"M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM9 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM6.75 8a.75.75 0 0 0 0 1.5h.75v1.75a.75.75 0 0 0 1.5 0v-2.5A.75.75 0 0 0 8.25 8h-1.5Z\" clip-rule=\"evenodd\" /></svg>`}\n <p>\n <foxy-i18n infer=\"\" key=\"edits_tip\"></foxy-i18n>\n <a\n target=\"_blank\"\n class=\"rounded font-medium underline transition-colors cursor-pointer hover-opacity-80 focus-outline-none focus-ring-2 focus-ring-primary-50\"\n href=\"https://wiki.foxycart.com/v/2.0/products\"\n >\n <foxy-i18n infer=\"\" key=\"edits_docs\"></foxy-i18n>\n </a>\n </p>\n </div>\n </foxy-internal-summary-control>\n\n <foxy-internal-summary-control infer=\"link\">\n ${addToCartCode.linkHref\n ? html`\n <div\n class=\"flex items-center leading-s min-w-0 relative\"\n style=\"gap: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n >\n <foxy-i18n infer=\"\" key=\"direct_link\"></foxy-i18n>\n <a\n target=\"_blank\"\n style=\"max-width: 30rem\"\n href=${addToCartCode.linkHref}\n class=${classMap({\n 'font-medium truncate ml-auto min-w-0 rounded-s': true,\n 'transition-all filter': true,\n 'hover-underline': true,\n 'focus-outline-none focus-ring-2 focus-ring-primary-50': true,\n 'blur-sm': this.__signingState !== 'idle',\n })}\n >\n ${addToCartCode.linkHref}\n </a>\n <div\n style=\"top: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px); right: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n class=${classMap({\n 'absolute right-0 bg-base rounded-s transition-opacity': true,\n 'opacity-0 pointer-events-none': this.__signingState !== 'busy',\n })}\n >\n <div class=\"bg-contrast-10 rounded-s\">\n <foxy-spinner\n infer=\"spinner\"\n state=${this.__signingState === 'fail' ? 'error' : 'busy'}\n class=\"-mx-xs\"\n style=\"transform: scale(0.8)\"\n >\n </foxy-spinner>\n </div>\n </div>\n <foxy-copy-to-clipboard\n infer=\"copy-to-clipboard\"\n text=${addToCartCode.linkHref}\n class=${classMap({\n 'flex-shrink-0 text-m transition-opacity': true,\n 'opacity-0 pointer-events-none': this.__signingState === 'busy',\n })}\n >\n </foxy-copy-to-clipboard>\n </div>\n `\n : html`\n <p class=\"text-disabled\">\n <foxy-i18n infer=\"\" key=\"unavailable\"></foxy-i18n>\n </p>\n `}\n </foxy-internal-summary-control>\n `\n : html`\n <foxy-internal-summary-control infer=\"preview\">\n <div class=\"flex flex-col gap-xs items-center justify-center p-xl\">\n <foxy-spinner\n layout=\"no-label\"\n infer=\"unavailable\"\n state=${addToCartCode?.error.split('_')[0] ?? 'busy'}\n >\n </foxy-spinner>\n <foxy-i18n\n class=${classMap({\n 'text-tertiary': !addToCartCode?.error.startsWith('error_'),\n 'text-error': !!addToCartCode?.error.startsWith('error_'),\n 'text-s': true,\n })}\n infer=\"unavailable\"\n key=\"${addToCartCode?.error ?? 'loading_busy'}\"\n >\n </foxy-i18n>\n </div>\n </foxy-internal-summary-control>\n `}\n ${this.renderTemplateOrSlot()}\n\n <foxy-internal-summary-control infer=\"cart-settings\">\n <foxy-internal-resource-picker-control\n layout=\"summary-item\"\n first=${ifDefined(this.__storeLoader?.data?._links['fx:template_sets'].href)}\n infer=\"template-set-uri\"\n item=\"foxy-template-set-card\"\n >\n </foxy-internal-resource-picker-control>\n\n <foxy-internal-select-control\n layout=\"summary-item\"\n infer=\"empty\"\n .options=${this.__emptyOptions}\n >\n </foxy-internal-select-control>\n\n <foxy-internal-select-control\n layout=\"summary-item\"\n infer=\"cart\"\n .options=${this.__cartOptions}\n >\n </foxy-internal-select-control>\n\n ${this.form.cart === 'redirect'\n ? html`\n <foxy-internal-text-control layout=\"summary-item\" infer=\"redirect\">\n </foxy-internal-text-control>\n `\n : ''}\n\n <foxy-internal-text-control layout=\"summary-item\" infer=\"coupon\">\n </foxy-internal-text-control>\n </foxy-internal-summary-control>\n </div>\n </div>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__defaultTemplateSetHref)}\n id=\"defaultTemplateSetLoader\"\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__defaultItemCategoryHref)}\n id=\"defaultItemCategoryLoader\"\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.localeCodes ?? void 0)}\n id=\"localeCodesHelperLoader\"\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.form.template_set_uri ?? void 0)}\n id=\"templateSetLoader\"\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.data?._links['fx:store'].href ?? this.store ?? void 0)}\n id=\"storeLoaderId\"\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n ${this.form.items?.map((product, index) => {\n return html`\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(product.item_category_uri ?? void 0)}\n id=\"itemCategoryLoaderProduct${index}\"\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n ${product.custom_options.map((option, i) => {\n return html`\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(option.item_category_uri ?? void 0)}\n id=\"itemCategoryLoaderProduct${index}Option${i}\"\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n `;\n })}\n `;\n })}\n `;\n }\n\n updated(changes: Map<keyof this, unknown>): void {\n super.updated(changes);\n\n if (this.in('idle') && !this.form.items?.length) {\n this.edit({ items: [{ name: '', price: 0, sub_frequency: '1m', custom_options: [] }] });\n this.__openState = [true];\n }\n\n if (this.form.items?.length && !this.__openState.length) {\n this.__openState = [true, ...new Array(this.form.items.length - 1).fill(false)];\n }\n }\n\n submit(): void {\n // Do nothing – this form is not meant to be submitted.\n }\n\n private get __defaultTemplateSetHref() {\n try {\n const url = new URL(this.__storeLoader?.data?._links['fx:template_sets'].href ?? '');\n url.searchParams.set('code', 'DEFAULT');\n return url.toString();\n } catch {\n return undefined;\n }\n }\n\n private get __defaultItemCategoryHref() {\n try {\n const url = new URL(this.__storeLoader?.data?._links['fx:item_categories'].href ?? '');\n url.searchParams.set('code', 'DEFAULT');\n return url.toString();\n } catch {\n return undefined;\n }\n }\n\n private get __resolvedCurrencyCode() {\n type Loader = NucleonElement<Resource<Rels.LocaleCodes>>;\n\n const localeCodesLoader = this.renderRoot.querySelector<Loader>('#localeCodesHelperLoader');\n const currentLocale = this.__resolvedTemplateSet?.locale_code;\n const allLocales = localeCodesLoader?.data?.values;\n const localeInfo = currentLocale ? allLocales?.[currentLocale] : void 0;\n\n return localeInfo ? /Currency: ([A-Z]{3})/g.exec(localeInfo)?.[1]?.toUpperCase() : void 0;\n }\n\n private get __resolvedTemplateSet() {\n type TemplateSetsLoader = NucleonElement<Resource<Rels.TemplateSets>>;\n type TemplateSetLoader = NucleonElement<Resource<Rels.TemplateSet>>;\n const $ = <T extends Element>(s: string) => this.renderRoot.querySelector<T>(s);\n\n return (\n $<TemplateSetLoader>('#templateSetLoader')?.data ??\n $<TemplateSetsLoader>('#defaultTemplateSetLoader')?.data?._embedded['fx:template_sets'][0]\n );\n }\n\n private get __defaultItemCategory() {\n type Loader = NucleonElement<Resource<Rels.ItemCategories>>;\n return this.renderRoot.querySelector<Loader>('#defaultItemCategoryLoader')?.data?._embedded[\n 'fx:item_categories'\n ][0];\n }\n\n private get __resolvedCartUrl() {\n const store = this.__storeLoader?.data;\n\n if (store) {\n if (store.use_remote_domain) {\n return `https://${store.store_domain}/cart`;\n } else if (this.defaultDomain !== null) {\n return `https://${store.store_domain}.${this.defaultDomain}/cart`;\n }\n }\n\n return null;\n }\n\n private get __storeLoader() {\n type Loader = NucleonElement<Resource<Rels.Store>>;\n return this.renderRoot.querySelector<Loader>('#storeLoaderId');\n }\n\n private __getItemCategoryLoader(productIndex: number, optionIndex?: number) {\n type Loader = NucleonElement<Resource<Rels.ItemCategory>>;\n const prefix = `#itemCategoryLoaderProduct${productIndex}`;\n const selector = typeof optionIndex === 'number' ? `${prefix}Option${optionIndex}` : prefix;\n return this.renderRoot.querySelector<Loader>(selector);\n }\n\n private __getAddToCartFormHTML() {\n const currencyCode = this.__resolvedCurrencyCode;\n const templateSet = this.__resolvedTemplateSet;\n const cartUrl = this.__resolvedCartUrl;\n const store = this.__storeLoader?.data;\n\n if (!this.defaultDomain || !templateSet || !store || !currencyCode || !cartUrl) return '';\n\n const isHmacOn = store.use_cart_validation;\n let hasAtLeastOneFieldset = false;\n let output = `<form action=\"${weakEncode(cartUrl, isHmacOn)}\" method=\"post\" target=\"_blank\">`;\n let level = 1;\n\n const newline = () => `\\n${' '.repeat(level * 2)}`;\n const addHiddenInput = (name: string, value: string) => {\n const encodedValue = weakEncode(value, isHmacOn);\n const encodedName = weakEncode(name, isHmacOn);\n output += `${newline()}<input type=\"hidden\" name=\"${encodedName}\" value=\"${encodedValue}\">`;\n };\n\n if (templateSet.code !== 'DEFAULT') addHiddenInput('template_set', templateSet.code);\n if (this.form.empty && this.form.empty !== 'false') addHiddenInput('empty', this.form.empty);\n if (this.form.cart === 'checkout') addHiddenInput('cart', 'checkout');\n if (this.form.redirect) addHiddenInput('redirect', this.form.redirect);\n if (this.form.coupon) addHiddenInput('coupon', this.form.coupon);\n\n const items = this.form.items ?? [];\n const hasMoreThanOneProduct = items.length > 1;\n\n for (let productIndex = 0; productIndex < items.length; ++productIndex) {\n const itemCategoryLoader = this.__getItemCategoryLoader(productIndex);\n const itemCategory = itemCategoryLoader?.data;\n const product = items[productIndex];\n\n if (product.item_category_uri && !itemCategory) return '';\n\n const resolvedMinQty = Math.max(1, product.quantity_min ?? 1);\n const resolvedMaxQty = Math.max(resolvedMinQty, product.quantity_max ?? Infinity);\n const varyQty =\n resolvedMinQty !== resolvedMaxQty &&\n product.expires_format !== 'minutes' &&\n !product.hide_quantity;\n\n const varyPrice = product.price_configurable;\n const varyptions = product.custom_options.some(\n (v, i, a) => v.value_configurable || a.findIndex(vv => vv.name === v.name) !== i\n );\n\n const resolvedName =\n product.name.trim() || this.t('items.item-group.item.basics-group.name.placeholder');\n\n const needsFieldset =\n hasAtLeastOneFieldset || (hasMoreThanOneProduct && (varyPrice || varyQty || varyptions));\n\n if (needsFieldset) {\n hasAtLeastOneFieldset = true;\n output += `${newline()}<fieldset>`;\n level++;\n output += `${newline()}<legend>${encode(resolvedName)}</legend>`;\n }\n\n const prefix = productIndex === 0 ? '' : `${productIndex + 1}:`;\n addHiddenInput(`${prefix}name`, resolvedName);\n const price = `${product.price}${currencyCode}`;\n\n if (product.price_configurable) {\n const encodedNoCurrencyPrice = weakEncode(product.price.toFixed(2), isHmacOn);\n output += `${newline()}<label>`;\n level++;\n output += `${newline()}<span>${encode(this.t('preview.price_label'))}</span>`;\n\n if (store.use_cart_validation) {\n output += `${newline()}<input required name=\"${prefix}price\" value=\"--OPEN--\" data-replace=\"${encodedNoCurrencyPrice}\">`;\n } else {\n output += `${newline()}<input required name=\"${prefix}price\" value=\"${encodedNoCurrencyPrice}\">`;\n }\n\n level--;\n output += `${newline()}</label>`;\n } else {\n addHiddenInput(`${prefix}price`, price);\n }\n\n if (itemCategory && itemCategory.code !== 'DEFAULT') {\n addHiddenInput(`${prefix}category`, itemCategory.code);\n }\n\n if (product.code) {\n addHiddenInput(`${prefix}code`, product.code);\n } else if (store.use_cart_validation) {\n return { error: 'paused_code_required' };\n }\n\n if (product.parent_code) addHiddenInput(`${prefix}parent_code`, product.parent_code);\n\n if (product.image) {\n addHiddenInput(`${prefix}image`, product.image);\n if (product.url) addHiddenInput(`${prefix}url`, product.url);\n }\n\n if (product.sub_enabled) {\n if (product.sub_frequency) {\n addHiddenInput(`${prefix}sub_frequency`, product.sub_frequency);\n\n if (product.sub_startdate) {\n if (product.sub_startdate_format === 'yyyymmdd') {\n const date = new Date(product.sub_startdate);\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n addHiddenInput(`${prefix}sub_startdate`, `${year}${month}${day}`);\n } else {\n addHiddenInput(`${prefix}sub_startdate`, String(product.sub_startdate));\n }\n }\n\n if (product.sub_enddate) {\n if (product.sub_enddate_format === 'yyyymmdd') {\n const date = new Date(product.sub_enddate);\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n addHiddenInput(`${prefix}sub_enddate`, `${year}${month}${day}`);\n } else {\n addHiddenInput(`${prefix}sub_enddate`, String(product.sub_enddate));\n }\n }\n }\n }\n\n if (product.discount_name && product.discount_type && product.discount_details) {\n addHiddenInput(\n `${prefix}discount_${product.discount_type}`,\n `${product.discount_name}{${product.discount_details}}`\n );\n }\n\n if (product.expires_value) {\n if (product.expires_format === 'timestamp') {\n addHiddenInput(`${prefix}expires`, product.expires_value.toFixed(0));\n } else {\n addHiddenInput(`${prefix}expires`, product.expires_value.toFixed(0));\n }\n }\n\n if (varyQty) {\n output += `${newline()}<label>`;\n level++;\n output += `${newline()}<span>${encode(this.t('preview.quantity_label'))}</span>`;\n\n const encodedName = weakEncode(`${prefix}quantity`, isHmacOn);\n output += `${newline()}<input type=\"number\" name=\"${encodedName}\"`;\n output += ` min=\"${weakEncode(String(resolvedMinQty), isHmacOn)}\"`;\n\n if (resolvedMaxQty !== Infinity)\n output += ` max=\"${weakEncode(String(resolvedMaxQty), isHmacOn)}\"`;\n if (store.use_cart_validation) {\n const encodedQuantity = weakEncode(String(product.quantity ?? 1), isHmacOn);\n output += ` value=\"--OPEN--\" data-replace=\"${encodedQuantity}\">`;\n } else {\n output += ` value=\"${weakEncode(String(product.quantity ?? 1), isHmacOn)}\">`;\n }\n\n level--;\n output += `${newline()}</label>`;\n } else if ((product.quantity ?? 1) > 1) {\n addHiddenInput(`${prefix}quantity`, (product.quantity ?? 1).toString());\n }\n\n if (product.expires_format !== 'minutes') {\n if (resolvedMinQty !== 1) {\n addHiddenInput(`${prefix}quantity_min`, resolvedMinQty.toFixed(0));\n }\n if (resolvedMaxQty !== Infinity) {\n addHiddenInput(`${prefix}quantity_max`, resolvedMaxQty.toFixed(0));\n }\n }\n\n if (product.length) addHiddenInput(`${prefix}length`, product.length.toFixed(3));\n if (product.width) addHiddenInput(`${prefix}width`, product.width.toFixed(3));\n if (product.height) addHiddenInput(`${prefix}height`, product.height.toFixed(3));\n if (product.weight) addHiddenInput(`${prefix}weight`, product.weight.toFixed(3));\n\n if (store.features_multiship) {\n output += `${newline()}<label>`;\n level++;\n output += `${newline()}<span>${encode(this.t('preview.shipto_label'))}</span>`;\n\n if (store.use_cart_validation) {\n output += `${newline()}<input name=\"${prefix}shipto\" value=\"--OPEN--\" data-replace=\"\">`;\n } else {\n output += `${newline()}<input name=\"${prefix}shipto\" value=\"\">`;\n }\n\n level--;\n output += `${newline()}</label>`;\n }\n\n const groupedCustomOptions = product.custom_options.reduce((acc, option) => {\n if (!acc[option.name]) acc[option.name] = [];\n acc[option.name].push(option);\n return acc;\n }, {} as Record<string, Required<Data>['items'][number]['custom_options']>);\n\n for (const optionName in groupedCustomOptions) {\n const group = groupedCustomOptions[optionName];\n\n if (group.length === 1) {\n const optionIndex = product.custom_options.indexOf(group[0]);\n const itemCategory = this.__getItemCategoryLoader(productIndex, optionIndex)?.data;\n const modifiers = this.__getOptionModifiers(group[0], itemCategory ?? null, currencyCode);\n const value = `${group[0].value}${modifiers}`;\n const name = `${prefix}${optionName}`;\n\n if (group[0].value_configurable) {\n output += `${newline()}<label>`;\n level++;\n output += `${newline()}<span>${encode(optionName)}:</span>`;\n output += `${newline()}<input name=\"${weakEncode(name, isHmacOn)}\" `;\n\n if (store.use_cart_validation) {\n output += `value=\"--OPEN--\" data-replace=\"${weakEncode(value, isHmacOn)}\">`;\n } else {\n output += `value=\"${weakEncode(value, isHmacOn)}\">`;\n }\n\n level--;\n output += `${newline()}</label>`;\n } else {\n addHiddenInput(name, value);\n }\n } else {\n output += `${newline()}<label>`;\n level++;\n output += `${newline()}<span>${encode(optionName)}:</span>`;\n output += `${newline()}<select name=\"${prefix}${optionName}\">`;\n level++;\n\n group.forEach(option => {\n const optionIndex = product.custom_options.indexOf(option);\n const itemCategory = this.__getItemCategoryLoader(productIndex, optionIndex)?.data;\n const modifiers = this.__getOptionModifiers(option, itemCategory ?? null, currencyCode);\n const encodedValue = weakEncode(`${option.value}${modifiers}`, isHmacOn);\n const encodedCaption = encode(option.value ?? '');\n output += `${newline()}<option value=\"${encodedValue}\">${encodedCaption}</option>`;\n });\n\n level--;\n output += `${newline()}</select>`;\n level--;\n output += `${newline()}</label>`;\n }\n }\n\n if (needsFieldset) {\n level--;\n output += `${newline()}</fieldset>`;\n }\n }\n\n const submitCaptionSuffix = this.form.cart === 'checkout' ? 'checkout' : 'cart';\n const encodedSubmitCaption = encode(this.t(`preview.submit_caption_${submitCaptionSuffix}`));\n\n output += `${newline()}<button type=\"submit\">${encodedSubmitCaption}</button>`;\n level--;\n output += `${newline()}</form>`;\n\n return output;\n }\n\n private __getAddToCartLinkHref() {\n const currencyCode = this.__resolvedCurrencyCode;\n const templateSet = this.__resolvedTemplateSet;\n const cartUrl = this.__resolvedCartUrl;\n const store = this.__storeLoader?.data;\n\n if (!this.defaultDomain || !templateSet || !store || !currencyCode || !cartUrl) return '';\n\n const url = new URL(cartUrl);\n\n if (templateSet.code !== 'DEFAULT') url.searchParams.set('template_set', templateSet.code);\n if (this.form.cart === 'checkout') url.searchParams.set('cart', 'checkout');\n if (this.form.redirect) url.searchParams.set('redirect', this.form.redirect);\n if (this.form.coupon) url.searchParams.set('coupon', this.form.coupon);\n if (this.form.empty && this.form.empty !== 'false') {\n url.searchParams.set('empty', this.form.empty);\n }\n\n for (let index = 0; index < (this.form.items?.length ?? 0); ++index) {\n const product = this.form.items![index];\n const prefix = index === 0 ? '' : `${index + 1}:`;\n const itemCategory = this.__getItemCategoryLoader(index)?.data;\n\n if (product.item_category_uri && !itemCategory) return '';\n if (product.price_configurable) return '';\n if (new Set(product.custom_options.map(v => v.name)).size < product.custom_options.length) {\n return '';\n }\n\n if (itemCategory && itemCategory.code !== 'DEFAULT') {\n url.searchParams.set(`${prefix}category`, itemCategory.code);\n }\n\n url.searchParams.set(`${prefix}name`, product.name);\n url.searchParams.set(`${prefix}price`, `${product.price}${currencyCode}`);\n\n if (product.code) {\n url.searchParams.set(`${prefix}code`, product.code);\n } else if (store.use_cart_validation) {\n return { error: 'paused_code_required' };\n }\n\n if (product.parent_code) url.searchParams.set(`${prefix}parent_code`, product.parent_code);\n\n if (product.image) {\n url.searchParams.set(`${prefix}image`, product.image);\n if (product.url) url.searchParams.set(`${prefix}url`, product.url);\n }\n\n if (product.sub_enabled) {\n if (product.sub_frequency) {\n url.searchParams.set(`${prefix}sub_frequency`, product.sub_frequency);\n\n if (product.sub_startdate) {\n if (product.sub_startdate_format === 'yyyymmdd') {\n const date = new Date(product.sub_startdate);\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n url.searchParams.set(`${prefix}sub_startdate`, `${year}${month}${day}`);\n } else {\n url.searchParams.set(`${prefix}sub_startdate`, String(product.sub_startdate));\n }\n }\n\n if (product.sub_enddate) {\n if (product.sub_enddate_format === 'yyyymmdd') {\n const date = new Date(product.sub_enddate);\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n url.searchParams.set(`${prefix}sub_enddate`, `${year}${month}${day}`);\n } else {\n url.searchParams.set(`${prefix}sub_enddate`, String(product.sub_enddate));\n }\n }\n }\n }\n\n if (product.discount_name && product.discount_type && product.discount_details) {\n url.searchParams.set(\n `${prefix}discount_${product.discount_type}`,\n `${product.discount_name}{${product.discount_details}}`\n );\n }\n\n if (product.expires_value) {\n if (product.expires_format === 'timestamp') {\n url.searchParams.set(`${prefix}expires`, product.expires_value.toFixed(0));\n } else {\n url.searchParams.set(`${prefix}expires`, product.expires_value.toFixed(0));\n }\n }\n\n if ((product.quantity ?? 1) > 1) {\n url.searchParams.set(`${prefix}quantity`, (product.quantity ?? 1).toFixed(0));\n }\n\n if (product.expires_format !== 'minutes') {\n if (product.quantity_min) {\n url.searchParams.set(`${prefix}quantity_min`, product.quantity_min.toString());\n }\n if (product.quantity_max) {\n url.searchParams.set(`${prefix}quantity_max`, product.quantity_max.toString());\n }\n }\n\n if (product.weight) url.searchParams.set(`${prefix}weight`, product.weight.toFixed(3));\n if (product.length) url.searchParams.set(`${prefix}length`, product.length.toFixed(3));\n if (product.width) url.searchParams.set(`${prefix}width`, product.width.toFixed(3));\n if (product.height) url.searchParams.set(`${prefix}height`, product.height.toFixed(3));\n\n for (let optionIndex = 0; optionIndex < product.custom_options.length; ++optionIndex) {\n const option = product.custom_options[optionIndex];\n if (option.value_configurable) return '';\n\n const itemCategory = this.__getItemCategoryLoader(index, optionIndex)?.data;\n const modifiers = this.__getOptionModifiers(option, itemCategory ?? null, currencyCode);\n url.searchParams.set(`${prefix}${option.name}`, `${option.value ?? ''}${modifiers}`);\n }\n }\n\n return url.toString();\n }\n\n private __getAddToCartCode() {\n try {\n const store = this.__storeLoader?.data;\n if (!this.encodeHelper || !store) return null;\n\n const checkEquality = store.use_cart_validation;\n const formHTML = this.__getAddToCartFormHTML();\n const linkHref = this.__getAddToCartLinkHref();\n if (!formHTML && !linkHref) return null;\n if (typeof formHTML === 'object') return { error: formHTML.error };\n if (typeof linkHref === 'object') return { error: linkHref.error };\n\n let unsignedCode: string;\n\n if (linkHref) {\n const linkHTML = `<a href=\"${weakEncode(linkHref, checkEquality)}\">Add to cart</a>`;\n unsignedCode = `${formHTML}${this.__signingSeparator}${linkHTML}`;\n } else {\n unsignedCode = formHTML;\n }\n\n if (unsignedCode === this.__previousUnsignedCode && this.__previousSignedCode) {\n const [formHTML, linkHTML] = this.__previousSignedCode.split(this.__signingSeparator);\n return {\n linkHref: linkHTML ? decode(linkHTML.substring(9, linkHTML.length - 17)) : '',\n formHTML,\n };\n }\n\n this.__previousUnsignedCode = unsignedCode;\n this.__previousSignedCode = '';\n\n if (store.use_cart_validation) this.__signAsync(unsignedCode, this.encodeHelper);\n return { formHTML, linkHref };\n } catch (err) {\n return { error: err.message };\n }\n }\n\n private __getOptionModifiers(\n option: Required<Data>['items'][number]['custom_options'][number],\n optionItemCategory: Resource<Rels.ItemCategory> | null,\n currencyCode: string\n ) {\n if (option.value_configurable) return '';\n const modifiers = [];\n\n if (option.price) {\n const operator = option.replace_price ? ':' : Math.sign(option.price) === -1 ? '-' : '+';\n if (option.replace_price || option.price !== 0)\n modifiers.push(`p${operator}${Math.abs(option.price)}${currencyCode}`);\n }\n\n if (option.weight) {\n const operator = option.replace_weight ? ':' : Math.sign(option.weight) === -1 ? '-' : '+';\n if (option.replace_weight || option.weight !== 0)\n modifiers.push(`w${operator}${Math.abs(option.weight)}`);\n }\n\n if (option.item_category_uri && !optionItemCategory) return '';\n if (optionItemCategory) modifiers.push(`y:${optionItemCategory.code}`);\n\n if (option.code) {\n const operator = option.replace_code ? ':' : '+';\n if (option.replace_code || option.code !== '') modifiers.push(`c${operator}${option.code}`);\n }\n\n return modifiers.length ? `{${modifiers.join('|')}}` : '';\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ExperimentalAddToCartBuilder.js","sourceRoot":"","sources":["../../../../src/elements/public/ExperimentalAddToCartBuilder/ExperimentalAddToCartBuilder.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,iBAAiB,EAAE,wCAAqC;AACjE,OAAO,EAAE,eAAe,EAAE,sCAAmC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,oDAAiD;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,oCAAiC;AAEpD,OAAO,QAAQ,MAAM,oBAAoB,CAAC;AAC1C,OAAO,OAAO,MAAM,mCAAmC,CAAC;AACxD,OAAO,IAAI,MAAM,0BAA0B,CAAC;AAE5C,MAAM,EAAE,GAAG,kCAAkC,CAAC;AAC9C,MAAM,IAAI,GAAG,eAAe,CAAC,iBAAiB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AAClE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAEtC,yCAAyC;AACzC,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAC5E,wFAAwF;AACxF,EAAE;AACF,4FAA4F;AAC5F,sGAAsG;AAEtG,SAAS,oBAAoB,CAAC,KAAa,EAAE,eAAwB;IACnE,IAAI,eAAe,EAAE;QACnB,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC5E,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;KACzE;IAED,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,4BAA6B,SAAQ,IAAU;IAA5D;;QAeE,+FAA+F;QAC/F,kBAAa,GAAkB,IAAI,CAAC;QAEpC,wCAAwC;QACxC,iBAAY,GAAkB,IAAI,CAAC;QAEnC,sGAAsG;QACtG,gBAAW,GAAkB,IAAI,CAAC;QAElC,6DAA6D;QAC7D,UAAK,GAAkB,IAAI,CAAC;QAEX,uBAAkB,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/E,mBAAc,GAAG;YAChC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE;YACzC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE;YACvC,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE;SAC1C,CAAC;QAEe,kBAAa,GAAG;YAC/B,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE;YACrC,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE;YAC/C,EAAE,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE;SAChD,CAAC;QAEe,gBAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,IAAY,EAAE,YAAoB,EAAE,EAAE;YACnF,IAAI,IAAI,KAAK,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,oBAAoB;gBAAE,OAAO;YAE9E,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,sBAAsB,CAAC;YAC/D,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;YAE7B,IAAI;gBACF,MAAM,GAAG,GAAG,MAAM,IAAI,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE;oBAC/E,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;oBACzC,MAAM,EAAE,MAAM;oBACd,IAAI,EAAE,IAAI;iBACX,CAAC,CAAC;gBAEH,IAAI,CAAC,WAAW,EAAE,EAAE;oBAClB,IAAI,GAAG,CAAC,EAAE,EAAE;wBACV,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAgB,CAAC;wBACnD,IAAI,CAAC,WAAW,EAAE,EAAE;4BAClB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;4BAC7B,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC,OAAO,CAAC,iCAAiC,EAAE,OAAO,CAAC,CAAC;yBACxF;qBACF;yBAAM;wBACL,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;qBAC9B;iBACF;aACF;YAAC,WAAM;gBACN,IAAI,CAAC,WAAW,EAAE;oBAAE,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;aAClD;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;QAEA,2BAAsB,GAAG,EAAE,CAAC;QAE5B,yBAAoB,GAAG,EAAE,CAAC;QAE1B,mBAAc,GAA6B,MAAM,CAAC;QAElD,gBAAW,GAAc,EAAE,CAAC;IA25BtC,CAAC;IAt+BC,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,aAAa,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE;YAC9C,YAAY,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE;YAC5C,WAAW,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE;YAC1C,KAAK,EAAE,EAAE;YACT,sBAAsB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;YAC5C,oBAAoB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;YAC1C,cAAc,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;YACpC,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;SAClC,CAAC;IACJ,CAAC;IAiED,IAAI,cAAc;QAChB,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;QAClE,OAAO,IAAI,eAAe,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,UAAU;;QACR,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAChD,MAAM,QAAQ,qBAAG,IAAI,CAAC,IAAI,0CAAE,MAAM,CAAC,UAAU,EAAE,IAAI,mCAAI,IAAI,CAAC,KAAK,mCAAI,KAAK,CAAC,CAAC;QAC5E,MAAM,KAAK,SAAG,IAAI,CAAC,aAAa,0CAAE,IAAI,CAAC;QACvC,MAAM,aAAa,eAAG,aAAa,CAAC,aAAa,0CAAE,KAAK,CAAC,GAAG,EAAE,CAAC,oCAAK,QAAQ,CAAC;QAE7E,OAAO,IAAI,CAAA;;;YAGH,MAAA,IAAI,CAAC,IAAI,CAAC,KAAK,0CAAE,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;;YACxC,OAAO,IAAI,CAAA;;;wBAGC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,CAAC;;wBAExC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;0BAChC,CAAC,GAAgB,EAAE,EAAE;gBAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,aAAuC,CAAC;gBAC5D,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;gBACvC,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3C,CAAC;;;oCAGmB,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAC,oBAAoB,EAAE,IAAI,CAAC;kCACrD,SAAS,OAAC,IAAI,CAAC,sBAAsB,mCAAI,KAAK,CAAC,CAAC;0BACxD,SAAS,CAAC,QAAQ,CAAC;0BACnB,KAAK;;yCAEU,SAAS,CAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,mBAAmB,CAAC;yCACrC,IAAI,CAAC,qBAAqB;4BACvC,GAAG,EAAE;;gBACb,MAAM,WAAW,SAAG,IAAI,CAAC,IAAI,CAAC,KAAK,0CAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;gBACnE,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;gBAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;YACpE,CAAC;;;;aAIN,CAAC;QACJ,CAAC,CAAC;;;;;wBAKY,IAAI,CAAC,QAAQ;qBAChB,GAAG,EAAE;;YACZ,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YAChF,MAAM,aAAa,SAAG,IAAI,CAAC,IAAI,CAAC,KAAK,mCAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAClD,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QAC5E,CAAC;;;;;;;;cAQC,aAAa,CAAC,aAAa;YAC3B,CAAC,CAAC,IAAI,CAAA;;gFAE4D,aAAa;;;+BAG9D,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe;;4BAE7D,aAAa,CAAC,aAAa;;;;iBAItC;YACH,CAAC,CAAC,IAAI,CAAA;;;gCAGY,UAAU,GAAG,aAAa,CAAC,QAAQ;;8BAErC,QAAQ,CAAC;gBACf,8BAA8B,EAAE,IAAI;gBACpC,SAAS,EAAE,IAAI,CAAC,cAAc,KAAK,MAAM;aAC1C,CAAC;8BACM,CAAC,GAAU,EAAE,EAAE;;gBACrB,MAAM,MAAM,GAAG,GAAG,CAAC,aAAkC,CAAC;gBACtD,MAAM,IAAI,SAAG,MAAM,CAAC,aAAa,0CAAE,QAAQ,CAAC,eAAe,CAAC;gBAC5D,IAAI,IAAI;oBAAE,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3D,CAAC;;;;;;;;;;;8BAWO,QAAQ,CAAC;gBACf,8DAA8D,EAAE,IAAI;gBACpE,SAAS,EAAE,IAAI,CAAC,cAAc,KAAK,MAAM;aAC1C,CAAC;;;2BAGG,UAAU,CACX,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAClE;;;;;;8BAMK,QAAQ,CAAC;gBACf,uDAAuD,EAAE,IAAI;gBAC7D,+BAA+B,EAAE,IAAI,CAAC,cAAc,KAAK,MAAM;aAChE,CAAC;;;;;;;;;;6BAUK,aAAa,CAAC,QAAQ;8BACrB,QAAQ,CAAC;gBACf,yCAAyC,EAAE,IAAI;gBAC/C,+BAA+B,EAAE,IAAI,CAAC,cAAc,KAAK,MAAM;aAChE,CAAC;;;;;;;;;sBASF,GAAG,CAAA,sXAAsX;;;;;;;;;;;;iBAY9X;;;;cAIH,aAAa,CAAC,aAAa;YAC3B,CAAC,CAAC,IAAI,CAAA;;yDAEqC,aAAa,CAAC,aAAa;;iBAEnE;YACH,CAAC,CAAC,IAAI,CAAA;;;;;;;;;6BASS,aAAa,CAAC,QAAQ;8BACrB,QAAQ,CAAC;gBACf,gDAAgD,EAAE,IAAI;gBACtD,uBAAuB,EAAE,IAAI;gBAC7B,iBAAiB,EAAE,IAAI;gBACvB,uDAAuD,EAAE,IAAI;gBAC7D,SAAS,EAAE,IAAI,CAAC,cAAc,KAAK,MAAM;aAC1C,CAAC;;wBAEA,aAAa,CAAC,QAAQ;;;;8BAIhB,QAAQ,CAAC;gBACf,uDAAuD,EAAE,IAAI;gBAC7D,+BAA+B,EAAE,IAAI,CAAC,cAAc,KAAK,MAAM;aAChE,CAAC;;;;;kCAKU,IAAI,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;;;;;;;;;6BAStD,aAAa,CAAC,QAAQ;8BACrB,QAAQ,CAAC;gBACf,yCAAyC,EAAE,IAAI;gBAC/C,+BAA+B,EAAE,IAAI,CAAC,cAAc,KAAK,MAAM;aAChE,CAAC;;;;iBAIP;;;YAGL,IAAI,CAAC,oBAAoB,EAAE;;;;;sBAKjB,SAAS,aAAC,IAAI,CAAC,aAAa,0CAAE,IAAI,0CAAE,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAAC;;;;;;;;;yBASjE,IAAI,CAAC,cAAc;;;;;;;yBAOnB,IAAI,CAAC,aAAa;;;;cAI7B,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU;YAC7B,CAAC,CAAC,IAAI,CAAA;;;iBAGH;YACH,CAAC,CAAC,EAAE;;;;;;;;;;;eAWH,SAAS,CAAC,IAAI,CAAC,wBAAwB,CAAC;;kBAErC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE;;;;;;;eAO7B,SAAS,CAAC,IAAI,CAAC,yBAAyB,CAAC;;kBAEtC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE;;;;;;;eAO7B,SAAS,OAAC,IAAI,CAAC,WAAW,mCAAI,KAAK,CAAC,CAAC;;kBAElC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE;;;;;;;eAO7B,SAAS,OAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,mCAAI,KAAK,CAAC,CAAC;;kBAE5C,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE;;;;;;;eAO7B,SAAS,mBAAC,IAAI,CAAC,IAAI,0CAAE,MAAM,CAAC,UAAU,EAAE,IAAI,mCAAI,IAAI,CAAC,KAAK,mCAAI,KAAK,CAAC,CAAC;;kBAElE,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE;;;;QAIpC,MAAA,IAAI,CAAC,IAAI,CAAC,KAAK,0CAAE,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;;YACxC,OAAO,IAAI,CAAA;;;;mBAIA,SAAS,OAAC,OAAO,CAAC,iBAAiB,mCAAI,KAAK,CAAC,CAAC;2CACtB,KAAK;sBAC1B,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE;;;;YAIpC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;gBACzC,OAAO,IAAI,CAAA;;;;uBAIA,SAAS,OAAC,MAAM,CAAC,iBAAiB,mCAAI,KAAK,CAAC,CAAC;+CACrB,KAAK,SAAS,CAAC;0BACpC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE;;;aAGvC,CAAC;YACJ,CAAC,CAAC;SACH,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,OAAiC;;QACvC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEvB,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,QAAC,IAAI,CAAC,IAAI,CAAC,KAAK,0CAAE,MAAM,CAAA,EAAE;YAC/C,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YACxF,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC;SAC3B;QAED,IAAI,OAAA,IAAI,CAAC,IAAI,CAAC,KAAK,0CAAE,MAAM,KAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YACvD,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SACjF;IACH,CAAC;IAED,MAAM;QACJ,uDAAuD;IACzD,CAAC;IAED,IAAY,wBAAwB;;QAClC,IAAI;YACF,MAAM,GAAG,GAAG,IAAI,GAAG,mBAAC,IAAI,CAAC,aAAa,0CAAE,IAAI,0CAAE,MAAM,CAAC,kBAAkB,EAAE,IAAI,mCAAI,EAAE,CAAC,CAAC;YACrF,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACxC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;SACvB;QAAC,WAAM;YACN,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;IAED,IAAY,yBAAyB;;QACnC,IAAI;YACF,MAAM,GAAG,GAAG,IAAI,GAAG,mBAAC,IAAI,CAAC,aAAa,0CAAE,IAAI,0CAAE,MAAM,CAAC,oBAAoB,EAAE,IAAI,mCAAI,EAAE,CAAC,CAAC;YACvF,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACxC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;SACvB;QAAC,WAAM;YACN,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;IAED,IAAY,sBAAsB;;QAGhC,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAS,0BAA0B,CAAC,CAAC;QAC5F,MAAM,aAAa,SAAG,IAAI,CAAC,qBAAqB,0CAAE,WAAW,CAAC;QAC9D,MAAM,UAAU,SAAG,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,IAAI,0CAAE,MAAM,CAAC;QACnD,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAG,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAExE,OAAO,UAAU,CAAC,CAAC,aAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,0CAAG,CAAC,2CAAG,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5F,CAAC;IAED,IAAY,qBAAqB;;QAG/B,MAAM,CAAC,GAAG,CAAoB,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAI,CAAC,CAAC,CAAC;QAEhF,OAAO,aACL,CAAC,CAAoB,oBAAoB,CAAC,0CAAE,IAAI,+CAChD,CAAC,CAAqB,2BAA2B,CAAC,0CAAE,IAAI,0CAAE,SAAS,CAAC,kBAAkB,EAAE,CAAC,EAC1F,CAAC;IACJ,CAAC;IAED,IAAY,qBAAqB;;QAE/B,mBAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAS,4BAA4B,CAAC,0CAAE,IAAI,0CAAE,SAAS,CACzF,oBAAoB,EACpB,CAAC,EAAE;IACP,CAAC;IAED,IAAY,iBAAiB;;QAC3B,MAAM,KAAK,SAAG,IAAI,CAAC,aAAa,0CAAE,IAAI,CAAC;QAEvC,IAAI,KAAK,EAAE;YACT,IAAI,KAAK,CAAC,iBAAiB,EAAE;gBAC3B,OAAO,WAAW,KAAK,CAAC,YAAY,OAAO,CAAC;aAC7C;iBAAM,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE;gBACtC,OAAO,WAAW,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,OAAO,CAAC;aACnE;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAY,aAAa;QAEvB,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAS,gBAAgB,CAAC,CAAC;IACjE,CAAC;IAEO,uBAAuB,CAAC,YAAoB,EAAE,WAAoB;QAExE,MAAM,MAAM,GAAG,6BAA6B,YAAY,EAAE,CAAC;QAC3D,MAAM,QAAQ,GAAG,OAAO,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,SAAS,WAAW,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5F,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAS,QAAQ,CAAC,CAAC;IACzD,CAAC;IAEO,sBAAsB;;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACvC,MAAM,KAAK,SAAG,IAAI,CAAC,aAAa,0CAAE,IAAI,CAAC;QAEvC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE;YAC9E,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAC9C;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,mBAAmB,CAAC;QAC3C,MAAM,aAAa,GAAG,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9D,IAAI,qBAAqB,GAAG,KAAK,CAAC;QAClC,IAAI,MAAM,GAAG,iBAAiB,aAAa,kCAAkC,CAAC;QAC9E,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;QACnD,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE;YACrD,MAAM,YAAY,GAAG,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC3D,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACzD,MAAM,IAAI,GAAG,OAAO,EAAE,8BAA8B,WAAW,YAAY,YAAY,IAAI,CAAC;QAC9F,CAAC,CAAC;QAEF,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS;YAAE,cAAc,CAAC,cAAc,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QACrF,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,OAAO;YAAE,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7F,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU;YAAE,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACtE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjE,MAAM,KAAK,SAAG,IAAI,CAAC,IAAI,CAAC,KAAK,mCAAI,EAAE,CAAC;QACpC,MAAM,qBAAqB,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAE/C,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE;YACtE,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;YACtE,MAAM,YAAY,GAAG,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,CAAC;YAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;YAEpC,IAAI,OAAO,CAAC,iBAAiB,IAAI,CAAC,YAAY;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAE7F,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAE,OAAO,CAAC,YAAY,mCAAI,CAAC,CAAC,CAAC;YAC9D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,QAAE,OAAO,CAAC,YAAY,mCAAI,QAAQ,CAAC,CAAC;YAClF,MAAM,OAAO,GACX,cAAc,KAAK,cAAc;gBACjC,OAAO,CAAC,cAAc,KAAK,SAAS;gBACpC,CAAC,OAAO,CAAC,aAAa,CAAC;YAEzB,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAC5C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CACjF,CAAC;YAEF,MAAM,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,qDAAqD,CAAC,CAAC;YAEvF,MAAM,aAAa,GACjB,qBAAqB,IAAI,CAAC,qBAAqB,IAAI,CAAC,SAAS,IAAI,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC;YAE3F,IAAI,aAAa,EAAE;gBACjB,qBAAqB,GAAG,IAAI,CAAC;gBAC7B,MAAM,IAAI,GAAG,OAAO,EAAE,YAAY,CAAC;gBACnC,KAAK,EAAE,CAAC;gBACR,MAAM,IAAI,GAAG,OAAO,EAAE,WAAW,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC;aAClE;YAED,MAAM,MAAM,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC,GAAG,CAAC;YAChE,cAAc,CAAC,GAAG,MAAM,MAAM,EAAE,YAAY,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,GAAG,OAAO,CAAC,KAAK,GAAG,YAAY,EAAE,CAAC;YAEhD,IAAI,OAAO,CAAC,kBAAkB,EAAE;gBAC9B,MAAM,sBAAsB,GAAG,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBACxF,MAAM,IAAI,GAAG,OAAO,EAAE,SAAS,CAAC;gBAChC,KAAK,EAAE,CAAC;gBACR,MAAM,IAAI,GAAG,OAAO,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,SAAS,CAAC;gBAE9E,IAAI,KAAK,CAAC,mBAAmB,EAAE;oBAC7B,MAAM,IAAI,GAAG,OAAO,EAAE,yBAAyB,MAAM,yCAAyC,sBAAsB,IAAI,CAAC;iBAC1H;qBAAM;oBACL,MAAM,IAAI,GAAG,OAAO,EAAE,yBAAyB,MAAM,iBAAiB,sBAAsB,IAAI,CAAC;iBAClG;gBAED,KAAK,EAAE,CAAC;gBACR,MAAM,IAAI,GAAG,OAAO,EAAE,UAAU,CAAC;aAClC;iBAAM;gBACL,cAAc,CAAC,GAAG,MAAM,OAAO,EAAE,KAAK,CAAC,CAAC;aACzC;YAED,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,EAAE;gBACnD,cAAc,CAAC,GAAG,MAAM,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;aACxD;YAED,IAAI,OAAO,CAAC,IAAI,EAAE;gBAChB,cAAc,CAAC,GAAG,MAAM,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;aAC/C;iBAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE;gBACpC,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;aACzC;YAED,IAAI,OAAO,CAAC,WAAW;gBAAE,cAAc,CAAC,GAAG,MAAM,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;YAErF,IAAI,OAAO,CAAC,KAAK,EAAE;gBACjB,cAAc,CAAC,GAAG,MAAM,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBAChD,IAAI,OAAO,CAAC,GAAG;oBAAE,cAAc,CAAC,GAAG,MAAM,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;aAC9D;YAED,IAAI,OAAO,CAAC,WAAW,EAAE;gBACvB,IAAI,OAAO,CAAC,aAAa,EAAE;oBACzB,cAAc,CAAC,GAAG,MAAM,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;oBAEhE,IAAI,OAAO,CAAC,aAAa,EAAE;wBACzB,IAAI,OAAO,CAAC,oBAAoB,KAAK,UAAU,EAAE;4BAC/C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;4BAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;4BAChC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;4BAChE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;4BACvD,cAAc,CAAC,GAAG,MAAM,eAAe,EAAE,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC;yBACnE;6BAAM;4BACL,cAAc,CAAC,GAAG,MAAM,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;yBACzE;qBACF;oBAED,IAAI,OAAO,CAAC,WAAW,EAAE;wBACvB,IAAI,OAAO,CAAC,kBAAkB,KAAK,UAAU,EAAE;4BAC7C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;4BAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;4BAChC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;4BAChE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;4BACvD,cAAc,CAAC,GAAG,MAAM,aAAa,EAAE,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC;yBACjE;6BAAM;4BACL,cAAc,CAAC,GAAG,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;yBACrE;qBACF;iBACF;aACF;YAED,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,gBAAgB,EAAE;gBAC9E,cAAc,CACZ,GAAG,MAAM,YAAY,OAAO,CAAC,aAAa,EAAE,EAC5C,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,gBAAgB,GAAG,CACxD,CAAC;aACH;YAED,IAAI,OAAO,CAAC,aAAa,EAAE;gBACzB,IAAI,OAAO,CAAC,cAAc,KAAK,WAAW,EAAE;oBAC1C,cAAc,CAAC,GAAG,MAAM,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBACtE;qBAAM;oBACL,cAAc,CAAC,GAAG,MAAM,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBACtE;aACF;YAED,IAAI,OAAO,EAAE;gBACX,MAAM,IAAI,GAAG,OAAO,EAAE,SAAS,CAAC;gBAChC,KAAK,EAAE,CAAC;gBACR,MAAM,IAAI,GAAG,OAAO,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,SAAS,CAAC;gBAEjF,MAAM,WAAW,GAAG,oBAAoB,CAAC,GAAG,MAAM,UAAU,EAAE,QAAQ,CAAC,CAAC;gBACxE,MAAM,IAAI,GAAG,OAAO,EAAE,8BAA8B,WAAW,GAAG,CAAC;gBACnE,MAAM,IAAI,SAAS,oBAAoB,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC;gBAE7E,IAAI,cAAc,KAAK,QAAQ;oBAC7B,MAAM,IAAI,SAAS,oBAAoB,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC;gBAC/E,IAAI,KAAK,CAAC,mBAAmB,EAAE;oBAC7B,MAAM,eAAe,GAAG,oBAAoB,CAAC,MAAM,OAAC,OAAO,CAAC,QAAQ,mCAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;oBACtF,MAAM,IAAI,mCAAmC,eAAe,IAAI,CAAC;iBAClE;qBAAM;oBACL,MAAM,IAAI,WAAW,oBAAoB,CAAC,MAAM,OAAC,OAAO,CAAC,QAAQ,mCAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC;iBACxF;gBAED,KAAK,EAAE,CAAC;gBACR,MAAM,IAAI,GAAG,OAAO,EAAE,UAAU,CAAC;aAClC;iBAAM,IAAI,OAAC,OAAO,CAAC,QAAQ,mCAAI,CAAC,CAAC,GAAG,CAAC,EAAE;gBACtC,cAAc,CAAC,GAAG,MAAM,UAAU,EAAE,OAAC,OAAO,CAAC,QAAQ,mCAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;aACzE;YAED,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE;gBACxC,IAAI,cAAc,KAAK,CAAC,EAAE;oBACxB,cAAc,CAAC,GAAG,MAAM,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBACpE;gBACD,IAAI,cAAc,KAAK,QAAQ,EAAE;oBAC/B,cAAc,CAAC,GAAG,MAAM,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBACpE;aACF;YAED,IAAI,OAAO,CAAC,MAAM;gBAAE,cAAc,CAAC,GAAG,MAAM,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,IAAI,OAAO,CAAC,KAAK;gBAAE,cAAc,CAAC,GAAG,MAAM,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,IAAI,OAAO,CAAC,MAAM;gBAAE,cAAc,CAAC,GAAG,MAAM,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,IAAI,OAAO,CAAC,MAAM;gBAAE,cAAc,CAAC,GAAG,MAAM,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjF,IAAI,KAAK,CAAC,kBAAkB,EAAE;gBAC5B,MAAM,IAAI,GAAG,OAAO,EAAE,SAAS,CAAC;gBAChC,KAAK,EAAE,CAAC;gBACR,MAAM,IAAI,GAAG,OAAO,EAAE,SAAS,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,SAAS,CAAC;gBAE/E,IAAI,KAAK,CAAC,mBAAmB,EAAE;oBAC7B,MAAM,IAAI,GAAG,OAAO,EAAE,gBAAgB,MAAM,2CAA2C,CAAC;iBACzF;qBAAM;oBACL,MAAM,IAAI,GAAG,OAAO,EAAE,gBAAgB,MAAM,mBAAmB,CAAC;iBACjE;gBAED,KAAK,EAAE,CAAC;gBACR,MAAM,IAAI,GAAG,OAAO,EAAE,UAAU,CAAC;aAClC;YAED,MAAM,oBAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBACzE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;oBAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC7C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC9B,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAAuE,CAAC,CAAC;YAE5E,KAAK,MAAM,UAAU,IAAI,oBAAoB,EAAE;gBAC7C,MAAM,KAAK,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;gBAE/C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;oBACtB,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7D,MAAM,YAAY,SAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,WAAW,CAAC,0CAAE,IAAI,CAAC;oBACnF,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,IAAI,EAAE,YAAY,CAAC,CAAC;oBAC1F,MAAM,KAAK,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC;oBAC9C,MAAM,IAAI,GAAG,GAAG,MAAM,GAAG,UAAU,EAAE,CAAC;oBAEtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,EAAE;wBAC/B,MAAM,IAAI,GAAG,OAAO,EAAE,SAAS,CAAC;wBAChC,KAAK,EAAE,CAAC;wBACR,MAAM,IAAI,GAAG,OAAO,EAAE,SAAS,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;wBAC5D,MAAM,IAAI,GAAG,OAAO,EAAE,gBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC;wBAE/E,IAAI,KAAK,CAAC,mBAAmB,EAAE;4BAC7B,MAAM,IAAI,kCAAkC,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC;yBACvF;6BAAM;4BACL,MAAM,IAAI,UAAU,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC;yBAC/D;wBAED,KAAK,EAAE,CAAC;wBACR,MAAM,IAAI,GAAG,OAAO,EAAE,UAAU,CAAC;qBAClC;yBAAM;wBACL,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;qBAC7B;iBACF;qBAAM;oBACL,MAAM,IAAI,GAAG,OAAO,EAAE,SAAS,CAAC;oBAChC,KAAK,EAAE,CAAC;oBACR,MAAM,IAAI,GAAG,OAAO,EAAE,SAAS,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;oBAC5D,MAAM,IAAI,GAAG,OAAO,EAAE,iBAAiB,MAAM,GAAG,UAAU,IAAI,CAAC;oBAC/D,KAAK,EAAE,CAAC;oBAER,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;;wBACrB,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC3D,MAAM,YAAY,SAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,WAAW,CAAC,0CAAE,IAAI,CAAC;wBACnF,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,IAAI,EAAE,YAAY,CAAC,CAAC;wBACxF,MAAM,YAAY,GAAG,oBAAoB,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,SAAS,EAAE,EAAE,QAAQ,CAAC,CAAC;wBACnF,MAAM,cAAc,GAAG,MAAM,OAAC,MAAM,CAAC,KAAK,mCAAI,EAAE,CAAC,CAAC;wBAClD,MAAM,IAAI,GAAG,OAAO,EAAE,kBAAkB,YAAY,KAAK,cAAc,WAAW,CAAC;oBACrF,CAAC,CAAC,CAAC;oBAEH,KAAK,EAAE,CAAC;oBACR,MAAM,IAAI,GAAG,OAAO,EAAE,WAAW,CAAC;oBAClC,KAAK,EAAE,CAAC;oBACR,MAAM,IAAI,GAAG,OAAO,EAAE,UAAU,CAAC;iBAClC;aACF;YAED,IAAI,aAAa,EAAE;gBACjB,KAAK,EAAE,CAAC;gBACR,MAAM,IAAI,GAAG,OAAO,EAAE,aAAa,CAAC;aACrC;SACF;QAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;QAChF,MAAM,oBAAoB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B,mBAAmB,EAAE,CAAC,CAAC,CAAC;QAE7F,MAAM,IAAI,GAAG,OAAO,EAAE,yBAAyB,oBAAoB,WAAW,CAAC;QAC/E,KAAK,EAAE,CAAC;QACR,MAAM,IAAI,GAAG,OAAO,EAAE,SAAS,CAAC;QAEhC,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,sBAAsB;;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACvC,MAAM,KAAK,SAAG,IAAI,CAAC,aAAa,0CAAE,IAAI,CAAC;QAEvC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE;YAC9E,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAC9C;QAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;QACxC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE;YACjD,IAAI,KAAK,CAAC,mBAAmB,EAAE;gBAC7B,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;oBACpD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;iBACrD;qBAAM;oBACL,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;iBAC5C;aACF;iBAAM;gBACL,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;aAChE;QACH,CAAC,CAAC;QAEF,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS;YAAE,UAAU,CAAC,cAAc,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QACjF,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU;YAAE,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,OAAO,EAAE;YAClD,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACtC;QAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,aAAC,IAAI,CAAC,IAAI,CAAC,KAAK,0CAAE,MAAM,mCAAI,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE;YACnE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAM,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC;YAClD,MAAM,YAAY,SAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,0CAAE,IAAI,CAAC;YAE/D,IAAI,OAAO,CAAC,iBAAiB,IAAI,CAAC,YAAY,EAAE;gBAC9C,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;aAC9C;YAED,IAAI,OAAO,CAAC,kBAAkB,EAAE;gBAC9B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;aAC7C;YAED,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE;gBACzF,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;aACxD;YAED,IAAI,YAAY,IAAI,YAAY,CAAC,IAAI,KAAK,SAAS,EAAE;gBACnD,UAAU,CAAC,GAAG,MAAM,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;aACpD;YAED,UAAU,CAAC,GAAG,MAAM,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1C,UAAU,CAAC,GAAG,MAAM,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,GAAG,YAAY,EAAE,CAAC,CAAC;YAEhE,IAAI,OAAO,CAAC,IAAI,EAAE;gBAChB,UAAU,CAAC,GAAG,MAAM,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;aAC3C;iBAAM,IAAI,KAAK,CAAC,mBAAmB,EAAE;gBACpC,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;aACzC;YAED,IAAI,OAAO,CAAC,WAAW;gBAAE,UAAU,CAAC,GAAG,MAAM,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;YAEjF,IAAI,OAAO,CAAC,KAAK,EAAE;gBACjB,UAAU,CAAC,GAAG,MAAM,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,OAAO,CAAC,GAAG;oBAAE,UAAU,CAAC,GAAG,MAAM,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;aAC1D;YAED,IAAI,OAAO,CAAC,WAAW,EAAE;gBACvB,IAAI,OAAO,CAAC,aAAa,EAAE;oBACzB,UAAU,CAAC,GAAG,MAAM,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;oBAE5D,IAAI,OAAO,CAAC,aAAa,EAAE;wBACzB,IAAI,OAAO,CAAC,oBAAoB,KAAK,UAAU,EAAE;4BAC/C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;4BAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;4BAChC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;4BAChE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;4BACvD,UAAU,CAAC,GAAG,MAAM,eAAe,EAAE,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC;yBAC/D;6BAAM;4BACL,UAAU,CAAC,GAAG,MAAM,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;yBACrE;qBACF;oBAED,IAAI,OAAO,CAAC,WAAW,EAAE;wBACvB,IAAI,OAAO,CAAC,kBAAkB,KAAK,UAAU,EAAE;4BAC7C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;4BAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;4BAChC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;4BAChE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;4BACvD,UAAU,CAAC,GAAG,MAAM,aAAa,EAAE,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC;yBAC7D;6BAAM;4BACL,UAAU,CAAC,GAAG,MAAM,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;yBACjE;qBACF;iBACF;aACF;YAED,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,gBAAgB,EAAE;gBAC9E,UAAU,CACR,GAAG,MAAM,YAAY,OAAO,CAAC,aAAa,EAAE,EAC5C,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,gBAAgB,GAAG,CACxD,CAAC;aACH;YAED,IAAI,OAAO,CAAC,aAAa,EAAE;gBACzB,IAAI,OAAO,CAAC,cAAc,KAAK,WAAW,EAAE;oBAC1C,UAAU,CAAC,GAAG,MAAM,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBAClE;qBAAM;oBACL,UAAU,CAAC,GAAG,MAAM,SAAS,EAAE,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBAClE;aACF;YAED,IAAI,OAAC,OAAO,CAAC,QAAQ,mCAAI,CAAC,CAAC,GAAG,CAAC,EAAE;gBAC/B,UAAU,CAAC,GAAG,MAAM,UAAU,EAAE,OAAC,OAAO,CAAC,QAAQ,mCAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;aACrE;YAED,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE;gBACxC,IAAI,OAAO,CAAC,YAAY,EAAE;oBACxB,UAAU,CAAC,GAAG,MAAM,cAAc,EAAE,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;iBACtE;gBACD,IAAI,OAAO,CAAC,YAAY,EAAE;oBACxB,UAAU,CAAC,GAAG,MAAM,cAAc,EAAE,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;iBACtE;aACF;YAED,IAAI,OAAO,CAAC,MAAM;gBAAE,UAAU,CAAC,GAAG,MAAM,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,IAAI,OAAO,CAAC,MAAM;gBAAE,UAAU,CAAC,GAAG,MAAM,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,IAAI,OAAO,CAAC,KAAK;gBAAE,UAAU,CAAC,GAAG,MAAM,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,IAAI,OAAO,CAAC,MAAM;gBAAE,UAAU,CAAC,GAAG,MAAM,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAE7E,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE;gBACpF,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;gBACnD,IAAI,MAAM,CAAC,kBAAkB;oBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;gBAElF,MAAM,YAAY,SAAG,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC,0CAAE,IAAI,CAAC;gBAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,IAAI,EAAE,YAAY,CAAC,CAAC;gBACxF,UAAU,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,MAAA,MAAM,CAAC,KAAK,mCAAI,EAAE,GAAG,SAAS,EAAE,CAAC,CAAC;aAC5E;SACF;QAED,OAAO,GAAG,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;aAC7C,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;aACxC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACjB,CAAC;IAEO,kBAAkB;;QACxB,MAAM,KAAK,SAAG,IAAI,CAAC,aAAa,0CAAE,IAAI,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE;YAChC,OAAO;gBACL,QAAQ,EAAE,EAAE;gBACZ,aAAa,EAAE,2BAA2B;gBAC1C,QAAQ,EAAE,EAAE;gBACZ,aAAa,EAAE,2BAA2B;aAC3C,CAAC;SACH;QAED,MAAM,aAAa,GAAG,KAAK,CAAC,mBAAmB,CAAC;QAChD,IAAI,aAAa,GAAkB,IAAI,CAAC;QACxC,IAAI,aAAa,GAAkB,IAAI,CAAC;QACxC,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,IAAI;YACF,QAAQ,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAC1C;QAAC,OAAO,GAAG,EAAE;YACZ,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC;SAC7B;QAED,IAAI,YAAY,GAAG,QAAQ,CAAC;QAE5B,IAAI;YACF,QAAQ,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACzC,IAAI,QAAQ,EAAE;gBACZ,MAAM,QAAQ,GAAG,YAAY,oBAAoB,CAC/C,QAAQ,EACR,aAAa,CACd,mBAAmB,CAAC;gBACrB,YAAY,GAAG,GAAG,QAAQ,GAAG,IAAI,CAAC,kBAAkB,GAAG,QAAQ,EAAE,CAAC;aACnE;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC;YAC5B,QAAQ,GAAG,EAAE,CAAC;SACf;QAED,IAAI,YAAY,KAAK,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7E,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACtF,OAAO;gBACL,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC7E,aAAa;gBACb,QAAQ;gBACR,aAAa;aACd,CAAC;SACH;QAED,IAAI,CAAC,sBAAsB,GAAG,YAAY,CAAC;QAC3C,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAE/B,IAAI,KAAK,CAAC,mBAAmB;YAAE,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QACjF,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC9D,CAAC;IAEO,oBAAoB,CAC1B,MAAiE,EACjE,kBAAsD,EACtD,YAAoB;QAEpB,IAAI,MAAM,CAAC,kBAAkB;YAAE,OAAO,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,EAAE,CAAC;QAErB,IAAI,MAAM,CAAC,KAAK,EAAE;YAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACzF,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC;gBAC5C,SAAS,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,EAAE,CAAC,CAAC;SAC1E;QAED,IAAI,MAAM,CAAC,MAAM,EAAE;YACjB,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3F,IAAI,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAC9C,SAAS,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SAC5D;QAED,IAAI,MAAM,CAAC,iBAAiB,IAAI,CAAC,kBAAkB;YAAE,OAAO,EAAE,CAAC;QAC/D,IAAI,kBAAkB;YAAE,SAAS,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;QAEvE,IAAI,MAAM,CAAC,IAAI,EAAE;YACf,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACjD,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,IAAI,KAAK,EAAE;gBAAE,SAAS,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;SAC7F;QAED,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;CACF","sourcesContent":["import type { PropertyDeclarations, TemplateResult } from 'lit-element';\nimport type { InternalSummaryControl } from '../../internal/InternalSummaryControl/InternalSummaryControl';\nimport type { NucleonElement } from '../NucleonElement/NucleonElement';\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 { ResponsiveMixin } from '../../../mixins/responsive';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { decode, encode } from 'html-entities';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { previewCSS } from './preview.css';\nimport { unsafeHTML } from 'lit-html/directives/unsafe-html';\nimport { html, svg } from 'lit-element';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { classMap } from '../../../utils/class-map';\n\nimport debounce from 'lodash-es/debounce';\nimport hljsxml from 'highlight.js/lib/languages/xml.js';\nimport hljs from 'highlight.js/lib/core.js';\n\nconst NS = 'experimental-add-to-cart-builder';\nconst Base = ResponsiveMixin(TranslatableMixin(InternalForm, NS));\nhljs.registerLanguage('xml', hljsxml);\n\n// Notes about encoding for HMAC signing:\n//\n// API does not support HTML entities in attribute values. Good thing is that\n// encoding is optional for HTML attributes, except for the quote character.\n// Since we use double quotes for attributes, they can't appear in the attribute values.\n//\n// API supports % encoding for URLs, but only in the query parameter values. Query parameter\n// names must never be encoded. This is why we limit the allowed characters in the custom field names.\n\nfunction encodeAttributeValue(value: string, isCartSigningOn: boolean) {\n if (isCartSigningOn) {\n if (decode(value) !== value) throw new Error('error_html_entities_present');\n if (value.includes('\"')) throw new Error('error_double_quotes_present');\n }\n\n return value.replace(/\"/g, '"');\n}\n\n/**\n * WARNING: this element is marked as experimental and is subject to change in future releases.\n * We will not be maintaining backwards compatibility for elements in the experimental namespace.\n * If you are using this element, please make sure to use a fixed version of the package in your `package.json`.\n *\n * This element allows you to create an add-to-cart form and link for your store.\n *\n * @element foxy-experimental-add-to-cart-builder\n */\nexport class ExperimentalAddToCartBuilder extends Base<Data> {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n defaultDomain: { attribute: 'default-domain' },\n encodeHelper: { attribute: 'encode-helper' },\n localeCodes: { attribute: 'locale-codes' },\n store: {},\n __previousUnsignedCode: { attribute: false },\n __previousSignedCode: { attribute: false },\n __signingState: { attribute: false },\n __openState: { attribute: false },\n };\n }\n\n /** Default host domain for stores that don't use a custom domain name, e.g. `foxycart.com`. */\n defaultDomain: string | null = null;\n\n /** URL of the HMAC encoder endpoint. */\n encodeHelper: string | null = null;\n\n /** URL of the `fx:locale_codes` property helper. This will be used to determine the currency code. */\n localeCodes: string | null = null;\n\n /** URL of the store this add-to-cart code is created for. */\n store: string | null = null;\n\n private readonly __signingSeparator = `--${Date.now()}${(Math.random() * 100000).toFixed(0)}--`;\n\n private readonly __emptyOptions = [\n { label: 'option_false', value: 'false' },\n { label: 'option_true', value: 'true' },\n { label: 'option_reset', value: 'reset' },\n ];\n\n private readonly __cartOptions = [\n { label: 'option_add', value: 'add' },\n { label: 'option_checkout', value: 'checkout' },\n { label: 'option_redirect', value: 'redirect' },\n ];\n\n private readonly __signAsync = debounce(async (html: string, encodeHelper: string) => {\n if (html === this.__previousUnsignedCode && this.__previousSignedCode) return;\n\n const isCancelled = () => html !== this.__previousUnsignedCode;\n this.__signingState = 'busy';\n\n try {\n const res = await new ExperimentalAddToCartBuilder.API(this).fetch(encodeHelper, {\n headers: { 'Content-Type': 'text/plain' },\n method: 'POST',\n body: html,\n });\n\n if (!isCancelled()) {\n if (res.ok) {\n const result = (await res.json()).result as string;\n if (!isCancelled()) {\n this.__signingState = 'idle';\n this.__previousSignedCode = result.replace(/value=\"--OPEN--\" data-replace/gi, 'value');\n }\n } else {\n this.__signingState = 'fail';\n }\n }\n } catch {\n if (!isCancelled()) this.__signingState = 'fail';\n }\n }, 500);\n\n private __previousUnsignedCode = '';\n\n private __previousSignedCode = '';\n\n private __signingState: 'idle' | 'busy' | 'fail' = 'idle';\n\n private __openState: boolean[] = [];\n\n get hiddenSelector(): BooleanSelector {\n const alwaysMatch = [super.hiddenSelector.toString()];\n alwaysMatch.unshift('header:copy-id', 'header:copy-json', 'undo');\n return new BooleanSelector(alwaysMatch.join(' ').trim());\n }\n\n renderBody(): TemplateResult {\n const addToCartCode = this.__getAddToCartCode();\n const storeUrl = this.data?._links['fx:store'].href ?? this.store ?? void 0;\n const store = this.__storeLoader?.data;\n const formHtmlState = addToCartCode.formHTMLError?.split('_')[0] ?? 'paused';\n\n return html`\n <div class=\"grid gap-m items-start sm-grid-cols-2 md-grid-cols-3 h-full overflow-auto\">\n <foxy-internal-summary-control layout=\"section\" class=\"space-y-s\" infer=\"items\">\n ${this.form.items?.map((product, index) => {\n return html`\n <foxy-internal-summary-control\n layout=\"details\"\n label=${ifDefined(product.name.trim() || void 0)}\n infer=\"item-group\"\n ?open=${ifDefined(this.__openState[index])}\n @toggle=${(evt: CustomEvent) => {\n const details = evt.currentTarget as InternalSummaryControl;\n this.__openState[index] = details.open;\n this.__openState = [...this.__openState];\n }}\n >\n <foxy-internal-experimental-add-to-cart-builder-item-control\n item-categories=${ifDefined(store?._links['fx:item_categories'].href)}\n currency-code=${ifDefined(this.__resolvedCurrencyCode ?? void 0)}\n store=${ifDefined(storeUrl)}\n index=${index}\n infer=\"item\"\n ?use-cart-validation=${ifDefined(store?.use_cart_validation)}\n .defaultItemCategory=${this.__defaultItemCategory}\n @remove=${() => {\n const newProducts = this.form.items?.filter((_, i) => i !== index);\n this.edit({ items: newProducts });\n this.__openState = this.__openState.filter((_, i) => i !== index);\n }}\n >\n </foxy-internal-experimental-add-to-cart-builder-item-control>\n </foxy-internal-summary-control>\n `;\n })}\n\n <vaadin-button\n class=\"w-full\"\n theme=\"success\"\n ?disabled=${this.disabled}\n @click=${() => {\n const newItem = { name: '', price: 0, custom_options: [], sub_frequency: '1m' };\n const existingItems = this.form.items ?? [];\n this.edit({ items: [...existingItems, newItem] });\n this.__openState = [...new Array(existingItems.length).fill(false), true];\n }}\n >\n <foxy-i18n infer=\"add-product\" key=\"caption\"></foxy-i18n>\n </vaadin-button>\n </foxy-internal-summary-control>\n\n <div class=\"space-y-m md-col-span-2 sticky top-0\">\n <foxy-internal-summary-control infer=\"preview\">\n ${addToCartCode.formHTMLError\n ? html`\n <div class=\"flex flex-col gap-xs items-center justify-center p-xl\">\n <foxy-spinner layout=\"no-label\" infer=\"unavailable\" state=${formHtmlState}>\n </foxy-spinner>\n <foxy-i18n\n class=\"${formHtmlState === 'error' ? 'text-error' : 'text-tertiary'} text-s\"\n infer=\"unavailable\"\n key=${addToCartCode.formHTMLError}\n >\n </foxy-i18n>\n </div>\n `\n : html`\n <div class=\"flex\">\n <iframe\n srcdoc=\"${previewCSS}${addToCartCode.formHTML}\"\n style=\"margin: calc(-1 * (0.625em + (var(--lumo-border-radius) / 4) - 1px))\"\n class=${classMap({\n 'flex-1 transition-all filter': true,\n 'blur-sm': this.__signingState !== 'idle',\n })}\n @load=${(evt: Event) => {\n const iframe = evt.currentTarget as HTMLIFrameElement;\n const root = iframe.contentWindow?.document.documentElement;\n if (root) iframe.style.height = root.scrollHeight + 'px';\n }}\n >\n </iframe>\n </div>\n\n <div\n class=\"flex leading-s text-s min-w-0 relative\"\n style=\"gap: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n >\n <div\n style=\"font-family: monospace; max-height: calc(8 * (1em * var(--lumo-line-height-s)))\"\n class=${classMap({\n 'break-all overflow-auto flex-1 min-w-0 transition-all filter': true,\n 'blur-sm': this.__signingState !== 'idle',\n })}\n >\n <code class=\"whitespace-pre\"\n >${unsafeHTML(\n hljs.highlight(addToCartCode.formHTML, { language: 'xml' }).value\n )}</code\n >\n </div>\n\n <div\n style=\"top: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px); right: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n class=${classMap({\n 'absolute right-0 bg-base rounded-s transition-opacity': true,\n 'opacity-0 pointer-events-none': this.__signingState !== 'busy',\n })}\n >\n <div class=\"bg-contrast-10 rounded-s\">\n <foxy-spinner infer=\"spinner\" class=\"-mx-xs\" style=\"transform: scale(0.8)\">\n </foxy-spinner>\n </div>\n </div>\n\n <foxy-copy-to-clipboard\n infer=\"copy-to-clipboard\"\n text=${addToCartCode.formHTML}\n class=${classMap({\n 'flex-shrink-0 text-m transition-opacity': true,\n 'opacity-0 pointer-events-none': this.__signingState === 'busy',\n })}\n >\n </foxy-copy-to-clipboard>\n </div>\n\n <div\n class=\"flex items-start text-xs leading-xs text-secondary\"\n style=\"gap: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n >\n ${svg`<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\" class=\"flex-shrink-0 text-contrast-70\" style=\"width: 1.25em\"><path fill-rule=\"evenodd\" d=\"M15 8A7 7 0 1 1 1 8a7 7 0 0 1 14 0ZM9 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM6.75 8a.75.75 0 0 0 0 1.5h.75v1.75a.75.75 0 0 0 1.5 0v-2.5A.75.75 0 0 0 8.25 8h-1.5Z\" clip-rule=\"evenodd\" /></svg>`}\n <p>\n <foxy-i18n infer=\"\" key=\"edits_tip\"></foxy-i18n>\n <a\n target=\"_blank\"\n class=\"rounded font-medium underline transition-colors cursor-pointer hover-opacity-80 focus-outline-none focus-ring-2 focus-ring-primary-50\"\n href=\"https://wiki.foxycart.com/v/2.0/products\"\n >\n <foxy-i18n infer=\"\" key=\"edits_docs\"></foxy-i18n>\n </a>\n </p>\n </div>\n `}\n </foxy-internal-summary-control>\n\n <foxy-internal-summary-control infer=\"link\">\n ${addToCartCode.linkHrefError\n ? html`\n <p class=\"text-tertiary\">\n <foxy-i18n infer=\"unavailable\" key=${addToCartCode.linkHrefError}> </foxy-i18n>\n </p>\n `\n : html`\n <div\n class=\"flex items-center leading-s min-w-0 relative\"\n style=\"gap: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n >\n <foxy-i18n infer=\"\" key=\"direct_link\"></foxy-i18n>\n <a\n target=\"_blank\"\n style=\"max-width: 30rem\"\n href=${addToCartCode.linkHref}\n class=${classMap({\n 'font-medium truncate ml-auto min-w-0 rounded-s': true,\n 'transition-all filter': true,\n 'hover-underline': true,\n 'focus-outline-none focus-ring-2 focus-ring-primary-50': true,\n 'blur-sm': this.__signingState !== 'idle',\n })}\n >\n ${addToCartCode.linkHref}\n </a>\n <div\n style=\"top: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px); right: calc(0.625em + (var(--lumo-border-radius) / 4) - 1px)\"\n class=${classMap({\n 'absolute right-0 bg-base rounded-s transition-opacity': true,\n 'opacity-0 pointer-events-none': this.__signingState !== 'busy',\n })}\n >\n <div class=\"bg-contrast-10 rounded-s\">\n <foxy-spinner\n infer=\"spinner\"\n state=${this.__signingState === 'fail' ? 'error' : 'busy'}\n class=\"-mx-xs\"\n style=\"transform: scale(0.8)\"\n >\n </foxy-spinner>\n </div>\n </div>\n <foxy-copy-to-clipboard\n infer=\"copy-to-clipboard\"\n text=${addToCartCode.linkHref}\n class=${classMap({\n 'flex-shrink-0 text-m transition-opacity': true,\n 'opacity-0 pointer-events-none': this.__signingState === 'busy',\n })}\n >\n </foxy-copy-to-clipboard>\n </div>\n `}\n </foxy-internal-summary-control>\n\n ${this.renderTemplateOrSlot()}\n\n <foxy-internal-summary-control infer=\"cart-settings\">\n <foxy-internal-resource-picker-control\n layout=\"summary-item\"\n first=${ifDefined(this.__storeLoader?.data?._links['fx:template_sets'].href)}\n infer=\"template-set-uri\"\n item=\"foxy-template-set-card\"\n >\n </foxy-internal-resource-picker-control>\n\n <foxy-internal-select-control\n layout=\"summary-item\"\n infer=\"empty\"\n .options=${this.__emptyOptions}\n >\n </foxy-internal-select-control>\n\n <foxy-internal-select-control\n layout=\"summary-item\"\n infer=\"cart\"\n .options=${this.__cartOptions}\n >\n </foxy-internal-select-control>\n\n ${this.form.cart === 'redirect'\n ? html`\n <foxy-internal-text-control layout=\"summary-item\" infer=\"redirect\">\n </foxy-internal-text-control>\n `\n : ''}\n\n <foxy-internal-text-control layout=\"summary-item\" infer=\"coupon\">\n </foxy-internal-text-control>\n </foxy-internal-summary-control>\n </div>\n </div>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__defaultTemplateSetHref)}\n id=\"defaultTemplateSetLoader\"\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.__defaultItemCategoryHref)}\n id=\"defaultItemCategoryLoader\"\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.localeCodes ?? void 0)}\n id=\"localeCodesHelperLoader\"\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.form.template_set_uri ?? void 0)}\n id=\"templateSetLoader\"\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(this.data?._links['fx:store'].href ?? this.store ?? void 0)}\n id=\"storeLoaderId\"\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n ${this.form.items?.map((product, index) => {\n return html`\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(product.item_category_uri ?? void 0)}\n id=\"itemCategoryLoaderProduct${index}\"\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n\n ${product.custom_options.map((option, i) => {\n return html`\n <foxy-nucleon\n class=\"hidden\"\n infer=\"\"\n href=${ifDefined(option.item_category_uri ?? void 0)}\n id=\"itemCategoryLoaderProduct${index}Option${i}\"\n @update=${() => this.requestUpdate()}\n >\n </foxy-nucleon>\n `;\n })}\n `;\n })}\n `;\n }\n\n updated(changes: Map<keyof this, unknown>): void {\n super.updated(changes);\n\n if (this.in('idle') && !this.form.items?.length) {\n this.edit({ items: [{ name: '', price: 0, sub_frequency: '1m', custom_options: [] }] });\n this.__openState = [true];\n }\n\n if (this.form.items?.length && !this.__openState.length) {\n this.__openState = [true, ...new Array(this.form.items.length - 1).fill(false)];\n }\n }\n\n submit(): void {\n // Do nothing – this form is not meant to be submitted.\n }\n\n private get __defaultTemplateSetHref() {\n try {\n const url = new URL(this.__storeLoader?.data?._links['fx:template_sets'].href ?? '');\n url.searchParams.set('code', 'DEFAULT');\n return url.toString();\n } catch {\n return undefined;\n }\n }\n\n private get __defaultItemCategoryHref() {\n try {\n const url = new URL(this.__storeLoader?.data?._links['fx:item_categories'].href ?? '');\n url.searchParams.set('code', 'DEFAULT');\n return url.toString();\n } catch {\n return undefined;\n }\n }\n\n private get __resolvedCurrencyCode() {\n type Loader = NucleonElement<Resource<Rels.LocaleCodes>>;\n\n const localeCodesLoader = this.renderRoot.querySelector<Loader>('#localeCodesHelperLoader');\n const currentLocale = this.__resolvedTemplateSet?.locale_code;\n const allLocales = localeCodesLoader?.data?.values;\n const localeInfo = currentLocale ? allLocales?.[currentLocale] : void 0;\n\n return localeInfo ? /Currency: ([A-Z]{3})/g.exec(localeInfo)?.[1]?.toUpperCase() : void 0;\n }\n\n private get __resolvedTemplateSet() {\n type TemplateSetsLoader = NucleonElement<Resource<Rels.TemplateSets>>;\n type TemplateSetLoader = NucleonElement<Resource<Rels.TemplateSet>>;\n const $ = <T extends Element>(s: string) => this.renderRoot.querySelector<T>(s);\n\n return (\n $<TemplateSetLoader>('#templateSetLoader')?.data ??\n $<TemplateSetsLoader>('#defaultTemplateSetLoader')?.data?._embedded['fx:template_sets'][0]\n );\n }\n\n private get __defaultItemCategory() {\n type Loader = NucleonElement<Resource<Rels.ItemCategories>>;\n return this.renderRoot.querySelector<Loader>('#defaultItemCategoryLoader')?.data?._embedded[\n 'fx:item_categories'\n ][0];\n }\n\n private get __resolvedCartUrl() {\n const store = this.__storeLoader?.data;\n\n if (store) {\n if (store.use_remote_domain) {\n return `https://${store.store_domain}/cart`;\n } else if (this.defaultDomain !== null) {\n return `https://${store.store_domain}.${this.defaultDomain}/cart`;\n }\n }\n\n return null;\n }\n\n private get __storeLoader() {\n type Loader = NucleonElement<Resource<Rels.Store>>;\n return this.renderRoot.querySelector<Loader>('#storeLoaderId');\n }\n\n private __getItemCategoryLoader(productIndex: number, optionIndex?: number) {\n type Loader = NucleonElement<Resource<Rels.ItemCategory>>;\n const prefix = `#itemCategoryLoaderProduct${productIndex}`;\n const selector = typeof optionIndex === 'number' ? `${prefix}Option${optionIndex}` : prefix;\n return this.renderRoot.querySelector<Loader>(selector);\n }\n\n private __getAddToCartFormHTML() {\n const currencyCode = this.__resolvedCurrencyCode;\n const templateSet = this.__resolvedTemplateSet;\n const cartUrl = this.__resolvedCartUrl;\n const store = this.__storeLoader?.data;\n\n if (!this.defaultDomain || !templateSet || !store || !currencyCode || !cartUrl) {\n throw new Error('loading_extra_data_needed');\n }\n\n const isHmacOn = store.use_cart_validation;\n const encodedAction = encodeAttributeValue(cartUrl, isHmacOn);\n let hasAtLeastOneFieldset = false;\n let output = `<form action=\"${encodedAction}\" method=\"post\" target=\"_blank\">`;\n let level = 1;\n\n const newline = () => `\\n${' '.repeat(level * 2)}`;\n const addHiddenInput = (name: string, value: string) => {\n const encodedValue = encodeAttributeValue(value, isHmacOn);\n const encodedName = encodeAttributeValue(name, isHmacOn);\n output += `${newline()}<input type=\"hidden\" name=\"${encodedName}\" value=\"${encodedValue}\">`;\n };\n\n if (templateSet.code !== 'DEFAULT') addHiddenInput('template_set', templateSet.code);\n if (this.form.empty && this.form.empty !== 'false') addHiddenInput('empty', this.form.empty);\n if (this.form.cart === 'checkout') addHiddenInput('cart', 'checkout');\n if (this.form.redirect) addHiddenInput('redirect', this.form.redirect);\n if (this.form.coupon) addHiddenInput('coupon', this.form.coupon);\n\n const items = this.form.items ?? [];\n const hasMoreThanOneProduct = items.length > 1;\n\n for (let productIndex = 0; productIndex < items.length; ++productIndex) {\n const itemCategoryLoader = this.__getItemCategoryLoader(productIndex);\n const itemCategory = itemCategoryLoader?.data;\n const product = items[productIndex];\n\n if (product.item_category_uri && !itemCategory) throw new Error('loading_extra_data_needed');\n\n const resolvedMinQty = Math.max(1, product.quantity_min ?? 1);\n const resolvedMaxQty = Math.max(resolvedMinQty, product.quantity_max ?? Infinity);\n const varyQty =\n resolvedMinQty !== resolvedMaxQty &&\n product.expires_format !== 'minutes' &&\n !product.hide_quantity;\n\n const varyPrice = product.price_configurable;\n const varyptions = product.custom_options.some(\n (v, i, a) => v.value_configurable || a.findIndex(vv => vv.name === v.name) !== i\n );\n\n const resolvedName =\n product.name.trim() || this.t('items.item-group.item.basics-group.name.placeholder');\n\n const needsFieldset =\n hasAtLeastOneFieldset || (hasMoreThanOneProduct && (varyPrice || varyQty || varyptions));\n\n if (needsFieldset) {\n hasAtLeastOneFieldset = true;\n output += `${newline()}<fieldset>`;\n level++;\n output += `${newline()}<legend>${encode(resolvedName)}</legend>`;\n }\n\n const prefix = productIndex === 0 ? '' : `${productIndex + 1}:`;\n addHiddenInput(`${prefix}name`, resolvedName);\n const price = `${product.price}${currencyCode}`;\n\n if (product.price_configurable) {\n const encodedNoCurrencyPrice = encodeAttributeValue(product.price.toFixed(2), isHmacOn);\n output += `${newline()}<label>`;\n level++;\n output += `${newline()}<span>${encode(this.t('preview.price_label'))}</span>`;\n\n if (store.use_cart_validation) {\n output += `${newline()}<input required name=\"${prefix}price\" value=\"--OPEN--\" data-replace=\"${encodedNoCurrencyPrice}\">`;\n } else {\n output += `${newline()}<input required name=\"${prefix}price\" value=\"${encodedNoCurrencyPrice}\">`;\n }\n\n level--;\n output += `${newline()}</label>`;\n } else {\n addHiddenInput(`${prefix}price`, price);\n }\n\n if (itemCategory && itemCategory.code !== 'DEFAULT') {\n addHiddenInput(`${prefix}category`, itemCategory.code);\n }\n\n if (product.code) {\n addHiddenInput(`${prefix}code`, product.code);\n } else if (store.use_cart_validation) {\n throw new Error('paused_code_required');\n }\n\n if (product.parent_code) addHiddenInput(`${prefix}parent_code`, product.parent_code);\n\n if (product.image) {\n addHiddenInput(`${prefix}image`, product.image);\n if (product.url) addHiddenInput(`${prefix}url`, product.url);\n }\n\n if (product.sub_enabled) {\n if (product.sub_frequency) {\n addHiddenInput(`${prefix}sub_frequency`, product.sub_frequency);\n\n if (product.sub_startdate) {\n if (product.sub_startdate_format === 'yyyymmdd') {\n const date = new Date(product.sub_startdate);\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n addHiddenInput(`${prefix}sub_startdate`, `${year}${month}${day}`);\n } else {\n addHiddenInput(`${prefix}sub_startdate`, String(product.sub_startdate));\n }\n }\n\n if (product.sub_enddate) {\n if (product.sub_enddate_format === 'yyyymmdd') {\n const date = new Date(product.sub_enddate);\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n addHiddenInput(`${prefix}sub_enddate`, `${year}${month}${day}`);\n } else {\n addHiddenInput(`${prefix}sub_enddate`, String(product.sub_enddate));\n }\n }\n }\n }\n\n if (product.discount_name && product.discount_type && product.discount_details) {\n addHiddenInput(\n `${prefix}discount_${product.discount_type}`,\n `${product.discount_name}{${product.discount_details}}`\n );\n }\n\n if (product.expires_value) {\n if (product.expires_format === 'timestamp') {\n addHiddenInput(`${prefix}expires`, product.expires_value.toFixed(0));\n } else {\n addHiddenInput(`${prefix}expires`, product.expires_value.toFixed(0));\n }\n }\n\n if (varyQty) {\n output += `${newline()}<label>`;\n level++;\n output += `${newline()}<span>${encode(this.t('preview.quantity_label'))}</span>`;\n\n const encodedName = encodeAttributeValue(`${prefix}quantity`, isHmacOn);\n output += `${newline()}<input type=\"number\" name=\"${encodedName}\"`;\n output += ` min=\"${encodeAttributeValue(String(resolvedMinQty), isHmacOn)}\"`;\n\n if (resolvedMaxQty !== Infinity)\n output += ` max=\"${encodeAttributeValue(String(resolvedMaxQty), isHmacOn)}\"`;\n if (store.use_cart_validation) {\n const encodedQuantity = encodeAttributeValue(String(product.quantity ?? 1), isHmacOn);\n output += ` value=\"--OPEN--\" data-replace=\"${encodedQuantity}\">`;\n } else {\n output += ` value=\"${encodeAttributeValue(String(product.quantity ?? 1), isHmacOn)}\">`;\n }\n\n level--;\n output += `${newline()}</label>`;\n } else if ((product.quantity ?? 1) > 1) {\n addHiddenInput(`${prefix}quantity`, (product.quantity ?? 1).toString());\n }\n\n if (product.expires_format !== 'minutes') {\n if (resolvedMinQty !== 1) {\n addHiddenInput(`${prefix}quantity_min`, resolvedMinQty.toFixed(0));\n }\n if (resolvedMaxQty !== Infinity) {\n addHiddenInput(`${prefix}quantity_max`, resolvedMaxQty.toFixed(0));\n }\n }\n\n if (product.length) addHiddenInput(`${prefix}length`, product.length.toFixed(3));\n if (product.width) addHiddenInput(`${prefix}width`, product.width.toFixed(3));\n if (product.height) addHiddenInput(`${prefix}height`, product.height.toFixed(3));\n if (product.weight) addHiddenInput(`${prefix}weight`, product.weight.toFixed(3));\n\n if (store.features_multiship) {\n output += `${newline()}<label>`;\n level++;\n output += `${newline()}<span>${encode(this.t('preview.shipto_label'))}</span>`;\n\n if (store.use_cart_validation) {\n output += `${newline()}<input name=\"${prefix}shipto\" value=\"--OPEN--\" data-replace=\"\">`;\n } else {\n output += `${newline()}<input name=\"${prefix}shipto\" value=\"\">`;\n }\n\n level--;\n output += `${newline()}</label>`;\n }\n\n const groupedCustomOptions = product.custom_options.reduce((acc, option) => {\n if (!acc[option.name]) acc[option.name] = [];\n acc[option.name].push(option);\n return acc;\n }, {} as Record<string, Required<Data>['items'][number]['custom_options']>);\n\n for (const optionName in groupedCustomOptions) {\n const group = groupedCustomOptions[optionName];\n\n if (group.length === 1) {\n const optionIndex = product.custom_options.indexOf(group[0]);\n const itemCategory = this.__getItemCategoryLoader(productIndex, optionIndex)?.data;\n const modifiers = this.__getOptionModifiers(group[0], itemCategory ?? null, currencyCode);\n const value = `${group[0].value}${modifiers}`;\n const name = `${prefix}${optionName}`;\n\n if (group[0].value_configurable) {\n output += `${newline()}<label>`;\n level++;\n output += `${newline()}<span>${encode(optionName)}:</span>`;\n output += `${newline()}<input name=\"${encodeAttributeValue(name, isHmacOn)}\" `;\n\n if (store.use_cart_validation) {\n output += `value=\"--OPEN--\" data-replace=\"${encodeAttributeValue(value, isHmacOn)}\">`;\n } else {\n output += `value=\"${encodeAttributeValue(value, isHmacOn)}\">`;\n }\n\n level--;\n output += `${newline()}</label>`;\n } else {\n addHiddenInput(name, value);\n }\n } else {\n output += `${newline()}<label>`;\n level++;\n output += `${newline()}<span>${encode(optionName)}:</span>`;\n output += `${newline()}<select name=\"${prefix}${optionName}\">`;\n level++;\n\n group.forEach(option => {\n const optionIndex = product.custom_options.indexOf(option);\n const itemCategory = this.__getItemCategoryLoader(productIndex, optionIndex)?.data;\n const modifiers = this.__getOptionModifiers(option, itemCategory ?? null, currencyCode);\n const encodedValue = encodeAttributeValue(`${option.value}${modifiers}`, isHmacOn);\n const encodedCaption = encode(option.value ?? '');\n output += `${newline()}<option value=\"${encodedValue}\">${encodedCaption}</option>`;\n });\n\n level--;\n output += `${newline()}</select>`;\n level--;\n output += `${newline()}</label>`;\n }\n }\n\n if (needsFieldset) {\n level--;\n output += `${newline()}</fieldset>`;\n }\n }\n\n const submitCaptionSuffix = this.form.cart === 'checkout' ? 'checkout' : 'cart';\n const encodedSubmitCaption = encode(this.t(`preview.submit_caption_${submitCaptionSuffix}`));\n\n output += `${newline()}<button type=\"submit\">${encodedSubmitCaption}</button>`;\n level--;\n output += `${newline()}</form>`;\n\n return output;\n }\n\n private __getAddToCartLinkHref() {\n const currencyCode = this.__resolvedCurrencyCode;\n const templateSet = this.__resolvedTemplateSet;\n const cartUrl = this.__resolvedCartUrl;\n const store = this.__storeLoader?.data;\n\n if (!this.defaultDomain || !templateSet || !store || !currencyCode || !cartUrl) {\n throw new Error('loading_extra_data_needed');\n }\n\n const query = new Map<string, string>();\n const setOrThrow = (name: string, value: string) => {\n if (store.use_cart_validation) {\n if (['&', '%', '=', '#'].some(c => name.includes(c))) {\n throw new Error('error_special_characters_present');\n } else {\n query.set(name, encodeURIComponent(value));\n }\n } else {\n query.set(encodeURIComponent(name), encodeURIComponent(value));\n }\n };\n\n if (templateSet.code !== 'DEFAULT') setOrThrow('template_set', templateSet.code);\n if (this.form.cart === 'checkout') setOrThrow('cart', 'checkout');\n if (this.form.redirect) setOrThrow('redirect', this.form.redirect);\n if (this.form.coupon) setOrThrow('coupon', this.form.coupon);\n if (this.form.empty && this.form.empty !== 'false') {\n setOrThrow('empty', this.form.empty);\n }\n\n for (let index = 0; index < (this.form.items?.length ?? 0); ++index) {\n const product = this.form.items![index];\n const prefix = index === 0 ? '' : `${index + 1}:`;\n const itemCategory = this.__getItemCategoryLoader(index)?.data;\n\n if (product.item_category_uri && !itemCategory) {\n throw new Error('loading_extra_data_needed');\n }\n\n if (product.price_configurable) {\n throw new Error('error_price_configurable');\n }\n\n if (new Set(product.custom_options.map(v => v.name)).size < product.custom_options.length) {\n throw new Error('error_duplicate_custom_option_names');\n }\n\n if (itemCategory && itemCategory.code !== 'DEFAULT') {\n setOrThrow(`${prefix}category`, itemCategory.code);\n }\n\n setOrThrow(`${prefix}name`, product.name);\n setOrThrow(`${prefix}price`, `${product.price}${currencyCode}`);\n\n if (product.code) {\n setOrThrow(`${prefix}code`, product.code);\n } else if (store.use_cart_validation) {\n throw new Error('paused_code_required');\n }\n\n if (product.parent_code) setOrThrow(`${prefix}parent_code`, product.parent_code);\n\n if (product.image) {\n setOrThrow(`${prefix}image`, product.image);\n if (product.url) setOrThrow(`${prefix}url`, product.url);\n }\n\n if (product.sub_enabled) {\n if (product.sub_frequency) {\n setOrThrow(`${prefix}sub_frequency`, product.sub_frequency);\n\n if (product.sub_startdate) {\n if (product.sub_startdate_format === 'yyyymmdd') {\n const date = new Date(product.sub_startdate);\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n setOrThrow(`${prefix}sub_startdate`, `${year}${month}${day}`);\n } else {\n setOrThrow(`${prefix}sub_startdate`, String(product.sub_startdate));\n }\n }\n\n if (product.sub_enddate) {\n if (product.sub_enddate_format === 'yyyymmdd') {\n const date = new Date(product.sub_enddate);\n const year = date.getFullYear();\n const month = (date.getMonth() + 1).toString().padStart(2, '0');\n const day = date.getDate().toString().padStart(2, '0');\n setOrThrow(`${prefix}sub_enddate`, `${year}${month}${day}`);\n } else {\n setOrThrow(`${prefix}sub_enddate`, String(product.sub_enddate));\n }\n }\n }\n }\n\n if (product.discount_name && product.discount_type && product.discount_details) {\n setOrThrow(\n `${prefix}discount_${product.discount_type}`,\n `${product.discount_name}{${product.discount_details}}`\n );\n }\n\n if (product.expires_value) {\n if (product.expires_format === 'timestamp') {\n setOrThrow(`${prefix}expires`, product.expires_value.toFixed(0));\n } else {\n setOrThrow(`${prefix}expires`, product.expires_value.toFixed(0));\n }\n }\n\n if ((product.quantity ?? 1) > 1) {\n setOrThrow(`${prefix}quantity`, (product.quantity ?? 1).toFixed(0));\n }\n\n if (product.expires_format !== 'minutes') {\n if (product.quantity_min) {\n setOrThrow(`${prefix}quantity_min`, product.quantity_min.toString());\n }\n if (product.quantity_max) {\n setOrThrow(`${prefix}quantity_max`, product.quantity_max.toString());\n }\n }\n\n if (product.weight) setOrThrow(`${prefix}weight`, product.weight.toFixed(3));\n if (product.length) setOrThrow(`${prefix}length`, product.length.toFixed(3));\n if (product.width) setOrThrow(`${prefix}width`, product.width.toFixed(3));\n if (product.height) setOrThrow(`${prefix}height`, product.height.toFixed(3));\n\n for (let optionIndex = 0; optionIndex < product.custom_options.length; ++optionIndex) {\n const option = product.custom_options[optionIndex];\n if (option.value_configurable) throw new Error('error_option_value_configurable');\n\n const itemCategory = this.__getItemCategoryLoader(index, optionIndex)?.data;\n const modifiers = this.__getOptionModifiers(option, itemCategory ?? null, currencyCode);\n setOrThrow(`${prefix}${option.name}`, `${option.value ?? ''}${modifiers}`);\n }\n }\n\n return `${cartUrl}?${Array.from(query.entries())\n .map(([key, value]) => `${key}=${value}`)\n .join('&')}`;\n }\n\n private __getAddToCartCode() {\n const store = this.__storeLoader?.data;\n if (!this.encodeHelper || !store) {\n return {\n linkHref: '',\n linkHrefError: 'loading_extra_data_needed',\n formHTML: '',\n formHTMLError: 'loading_extra_data_needed',\n };\n }\n\n const checkEquality = store.use_cart_validation;\n let formHTMLError: string | null = null;\n let linkHrefError: string | null = null;\n let formHTML = '';\n let linkHref = '';\n\n try {\n formHTML = this.__getAddToCartFormHTML();\n } catch (err) {\n formHTMLError = err.message;\n }\n\n let unsignedCode = formHTML;\n\n try {\n linkHref = this.__getAddToCartLinkHref();\n if (linkHref) {\n const linkHTML = `<a href=\"${encodeAttributeValue(\n linkHref,\n checkEquality\n )}\">Add to cart</a>`;\n unsignedCode = `${formHTML}${this.__signingSeparator}${linkHTML}`;\n }\n } catch (err) {\n linkHrefError = err.message;\n linkHref = '';\n }\n\n if (unsignedCode === this.__previousUnsignedCode && this.__previousSignedCode) {\n const [formHTML, linkHTML] = this.__previousSignedCode.split(this.__signingSeparator);\n return {\n linkHref: linkHTML ? decode(linkHTML.substring(9, linkHTML.length - 17)) : '',\n linkHrefError,\n formHTML,\n formHTMLError,\n };\n }\n\n this.__previousUnsignedCode = unsignedCode;\n this.__previousSignedCode = '';\n\n if (store.use_cart_validation) this.__signAsync(unsignedCode, this.encodeHelper);\n return { formHTML, formHTMLError, linkHref, linkHrefError };\n }\n\n private __getOptionModifiers(\n option: Required<Data>['items'][number]['custom_options'][number],\n optionItemCategory: Resource<Rels.ItemCategory> | null,\n currencyCode: string\n ) {\n if (option.value_configurable) return '';\n const modifiers = [];\n\n if (option.price) {\n const operator = option.replace_price ? ':' : Math.sign(option.price) === -1 ? '-' : '+';\n if (option.replace_price || option.price !== 0)\n modifiers.push(`p${operator}${Math.abs(option.price)}${currencyCode}`);\n }\n\n if (option.weight) {\n const operator = option.replace_weight ? ':' : Math.sign(option.weight) === -1 ? '-' : '+';\n if (option.replace_weight || option.weight !== 0)\n modifiers.push(`w${operator}${Math.abs(option.weight)}`);\n }\n\n if (option.item_category_uri && !optionItemCategory) return '';\n if (optionItemCategory) modifiers.push(`y:${optionItemCategory.code}`);\n\n if (option.code) {\n const operator = option.replace_code ? ':' : '+';\n if (option.replace_code || option.code !== '') modifiers.push(`c${operator}${option.code}`);\n }\n\n return modifiers.length ? `{${modifiers.join('|')}}` : '';\n }\n}\n"]}
|
|
@@ -313,7 +313,9 @@ export class NucleonElement extends InferrableMixin(LitElement) {
|
|
|
313
313
|
this.__destroyRumour();
|
|
314
314
|
let data;
|
|
315
315
|
try {
|
|
316
|
-
|
|
316
|
+
const lastEvent = this.__service.state.event.type;
|
|
317
|
+
const headers = lastEvent === 'REFRESH' ? { 'cache-control': 'no-cache' } : void 0;
|
|
318
|
+
data = await this._fetch(this.href, { headers });
|
|
317
319
|
NucleonElement.Rumour(this.group).share({ data, source: this.href });
|
|
318
320
|
}
|
|
319
321
|
finally {
|
|
@@ -433,12 +435,15 @@ export class NucleonElement extends InferrableMixin(LitElement) {
|
|
|
433
435
|
if (this.virtualHost && request.url.startsWith(`foxy://${this.virtualHost}/form/`)) {
|
|
434
436
|
return event.respondWith(internalServer(request, this));
|
|
435
437
|
}
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
438
|
+
let cacheResponsePromise = null;
|
|
439
|
+
if (event.request.headers.get('cache-control') !== 'no-cache') {
|
|
440
|
+
const cacheResponse = serveFromCache(request.url, this.data);
|
|
441
|
+
if (cacheResponse.ok) {
|
|
442
|
+
cacheResponsePromise = Promise.resolve(cacheResponse);
|
|
443
|
+
console.debug(`%c@foxy.io/elements::${this.localName}\n%c200%c GET ${request.url}`, 'color: gray', `background: gray; padding: 0 .2em; border-radius: .2em; color: white;`, '');
|
|
444
|
+
}
|
|
441
445
|
}
|
|
446
|
+
event.respondWith(Promise.resolve(cacheResponsePromise !== null && cacheResponsePromise !== void 0 ? cacheResponsePromise : api.fetch(request)));
|
|
442
447
|
});
|
|
443
448
|
this.__fetchEventQueue = [];
|
|
444
449
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NucleonElement.js","sourceRoot":"","sources":["../../../../src/elements/public/NucleonElement/NucleonElement.ts"],"names":[],"mappings":"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","sourcesContent":["import { ComputedElementProperties, HALJSONResource, NucleonMachine, NucleonV8N } from './types';\nimport { html, LitElement, PropertyDeclarations, TemplateResult } from 'lit-element';\nimport { Nucleon, Rumour } from '@foxy.io/sdk/core';\nimport { assign, interpret } from 'xstate';\n\nimport { API } from './API';\nimport { FetchEvent } from './FetchEvent';\nimport { UpdateEvent, UpdateResult } from './UpdateEvent';\nimport memoize from 'lodash-es/memoize';\nimport { serveFromCache } from './serveFromCache';\nimport { InferrableMixin } from '../../../mixins/inferrable';\nimport { internalServer } from './internalServer';\nimport { uniqueId } from 'lodash-es';\n\n/**\n * Base class for custom elements working with remote HAL+JSON resources.\n *\n * @fires NucleonElement#update - Instance of `NucleonElement.UpdateEvent`. Dispatched on an element whenever it changes its state.\n * @fires NucleonElement#fetch - Instance of `NucleonElement.API.FetchEvent`. Emitted before each API request.\n *\n * @element foxy-nucleon\n * @since 1.1.0\n */\nexport class NucleonElement<TData extends HALJSONResource> extends InferrableMixin(LitElement) {\n /**\n * Instances of this event are dispatched on an element whenever it changes its\n * state (e.g. when going from `busy` to `idle` or on `form` data change).\n * This event isn't cancelable, and it does not bubble.\n * @readonly\n */\n static readonly UpdateEvent = UpdateEvent;\n\n /**\n * Creates a tagged [Rumour](https://sdk.foxy.dev/classes/_core_index_.rumour.html)\n * instance if it doesn't exist or returns cached one otherwise. NucleonElements\n * use empty Rumour group by default.\n * @readonly\n */\n static readonly Rumour = memoize<(group: string) => Rumour>(() => new Rumour());\n\n /**\n * Universal [API](https://sdk.foxy.dev/classes/_core_index_.api.html) client\n * that dispatches cancellable `FetchEvent` on an element before each request.\n * @readonly\n */\n static readonly API = API;\n\n static get inferredProperties(): string[] {\n return [...super.inferredProperties, 'group', 'lang'];\n }\n\n /** @readonly */\n static get properties(): PropertyDeclarations {\n return {\n __state: { type: String, reflect: true, attribute: 'state' },\n virtualHost: { attribute: 'virtual-host' },\n related: { type: Array },\n parent: { type: String },\n group: { type: String, noAccessor: true },\n href: { type: String, noAccessor: true },\n lang: { type: String },\n };\n }\n\n /**\n * Array of validation functions. Each function accepts `element.form` and must return\n * either an error code string if form data fails the check or `true` otherwise.\n * Error codes are collected in `element.errors`. Empty by default.\n */\n static get v8n(): NucleonV8N<any, any> {\n return [];\n }\n\n /**\n * Optional ISO 639-1 code describing the language element content is written in.\n * Changing the `lang` attribute will update the value of this property.\n */\n lang = '';\n\n /**\n * Optional URL of the collection this element's resource belongs to.\n * Changing the `parent` attribute will update the value of this property.\n */\n parent = '';\n\n /**\n * Optional URI list of the related resources. If Rumour encounters a related\n * resource on creation or deletion, it will be reloaded from source.\n */\n related: string[] = [];\n\n /**\n * Unique identifier for the virtual host used by the element to serve internal requests.\n *\n * Currently only one endpoint is supported: `foxy://<virtualHost>/form/<path>`.\n * This endpoint supports POST, GET, PATCH and DELETE methods and functions like a hAPI server.\n *\n * For example, `GET foxy://nucleon-123/form/subscriptions/allowNextDateModification/0` on a NucleonElement\n * with `fx:customer_portal_settings` will return the first item of the `subscriptions.allowNextDateModification` array.\n */\n virtualHost: string | null = uniqueId('nucleon-');\n\n private __hrefToLoad: string | null = null;\n\n private __group = '';\n\n private __unsubscribeFromRumour: (() => void) | null = null;\n\n private __fetchEventHandler!: (evt: Event) => void;\n\n private __fetchEventQueue: FetchEvent[] = [];\n\n private readonly __service = interpret(\n (Nucleon.machine as NucleonMachine<TData>).withConfig({\n services: {\n sendDelete: () => this._sendDelete(),\n sendPatch: ({ edits }) => this._sendPatch(edits!),\n sendPost: ({ edits }) => this._sendPost(edits!),\n sendGet: () => this._sendGet(),\n },\n\n actions: {\n validate: assign<Nucleon.Context<TData, string>, Nucleon.Event<TData>>({\n errors: context => {\n const rules = (this.constructor as typeof NucleonElement).v8n;\n const form = { ...context.data, ...context.edits };\n\n return rules\n .map(validate => validate(form, this))\n .filter(v8nResult => typeof v8nResult === 'string')\n .filter((err, errIndex, errs) => errs.indexOf(err) === errIndex) as string[];\n },\n }),\n },\n })\n );\n\n constructor() {\n super();\n this.__createService();\n }\n\n /**\n * If network request returns non-2XX code, the entire error response\n * will be available via this getter.\n *\n * This property is readonly. Changing failure records via this property is\n * not guaranteed to work. NucleonElement does not provide a way to override error status.\n *\n * @since 1.4.0\n */\n get failure(): Response | null {\n return this.__service.state?.context.failure ?? null;\n }\n\n /**\n * Array of validation errors returned from `NucleonElement.v8n` checks.\n *\n * This property is readonly. Adding or removing error codes via this property is\n * not guaranteed to work. NucleonElement does not provide a way to override validity status.\n */\n get errors(): string[] {\n return this.__service.state?.context.errors ?? [];\n }\n\n /**\n * Resource snapshot with edits applied. Empty object if unavailable.\n *\n * This property and its value are readonly. Assignments like `element.data.foo = 'bar'`\n * are not guaranteed to work. Please use `element.edit({ foo: 'bar' })` instead.\n * If you need to replace the entire data object, consider using `element.data`.\n */\n get form(): Partial<TData> {\n const { data, edits } = this.__service.state?.context ?? {};\n return { ...data, ...edits } as Partial<TData>;\n }\n\n /**\n * Resource snapshot as-is, no edits applied. Null if unavailable.\n *\n * Returned value is not reactive. Assignments like `element.data.foo = 'bar'`\n * are not guaranteed to work. Please set the property instead: `element.data = { ...element.data, foo: 'bar' }`.\n * If you're processing user input, consider using `element.form` and `element.edit()` instead.\n */\n get data(): TData | null {\n return this.__service.state?.context.data ?? null;\n }\n\n set data(data: TData | null) {\n this.__destroyRumour();\n this.__hrefToLoad = null;\n this.__service.send({ type: 'SET_DATA', data });\n if (data) this.__createRumour();\n }\n\n /**\n * Rumour group. Elements in different groups will not share updates. Empty by default.\n * @example element.group = 'my-group'\n */\n get group(): string {\n return this.__group;\n }\n\n set group(value: string) {\n this.__group = value;\n this.__destroyRumour();\n this.__createRumour();\n }\n\n /**\n * Optional URL of the resource to load. Switches element to `idle.template` state if empty (default).\n * @example element.href = 'https://demo.foxycart.com/s/customer/attributes/0'\n */\n get href(): string {\n return this.form._links?.self.href ?? this.__hrefToLoad ?? '';\n }\n\n set href(value: string) {\n this.__hrefToLoad = value;\n\n if (value) {\n this.__service.send({ type: 'FETCH' });\n } else {\n this.data = null;\n }\n }\n\n /**\n * Checks if this element is in the given state.\n * @example element.in({ idle: 'snapshot' })\n */\n in<TStateValue extends Nucleon.State<TData, string>['value']>(\n stateValue: TStateValue\n ): this is this & ComputedElementProperties<TData, TStateValue> {\n return !!this.__service.state?.matches(stateValue);\n }\n\n /**\n * Clears all edits and emits the `update` event.\n * @example element.undo()\n */\n undo(): void {\n this.__service.send({ type: 'UNDO' });\n }\n\n /**\n * Applies an edit to the local resource snapshot or its template and emits the `update` event.\n * @example element.edit({ first_name: 'Alex' })\n */\n edit(data: Partial<TData>): void {\n if (typeof data._links?.self.href === 'string') this.__hrefToLoad = null;\n this.__service.send({ type: 'EDIT', data });\n }\n\n /**\n * Submits the form, updating the resource if href isn't empty or creating it otherwise.\n * Emits multiple `update` events as element state changes. Has no effect on invalid forms.\n * @example element.submit()\n */\n submit(): void {\n this.reportValidity();\n this.__service.send({ type: 'SUBMIT' });\n }\n\n checkValidity(): boolean {\n const isTemplateDirtyValid = this.in({ idle: { template: { dirty: 'valid' } } });\n const isSnapshotDirtyValid = this.in({ idle: { snapshot: { dirty: 'valid' } } });\n const isTemplateCleanValid = this.in({ idle: { template: { clean: 'valid' } } });\n const isSnapshotCleanValid = this.in({ idle: { snapshot: { clean: 'valid' } } });\n const isTemplateValid = isTemplateCleanValid || isTemplateDirtyValid;\n const isSnapshotValid = isSnapshotCleanValid || isSnapshotDirtyValid;\n const isValid = isTemplateValid || isSnapshotValid;\n\n return isValid;\n }\n\n reportValidity(): boolean {\n const walker = this.ownerDocument.createTreeWalker(this.renderRoot, NodeFilter.SHOW_ELEMENT);\n\n do {\n type Input = Node & Record<string, () => unknown>;\n\n const node = walker.currentNode as Input;\n const methods = ['reportValidity', 'validate'];\n\n for (const method of methods) {\n if (method in node) {\n try {\n node[method]();\n break;\n } catch {\n continue;\n }\n }\n }\n } while (walker.nextNode());\n\n return this.checkValidity();\n }\n\n /**\n * Sends a DELETE request to `element.href` and clears local data on success.\n * Emits multiple update events as element state changes.\n * @example element.delete()\n */\n delete(): void {\n this.__service.send({ type: 'DELETE' });\n }\n\n /**\n * Fetches data from `element.href` in background, keeping the edits and v8n errors.\n * @example element.refresh()\n */\n refresh(): void {\n this.__service.send({ type: 'REFRESH' });\n }\n\n render(): TemplateResult {\n return html`<slot></slot>`;\n }\n\n /** @readonly */\n connectedCallback(): void {\n super.connectedCallback();\n if (this.href && !this.data) this.__service.send({ type: 'FETCH' });\n\n this.__createRumour();\n this.__createServer();\n this.__processFetchEventQueue();\n\n this.dispatchEvent(new UpdateEvent());\n }\n\n /** @readonly */\n disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this.__destroyRumour();\n this.__destroyServer();\n this.__flushFetchEventQueue('parent element was disconnected');\n\n this.dispatchEvent(new UpdateEvent());\n }\n\n applyInferredProperties(context: Map<string, unknown>): void {\n super.applyInferredProperties(context);\n\n if (this.infer === null) return;\n\n this.group = (context.get('group') as string | undefined) ?? '';\n this.lang = (context.get('lang') as string | undefined) ?? '';\n }\n\n /** Sends API request. Throws an error on non-2XX response. */\n protected async _fetch<TResult = TData>(...args: Parameters<Window['fetch']>): Promise<TResult> {\n const response = await new API(this).fetch(...args);\n if (!response.ok) throw response;\n return response.json();\n }\n\n /** POSTs to `element.parent`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendPost(edits: Partial<TData>): Promise<TData> {\n this.__destroyRumour();\n let data: TData;\n\n try {\n const body = JSON.stringify(edits);\n const postData = await this._fetch(this.parent, { body, method: 'POST' });\n data = await this._fetch(postData._links.self.href);\n\n const rumour = NucleonElement.Rumour(this.group);\n const related = [...this.related, this.parent];\n rumour.share({ data, related, source: data._links.self.href });\n } finally {\n this.__createRumour();\n }\n\n return data;\n }\n\n /** GETs `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendGet(): Promise<TData> {\n this.__destroyRumour();\n let data: TData;\n\n try {\n data = await this._fetch(this.href);\n NucleonElement.Rumour(this.group).share({ data, source: this.href });\n } finally {\n this.__createRumour();\n }\n\n return data;\n }\n\n /** PATCHes `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendPatch(edits: Partial<TData>): Promise<TData> {\n this.__destroyRumour();\n let data: TData;\n\n try {\n const body = JSON.stringify(edits);\n data = await this._fetch(this.href, { body, method: 'PATCH' });\n\n const rumour = NucleonElement.Rumour(this.group);\n rumour.share({ data, source: this.href, related: this.related });\n } finally {\n this.__createRumour();\n }\n\n return data;\n }\n\n /** DELETEs `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendDelete(): Promise<null> {\n this.__destroyRumour();\n\n try {\n await this._fetch(this.href, { method: 'DELETE' });\n\n const rumour = NucleonElement.Rumour(this.group);\n const related = [...this.related, this.parent];\n rumour.share({ data: null, source: this.href, related });\n } finally {\n this.__createRumour();\n }\n\n return null;\n }\n\n // this getter is used by LitElement to set the \"state\" attribute\n private get __state(): string {\n const state = this.__service.state;\n const flags = state?.toStrings().reduce((p, c) => [...p, ...c.split('.')], [] as string[]);\n return [...new Set(flags ?? [])].join(' ');\n }\n\n private __createService() {\n this.__service.onTransition(state => {\n if (!state.changed) return;\n\n let result: UpdateResult | undefined = undefined;\n\n if (state.matches('idle') && state.context.errors.length === 0) {\n if (state.history?.matches({ busy: 'deleting' })) {\n result = UpdateResult.ResourceDeleted;\n } else if (state.history?.matches({ busy: 'creating' })) {\n result = UpdateResult.ResourceCreated;\n } else if (state.history?.matches({ busy: 'updating' })) {\n result = UpdateResult.ResourceUpdated;\n } else if (state.history?.matches({ busy: 'fetching' })) {\n result = UpdateResult.ResourceFetched;\n }\n }\n\n this.requestUpdate();\n this.dispatchEvent(new UpdateEvent('update', { detail: { result } }));\n\n if (!state.matches('busy')) this.__processFetchEventQueue();\n });\n\n this.__service.onChange(() => {\n this.requestUpdate();\n this.dispatchEvent(new UpdateEvent());\n });\n\n this.__service.start();\n }\n\n private __createRumour() {\n const rumour = NucleonElement.Rumour(this.group);\n this.__unsubscribeFromRumour = rumour.track(update => this.__handleRumourUpdate(update));\n }\n\n private __destroyRumour() {\n this.__unsubscribeFromRumour?.();\n this.__unsubscribeFromRumour = null;\n }\n\n private __createServer() {\n this.__fetchEventHandler = this.__handleFetchEvent.bind(this);\n this.addEventListener('fetch', this.__fetchEventHandler);\n }\n\n private __destroyServer() {\n this.removeEventListener('fetch', this.__fetchEventHandler);\n }\n\n private __handleRumourUpdate(update: (oldData: TData) => TData | null) {\n try {\n const oldData = this.__service.state?.context.data;\n const newData = oldData ? update(oldData) : oldData;\n\n if (newData !== oldData) {\n this.data = newData;\n\n if (!newData) {\n const result = UpdateResult.ResourceDeleted;\n const event = new UpdateEvent('update', { detail: { result } });\n this.dispatchEvent(event);\n }\n }\n } catch (err) {\n if (err instanceof Rumour.UpdateError) {\n setTimeout(() => this.refresh());\n } else {\n throw err;\n }\n }\n }\n\n private __processFetchEventQueue() {\n const api = new NucleonElement.API(this);\n\n this.__fetchEventQueue.forEach(event => {\n const request = event.request;\n\n if (this.virtualHost && request.url.startsWith(`foxy://${this.virtualHost}/form/`)) {\n return event.respondWith(internalServer(request, this));\n }\n\n const cacheResponse = serveFromCache(request.url, this.data);\n const whenResponseReady = cacheResponse.ok ? cacheResponse : api.fetch(request);\n\n event.respondWith(Promise.resolve(whenResponseReady));\n\n if (cacheResponse.ok) {\n console.debug(\n `%c@foxy.io/elements::${this.localName}\\n%c200%c GET ${request.url}`,\n 'color: gray',\n `background: gray; padding: 0 .2em; border-radius: .2em; color: white;`,\n ''\n );\n }\n });\n\n this.__fetchEventQueue = [];\n }\n\n private __flushFetchEventQueue(errorMessage: string) {\n this.__fetchEventQueue.forEach(event => {\n event.respondWith(Promise.reject(new Error(errorMessage)));\n });\n\n this.__fetchEventQueue = [];\n }\n\n private __handleFetchEvent(event: Event) {\n if (!(event instanceof FetchEvent)) return;\n if (event.defaultPrevented) return;\n if (event.composedPath()[0] === this) return;\n\n const { url, method } = event.request;\n\n if (url.startsWith('foxy://')) {\n if (this.virtualHost && url.startsWith(`foxy://${this.virtualHost}/form/`)) {\n if (method !== 'GET') return event.respondWith(internalServer(event.request, this));\n } else {\n return;\n }\n }\n\n if (method === 'GET') {\n event.preventDefault();\n this.__fetchEventQueue.push(event);\n if (!this.__service.state?.matches('busy')) this.__processFetchEventQueue();\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"NucleonElement.js","sourceRoot":"","sources":["../../../../src/elements/public/NucleonElement/NucleonElement.ts"],"names":[],"mappings":"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","sourcesContent":["import { ComputedElementProperties, HALJSONResource, NucleonMachine, NucleonV8N } from './types';\nimport { html, LitElement, PropertyDeclarations, TemplateResult } from 'lit-element';\nimport { Nucleon, Rumour } from '@foxy.io/sdk/core';\nimport { assign, interpret } from 'xstate';\n\nimport { API } from './API';\nimport { FetchEvent } from './FetchEvent';\nimport { UpdateEvent, UpdateResult } from './UpdateEvent';\nimport memoize from 'lodash-es/memoize';\nimport { serveFromCache } from './serveFromCache';\nimport { InferrableMixin } from '../../../mixins/inferrable';\nimport { internalServer } from './internalServer';\nimport { uniqueId } from 'lodash-es';\n\n/**\n * Base class for custom elements working with remote HAL+JSON resources.\n *\n * @fires NucleonElement#update - Instance of `NucleonElement.UpdateEvent`. Dispatched on an element whenever it changes its state.\n * @fires NucleonElement#fetch - Instance of `NucleonElement.API.FetchEvent`. Emitted before each API request.\n *\n * @element foxy-nucleon\n * @since 1.1.0\n */\nexport class NucleonElement<TData extends HALJSONResource> extends InferrableMixin(LitElement) {\n /**\n * Instances of this event are dispatched on an element whenever it changes its\n * state (e.g. when going from `busy` to `idle` or on `form` data change).\n * This event isn't cancelable, and it does not bubble.\n * @readonly\n */\n static readonly UpdateEvent = UpdateEvent;\n\n /**\n * Creates a tagged [Rumour](https://sdk.foxy.dev/classes/_core_index_.rumour.html)\n * instance if it doesn't exist or returns cached one otherwise. NucleonElements\n * use empty Rumour group by default.\n * @readonly\n */\n static readonly Rumour = memoize<(group: string) => Rumour>(() => new Rumour());\n\n /**\n * Universal [API](https://sdk.foxy.dev/classes/_core_index_.api.html) client\n * that dispatches cancellable `FetchEvent` on an element before each request.\n * @readonly\n */\n static readonly API = API;\n\n static get inferredProperties(): string[] {\n return [...super.inferredProperties, 'group', 'lang'];\n }\n\n /** @readonly */\n static get properties(): PropertyDeclarations {\n return {\n __state: { type: String, reflect: true, attribute: 'state' },\n virtualHost: { attribute: 'virtual-host' },\n related: { type: Array },\n parent: { type: String },\n group: { type: String, noAccessor: true },\n href: { type: String, noAccessor: true },\n lang: { type: String },\n };\n }\n\n /**\n * Array of validation functions. Each function accepts `element.form` and must return\n * either an error code string if form data fails the check or `true` otherwise.\n * Error codes are collected in `element.errors`. Empty by default.\n */\n static get v8n(): NucleonV8N<any, any> {\n return [];\n }\n\n /**\n * Optional ISO 639-1 code describing the language element content is written in.\n * Changing the `lang` attribute will update the value of this property.\n */\n lang = '';\n\n /**\n * Optional URL of the collection this element's resource belongs to.\n * Changing the `parent` attribute will update the value of this property.\n */\n parent = '';\n\n /**\n * Optional URI list of the related resources. If Rumour encounters a related\n * resource on creation or deletion, it will be reloaded from source.\n */\n related: string[] = [];\n\n /**\n * Unique identifier for the virtual host used by the element to serve internal requests.\n *\n * Currently only one endpoint is supported: `foxy://<virtualHost>/form/<path>`.\n * This endpoint supports POST, GET, PATCH and DELETE methods and functions like a hAPI server.\n *\n * For example, `GET foxy://nucleon-123/form/subscriptions/allowNextDateModification/0` on a NucleonElement\n * with `fx:customer_portal_settings` will return the first item of the `subscriptions.allowNextDateModification` array.\n */\n virtualHost: string | null = uniqueId('nucleon-');\n\n private __hrefToLoad: string | null = null;\n\n private __group = '';\n\n private __unsubscribeFromRumour: (() => void) | null = null;\n\n private __fetchEventHandler!: (evt: Event) => void;\n\n private __fetchEventQueue: FetchEvent[] = [];\n\n private readonly __service = interpret(\n (Nucleon.machine as NucleonMachine<TData>).withConfig({\n services: {\n sendDelete: () => this._sendDelete(),\n sendPatch: ({ edits }) => this._sendPatch(edits!),\n sendPost: ({ edits }) => this._sendPost(edits!),\n sendGet: () => this._sendGet(),\n },\n\n actions: {\n validate: assign<Nucleon.Context<TData, string>, Nucleon.Event<TData>>({\n errors: context => {\n const rules = (this.constructor as typeof NucleonElement).v8n;\n const form = { ...context.data, ...context.edits };\n\n return rules\n .map(validate => validate(form, this))\n .filter(v8nResult => typeof v8nResult === 'string')\n .filter((err, errIndex, errs) => errs.indexOf(err) === errIndex) as string[];\n },\n }),\n },\n })\n );\n\n constructor() {\n super();\n this.__createService();\n }\n\n /**\n * If network request returns non-2XX code, the entire error response\n * will be available via this getter.\n *\n * This property is readonly. Changing failure records via this property is\n * not guaranteed to work. NucleonElement does not provide a way to override error status.\n *\n * @since 1.4.0\n */\n get failure(): Response | null {\n return this.__service.state?.context.failure ?? null;\n }\n\n /**\n * Array of validation errors returned from `NucleonElement.v8n` checks.\n *\n * This property is readonly. Adding or removing error codes via this property is\n * not guaranteed to work. NucleonElement does not provide a way to override validity status.\n */\n get errors(): string[] {\n return this.__service.state?.context.errors ?? [];\n }\n\n /**\n * Resource snapshot with edits applied. Empty object if unavailable.\n *\n * This property and its value are readonly. Assignments like `element.data.foo = 'bar'`\n * are not guaranteed to work. Please use `element.edit({ foo: 'bar' })` instead.\n * If you need to replace the entire data object, consider using `element.data`.\n */\n get form(): Partial<TData> {\n const { data, edits } = this.__service.state?.context ?? {};\n return { ...data, ...edits } as Partial<TData>;\n }\n\n /**\n * Resource snapshot as-is, no edits applied. Null if unavailable.\n *\n * Returned value is not reactive. Assignments like `element.data.foo = 'bar'`\n * are not guaranteed to work. Please set the property instead: `element.data = { ...element.data, foo: 'bar' }`.\n * If you're processing user input, consider using `element.form` and `element.edit()` instead.\n */\n get data(): TData | null {\n return this.__service.state?.context.data ?? null;\n }\n\n set data(data: TData | null) {\n this.__destroyRumour();\n this.__hrefToLoad = null;\n this.__service.send({ type: 'SET_DATA', data });\n if (data) this.__createRumour();\n }\n\n /**\n * Rumour group. Elements in different groups will not share updates. Empty by default.\n * @example element.group = 'my-group'\n */\n get group(): string {\n return this.__group;\n }\n\n set group(value: string) {\n this.__group = value;\n this.__destroyRumour();\n this.__createRumour();\n }\n\n /**\n * Optional URL of the resource to load. Switches element to `idle.template` state if empty (default).\n * @example element.href = 'https://demo.foxycart.com/s/customer/attributes/0'\n */\n get href(): string {\n return this.form._links?.self.href ?? this.__hrefToLoad ?? '';\n }\n\n set href(value: string) {\n this.__hrefToLoad = value;\n\n if (value) {\n this.__service.send({ type: 'FETCH' });\n } else {\n this.data = null;\n }\n }\n\n /**\n * Checks if this element is in the given state.\n * @example element.in({ idle: 'snapshot' })\n */\n in<TStateValue extends Nucleon.State<TData, string>['value']>(\n stateValue: TStateValue\n ): this is this & ComputedElementProperties<TData, TStateValue> {\n return !!this.__service.state?.matches(stateValue);\n }\n\n /**\n * Clears all edits and emits the `update` event.\n * @example element.undo()\n */\n undo(): void {\n this.__service.send({ type: 'UNDO' });\n }\n\n /**\n * Applies an edit to the local resource snapshot or its template and emits the `update` event.\n * @example element.edit({ first_name: 'Alex' })\n */\n edit(data: Partial<TData>): void {\n if (typeof data._links?.self.href === 'string') this.__hrefToLoad = null;\n this.__service.send({ type: 'EDIT', data });\n }\n\n /**\n * Submits the form, updating the resource if href isn't empty or creating it otherwise.\n * Emits multiple `update` events as element state changes. Has no effect on invalid forms.\n * @example element.submit()\n */\n submit(): void {\n this.reportValidity();\n this.__service.send({ type: 'SUBMIT' });\n }\n\n checkValidity(): boolean {\n const isTemplateDirtyValid = this.in({ idle: { template: { dirty: 'valid' } } });\n const isSnapshotDirtyValid = this.in({ idle: { snapshot: { dirty: 'valid' } } });\n const isTemplateCleanValid = this.in({ idle: { template: { clean: 'valid' } } });\n const isSnapshotCleanValid = this.in({ idle: { snapshot: { clean: 'valid' } } });\n const isTemplateValid = isTemplateCleanValid || isTemplateDirtyValid;\n const isSnapshotValid = isSnapshotCleanValid || isSnapshotDirtyValid;\n const isValid = isTemplateValid || isSnapshotValid;\n\n return isValid;\n }\n\n reportValidity(): boolean {\n const walker = this.ownerDocument.createTreeWalker(this.renderRoot, NodeFilter.SHOW_ELEMENT);\n\n do {\n type Input = Node & Record<string, () => unknown>;\n\n const node = walker.currentNode as Input;\n const methods = ['reportValidity', 'validate'];\n\n for (const method of methods) {\n if (method in node) {\n try {\n node[method]();\n break;\n } catch {\n continue;\n }\n }\n }\n } while (walker.nextNode());\n\n return this.checkValidity();\n }\n\n /**\n * Sends a DELETE request to `element.href` and clears local data on success.\n * Emits multiple update events as element state changes.\n * @example element.delete()\n */\n delete(): void {\n this.__service.send({ type: 'DELETE' });\n }\n\n /**\n * Fetches data from `element.href` in background, keeping the edits and v8n errors.\n * @example element.refresh()\n */\n refresh(): void {\n this.__service.send({ type: 'REFRESH' });\n }\n\n render(): TemplateResult {\n return html`<slot></slot>`;\n }\n\n /** @readonly */\n connectedCallback(): void {\n super.connectedCallback();\n if (this.href && !this.data) this.__service.send({ type: 'FETCH' });\n\n this.__createRumour();\n this.__createServer();\n this.__processFetchEventQueue();\n\n this.dispatchEvent(new UpdateEvent());\n }\n\n /** @readonly */\n disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this.__destroyRumour();\n this.__destroyServer();\n this.__flushFetchEventQueue('parent element was disconnected');\n\n this.dispatchEvent(new UpdateEvent());\n }\n\n applyInferredProperties(context: Map<string, unknown>): void {\n super.applyInferredProperties(context);\n\n if (this.infer === null) return;\n\n this.group = (context.get('group') as string | undefined) ?? '';\n this.lang = (context.get('lang') as string | undefined) ?? '';\n }\n\n /** Sends API request. Throws an error on non-2XX response. */\n protected async _fetch<TResult = TData>(...args: Parameters<Window['fetch']>): Promise<TResult> {\n const response = await new API(this).fetch(...args);\n if (!response.ok) throw response;\n return response.json();\n }\n\n /** POSTs to `element.parent`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendPost(edits: Partial<TData>): Promise<TData> {\n this.__destroyRumour();\n let data: TData;\n\n try {\n const body = JSON.stringify(edits);\n const postData = await this._fetch(this.parent, { body, method: 'POST' });\n data = await this._fetch(postData._links.self.href);\n\n const rumour = NucleonElement.Rumour(this.group);\n const related = [...this.related, this.parent];\n rumour.share({ data, related, source: data._links.self.href });\n } finally {\n this.__createRumour();\n }\n\n return data;\n }\n\n /** GETs `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendGet(): Promise<TData> {\n this.__destroyRumour();\n let data: TData;\n\n try {\n const lastEvent = this.__service.state.event.type;\n const headers = lastEvent === 'REFRESH' ? { 'cache-control': 'no-cache' } : void 0;\n data = await this._fetch(this.href, { headers });\n NucleonElement.Rumour(this.group).share({ data, source: this.href });\n } finally {\n this.__createRumour();\n }\n\n return data;\n }\n\n /** PATCHes `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendPatch(edits: Partial<TData>): Promise<TData> {\n this.__destroyRumour();\n let data: TData;\n\n try {\n const body = JSON.stringify(edits);\n data = await this._fetch(this.href, { body, method: 'PATCH' });\n\n const rumour = NucleonElement.Rumour(this.group);\n rumour.share({ data, source: this.href, related: this.related });\n } finally {\n this.__createRumour();\n }\n\n return data;\n }\n\n /** DELETEs `element.href`, shares response with the Rumour group and returns parsed JSON. */\n protected async _sendDelete(): Promise<null> {\n this.__destroyRumour();\n\n try {\n await this._fetch(this.href, { method: 'DELETE' });\n\n const rumour = NucleonElement.Rumour(this.group);\n const related = [...this.related, this.parent];\n rumour.share({ data: null, source: this.href, related });\n } finally {\n this.__createRumour();\n }\n\n return null;\n }\n\n // this getter is used by LitElement to set the \"state\" attribute\n private get __state(): string {\n const state = this.__service.state;\n const flags = state?.toStrings().reduce((p, c) => [...p, ...c.split('.')], [] as string[]);\n return [...new Set(flags ?? [])].join(' ');\n }\n\n private __createService() {\n this.__service.onTransition(state => {\n if (!state.changed) return;\n\n let result: UpdateResult | undefined = undefined;\n\n if (state.matches('idle') && state.context.errors.length === 0) {\n if (state.history?.matches({ busy: 'deleting' })) {\n result = UpdateResult.ResourceDeleted;\n } else if (state.history?.matches({ busy: 'creating' })) {\n result = UpdateResult.ResourceCreated;\n } else if (state.history?.matches({ busy: 'updating' })) {\n result = UpdateResult.ResourceUpdated;\n } else if (state.history?.matches({ busy: 'fetching' })) {\n result = UpdateResult.ResourceFetched;\n }\n }\n\n this.requestUpdate();\n this.dispatchEvent(new UpdateEvent('update', { detail: { result } }));\n\n if (!state.matches('busy')) this.__processFetchEventQueue();\n });\n\n this.__service.onChange(() => {\n this.requestUpdate();\n this.dispatchEvent(new UpdateEvent());\n });\n\n this.__service.start();\n }\n\n private __createRumour() {\n const rumour = NucleonElement.Rumour(this.group);\n this.__unsubscribeFromRumour = rumour.track(update => this.__handleRumourUpdate(update));\n }\n\n private __destroyRumour() {\n this.__unsubscribeFromRumour?.();\n this.__unsubscribeFromRumour = null;\n }\n\n private __createServer() {\n this.__fetchEventHandler = this.__handleFetchEvent.bind(this);\n this.addEventListener('fetch', this.__fetchEventHandler);\n }\n\n private __destroyServer() {\n this.removeEventListener('fetch', this.__fetchEventHandler);\n }\n\n private __handleRumourUpdate(update: (oldData: TData) => TData | null) {\n try {\n const oldData = this.__service.state?.context.data;\n const newData = oldData ? update(oldData) : oldData;\n\n if (newData !== oldData) {\n this.data = newData;\n\n if (!newData) {\n const result = UpdateResult.ResourceDeleted;\n const event = new UpdateEvent('update', { detail: { result } });\n this.dispatchEvent(event);\n }\n }\n } catch (err) {\n if (err instanceof Rumour.UpdateError) {\n setTimeout(() => this.refresh());\n } else {\n throw err;\n }\n }\n }\n\n private __processFetchEventQueue() {\n const api = new NucleonElement.API(this);\n\n this.__fetchEventQueue.forEach(event => {\n const request = event.request;\n\n if (this.virtualHost && request.url.startsWith(`foxy://${this.virtualHost}/form/`)) {\n return event.respondWith(internalServer(request, this));\n }\n\n let cacheResponsePromise: Promise<Response> | null = null;\n\n if (event.request.headers.get('cache-control') !== 'no-cache') {\n const cacheResponse = serveFromCache(request.url, this.data);\n if (cacheResponse.ok) {\n cacheResponsePromise = Promise.resolve(cacheResponse);\n console.debug(\n `%c@foxy.io/elements::${this.localName}\\n%c200%c GET ${request.url}`,\n 'color: gray',\n `background: gray; padding: 0 .2em; border-radius: .2em; color: white;`,\n ''\n );\n }\n }\n\n event.respondWith(Promise.resolve(cacheResponsePromise ?? api.fetch(request)));\n });\n\n this.__fetchEventQueue = [];\n }\n\n private __flushFetchEventQueue(errorMessage: string) {\n this.__fetchEventQueue.forEach(event => {\n event.respondWith(Promise.reject(new Error(errorMessage)));\n });\n\n this.__fetchEventQueue = [];\n }\n\n private __handleFetchEvent(event: Event) {\n if (!(event instanceof FetchEvent)) return;\n if (event.defaultPrevented) return;\n if (event.composedPath()[0] === this) return;\n\n const { url, method } = event.request;\n\n if (url.startsWith('foxy://')) {\n if (this.virtualHost && url.startsWith(`foxy://${this.virtualHost}/form/`)) {\n if (method !== 'GET') return event.respondWith(internalServer(event.request, this));\n } else {\n return;\n }\n }\n\n if (method === 'GET') {\n event.preventDefault();\n this.__fetchEventQueue.push(event);\n if (!this.__service.state?.matches('busy')) this.__processFetchEventQueue();\n }\n }\n}\n"]}
|
|
@@ -40,8 +40,6 @@ export class InternalUserInvitationFormAsyncAction extends InternalControl {
|
|
|
40
40
|
const api = new NucleonElement.API(this);
|
|
41
41
|
const response = await api.fetch((_a = this.href) !== null && _a !== void 0 ? _a : '', { method: 'POST' });
|
|
42
42
|
if (response.ok) {
|
|
43
|
-
// if we refresh right away, sometimes we get an old response from cache
|
|
44
|
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
45
43
|
(_b = this.nucleon) === null || _b === void 0 ? void 0 : _b.refresh();
|
|
46
44
|
this.__state = 'idle';
|
|
47
45
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InternalUserInvitationFormAsyncAction.js","sourceRoot":"","sources":["../../../../../../src/elements/public/UserInvitationForm/internal/InternalUserInvitationFormAsyncAction/InternalUserInvitationFormAsyncAction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,gEAA6D;AACvF,OAAO,EAAE,cAAc,EAAE,kDAA+C;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,MAAM,OAAO,qCAAsC,SAAQ,eAAe;IAA1E;;QAUE,UAAK,GAAkB,IAAI,CAAC;QAE5B,SAAI,GAAkB,IAAI,CAAC;QAEnB,YAAO,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"InternalUserInvitationFormAsyncAction.js","sourceRoot":"","sources":["../../../../../../src/elements/public/UserInvitationForm/internal/InternalUserInvitationFormAsyncAction/InternalUserInvitationFormAsyncAction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,gEAA6D;AACvF,OAAO,EAAE,cAAc,EAAE,kDAA+C;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,MAAM,OAAO,qCAAsC,SAAQ,eAAe;IAA1E;;QAUE,UAAK,GAAkB,IAAI,CAAC;QAE5B,SAAI,GAAkB,IAAI,CAAC;QAEnB,YAAO,GAAG,MAAM,CAAC;IAqC3B,CAAC;IAlDC,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,GAAG,KAAK,CAAC,UAAU;YACnB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACzB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACvB,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;SACvB,CAAC;IACJ,CAAC;IAQD,aAAa;QACX,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3B,MAAM,KAAK,GAAG,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAE9E,OAAO,IAAI,CAAA;;gBAEC,SAAS,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,KAAK,CAAC,CAAC;;oBAEtB,KAAK,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ;iBACpC,IAAI,CAAC,QAAQ;;yBAEL,KAAK;;KAEzB,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,QAAQ;;QACpB,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM;YAAE,OAAO;QAEpC,IAAI;YACF,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YAEtB,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,KAAK,OAAC,IAAI,CAAC,IAAI,mCAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAEtE,IAAI,QAAQ,CAAC,EAAE,EAAE;gBACf,MAAA,IAAI,CAAC,OAAO,0CAAE,OAAO,GAAG;gBACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;aACvB;iBAAM;gBACL,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;aACvB;SACF;QAAC,WAAM;YACN,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;SACvB;IACH,CAAC;CACF","sourcesContent":["import type { PropertyDeclarations, TemplateResult } from 'lit-element';\n\nimport { InternalControl } from '../../../../internal/InternalControl/InternalControl';\nimport { NucleonElement } from '../../../NucleonElement/NucleonElement';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { html } from 'lit-element';\n\nexport class InternalUserInvitationFormAsyncAction extends InternalControl {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n __state: { type: String },\n theme: { type: String },\n href: { type: String },\n };\n }\n\n theme: string | null = null;\n\n href: string | null = null;\n\n private __state = 'idle';\n\n renderControl(): TemplateResult {\n const state = this.__state;\n const theme = state === 'fail' ? 'error' : state === 'idle' ? this.theme : '';\n\n return html`\n <vaadin-button\n theme=${ifDefined(theme ?? void 0)}\n class=\"w-full\"\n ?disabled=${state === 'busy' || this.disabled}\n @click=${this.__submit}\n >\n <foxy-i18n key=${state} infer=\"\"></foxy-i18n>\n </vaadin-button>\n `;\n }\n\n private async __submit(): Promise<void> {\n if (this.__state === 'busy') return;\n\n try {\n this.__state = 'busy';\n\n const api = new NucleonElement.API(this);\n const response = await api.fetch(this.href ?? '', { method: 'POST' });\n\n if (response.ok) {\n this.nucleon?.refresh();\n this.__state = 'idle';\n } else {\n this.__state = 'fail';\n }\n } catch {\n this.__state = 'fail';\n }\n }\n}\n"]}
|