@foxy.io/elements 1.18.0-beta.2 → 1.18.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-api-browser.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-cancellation-form.js +1 -1
- package/dist/cdn/foxy-collection-page.js +1 -1
- package/dist/cdn/foxy-collection-pages.js +1 -1
- package/dist/cdn/foxy-copy-to-clipboard.js +1 -1
- package/dist/cdn/foxy-coupon-card.js +1 -1
- package/dist/cdn/foxy-coupon-code-form.js +1 -1
- package/dist/cdn/foxy-coupon-codes-form.js +1 -1
- package/dist/cdn/foxy-coupon-detail-card.js +1 -1
- package/dist/cdn/foxy-coupon-form.js +1 -1
- package/dist/cdn/foxy-custom-field-card.js +1 -1
- package/dist/cdn/foxy-custom-field-form.js +1 -1
- package/dist/cdn/foxy-customer-api.js +1 -1
- package/dist/cdn/foxy-customer-card.js +1 -1
- package/dist/cdn/foxy-customer-form.js +1 -1
- package/dist/cdn/foxy-customer-portal-settings.js +1 -1
- package/dist/cdn/foxy-customer-portal.js +2 -2
- package/dist/cdn/foxy-customer.js +6 -6
- package/dist/cdn/foxy-customers-table.js +1 -1
- package/dist/cdn/foxy-discount-builder.js +1 -1
- package/dist/cdn/foxy-discount-card.js +1 -1
- package/dist/cdn/foxy-discount-detail-card.js +1 -1
- package/dist/cdn/foxy-donation.js +1 -1
- package/dist/cdn/foxy-email-template-form.js +1 -1
- package/dist/cdn/foxy-error-entry-card.js +1 -1
- package/dist/cdn/foxy-form-dialog.js +1 -1
- package/dist/cdn/foxy-generate-codes-form.js +1 -1
- package/dist/cdn/foxy-gift-card-card.js +1 -1
- package/dist/cdn/foxy-gift-card-code-form.js +1 -1
- package/dist/cdn/foxy-gift-card-codes-form.js +1 -1
- package/dist/cdn/foxy-gift-card-form.js +1 -1
- package/dist/cdn/foxy-i18n.js +1 -1
- package/dist/cdn/foxy-item-card.js +1 -1
- package/dist/cdn/foxy-item-form.js +1 -1
- package/dist/cdn/foxy-item-option-card.js +1 -1
- package/dist/cdn/foxy-item-option-form.js +1 -1
- package/dist/cdn/foxy-items-form.js +1 -1
- package/dist/cdn/foxy-nucleon-element.js +1 -1
- package/dist/cdn/foxy-pagination.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-query-builder.js +1 -1
- package/dist/cdn/foxy-report-form.js +6 -6
- package/dist/cdn/foxy-reports-table.js +1 -1
- package/dist/cdn/foxy-shipment-card.js +1 -1
- package/dist/cdn/foxy-sign-in-form.js +1 -1
- package/dist/cdn/foxy-spinner.js +2 -2
- package/dist/cdn/foxy-store-shipping-method-form.js +4 -4
- package/dist/cdn/foxy-subscription-card.js +1 -1
- package/dist/cdn/foxy-subscription-form.js +3 -3
- 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-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-user-form.js +1 -1
- package/dist/cdn/foxy-users-table.js +1 -1
- package/dist/cdn/foxy-webhook-card.js +1 -1
- package/dist/cdn/foxy-webhook-form.js +5 -5
- package/dist/cdn/foxy-webhook-log-card.js +1 -1
- package/dist/cdn/foxy-webhook-status-card.js +1 -1
- package/dist/cdn/{shared-75e34b5b.js → shared-023c287a.js} +1 -1
- package/dist/cdn/{shared-8936b109.js → shared-084b6372.js} +1 -1
- package/dist/cdn/{shared-2caab7af.js → shared-11f0daea.js} +1 -1
- package/dist/cdn/{shared-48ef8a04.js → shared-189dfb49.js} +1 -1
- package/dist/cdn/{shared-2b077e01.js → shared-23fd456c.js} +3 -3
- package/dist/cdn/{shared-f966bbc3.js → shared-2ca6d676.js} +1 -1
- package/dist/cdn/{shared-da130124.js → shared-2f0efb2c.js} +1 -1
- package/dist/cdn/{shared-5652560a.js → shared-37b61010.js} +1 -1
- package/dist/cdn/{shared-d6ed2e5c.js → shared-381aa7fe.js} +1 -1
- package/dist/cdn/{shared-b772fbb1.js → shared-3a7cf739.js} +1 -1
- package/dist/cdn/{shared-fd001fd3.js → shared-3e3c07ac.js} +1 -1
- package/dist/cdn/{shared-4fc53390.js → shared-412670b8.js} +1 -1
- package/dist/cdn/{shared-dbdc2a38.js → shared-4560425c.js} +1 -1
- package/dist/cdn/{shared-2f186d21.js → shared-4773b634.js} +1 -1
- package/dist/cdn/{shared-e6a7b2f1.js → shared-4c0520f6.js} +1 -1
- package/dist/cdn/{shared-d673b138.js → shared-5482630e.js} +1 -1
- package/dist/cdn/{shared-6eeb69e7.js → shared-5e43b817.js} +1 -1
- package/dist/cdn/{shared-5f411ce2.js → shared-60c862aa.js} +1 -1
- package/dist/cdn/shared-619adfad.js +1 -0
- package/dist/cdn/{shared-e25c676a.js → shared-68ab037d.js} +1 -1
- package/dist/cdn/shared-6af95088.js +1 -0
- package/dist/cdn/shared-6ce2acfa.js +1 -0
- package/dist/cdn/{shared-8166ba00.js → shared-6f89d2e0.js} +1 -1
- package/dist/cdn/{shared-d539ee69.js → shared-71acf673.js} +1 -1
- package/dist/cdn/{shared-7ed7818e.js → shared-74a27421.js} +1 -1
- package/dist/cdn/{shared-59796faa.js → shared-80b90eec.js} +1 -1
- package/dist/cdn/{shared-30bb4828.js → shared-85d45495.js} +1 -1
- package/dist/cdn/{shared-b52c7edf.js → shared-872ceacf.js} +2 -2
- package/dist/cdn/{shared-12f8034b.js → shared-901ca702.js} +1 -1
- package/dist/cdn/{shared-c13674cb.js → shared-91b86bae.js} +1 -1
- package/dist/cdn/shared-9b392ba8.js +1 -0
- package/dist/cdn/{shared-1bbd9b73.js → shared-9be1a70f.js} +1 -1
- package/dist/cdn/{shared-29dd9d87.js → shared-9ef13805.js} +1 -1
- package/dist/cdn/{shared-6c1aab74.js → shared-9ef81b37.js} +1 -1
- package/dist/cdn/{shared-40689cd2.js → shared-a2a1193d.js} +1 -1
- package/dist/cdn/{shared-d6dd67a5.js → shared-a48a9dfc.js} +1 -1
- package/dist/cdn/{shared-17331dc5.js → shared-c0fb5a33.js} +1 -1
- package/dist/cdn/{shared-c5a638d1.js → shared-c63ba384.js} +1 -1
- package/dist/cdn/{shared-32b15545.js → shared-c7280a24.js} +1 -1
- package/dist/cdn/{shared-58a35351.js → shared-c7c8d1b6.js} +1 -1
- package/dist/cdn/{shared-fadcb2e1.js → shared-ca0f14c1.js} +1 -1
- package/dist/cdn/{shared-4473f0cf.js → shared-d91ed0a8.js} +1 -1
- package/dist/cdn/{shared-95f4cffd.js → shared-daa454bf.js} +1 -1
- package/dist/cdn/{shared-4f8fe424.js → shared-ec7cfc23.js} +2 -2
- package/dist/cdn/{shared-824f6e03.js → shared-f2639daf.js} +1 -1
- package/dist/cdn/{shared-33b47806.js → shared-f31044b8.js} +3 -3
- package/dist/cdn/{shared-2f19b670.js → shared-fcbf9a41.js} +1 -1
- package/dist/cdn/{shared-9f9cdbb0.js → shared-fd595d0a.js} +1 -1
- package/dist/cdn/{shared-a64ead08.js → shared-fe68657a.js} +1 -1
- package/dist/cdn/{shared-e06de519.js → shared-ff1d9854.js} +1 -1
- package/dist/cdn/translations/store-shipping-method-form/en.json +8 -1
- package/dist/elements/internal/InternalAsyncComboBoxControl/InternalAsyncComboBoxControl.js +5 -2
- package/dist/elements/internal/InternalAsyncComboBoxControl/InternalAsyncComboBoxControl.js.map +1 -1
- package/dist/elements/public/NucleonElement/NucleonElement.d.ts +2 -1
- package/dist/elements/public/NucleonElement/NucleonElement.js +12 -10
- package/dist/elements/public/NucleonElement/NucleonElement.js.map +1 -1
- package/dist/elements/public/StoreShippingMethodForm/StoreShippingMethodForm.d.ts +2 -2
- package/dist/elements/public/StoreShippingMethodForm/StoreShippingMethodForm.js +78 -28
- package/dist/elements/public/StoreShippingMethodForm/StoreShippingMethodForm.js.map +1 -1
- package/dist/elements/public/index.d.ts +0 -1
- package/dist/elements/public/index.defined.d.ts +0 -1
- package/dist/elements/public/index.defined.js +0 -1
- package/dist/elements/public/index.defined.js.map +1 -1
- package/dist/elements/public/index.js +0 -1
- package/dist/elements/public/index.js.map +1 -1
- package/dist/mixins/configurable.js +16 -8
- package/dist/mixins/configurable.js.map +1 -1
- package/dist/mixins/inferrable.js +25 -23
- package/dist/mixins/inferrable.js.map +1 -1
- package/dist/mixins/themeable.js +0 -16
- package/dist/mixins/themeable.js.map +1 -1
- package/package.json +1 -1
- package/dist/cdn/foxy-store-shipping-method-card.js +0 -1
- package/dist/cdn/shared-0b9c755c.js +0 -1
- package/dist/cdn/shared-16d10bca.js +0 -1
- package/dist/cdn/shared-89dce718.js +0 -1
- package/dist/cdn/shared-fcdc4903.js +0 -1
- package/dist/cdn/translations/store-shipping-method-card/en.json +0 -15
- package/dist/elements/public/StoreShippingMethodCard/StoreShippingMethodCard.d.ts +0 -16
- package/dist/elements/public/StoreShippingMethodCard/StoreShippingMethodCard.js +0 -60
- package/dist/elements/public/StoreShippingMethodCard/StoreShippingMethodCard.js.map +0 -1
- package/dist/elements/public/StoreShippingMethodCard/index.d.ts +0 -6
- package/dist/elements/public/StoreShippingMethodCard/index.js +0 -8
- package/dist/elements/public/StoreShippingMethodCard/index.js.map +0 -1
- package/dist/elements/public/StoreShippingMethodCard/types.d.ts +0 -5
- package/dist/elements/public/StoreShippingMethodCard/types.js +0 -2
- package/dist/elements/public/StoreShippingMethodCard/types.js.map +0 -1
|
@@ -64,6 +64,7 @@ export class InternalAsyncComboBoxControl extends InternalEditableControl {
|
|
|
64
64
|
.selectedItem=${this.selectedItem}
|
|
65
65
|
.value=${this._value}
|
|
66
66
|
@change=${(evt) => {
|
|
67
|
+
evt.stopPropagation();
|
|
67
68
|
const comboBox = evt.currentTarget;
|
|
68
69
|
this._value = comboBox.value;
|
|
69
70
|
if (this._value === comboBox.value) {
|
|
@@ -83,8 +84,10 @@ export class InternalAsyncComboBoxControl extends InternalEditableControl {
|
|
|
83
84
|
if (changes.has('first')) {
|
|
84
85
|
const comboBox = this.renderRoot.querySelector('vaadin-combo-box');
|
|
85
86
|
// this forces reload
|
|
86
|
-
comboBox
|
|
87
|
-
|
|
87
|
+
if (comboBox) {
|
|
88
|
+
comboBox.size = 0;
|
|
89
|
+
comboBox.size = 1;
|
|
90
|
+
}
|
|
88
91
|
}
|
|
89
92
|
}
|
|
90
93
|
get _value() {
|
package/dist/elements/internal/InternalAsyncComboBoxControl/InternalAsyncComboBoxControl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InternalAsyncComboBoxControl.js","sourceRoot":"","sources":["../../../../src/elements/internal/InternalAsyncComboBoxControl/InternalAsyncComboBoxControl.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,uBAAuB,EAAE,8DAA2D;AAC7F,OAAO,EAAE,GAAG,EAAE,2CAAwC;AAEtD;;;;;;GAMG;AACH,MAAM,OAAO,4BAA6B,SAAQ,uBAAuB;IAAzE;;QAWE,sEAAsE;QACtE,kBAAa,GAAkB,IAAI,CAAC;QAEpC,sEAAsE;QACtE,kBAAa,GAAkB,IAAI,CAAC;QAEpC,iBAAY,GAAsC,SAAS,CAAC;QAE5D,kFAAkF;QAClF,UAAK,GAAkB,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"InternalAsyncComboBoxControl.js","sourceRoot":"","sources":["../../../../src/elements/internal/InternalAsyncComboBoxControl/InternalAsyncComboBoxControl.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ComboBoxDataProvider, ComboBoxElement, ComboBoxItem } from '@vaadin/vaadin-combo-box';\nimport type { TemplateResult } from 'lit-html';\n\nimport { PropertyDeclarations } from 'lit-element';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { html } from 'lit-html';\n\nimport { InternalEditableControl } from '../InternalEditableControl/InternalEditableControl';\nimport { API } from '../../public/NucleonElement/API';\n\n/**\n * Internal control displaying a combo box where items are loaded from\n * a hAPI collection.\n *\n * @since 1.17.0\n * @element foxy-internal-async-combo-box-control\n */\nexport class InternalAsyncComboBoxControl extends InternalEditableControl {\n static get properties(): PropertyDeclarations {\n return {\n ...super.properties,\n itemLabelPath: { type: String, attribute: 'item-label-path' },\n itemValuePath: { type: String, attribute: 'item-value-path' },\n selectedItem: { attribute: false },\n first: { type: String },\n };\n }\n\n /** Same as `itemLabelPath` property of Vaadin's `ComboBoxElement`. */\n itemLabelPath: string | null = null;\n\n /** Same as `itemValuePath` property of Vaadin's `ComboBoxElement`. */\n itemValuePath: string | null = null;\n\n selectedItem: ComboBoxItem | string | undefined = undefined;\n\n /** URL of the first page of the hAPI collection serving as a source for items. */\n first: string | null = null;\n\n renderControl(): TemplateResult {\n const dataProvider: ComboBoxDataProvider = async (params, callback) => {\n if (!this.first) return callback([], 0);\n\n const url = new URL(this.first);\n url.searchParams.set('offset', String(params.page * params.pageSize));\n url.searchParams.set('limit', String(params.pageSize));\n\n if (params.filter && this.itemLabelPath) {\n url.searchParams.set(this.itemLabelPath, `*${params.filter}*`);\n }\n\n const response = await new API(this).fetch(url.toString());\n if (!response.ok) throw new Error(await response.text());\n\n const json = await response.json();\n const items = Array.from(Object.values(json._embedded))[0] as unknown[];\n\n callback(items, json.total_items);\n };\n\n return html`\n <vaadin-combo-box\n item-value-path=${ifDefined(this.itemValuePath ?? undefined)}\n item-label-path=${ifDefined(this.itemLabelPath ?? undefined)}\n error-message=${ifDefined(this._errorMessage)}\n item-id-path=\"_links.self.href\"\n helper-text=${this.helperText}\n placeholder=${this.placeholder}\n label=${this.label}\n class=\"w-full\"\n ?disabled=${this.disabled}\n ?readonly=${this.readonly}\n .checkValidity=${this._checkValidity}\n .dataProvider=${dataProvider}\n .selectedItem=${this.selectedItem}\n .value=${this._value}\n @change=${(evt: CustomEvent) => {\n evt.stopPropagation();\n\n const comboBox = evt.currentTarget as ComboBoxElement;\n this._value = comboBox.value;\n\n if (this._value === comboBox.value) {\n this.selectedItem = comboBox.selectedItem;\n this.dispatchEvent(new CustomEvent('selected-item-changed'));\n } else {\n comboBox.value = this._value;\n }\n }}\n >\n </vaadin-combo-box>\n `;\n }\n\n updated(changes: Map<keyof this, unknown>): void {\n super.updated(changes);\n\n if (changes.has('first')) {\n const comboBox = this.renderRoot.querySelector<ComboBoxElement>('vaadin-combo-box');\n\n // this forces reload\n if (comboBox) {\n comboBox.size = 0;\n comboBox.size = 1;\n }\n }\n }\n\n protected get _value(): string {\n return (super._value as string | undefined) ?? '';\n }\n\n protected set _value(newValue: string) {\n super._value = newValue as unknown | undefined;\n }\n}\n"]}
|
|
@@ -67,6 +67,7 @@ export declare class NucleonElement<TData extends HALJSONResource> extends Nucle
|
|
|
67
67
|
private __fetchEventHandler;
|
|
68
68
|
private __fetchEventQueue;
|
|
69
69
|
private readonly __service;
|
|
70
|
+
constructor();
|
|
70
71
|
/**
|
|
71
72
|
* If network request returns non-2XX code, the entire error response
|
|
72
73
|
* will be available via this getter.
|
|
@@ -160,8 +161,8 @@ export declare class NucleonElement<TData extends HALJSONResource> extends Nucle
|
|
|
160
161
|
protected _sendPatch(edits: Partial<TData>): Promise<TData>;
|
|
161
162
|
/** DELETEs `element.href`, shares response with the Rumour group and returns parsed JSON. */
|
|
162
163
|
protected _sendDelete(): Promise<TData>;
|
|
164
|
+
private get __state();
|
|
163
165
|
private __createService;
|
|
164
|
-
private __destroyService;
|
|
165
166
|
private __createRumour;
|
|
166
167
|
private __destroyRumour;
|
|
167
168
|
private __createServer;
|
|
@@ -18,7 +18,7 @@ import { InferrableMixin } from "../../../mixins/inferrable.js";
|
|
|
18
18
|
*/
|
|
19
19
|
export class NucleonElement extends InferrableMixin(LitElement) {
|
|
20
20
|
constructor() {
|
|
21
|
-
super(
|
|
21
|
+
super();
|
|
22
22
|
/**
|
|
23
23
|
* Optional ISO 639-1 code describing the language element content is written in.
|
|
24
24
|
* Changing the `lang` attribute will update the value of this property.
|
|
@@ -57,6 +57,8 @@ export class NucleonElement extends InferrableMixin(LitElement) {
|
|
|
57
57
|
}),
|
|
58
58
|
},
|
|
59
59
|
}));
|
|
60
|
+
this.__createService();
|
|
61
|
+
this.__createRumour();
|
|
60
62
|
}
|
|
61
63
|
static get inferredProperties() {
|
|
62
64
|
return [...super.inferredProperties, 'group', 'lang'];
|
|
@@ -64,6 +66,7 @@ export class NucleonElement extends InferrableMixin(LitElement) {
|
|
|
64
66
|
/** @readonly */
|
|
65
67
|
static get properties() {
|
|
66
68
|
return {
|
|
69
|
+
__state: { type: String, reflect: true, attribute: 'state' },
|
|
67
70
|
related: { type: Array },
|
|
68
71
|
parent: { type: String },
|
|
69
72
|
group: { type: String, noAccessor: true },
|
|
@@ -201,16 +204,14 @@ export class NucleonElement extends InferrableMixin(LitElement) {
|
|
|
201
204
|
/** @readonly */
|
|
202
205
|
connectedCallback() {
|
|
203
206
|
super.connectedCallback();
|
|
204
|
-
this.
|
|
205
|
-
|
|
207
|
+
if (this.href)
|
|
208
|
+
this.refresh();
|
|
206
209
|
this.__createServer();
|
|
207
210
|
this.__processFetchEventQueue();
|
|
208
211
|
}
|
|
209
212
|
/** @readonly */
|
|
210
213
|
disconnectedCallback() {
|
|
211
214
|
super.disconnectedCallback();
|
|
212
|
-
this.__destroyService();
|
|
213
|
-
this.__destroyRumour();
|
|
214
215
|
this.__destroyServer();
|
|
215
216
|
this.__flushFetchEventQueue('parent element was disconnected');
|
|
216
217
|
}
|
|
@@ -269,12 +270,16 @@ export class NucleonElement extends InferrableMixin(LitElement) {
|
|
|
269
270
|
this.__createRumour();
|
|
270
271
|
return data;
|
|
271
272
|
}
|
|
273
|
+
// this getter is used by LitElement to set the "state" attribute
|
|
274
|
+
get __state() {
|
|
275
|
+
const state = this.__service.state;
|
|
276
|
+
const flags = state.toStrings().reduce((p, c) => [...p, ...c.split('.')], []);
|
|
277
|
+
return [...new Set(flags)].join(' ');
|
|
278
|
+
}
|
|
272
279
|
__createService() {
|
|
273
280
|
this.__service.onTransition(state => {
|
|
274
281
|
if (!state.changed)
|
|
275
282
|
return;
|
|
276
|
-
const flags = state.toStrings().reduce((p, c) => [...p, ...c.split('.')], []);
|
|
277
|
-
this.setAttribute('state', [...new Set(flags)].join(' '));
|
|
278
283
|
this.requestUpdate();
|
|
279
284
|
this.dispatchEvent(new UpdateEvent());
|
|
280
285
|
if (!state.matches('busy'))
|
|
@@ -286,9 +291,6 @@ export class NucleonElement extends InferrableMixin(LitElement) {
|
|
|
286
291
|
});
|
|
287
292
|
this.__service.start();
|
|
288
293
|
}
|
|
289
|
-
__destroyService() {
|
|
290
|
-
this.__service.stop();
|
|
291
|
-
}
|
|
292
294
|
__createRumour() {
|
|
293
295
|
const rumour = NucleonElement.Rumour(this.group);
|
|
294
296
|
this.__unsubscribeFromRumour = rumour.track(update => this.__handleRumourUpdate(update));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NucleonElement.js","sourceRoot":"","sources":["../../../../src/elements/public/NucleonElement/NucleonElement.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAwB,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE3C,OAAO,EAAE,GAAG,EAAE,iBAAc;AAC5B,OAAO,EAAE,UAAU,EAAE,wBAAqB;AAC1C,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAC5C,OAAO,OAAO,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,4BAAyB;AAClD,OAAO,EAAE,eAAe,EAAE,sCAAmC;AAE7D;;;;;;;;GAQG;AACH,MAAM,OAAO,cAA8C,SAAQ,eAAe,CAAC,UAAU,CAAC;IAA9F;;QAgDE;;;WAGG;QACH,SAAI,GAAG,EAAE,CAAC;QAEV;;;WAGG;QACH,WAAM,GAAG,EAAE,CAAC;QAEZ;;;WAGG;QACH,YAAO,GAAa,EAAE,CAAC;QAEf,WAAM,GAAG,EAAE,CAAC;QAEZ,YAAO,GAAG,EAAE,CAAC;QAMb,sBAAiB,GAAiB,EAAE,CAAC;QAE5B,cAAS,GAAG,SAAS,CACnC,OAAO,CAAC,OAAiC,CAAC,UAAU,CAAC;YACpD,QAAQ,EAAE;gBACR,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE;gBACpC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAM,CAAC;gBACjD,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAM,CAAC;gBAC/C,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;aAC/B;YAED,OAAO,EAAE;gBACP,QAAQ,EAAE,MAAM,CAAuD;oBACrE,MAAM,EAAE,OAAO,CAAC,EAAE;wBAChB,MAAM,KAAK,GAAI,IAAI,CAAC,WAAqC,CAAC,GAAG,CAAC;wBAC9D,MAAM,IAAI,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;wBAEnD,OAAO,KAAK;6BACT,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;6BAC/B,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,SAAS,KAAK,QAAQ,CAAC;6BAClD,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAa,CAAC;oBACjF,CAAC;iBACF,CAAC;aACH;SACF,CAAC,CACH,CAAC;IA2UJ,CAAC;IAtZC,MAAM,KAAK,kBAAkB;QAC3B,OAAO,CAAC,GAAG,KAAK,CAAC,kBAAkB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAED,gBAAgB;IAChB,MAAM,KAAK,UAAU;QACnB,OAAO;YACL,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE;YACxB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;YACxB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;YACzC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE;YACxC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;SACvB,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,MAAM,KAAK,GAAG;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IAuDD;;;;;;;;OAQG;IACH,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;IAC9C,CAAC;IAED;;;;;OAKG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;IAC7C,CAAC;IAED;;;;;;OAMG;IACH,IAAI,IAAI;QACN,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC;QACrD,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAoB,CAAC;IACjD,CAAC;IAED;;;;;;OAMG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3C,CAAC;IAED,IAAI,IAAI,CAAC,IAAkB;;QACzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,SAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,CAAC,IAAI,CAAC,IAAI,mCAAI,EAAE,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,KAAK,CAAC,KAAa;QACrB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,IAAI,IAAI,CAAC,KAAa;QACpB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;SACxC;aAAM;YACL,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;SACvD;IACH,CAAC;IAED;;;OAGG;IACH,EAAE,CACA,UAAuB;QAEvB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,IAAI;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,IAAoB;QACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,MAAM;QACJ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,gBAAgB;IAChB,iBAAiB;QACf,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAE1B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,wBAAwB,EAAE,CAAC;IAClC,CAAC;IAED,gBAAgB;IAChB,oBAAoB;QAClB,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAE7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,sBAAsB,CAAC,iCAAiC,CAAC,CAAC;IACjE,CAAC;IAED,uBAAuB,CAAC,OAA6B;;QACnD,KAAK,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;YAAE,OAAO;QAEhC,IAAI,CAAC,KAAK,SAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAwB,mCAAI,EAAE,CAAC;QAChE,IAAI,CAAC,IAAI,SAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAwB,mCAAI,EAAE,CAAC;IAChE,CAAC;IAED,8DAA8D;IACpD,KAAK,CAAC,MAAM,CAAkB,GAAG,IAAiC;QAC1E,MAAM,QAAQ,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,QAAQ,CAAC;QACjC,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,gGAAgG;IACtF,KAAK,CAAC,SAAS,CAAC,KAAqB;QAC7C,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAE/C,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0FAA0F;IAChF,KAAK,CAAC,QAAQ;QACtB,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjD,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6FAA6F;IACnF,KAAK,CAAC,UAAU,CAAC,KAAqB;QAC9C,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjD,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6FAA6F;IACnF,KAAK,CAAC,WAAW;QACzB,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAE/C,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;YAClC,IAAI,CAAC,KAAK,CAAC,OAAO;gBAAE,OAAO;YAE3B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAc,CAAC,CAAC;YAC1F,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAE1D,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;YAEtC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE;YAC3B,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAEO,cAAc;QACpB,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3F,CAAC;IAEO,eAAe;;QACrB,MAAA,IAAI,CAAC,uBAAuB,+CAA5B,IAAI,EAA6B;IACnC,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC3D,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC9D,CAAC;IAEO,oBAAoB,CAAC,MAAwC;;QACnE,IAAI;YACF,MAAM,OAAO,SAAG,IAAI,CAAC,SAAS,CAAC,KAAK,0CAAE,OAAO,CAAC,IAAI,CAAC;YACnD,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAChC,IAAI,OAAO,KAAK,OAAO;gBAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;SACnF;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,YAAY,MAAM,CAAC,WAAW,EAAE;gBACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;aAC1C;iBAAM;gBACL,MAAM,GAAG,CAAC;aACX;SACF;IACH,CAAC;IAEO,wBAAwB;QAC9B,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEzC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7D,MAAM,iBAAiB,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAEhF,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAEtD,IAAI,aAAa,CAAC,EAAE,EAAE;gBACpB,OAAO,CAAC,KAAK,CACX,wBAAwB,IAAI,CAAC,SAAS,iBAAiB,OAAO,CAAC,GAAG,EAAE,EACpE,aAAa,EACb,uEAAuE,EACvE,EAAE,CACH,CAAC;aACH;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;IAC9B,CAAC;IAEO,sBAAsB,CAAC,YAAoB;QACjD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;IAC9B,CAAC;IAEO,kBAAkB,CAAC,KAAY;QACrC,IAAI,CAAC,CAAC,KAAK,YAAY,UAAU,CAAC;YAAE,OAAO;QAC3C,IAAI,KAAK,CAAC,gBAAgB;YAAE,OAAO;QACnC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK;YAAE,OAAO;QAC3C,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO;QACpD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,OAAO;QAE7C,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACxD,CAAC;;AA5aD;;;;;GAKG;AACa,0BAAW,GAAG,WAAW,CAAC;AAE1C;;;;;GAKG;AACa,qBAAM,GAAG,OAAO,CAA4B,GAAG,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;AAEhF;;;;GAIG;AACa,kBAAG,GAAG,GAAG,CAAC","sourcesContent":["import { ComputedElementProperties, HALJSONResource, NucleonMachine, NucleonV8N } from './types';\nimport { LitElement, PropertyDeclarations } 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 } from './UpdateEvent';\nimport memoize from 'lodash-es/memoize';\nimport { serveFromCache } from './serveFromCache';\nimport { InferrableMixin } from '../../../mixins/inferrable';\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 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> {\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 private __href = '';\n\n private __group = '';\n\n private __unsubscribeFromRumour!: () => void;\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))\n .filter(v8nResult => typeof v8nResult === 'string')\n .filter((err, errIndex, errs) => errs.indexOf(err) === errIndex) as string[];\n },\n }),\n },\n })\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;\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;\n }\n\n set data(data: TData | null) {\n this.__service.send({ type: 'SET_DATA', data });\n this.__href = data?._links.self.href ?? '';\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.__href;\n }\n\n set href(value: string) {\n this.__href = value;\n\n if (value) {\n this.__service.send({ type: 'FETCH' });\n } else {\n this.__service.send({ type: 'SET_DATA', 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 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.__service.send({ type: 'SUBMIT' });\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 /** @readonly */\n connectedCallback(): void {\n super.connectedCallback();\n\n this.__createService();\n this.__createRumour();\n this.__createServer();\n this.__processFetchEventQueue();\n }\n\n /** @readonly */\n disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this.__destroyService();\n this.__destroyRumour();\n this.__destroyServer();\n this.__flushFetchEventQueue('parent element was disconnected');\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\n const body = JSON.stringify(edits);\n const data = await this._fetch(this.parent, { body, method: 'POST' });\n const rumour = NucleonElement.Rumour(this.group);\n const related = [...this.related, this.parent];\n\n rumour.share({ data, related, source: data._links.self.href });\n this.__createRumour();\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\n const data = await this._fetch(this.href);\n const rumour = NucleonElement.Rumour(this.group);\n\n rumour.share({ data, source: this.href });\n this.__createRumour();\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\n const body = JSON.stringify(edits);\n const data = await this._fetch(this.href, { body, method: 'PATCH' });\n const rumour = NucleonElement.Rumour(this.group);\n\n rumour.share({ data, source: this.href, related: this.related });\n this.__createRumour();\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<TData> {\n this.__destroyRumour();\n\n const data = await this._fetch(this.href, { method: 'DELETE' });\n const rumour = NucleonElement.Rumour(this.group);\n const related = [...this.related, this.parent];\n\n rumour.share({ data: null, source: this.href, related });\n this.__createRumour();\n\n return data;\n }\n\n private __createService() {\n this.__service.onTransition(state => {\n if (!state.changed) return;\n\n const flags = state.toStrings().reduce((p, c) => [...p, ...c.split('.')], [] as string[]);\n this.setAttribute('state', [...new Set(flags)].join(' '));\n\n this.requestUpdate();\n this.dispatchEvent(new UpdateEvent());\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 __destroyService() {\n this.__service.stop();\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 }\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 if (!oldData) return;\n\n const newData = update(oldData);\n if (newData !== oldData) this.__service.send({ data: newData, type: 'SET_DATA' });\n } catch (err) {\n if (err instanceof Rumour.UpdateError) {\n this.__service.send({ type: '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 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.request.method !== 'GET') return;\n if (event.request.url.startsWith('foxy://')) return;\n if (event.composedPath()[0] === this) return;\n\n event.preventDefault();\n this.__fetchEventQueue.push(event);\n\n if (!this.in('busy')) this.__processFetchEventQueue();\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 { LitElement, PropertyDeclarations } 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 } from './UpdateEvent';\nimport memoize from 'lodash-es/memoize';\nimport { serveFromCache } from './serveFromCache';\nimport { InferrableMixin } from '../../../mixins/inferrable';\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 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> {\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 private __href = '';\n\n private __group = '';\n\n private __unsubscribeFromRumour!: () => void;\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))\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 this.__createRumour();\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;\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;\n }\n\n set data(data: TData | null) {\n this.__service.send({ type: 'SET_DATA', data });\n this.__href = data?._links.self.href ?? '';\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.__href;\n }\n\n set href(value: string) {\n this.__href = value;\n\n if (value) {\n this.__service.send({ type: 'FETCH' });\n } else {\n this.__service.send({ type: 'SET_DATA', 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 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.__service.send({ type: 'SUBMIT' });\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 /** @readonly */\n connectedCallback(): void {\n super.connectedCallback();\n if (this.href) this.refresh();\n\n this.__createServer();\n this.__processFetchEventQueue();\n }\n\n /** @readonly */\n disconnectedCallback(): void {\n super.disconnectedCallback();\n\n this.__destroyServer();\n this.__flushFetchEventQueue('parent element was disconnected');\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\n const body = JSON.stringify(edits);\n const data = await this._fetch(this.parent, { body, method: 'POST' });\n const rumour = NucleonElement.Rumour(this.group);\n const related = [...this.related, this.parent];\n\n rumour.share({ data, related, source: data._links.self.href });\n this.__createRumour();\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\n const data = await this._fetch(this.href);\n const rumour = NucleonElement.Rumour(this.group);\n\n rumour.share({ data, source: this.href });\n this.__createRumour();\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\n const body = JSON.stringify(edits);\n const data = await this._fetch(this.href, { body, method: 'PATCH' });\n const rumour = NucleonElement.Rumour(this.group);\n\n rumour.share({ data, source: this.href, related: this.related });\n this.__createRumour();\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<TData> {\n this.__destroyRumour();\n\n const data = await this._fetch(this.href, { method: 'DELETE' });\n const rumour = NucleonElement.Rumour(this.group);\n const related = [...this.related, this.parent];\n\n rumour.share({ data: null, source: this.href, related });\n this.__createRumour();\n\n return data;\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 this.requestUpdate();\n this.dispatchEvent(new UpdateEvent());\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 }\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 if (!oldData) return;\n\n const newData = update(oldData);\n if (newData !== oldData) this.__service.send({ data: newData, type: 'SET_DATA' });\n } catch (err) {\n if (err instanceof Rumour.UpdateError) {\n this.__service.send({ type: '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 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.request.method !== 'GET') return;\n if (event.request.url.startsWith('foxy://')) return;\n if (event.composedPath()[0] === this) return;\n\n event.preventDefault();\n this.__fetchEventQueue.push(event);\n\n if (!this.in('busy')) this.__processFetchEventQueue();\n }\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { TemplateResult } from 'lit-html';
|
|
2
2
|
import type { NucleonV8N } from '../NucleonElement/types';
|
|
3
3
|
import type { Data } from './types';
|
|
4
|
+
import { BooleanSelector } from '@foxy.io/sdk/core';
|
|
4
5
|
import { InternalForm } from '../../internal/InternalForm/InternalForm';
|
|
5
6
|
declare const Base: typeof InternalForm & import("lit-element").Constructor<import("../../../mixins/translatable").TranslatableMixinHost> & {
|
|
6
7
|
defaultNS: string;
|
|
@@ -18,8 +19,7 @@ export declare class StoreShippingMethodForm extends Base<Data> {
|
|
|
18
19
|
private __destinations;
|
|
19
20
|
private __getDestinations;
|
|
20
21
|
private __setDestinations;
|
|
22
|
+
get hiddenSelector(): BooleanSelector;
|
|
21
23
|
renderBody(): TemplateResult;
|
|
22
|
-
private __renderCustomCodeMethodLayout;
|
|
23
|
-
private __renderGenericMethodLayout;
|
|
24
24
|
}
|
|
25
25
|
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { TranslatableMixin } from "../../../mixins/translatable.js";
|
|
2
|
+
import { BooleanSelector } from '@foxy.io/sdk/core';
|
|
2
3
|
import { InternalForm } from "../../internal/InternalForm/InternalForm.js";
|
|
3
4
|
import { ifDefined } from 'lit-html/directives/if-defined';
|
|
4
5
|
import { html } from 'lit-html';
|
|
@@ -61,17 +62,75 @@ export class StoreShippingMethodForm extends Base {
|
|
|
61
62
|
({ meter_number: v }) => !v || v.length <= 50 || 'meter-number:too_long',
|
|
62
63
|
({ authentication_key: v }) => !v || v.length <= 50 || 'authentication-key:too_long',
|
|
63
64
|
({ custom_code: v }) => !v || getKbSize(v) <= 64 || 'custom-code:too_long',
|
|
65
|
+
form => {
|
|
66
|
+
var _a;
|
|
67
|
+
if (((_a = form._embedded) === null || _a === void 0 ? void 0 : _a['fx:shipping_method'].code) === 'CUSTOM-ENDPOINT-POST') {
|
|
68
|
+
return (form.accountid && isURL(form.accountid)) || 'endpoint:required';
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
form => {
|
|
75
|
+
var _a;
|
|
76
|
+
const url = form.shipping_container_uri;
|
|
77
|
+
const code = (_a = form._embedded) === null || _a === void 0 ? void 0 : _a['fx:shipping_method'].code;
|
|
78
|
+
const codes = ['USPS', 'FedEx', 'UPS'];
|
|
79
|
+
if (code && codes.includes(code)) {
|
|
80
|
+
return (url && isURL(url)) || 'shipping-container-uri:required';
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
form => {
|
|
87
|
+
var _a;
|
|
88
|
+
const url = form.shipping_drop_type_uri;
|
|
89
|
+
const code = (_a = form._embedded) === null || _a === void 0 ? void 0 : _a['fx:shipping_method'].code;
|
|
90
|
+
const codes = ['FedEx', 'UPS'];
|
|
91
|
+
if (code && codes.includes(code)) {
|
|
92
|
+
return (url && isURL(url)) || 'shipping-drop-type-uri:required';
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
},
|
|
64
98
|
];
|
|
65
99
|
}
|
|
100
|
+
get hiddenSelector() {
|
|
101
|
+
var _a;
|
|
102
|
+
const code = (_a = this.form._embedded) === null || _a === void 0 ? void 0 : _a['fx:shipping_method'].code;
|
|
103
|
+
if (!code)
|
|
104
|
+
return new BooleanSelector('not=shipping-method-uri,timestamps,create,delete');
|
|
105
|
+
const orgControls = ['shipping-container-uri', 'shipping-drop-type-uri', 'destinations'];
|
|
106
|
+
const authControls = ['authentication-key', 'meter-number', 'accountid', 'password'];
|
|
107
|
+
const codeToControls = {
|
|
108
|
+
'CUSTOM-ENDPOINT-POST': ['endpoint'],
|
|
109
|
+
'CUSTOM-CODE': ['custom-code'],
|
|
110
|
+
'CUSTOM': ['destinations', 'services'],
|
|
111
|
+
'FedEx': [...orgControls, ...authControls, 'services'],
|
|
112
|
+
'USPS': [...orgControls, 'services'],
|
|
113
|
+
'UPS': [...orgControls, ...authControls, 'services'],
|
|
114
|
+
};
|
|
115
|
+
if (codeToControls[code]) {
|
|
116
|
+
const controls = codeToControls[code];
|
|
117
|
+
const set = ['shipping-method-uri', ...controls, 'timestamps', 'delete', 'create'];
|
|
118
|
+
return new BooleanSelector(`not=${set.join()} ${super.hiddenSelector}`);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
return super.hiddenSelector;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
66
124
|
renderBody() {
|
|
67
|
-
var _a, _b, _c, _d;
|
|
125
|
+
var _a, _b, _c, _d, _e, _f;
|
|
126
|
+
const method = (_a = this.form._embedded) === null || _a === void 0 ? void 0 : _a['fx:shipping_method'];
|
|
68
127
|
return html `
|
|
69
128
|
<foxy-internal-async-combo-box-control
|
|
70
129
|
item-value-path="_links.self.href"
|
|
71
130
|
item-label-path="name"
|
|
72
|
-
first=${ifDefined((
|
|
131
|
+
first=${ifDefined((_b = this.shippingMethods) !== null && _b !== void 0 ? _b : (_c = this.form._links) === null || _c === void 0 ? void 0 : _c['fx:shipping_methods'].href)}
|
|
73
132
|
infer="shipping-method-uri"
|
|
74
|
-
.selectedItem=${(
|
|
133
|
+
.selectedItem=${(_d = this.form._embedded) === null || _d === void 0 ? void 0 : _d['fx:shipping_method']}
|
|
75
134
|
@selected-item-changed=${(evt) => {
|
|
76
135
|
const { selectedItem } = evt.currentTarget;
|
|
77
136
|
const newEmbeds = { 'fx:shipping_method': selectedItem };
|
|
@@ -83,27 +142,13 @@ export class StoreShippingMethodForm extends Base {
|
|
|
83
142
|
}}
|
|
84
143
|
>
|
|
85
144
|
</foxy-internal-async-combo-box-control>
|
|
86
|
-
|
|
87
|
-
? this.__renderCustomCodeMethodLayout()
|
|
88
|
-
: this.__renderGenericMethodLayout()}
|
|
89
|
-
${super.renderBody()}
|
|
90
|
-
`;
|
|
91
|
-
}
|
|
92
|
-
__renderCustomCodeMethodLayout() {
|
|
93
|
-
return html `
|
|
94
|
-
<foxy-internal-text-area-control infer="custom-code"></foxy-internal-text-area-control>
|
|
95
|
-
`;
|
|
96
|
-
}
|
|
97
|
-
__renderGenericMethodLayout() {
|
|
98
|
-
var _a, _b, _c;
|
|
99
|
-
const method = (_a = this.form._embedded) === null || _a === void 0 ? void 0 : _a['fx:shipping_method'];
|
|
100
|
-
return html `
|
|
145
|
+
|
|
101
146
|
<foxy-internal-async-combo-box-control
|
|
102
147
|
item-value-path="_links.self.href"
|
|
103
148
|
item-label-path="name"
|
|
104
149
|
first=${ifDefined(method === null || method === void 0 ? void 0 : method._links['fx:shipping_containers'].href)}
|
|
105
150
|
infer="shipping-container-uri"
|
|
106
|
-
.selectedItem=${(
|
|
151
|
+
.selectedItem=${(_e = this.form._embedded) === null || _e === void 0 ? void 0 : _e['fx:shipping_container']}
|
|
107
152
|
@selected-item-changed=${(evt) => {
|
|
108
153
|
const { selectedItem } = evt.currentTarget;
|
|
109
154
|
const newEmbeds = { ...this.form._embedded, 'fx:shipping_container': selectedItem };
|
|
@@ -117,7 +162,7 @@ export class StoreShippingMethodForm extends Base {
|
|
|
117
162
|
item-label-path="name"
|
|
118
163
|
first=${ifDefined(method === null || method === void 0 ? void 0 : method._links['fx:shipping_drop_types'].href)}
|
|
119
164
|
infer="shipping-drop-type-uri"
|
|
120
|
-
.selectedItem=${(
|
|
165
|
+
.selectedItem=${(_f = this.form._embedded) === null || _f === void 0 ? void 0 : _f['fx:shipping_drop_type']}
|
|
121
166
|
@selected-item-changed=${(evt) => {
|
|
122
167
|
const { selectedItem } = evt.currentTarget;
|
|
123
168
|
const newEmbeds = { ...this.form._embedded, 'fx:shipping_drop_type': selectedItem };
|
|
@@ -134,17 +179,22 @@ export class StoreShippingMethodForm extends Base {
|
|
|
134
179
|
>
|
|
135
180
|
</foxy-internal-checkbox-group-control>
|
|
136
181
|
|
|
137
|
-
<foxy-internal-text-control infer="authentication-key"
|
|
182
|
+
<foxy-internal-text-control infer="authentication-key"> </foxy-internal-text-control>
|
|
138
183
|
<foxy-internal-text-control infer="meter-number"></foxy-internal-text-control>
|
|
139
|
-
|
|
184
|
+
|
|
185
|
+
<foxy-internal-text-control
|
|
186
|
+
infer=${(method === null || method === void 0 ? void 0 : method.code) === 'CUSTOM-ENDPOINT-POST' ? 'endpoint' : 'accountid'}
|
|
187
|
+
property="accountid"
|
|
188
|
+
>
|
|
189
|
+
</foxy-internal-text-control>
|
|
190
|
+
|
|
140
191
|
<foxy-internal-text-control infer="password"></foxy-internal-text-control>
|
|
192
|
+
<foxy-internal-text-area-control infer="custom-code"></foxy-internal-text-area-control>
|
|
141
193
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
`
|
|
147
|
-
: ''}
|
|
194
|
+
<foxy-internal-store-shipping-method-form-services-control infer="services">
|
|
195
|
+
</foxy-internal-store-shipping-method-form-services-control>
|
|
196
|
+
|
|
197
|
+
${super.renderBody()}
|
|
148
198
|
`;
|
|
149
199
|
}
|
|
150
200
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoreShippingMethodForm.js","sourceRoot":"","sources":["../../../../src/elements/public/StoreShippingMethodForm/StoreShippingMethodForm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InternalAsyncComboBoxControl } from '../../internal/InternalAsyncComboBoxControl/InternalAsyncComboBoxControl';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\nimport type { Data } from './types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { html } from 'lit-html';\n\nconst NS = 'store-shipping-method-form';\nconst Base = TranslatableMixin(InternalForm, NS);\nconst getKbSize = (value: string) => new Blob([value]).size / 1024;\nconst isURL = (value: string) => {\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * Form element for creating and editing store shipping methods (`fx:store_shipping_method`).\n *\n * @element foxy-store-shipping-method-form\n * @since 1.18.0\n */\nexport class StoreShippingMethodForm extends Base<Data> {\n static get properties(): typeof Base['properties'] {\n return {\n ...super.properties,\n shippingMethods: { type: String, attribute: 'shipping-methods' },\n };\n }\n\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ shipping_method_uri: v }) => (v && isURL(v)) || 'shipping-method-uri:required',\n ({ accountid: v }) => !v || v.length <= 50 || 'accountid:too_long',\n ({ password: v }) => !v || v.length <= 50 || 'password:too_long',\n ({ meter_number: v }) => !v || v.length <= 50 || 'meter-number:too_long',\n ({ authentication_key: v }) => !v || v.length <= 50 || 'authentication-key:too_long',\n ({ custom_code: v }) => !v || getKbSize(v) <= 64 || 'custom-code:too_long',\n ];\n }\n\n shippingMethods: string | null = null;\n\n private __destinations = [\n { value: 'domestic', label: 'domestic' },\n { value: 'international', label: 'international' },\n ];\n\n private __getDestinations = () => {\n const value: string[] = [];\n if (this.form.use_for_domestic) value.push('domestic');\n if (this.form.use_for_international) value.push('international');\n return value;\n };\n\n private __setDestinations = (newValue: string[]) => {\n this.edit({\n // TODO remove error directive after SDK types are fixed\n // @ts-expect-error SDK types are wrong\n use_for_domestic: newValue.includes('domestic'),\n\n // TODO remove error directive after SDK types are fixed\n // @ts-expect-error SDK types are wrong\n use_for_international: newValue.includes('international'),\n });\n };\n\n renderBody(): TemplateResult {\n return html`\n <foxy-internal-async-combo-box-control\n item-value-path=\"_links.self.href\"\n item-label-path=\"name\"\n first=${ifDefined(this.shippingMethods ?? this.form._links?.['fx:shipping_methods'].href)}\n infer=\"shipping-method-uri\"\n .selectedItem=${this.form._embedded?.['fx:shipping_method']}\n @selected-item-changed=${(evt: CustomEvent) => {\n const { selectedItem } = evt.currentTarget as InternalAsyncComboBoxControl;\n const newEmbeds = { 'fx:shipping_method': selectedItem };\n\n this.edit({\n _embedded: newEmbeds as Data['_embedded'],\n shipping_container_uri: '',\n shipping_drop_type_uri: '',\n });\n }}\n >\n </foxy-internal-async-combo-box-control>\n ${this.form._embedded?.['fx:shipping_method'].code === 'CUSTOM-CODE'\n ? this.__renderCustomCodeMethodLayout()\n : this.__renderGenericMethodLayout()}\n ${super.renderBody()}\n `;\n }\n\n private __renderCustomCodeMethodLayout() {\n return html`\n <foxy-internal-text-area-control infer=\"custom-code\"></foxy-internal-text-area-control>\n `;\n }\n\n private __renderGenericMethodLayout() {\n const method = this.form._embedded?.['fx:shipping_method'];\n\n return html`\n <foxy-internal-async-combo-box-control\n item-value-path=\"_links.self.href\"\n item-label-path=\"name\"\n first=${ifDefined(method?._links['fx:shipping_containers'].href)}\n infer=\"shipping-container-uri\"\n .selectedItem=${this.form._embedded?.['fx:shipping_container']}\n @selected-item-changed=${(evt: CustomEvent) => {\n const { selectedItem } = evt.currentTarget as InternalAsyncComboBoxControl;\n const newEmbeds = { ...this.form._embedded, 'fx:shipping_container': selectedItem };\n this.edit({ _embedded: newEmbeds as Data['_embedded'] });\n }}\n >\n </foxy-internal-async-combo-box-control>\n\n <foxy-internal-async-combo-box-control\n item-value-path=\"_links.self.href\"\n item-label-path=\"name\"\n first=${ifDefined(method?._links['fx:shipping_drop_types'].href)}\n infer=\"shipping-drop-type-uri\"\n .selectedItem=${this.form._embedded?.['fx:shipping_drop_type']}\n @selected-item-changed=${(evt: CustomEvent) => {\n const { selectedItem } = evt.currentTarget as InternalAsyncComboBoxControl;\n const newEmbeds = { ...this.form._embedded, 'fx:shipping_drop_type': selectedItem };\n this.edit({ _embedded: newEmbeds as Data['_embedded'] });\n }}\n >\n </foxy-internal-async-combo-box-control>\n\n <foxy-internal-checkbox-group-control\n infer=\"destinations\"\n .getValue=${this.__getDestinations}\n .setValue=${this.__setDestinations}\n .options=${this.__destinations}\n >\n </foxy-internal-checkbox-group-control>\n\n <foxy-internal-text-control infer=\"authentication-key\"></foxy-internal-text-control>\n <foxy-internal-text-control infer=\"meter-number\"></foxy-internal-text-control>\n <foxy-internal-text-control infer=\"accountid\"></foxy-internal-text-control>\n <foxy-internal-text-control infer=\"password\"></foxy-internal-text-control>\n\n ${this.data && this.data.shipping_method_uri === this.form.shipping_method_uri\n ? html`\n <foxy-internal-store-shipping-method-form-services-control infer=\"services\">\n </foxy-internal-store-shipping-method-form-services-control>\n `\n : ''}\n `;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"StoreShippingMethodForm.js","sourceRoot":"","sources":["../../../../src/elements/public/StoreShippingMethodForm/StoreShippingMethodForm.ts"],"names":[],"mappings":"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","sourcesContent":["import type { InternalAsyncComboBoxControl } from '../../internal/InternalAsyncComboBoxControl/InternalAsyncComboBoxControl';\nimport type { TemplateResult } from 'lit-html';\nimport type { NucleonV8N } from '../NucleonElement/types';\nimport type { Data } from './types';\n\nimport { TranslatableMixin } from '../../../mixins/translatable';\nimport { BooleanSelector } from '@foxy.io/sdk/core';\nimport { InternalForm } from '../../internal/InternalForm/InternalForm';\nimport { ifDefined } from 'lit-html/directives/if-defined';\nimport { html } from 'lit-html';\n\nconst NS = 'store-shipping-method-form';\nconst Base = TranslatableMixin(InternalForm, NS);\nconst getKbSize = (value: string) => new Blob([value]).size / 1024;\nconst isURL = (value: string) => {\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * Form element for creating and editing store shipping methods (`fx:store_shipping_method`).\n *\n * @element foxy-store-shipping-method-form\n * @since 1.18.0\n */\nexport class StoreShippingMethodForm extends Base<Data> {\n static get properties(): typeof Base['properties'] {\n return {\n ...super.properties,\n shippingMethods: { type: String, attribute: 'shipping-methods' },\n };\n }\n\n static get v8n(): NucleonV8N<Data> {\n return [\n ({ shipping_method_uri: v }) => (v && isURL(v)) || 'shipping-method-uri:required',\n ({ accountid: v }) => !v || v.length <= 50 || 'accountid:too_long',\n ({ password: v }) => !v || v.length <= 50 || 'password:too_long',\n ({ meter_number: v }) => !v || v.length <= 50 || 'meter-number:too_long',\n ({ authentication_key: v }) => !v || v.length <= 50 || 'authentication-key:too_long',\n ({ custom_code: v }) => !v || getKbSize(v) <= 64 || 'custom-code:too_long',\n\n form => {\n if (form._embedded?.['fx:shipping_method'].code === 'CUSTOM-ENDPOINT-POST') {\n return (form.accountid && isURL(form.accountid)) || 'endpoint:required';\n } else {\n return true;\n }\n },\n\n form => {\n const url = form.shipping_container_uri;\n const code = form._embedded?.['fx:shipping_method'].code;\n const codes = ['USPS', 'FedEx', 'UPS'];\n\n if (code && codes.includes(code)) {\n return (url && isURL(url)) || 'shipping-container-uri:required';\n } else {\n return true;\n }\n },\n\n form => {\n const url = form.shipping_drop_type_uri;\n const code = form._embedded?.['fx:shipping_method'].code;\n const codes = ['FedEx', 'UPS'];\n\n if (code && codes.includes(code)) {\n return (url && isURL(url)) || 'shipping-drop-type-uri:required';\n } else {\n return true;\n }\n },\n ];\n }\n\n shippingMethods: string | null = null;\n\n private __destinations = [\n { value: 'domestic', label: 'domestic' },\n { value: 'international', label: 'international' },\n ];\n\n private __getDestinations = () => {\n const value: string[] = [];\n if (this.form.use_for_domestic) value.push('domestic');\n if (this.form.use_for_international) value.push('international');\n return value;\n };\n\n private __setDestinations = (newValue: string[]) => {\n this.edit({\n // TODO remove error directive after SDK types are fixed\n // @ts-expect-error SDK types are wrong\n use_for_domestic: newValue.includes('domestic'),\n\n // TODO remove error directive after SDK types are fixed\n // @ts-expect-error SDK types are wrong\n use_for_international: newValue.includes('international'),\n });\n };\n\n get hiddenSelector(): BooleanSelector {\n const code = this.form._embedded?.['fx:shipping_method'].code;\n if (!code) return new BooleanSelector('not=shipping-method-uri,timestamps,create,delete');\n\n const orgControls = ['shipping-container-uri', 'shipping-drop-type-uri', 'destinations'];\n const authControls = ['authentication-key', 'meter-number', 'accountid', 'password'];\n const codeToControls: Record<string, string[]> = {\n 'CUSTOM-ENDPOINT-POST': ['endpoint'],\n 'CUSTOM-CODE': ['custom-code'],\n 'CUSTOM': ['destinations', 'services'],\n 'FedEx': [...orgControls, ...authControls, 'services'],\n 'USPS': [...orgControls, 'services'],\n 'UPS': [...orgControls, ...authControls, 'services'],\n };\n\n if (codeToControls[code]) {\n const controls = codeToControls[code];\n const set = ['shipping-method-uri', ...controls, 'timestamps', 'delete', 'create'];\n return new BooleanSelector(`not=${set.join()} ${super.hiddenSelector}`);\n } else {\n return super.hiddenSelector;\n }\n }\n\n renderBody(): TemplateResult {\n const method = this.form._embedded?.['fx:shipping_method'];\n\n return html`\n <foxy-internal-async-combo-box-control\n item-value-path=\"_links.self.href\"\n item-label-path=\"name\"\n first=${ifDefined(this.shippingMethods ?? this.form._links?.['fx:shipping_methods'].href)}\n infer=\"shipping-method-uri\"\n .selectedItem=${this.form._embedded?.['fx:shipping_method']}\n @selected-item-changed=${(evt: CustomEvent) => {\n const { selectedItem } = evt.currentTarget as InternalAsyncComboBoxControl;\n const newEmbeds = { 'fx:shipping_method': selectedItem };\n\n this.edit({\n _embedded: newEmbeds as Data['_embedded'],\n shipping_container_uri: '',\n shipping_drop_type_uri: '',\n });\n }}\n >\n </foxy-internal-async-combo-box-control>\n\n <foxy-internal-async-combo-box-control\n item-value-path=\"_links.self.href\"\n item-label-path=\"name\"\n first=${ifDefined(method?._links['fx:shipping_containers'].href)}\n infer=\"shipping-container-uri\"\n .selectedItem=${this.form._embedded?.['fx:shipping_container']}\n @selected-item-changed=${(evt: CustomEvent) => {\n const { selectedItem } = evt.currentTarget as InternalAsyncComboBoxControl;\n const newEmbeds = { ...this.form._embedded, 'fx:shipping_container': selectedItem };\n this.edit({ _embedded: newEmbeds as Data['_embedded'] });\n }}\n >\n </foxy-internal-async-combo-box-control>\n\n <foxy-internal-async-combo-box-control\n item-value-path=\"_links.self.href\"\n item-label-path=\"name\"\n first=${ifDefined(method?._links['fx:shipping_drop_types'].href)}\n infer=\"shipping-drop-type-uri\"\n .selectedItem=${this.form._embedded?.['fx:shipping_drop_type']}\n @selected-item-changed=${(evt: CustomEvent) => {\n const { selectedItem } = evt.currentTarget as InternalAsyncComboBoxControl;\n const newEmbeds = { ...this.form._embedded, 'fx:shipping_drop_type': selectedItem };\n this.edit({ _embedded: newEmbeds as Data['_embedded'] });\n }}\n >\n </foxy-internal-async-combo-box-control>\n\n <foxy-internal-checkbox-group-control\n infer=\"destinations\"\n .getValue=${this.__getDestinations}\n .setValue=${this.__setDestinations}\n .options=${this.__destinations}\n >\n </foxy-internal-checkbox-group-control>\n\n <foxy-internal-text-control infer=\"authentication-key\"> </foxy-internal-text-control>\n <foxy-internal-text-control infer=\"meter-number\"></foxy-internal-text-control>\n\n <foxy-internal-text-control\n infer=${method?.code === 'CUSTOM-ENDPOINT-POST' ? 'endpoint' : 'accountid'}\n property=\"accountid\"\n >\n </foxy-internal-text-control>\n\n <foxy-internal-text-control infer=\"password\"></foxy-internal-text-control>\n <foxy-internal-text-area-control infer=\"custom-code\"></foxy-internal-text-area-control>\n\n <foxy-internal-store-shipping-method-form-services-control infer=\"services\">\n </foxy-internal-store-shipping-method-form-services-control>\n\n ${super.renderBody()}\n `;\n }\n}\n"]}
|
|
@@ -51,7 +51,6 @@ export { PaymentMethodCard } from './PaymentMethodCard/PaymentMethodCard';
|
|
|
51
51
|
export { QueryBuilder } from './QueryBuilder/QueryBuilder';
|
|
52
52
|
export { SignInForm } from './SignInForm/SignInForm';
|
|
53
53
|
export { Spinner } from './Spinner/Spinner';
|
|
54
|
-
export { StoreShippingMethodCard } from './StoreShippingMethodCard/StoreShippingMethodCard';
|
|
55
54
|
export { StoreShippingMethodForm } from './StoreShippingMethodForm/StoreShippingMethodForm';
|
|
56
55
|
export { SubscriptionCard } from './SubscriptionCard/SubscriptionCard';
|
|
57
56
|
export { SubscriptionForm } from './SubscriptionForm/SubscriptionForm';
|
|
@@ -51,7 +51,6 @@ export { PaymentMethodCard } from './PaymentMethodCard/index';
|
|
|
51
51
|
export { QueryBuilder } from './QueryBuilder/index';
|
|
52
52
|
export { SignInForm } from './SignInForm/index';
|
|
53
53
|
export { Spinner } from './Spinner/index';
|
|
54
|
-
export { StoreShippingMethodCard } from './StoreShippingMethodCard/index';
|
|
55
54
|
export { StoreShippingMethodForm } from './StoreShippingMethodForm/index';
|
|
56
55
|
export { SubscriptionCard } from './SubscriptionCard/index';
|
|
57
56
|
export { SubscriptionForm } from './SubscriptionForm/index';
|
|
@@ -51,7 +51,6 @@ export { PaymentMethodCard } from "./PaymentMethodCard/index.js";
|
|
|
51
51
|
export { QueryBuilder } from "./QueryBuilder/index.js";
|
|
52
52
|
export { SignInForm } from "./SignInForm/index.js";
|
|
53
53
|
export { Spinner } from "./Spinner/index.js";
|
|
54
|
-
export { StoreShippingMethodCard } from "./StoreShippingMethodCard/index.js";
|
|
55
54
|
export { StoreShippingMethodForm } from "./StoreShippingMethodForm/index.js";
|
|
56
55
|
export { SubscriptionCard } from "./SubscriptionCard/index.js";
|
|
57
56
|
export { SubscriptionForm } from "./SubscriptionForm/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.defined.js","sourceRoot":"","sources":["../../../src/elements/public/index.defined.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,sCAAmC;AAChE,OAAO,EAAE,WAAW,EAAE,+BAA4B;AAClD,OAAO,EAAE,WAAW,EAAE,+BAA4B;AAClD,OAAO,EAAE,UAAU,EAAE,8BAA2B;AAChD,OAAO,EAAE,cAAc,EAAE,kCAA+B;AACxD,OAAO,EAAE,aAAa,EAAE,iCAA8B;AACtD,OAAO,EAAE,aAAa,EAAE,iCAA8B;AACtD,OAAO,EAAE,gBAAgB,EAAE,oCAAiC;AAC5D,OAAO,EAAE,cAAc,EAAE,kCAA+B;AACxD,OAAO,EAAE,eAAe,EAAE,mCAAgC;AAC1D,OAAO,EAAE,eAAe,EAAE,mCAAgC;AAC1D,OAAO,EAAE,UAAU,EAAE,8BAA2B;AAChD,OAAO,EAAE,cAAc,EAAE,kCAA+B;AACxD,OAAO,EAAE,eAAe,EAAE,mCAAgC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,oCAAiC;AAC5D,OAAO,EAAE,UAAU,EAAE,8BAA2B;AAChD,OAAO,EAAE,QAAQ,EAAE,4BAAyB;AAC5C,OAAO,EAAE,WAAW,EAAE,+BAA4B;AAClD,OAAO,EAAE,YAAY,EAAE,gCAA6B;AACpD,OAAO,EAAE,YAAY,EAAE,gCAA6B;AACpD,OAAO,EAAE,cAAc,EAAE,kCAA+B;AACxD,OAAO,EAAE,sBAAsB,EAAE,0CAAuC;AACxE,OAAO,EAAE,cAAc,EAAE,kCAA+B;AACxD,OAAO,EAAE,eAAe,EAAE,mCAAgC;AAC1D,OAAO,EAAE,eAAe,EAAE,mCAAgC;AAC1D,OAAO,EAAE,eAAe,EAAE,mCAAgC;AAC1D,OAAO,EAAE,YAAY,EAAE,gCAA6B;AACpD,OAAO,EAAE,kBAAkB,EAAE,sCAAmC;AAChE,OAAO,EAAE,UAAU,EAAE,8BAA2B;AAChD,OAAO,EAAE,YAAY,EAAE,gCAA6B;AACpD,OAAO,EAAE,QAAQ,EAAE,4BAAyB;AAC5C,OAAO,EAAE,iBAAiB,EAAE,qCAAkC;AAC9D,OAAO,EAAE,cAAc,EAAE,kCAA+B;AACxD,OAAO,EAAE,UAAU,EAAE,8BAA2B;AAChD,OAAO,EAAE,iBAAiB,EAAE,qCAAkC;AAC9D,OAAO,EAAE,YAAY,EAAE,gCAA6B;AACpD,OAAO,EAAE,gBAAgB,EAAE,oCAAiC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,qCAAkC;AAC9D,OAAO,EAAE,YAAY,EAAE,gCAA6B;AACpD,OAAO,EAAE,IAAI,EAAE,wBAAqB;AACpC,OAAO,EAAE,QAAQ,EAAE,4BAAyB;AAC5C,OAAO,EAAE,QAAQ,EAAE,4BAAyB;AAC5C,OAAO,EAAE,cAAc,EAAE,kCAA+B;AACxD,OAAO,EAAE,cAAc,EAAE,kCAA+B;AACxD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,6BAA0B;AACpD,OAAO,EAAE,cAAc,EAAE,kCAA+B;AACxD,OAAO,EAAE,UAAU,EAAE,8BAA2B;AAChD,OAAO,EAAE,WAAW,EAAE,+BAA4B;AAClD,OAAO,EAAE,YAAY,EAAE,gCAA6B;AACpD,OAAO,EAAE,iBAAiB,EAAE,qCAAkC;AAC9D,OAAO,EAAE,YAAY,EAAE,gCAA6B;AACpD,OAAO,EAAE,UAAU,EAAE,8BAA2B;AAChD,OAAO,EAAE,OAAO,EAAE,2BAAwB;AAC1C,OAAO,EAAE,uBAAuB,EAAE,2CAAwC;AAC1E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.defined.js","sourceRoot":"","sources":["../../../src/elements/public/index.defined.ts"],"names":[],"mappings":"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","sourcesContent":["export { AccessRecoveryForm } from './AccessRecoveryForm/index';\nexport { AddressCard } from './AddressCard/index';\nexport { AddressForm } from './AddressForm/index';\nexport { ApiBrowser } from './ApiBrowser/index';\nexport { AppliedTaxCard } from './AppliedTaxCard/index';\nexport { AttributeCard } from './AttributeCard/index';\nexport { AttributeForm } from './AttributeForm/index';\nexport { CancellationForm } from './CancellationForm/index';\nexport { CollectionPage } from './CollectionPage/index';\nexport { CollectionPages } from './CollectionPages/index';\nexport { CopyToClipboard } from './CopyToClipboard/index';\nexport { CouponCard } from './CouponCard/index';\nexport { CouponCodeForm } from './CouponCodeForm/index';\nexport { CouponCodesForm } from './CouponCodesForm/index';\nexport { CouponDetailCard } from './CouponDetailCard/index';\nexport { CouponForm } from './CouponForm/index';\nexport { Customer } from './Customer/index';\nexport { CustomerApi } from './CustomerApi/index';\nexport { CustomerCard } from './CustomerCard/index';\nexport { CustomerForm } from './CustomerForm/index';\nexport { CustomerPortal } from './CustomerPortal/index';\nexport { CustomerPortalSettings } from './CustomerPortalSettings/index';\nexport { CustomersTable } from './CustomersTable/index';\nexport { CustomFieldCard } from './CustomFieldCard/index';\nexport { CustomFieldForm } from './CustomFieldForm/index';\nexport { DiscountBuilder } from './DiscountBuilder/index';\nexport { DiscountCard } from './DiscountCard/index';\nexport { DiscountDetailCard } from './DiscountDetailCard/index';\nexport { ReportForm } from './ReportForm/index';\nexport { ReportsTable } from './ReportsTable/index';\nexport { Donation } from './Donation/index';\nexport { EmailTemplateForm } from './EmailTemplateForm/index';\nexport { ErrorEntryCard } from './ErrorEntryCard/index';\nexport { FormDialog } from './FormDialog/index';\nexport { GenerateCodesForm } from './GenerateCodesForm/index';\nexport { GiftCardCard } from './GiftCardCard/index';\nexport { GiftCardCodeForm } from './GiftCardCodeForm/index';\nexport { GiftCardCodesForm } from './GiftCardCodesForm/index';\nexport { GiftCardForm } from './GiftCardForm/index';\nexport { I18n } from './I18n/index';\nexport { ItemCard } from './ItemCard/index';\nexport { ItemForm } from './ItemForm/index';\nexport { ItemOptionCard } from './ItemOptionCard/index';\nexport { ItemOptionForm } from './ItemOptionForm/index';\nexport { ItemsForm, Item } from './ItemsForm/index';\nexport { NucleonElement } from './NucleonElement/index';\nexport { Pagination } from './Pagination/index';\nexport { PaymentCard } from './PaymentCard/index';\nexport { ShipmentCard } from './ShipmentCard/index';\nexport { PaymentMethodCard } from './PaymentMethodCard/index';\nexport { QueryBuilder } from './QueryBuilder/index';\nexport { SignInForm } from './SignInForm/index';\nexport { Spinner } from './Spinner/index';\nexport { StoreShippingMethodForm } from './StoreShippingMethodForm/index';\nexport { SubscriptionCard } from './SubscriptionCard/index';\nexport { SubscriptionForm } from './SubscriptionForm/index';\nexport { SubscriptionsTable } from './SubscriptionsTable/index';\nexport { SwipeActions } from './SwipeActions/index';\nexport { Table } from './Table/index';\nexport { TaxCard } from './TaxCard/index';\nexport { TaxForm } from './TaxForm/index';\nexport { TemplateConfigForm } from './TemplateConfigForm/index';\nexport { TemplateForm } from './TemplateForm/index';\nexport { TransactionCard } from './TransactionCard/index';\nexport { Transaction } from './Transaction/index';\nexport { TransactionsTable } from './TransactionsTable/index';\nexport { UserForm } from './UserForm/index';\nexport { UsersTable } from './UsersTable/index';\nexport { WebhookCard } from './WebhookCard/index';\nexport { WebhookForm } from './WebhookForm/index';\nexport { WebhookLogCard } from './WebhookLogCard/index';\nexport { WebhookStatusCard } from './WebhookStatusCard/index';\n"]}
|
|
@@ -51,7 +51,6 @@ export { PaymentMethodCard } from "./PaymentMethodCard/PaymentMethodCard.js";
|
|
|
51
51
|
export { QueryBuilder } from "./QueryBuilder/QueryBuilder.js";
|
|
52
52
|
export { SignInForm } from "./SignInForm/SignInForm.js";
|
|
53
53
|
export { Spinner } from "./Spinner/Spinner.js";
|
|
54
|
-
export { StoreShippingMethodCard } from "./StoreShippingMethodCard/StoreShippingMethodCard.js";
|
|
55
54
|
export { StoreShippingMethodForm } from "./StoreShippingMethodForm/StoreShippingMethodForm.js";
|
|
56
55
|
export { SubscriptionCard } from "./SubscriptionCard/SubscriptionCard.js";
|
|
57
56
|
export { SubscriptionForm } from "./SubscriptionForm/SubscriptionForm.js";
|