@descope/sdk-mixins 0.21.0 → 0.23.0

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.
Files changed (37) hide show
  1. package/dist/cjs/index.js +2 -0
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/mixins/flowInputMixin/flowInputMixin.js +58 -0
  4. package/dist/cjs/mixins/flowInputMixin/flowInputMixin.js.map +1 -0
  5. package/dist/esm/index.js +1 -0
  6. package/dist/esm/index.js.map +1 -1
  7. package/dist/esm/mixins/flowInputMixin/flowInputMixin.js +56 -0
  8. package/dist/esm/mixins/flowInputMixin/flowInputMixin.js.map +1 -0
  9. package/dist/index.d.ts +675 -215
  10. package/dist/types/index.d.ts +1 -0
  11. package/dist/types/mixins/configMixin/configMixin.d.ts +14 -14
  12. package/dist/types/mixins/createStateManagementMixin.d.ts +2 -2
  13. package/dist/types/mixins/createValidateAttributesMixin/createValidateAttributesMixin.d.ts +5 -5
  14. package/dist/types/mixins/cspNonceMixin.d.ts +5 -5
  15. package/dist/types/mixins/debuggerMixin/debugger-wc.d.ts +5 -5
  16. package/dist/types/mixins/debuggerMixin/debuggerMixin.d.ts +8 -8
  17. package/dist/types/mixins/descopeUiMixin/descopeUiMixin.d.ts +19 -19
  18. package/dist/types/mixins/fetchWidgetPagesMixin/createFetchWidgetPagesMixin.d.ts +15 -15
  19. package/dist/types/mixins/flowInputMixin/flowInputMixin.d.ts +460 -0
  20. package/dist/types/mixins/flowInputMixin/index.d.ts +1 -0
  21. package/dist/types/mixins/formMixin.d.ts +2 -2
  22. package/dist/types/mixins/initElementMixin.d.ts +5 -5
  23. package/dist/types/mixins/initLifecycleMixin.d.ts +1 -1
  24. package/dist/types/mixins/injectNpmLibMixin/injectNpmLibMixin.d.ts +2 -2
  25. package/dist/types/mixins/injectStyleMixin.d.ts +5 -5
  26. package/dist/types/mixins/loggerMixin/loggerMixin.d.ts +2 -2
  27. package/dist/types/mixins/modalMixin/modalMixin.d.ts +23 -23
  28. package/dist/types/mixins/notificationsMixin/notificationsMixin.d.ts +23 -23
  29. package/dist/types/mixins/observeAttributesMixin/observeAttributesMixin.d.ts +4 -4
  30. package/dist/types/mixins/projectIdMixin.d.ts +5 -5
  31. package/dist/types/mixins/resetMixin.d.ts +6 -6
  32. package/dist/types/mixins/staticResourcesMixin/staticResourcesMixin.d.ts +10 -10
  33. package/dist/types/mixins/tenantIdMixin.d.ts +5 -5
  34. package/dist/types/mixins/themeMixin/themeMixin.d.ts +40 -40
  35. package/dist/types/mixins/widgetConfigMixin/widgetConfigMixin.d.ts +14 -14
  36. package/dist/types/mixins/widgetIdMixin.d.ts +5 -5
  37. package/package.json +3 -3
package/dist/cjs/index.js CHANGED
@@ -26,6 +26,7 @@ var cookieConfigMixin = require('./mixins/cookieConfigMixin.js');
26
26
  var injectNpmLibMixin = require('./mixins/injectNpmLibMixin/injectNpmLibMixin.js');
27
27
  var injectStyleMixin = require('./mixins/injectStyleMixin.js');
28
28
  var cspNonceMixin = require('./mixins/cspNonceMixin.js');
29
+ var flowInputMixin = require('./mixins/flowInputMixin/flowInputMixin.js');
29
30
 
30
31
 
31
32
 
@@ -56,4 +57,5 @@ exports.cookieConfigMixin = cookieConfigMixin.cookieConfigMixin;
56
57
  exports.injectNpmLibMixin = injectNpmLibMixin.injectNpmLibMixin;
57
58
  exports.injectStyleMixin = injectStyleMixin.injectStyleMixin;
58
59
  exports.cspNonceMixin = cspNonceMixin.cspNonceMixin;
60
+ exports.flowInputMixin = flowInputMixin.flowInputMixin;
59
61
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,58 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var sdkHelpers = require('@descope/sdk-helpers');
5
+ var themeMixin = require('../themeMixin/themeMixin.js');
6
+
7
+ /**
8
+ * Exposes a widget's caller-supplied flow inputs (`client.*` / `form.*`) and
9
+ * builds the internal `<descope-wc>` flow template with the widget's shared
10
+ * config, forwarding those inputs into the flow-start call - the same way they
11
+ * flow for a directly-embedded `<Descope>` flow.
12
+ *
13
+ * `createFlowTemplate` (the method) wraps the `createFlowTemplate` helper so
14
+ * every flow a widget runs gets the shared config + inputs from one place,
15
+ * instead of each call site rebuilding the config. Composes `themeMixin` for
16
+ * the resolved `theme` / `styleId`; the rest are plain attribute reads.
17
+ */
18
+ const flowInputMixin = sdkHelpers.createSingletonMixin((superclass) => { var _FlowInputMixinClass_instances, _FlowInputMixinClass_resolveForm, _a; return _a = class FlowInputMixinClass extends themeMixin.themeMixin(superclass) {
19
+ constructor() {
20
+ super(...arguments);
21
+ _FlowInputMixinClass_instances.add(this);
22
+ }
23
+ // caller-supplied client context, forwarded as flow-start `options.client`
24
+ get clientInput() {
25
+ try {
26
+ return JSON.parse(this.getAttribute('client')) || {};
27
+ }
28
+ catch (e) {
29
+ return {};
30
+ }
31
+ }
32
+ // caller-supplied form inputs (raw JSON string), forwarded as flow inputs
33
+ get formInput() {
34
+ return this.getAttribute('form') || undefined;
35
+ }
36
+ createFlowTemplate(_b) {
37
+ var { flowId, client, form } = _b, overrides = tslib.__rest(_b, ["flowId", "client", "form"]);
38
+ return sdkHelpers.createFlowTemplate(Object.assign({ projectId: this.getAttribute('project-id'), flowId, baseUrl: this.getAttribute('base-url') || '', baseStaticUrl: this.getAttribute('base-static-url') || '', baseCdnUrl: this.getAttribute('base-cdn-url') || '', refreshCookieName: this.getAttribute('refresh-cookie-name') || '', theme: this.theme, 'style-id': this.styleId, locale: this.getAttribute('locale') || '', form: tslib.__classPrivateFieldGet(this, _FlowInputMixinClass_instances, "m", _FlowInputMixinClass_resolveForm).call(this, form), client: Object.assign(Object.assign({}, this.clientInput), client) }, overrides));
39
+ }
40
+ },
41
+ _FlowInputMixinClass_instances = new WeakSet(),
42
+ _FlowInputMixinClass_resolveForm = function _FlowInputMixinClass_resolveForm(form) {
43
+ const callerForm = this.formInput;
44
+ if (!form)
45
+ return callerForm;
46
+ if (!callerForm)
47
+ return form;
48
+ try {
49
+ return Object.assign(Object.assign({}, JSON.parse(callerForm)), form);
50
+ }
51
+ catch (e) {
52
+ return form;
53
+ }
54
+ },
55
+ _a; });
56
+
57
+ exports.flowInputMixin = flowInputMixin;
58
+ //# sourceMappingURL=flowInputMixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flowInputMixin.js","sources":["../../../../src/mixins/flowInputMixin/flowInputMixin.ts"],"sourcesContent":["import { createSingletonMixin, createFlowTemplate } from '@descope/sdk-helpers';\nimport { themeMixin } from '../themeMixin';\n\ntype FlowInputConfig = {\n flowId: string;\n // per-flow inputs the widget supplies; merged over the caller-supplied inputs\n client?: Record<string, any>;\n form?: Record<string, any>;\n // widget-specific context forwarded as-is (e.g. tenant, outboundAppId)\n tenant?: string;\n outboundAppId?: string;\n};\n\n/**\n * Exposes a widget's caller-supplied flow inputs (`client.*` / `form.*`) and\n * builds the internal `<descope-wc>` flow template with the widget's shared\n * config, forwarding those inputs into the flow-start call - the same way they\n * flow for a directly-embedded `<Descope>` flow.\n *\n * `createFlowTemplate` (the method) wraps the `createFlowTemplate` helper so\n * every flow a widget runs gets the shared config + inputs from one place,\n * instead of each call site rebuilding the config. Composes `themeMixin` for\n * the resolved `theme` / `styleId`; the rest are plain attribute reads.\n */\nexport const flowInputMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) =>\n class FlowInputMixinClass extends themeMixin(superclass) {\n // caller-supplied client context, forwarded as flow-start `options.client`\n get clientInput(): Record<string, any> {\n try {\n return JSON.parse(this.getAttribute('client')) || {};\n } catch (e) {\n return {};\n }\n }\n\n // caller-supplied form inputs (raw JSON string), forwarded as flow inputs\n get formInput(): string | undefined {\n return this.getAttribute('form') || undefined;\n }\n\n // merge a per-flow form (e.g. ids the widget supplies) over the\n // caller-supplied form inputs, with the per-flow values taking precedence\n #resolveForm(\n form?: Record<string, any>,\n ): Record<string, any> | string | undefined {\n const callerForm = this.formInput;\n if (!form) return callerForm;\n if (!callerForm) return form;\n try {\n return { ...JSON.parse(callerForm), ...form };\n } catch (e) {\n return form;\n }\n }\n\n createFlowTemplate({\n flowId,\n client,\n form,\n ...overrides\n }: FlowInputConfig) {\n return createFlowTemplate({\n projectId: this.getAttribute('project-id'),\n flowId,\n baseUrl: this.getAttribute('base-url') || '',\n baseStaticUrl: this.getAttribute('base-static-url') || '',\n baseCdnUrl: this.getAttribute('base-cdn-url') || '',\n refreshCookieName: this.getAttribute('refresh-cookie-name') || '',\n theme: this.theme,\n 'style-id': this.styleId,\n locale: this.getAttribute('locale') || '',\n form: this.#resolveForm(form),\n client: { ...this.clientInput, ...client },\n ...overrides,\n });\n }\n },\n);\n"],"names":["createSingletonMixin","themeMixin","__rest","createFlowTemplate","__classPrivateFieldGet"],"mappings":";;;;;;AAaA;;;;;;;;;;AAUG;AACU,MAAA,cAAc,GAAGA,+BAAoB,CAChD,CAAqC,UAAa,6FAChD,MAAM,mBAAoB,SAAQC,qBAAU,CAAC,UAAU,CAAC,CAAA;AAAxD,QAAA,WAAA,GAAA;;;SAmDC;;AAjDC,QAAA,IAAI,WAAW,GAAA;AACb,YAAA,IAAI;AACF,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;aACtD;YAAC,OAAO,CAAC,EAAE;AACV,gBAAA,OAAO,EAAE,CAAC;aACX;SACF;;AAGD,QAAA,IAAI,SAAS,GAAA;YACX,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;SAC/C;AAiBD,QAAA,kBAAkB,CAAC,EAKD,EAAA;gBALC,EACjB,MAAM,EACN,MAAM,EACN,IAAI,OAEY,EADb,SAAS,GAJKC,YAAA,CAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAKlB,CADa,CAAA;YAEZ,OAAOC,6BAAkB,iBACvB,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAC1C,MAAM,EACN,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,EAC5C,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,EAAE,EACzD,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,EACnD,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,EAAE,EACjE,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,UAAU,EAAE,IAAI,CAAC,OAAO,EACxB,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,EACzC,IAAI,EAAEC,6BAAA,IAAI,EAAA,8BAAA,EAAA,GAAA,EAAA,gCAAA,CAAa,CAAjB,IAAA,CAAA,IAAI,EAAc,IAAI,CAAC,EAC7B,MAAM,EAAO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,WAAW,GAAK,MAAM,CAAA,EAAA,EACrC,SAAS,CAAA,CACZ,CAAC;SACJ;AACF,KAAA;;iFAjCG,IAA0B,EAAA;AAE1B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;AAClC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,IAAI,CAAC;AAC7B,QAAA,IAAI;YACF,OAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA,EAAK,IAAI,CAAG,CAAA;SAC/C;QAAC,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,IAAI,CAAC;SACb;KACF;AAuBF,IAAA,EAAA,CAAA,EAAA;;;;"}
package/dist/esm/index.js CHANGED
@@ -24,4 +24,5 @@ export { cookieConfigMixin } from './mixins/cookieConfigMixin.js';
24
24
  export { injectNpmLibMixin } from './mixins/injectNpmLibMixin/injectNpmLibMixin.js';
25
25
  export { injectStyleMixin } from './mixins/injectStyleMixin.js';
26
26
  export { cspNonceMixin } from './mixins/cspNonceMixin.js';
27
+ export { flowInputMixin } from './mixins/flowInputMixin/flowInputMixin.js';
27
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,56 @@
1
+ import { __rest, __classPrivateFieldGet } from 'tslib';
2
+ import { createSingletonMixin, createFlowTemplate } from '@descope/sdk-helpers';
3
+ import { themeMixin } from '../themeMixin/themeMixin.js';
4
+
5
+ /**
6
+ * Exposes a widget's caller-supplied flow inputs (`client.*` / `form.*`) and
7
+ * builds the internal `<descope-wc>` flow template with the widget's shared
8
+ * config, forwarding those inputs into the flow-start call - the same way they
9
+ * flow for a directly-embedded `<Descope>` flow.
10
+ *
11
+ * `createFlowTemplate` (the method) wraps the `createFlowTemplate` helper so
12
+ * every flow a widget runs gets the shared config + inputs from one place,
13
+ * instead of each call site rebuilding the config. Composes `themeMixin` for
14
+ * the resolved `theme` / `styleId`; the rest are plain attribute reads.
15
+ */
16
+ const flowInputMixin = createSingletonMixin((superclass) => { var _FlowInputMixinClass_instances, _FlowInputMixinClass_resolveForm, _a; return _a = class FlowInputMixinClass extends themeMixin(superclass) {
17
+ constructor() {
18
+ super(...arguments);
19
+ _FlowInputMixinClass_instances.add(this);
20
+ }
21
+ // caller-supplied client context, forwarded as flow-start `options.client`
22
+ get clientInput() {
23
+ try {
24
+ return JSON.parse(this.getAttribute('client')) || {};
25
+ }
26
+ catch (e) {
27
+ return {};
28
+ }
29
+ }
30
+ // caller-supplied form inputs (raw JSON string), forwarded as flow inputs
31
+ get formInput() {
32
+ return this.getAttribute('form') || undefined;
33
+ }
34
+ createFlowTemplate(_b) {
35
+ var { flowId, client, form } = _b, overrides = __rest(_b, ["flowId", "client", "form"]);
36
+ return createFlowTemplate(Object.assign({ projectId: this.getAttribute('project-id'), flowId, baseUrl: this.getAttribute('base-url') || '', baseStaticUrl: this.getAttribute('base-static-url') || '', baseCdnUrl: this.getAttribute('base-cdn-url') || '', refreshCookieName: this.getAttribute('refresh-cookie-name') || '', theme: this.theme, 'style-id': this.styleId, locale: this.getAttribute('locale') || '', form: __classPrivateFieldGet(this, _FlowInputMixinClass_instances, "m", _FlowInputMixinClass_resolveForm).call(this, form), client: Object.assign(Object.assign({}, this.clientInput), client) }, overrides));
37
+ }
38
+ },
39
+ _FlowInputMixinClass_instances = new WeakSet(),
40
+ _FlowInputMixinClass_resolveForm = function _FlowInputMixinClass_resolveForm(form) {
41
+ const callerForm = this.formInput;
42
+ if (!form)
43
+ return callerForm;
44
+ if (!callerForm)
45
+ return form;
46
+ try {
47
+ return Object.assign(Object.assign({}, JSON.parse(callerForm)), form);
48
+ }
49
+ catch (e) {
50
+ return form;
51
+ }
52
+ },
53
+ _a; });
54
+
55
+ export { flowInputMixin };
56
+ //# sourceMappingURL=flowInputMixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flowInputMixin.js","sources":["../../../../src/mixins/flowInputMixin/flowInputMixin.ts"],"sourcesContent":["import { createSingletonMixin, createFlowTemplate } from '@descope/sdk-helpers';\nimport { themeMixin } from '../themeMixin';\n\ntype FlowInputConfig = {\n flowId: string;\n // per-flow inputs the widget supplies; merged over the caller-supplied inputs\n client?: Record<string, any>;\n form?: Record<string, any>;\n // widget-specific context forwarded as-is (e.g. tenant, outboundAppId)\n tenant?: string;\n outboundAppId?: string;\n};\n\n/**\n * Exposes a widget's caller-supplied flow inputs (`client.*` / `form.*`) and\n * builds the internal `<descope-wc>` flow template with the widget's shared\n * config, forwarding those inputs into the flow-start call - the same way they\n * flow for a directly-embedded `<Descope>` flow.\n *\n * `createFlowTemplate` (the method) wraps the `createFlowTemplate` helper so\n * every flow a widget runs gets the shared config + inputs from one place,\n * instead of each call site rebuilding the config. Composes `themeMixin` for\n * the resolved `theme` / `styleId`; the rest are plain attribute reads.\n */\nexport const flowInputMixin = createSingletonMixin(\n <T extends CustomElementConstructor>(superclass: T) =>\n class FlowInputMixinClass extends themeMixin(superclass) {\n // caller-supplied client context, forwarded as flow-start `options.client`\n get clientInput(): Record<string, any> {\n try {\n return JSON.parse(this.getAttribute('client')) || {};\n } catch (e) {\n return {};\n }\n }\n\n // caller-supplied form inputs (raw JSON string), forwarded as flow inputs\n get formInput(): string | undefined {\n return this.getAttribute('form') || undefined;\n }\n\n // merge a per-flow form (e.g. ids the widget supplies) over the\n // caller-supplied form inputs, with the per-flow values taking precedence\n #resolveForm(\n form?: Record<string, any>,\n ): Record<string, any> | string | undefined {\n const callerForm = this.formInput;\n if (!form) return callerForm;\n if (!callerForm) return form;\n try {\n return { ...JSON.parse(callerForm), ...form };\n } catch (e) {\n return form;\n }\n }\n\n createFlowTemplate({\n flowId,\n client,\n form,\n ...overrides\n }: FlowInputConfig) {\n return createFlowTemplate({\n projectId: this.getAttribute('project-id'),\n flowId,\n baseUrl: this.getAttribute('base-url') || '',\n baseStaticUrl: this.getAttribute('base-static-url') || '',\n baseCdnUrl: this.getAttribute('base-cdn-url') || '',\n refreshCookieName: this.getAttribute('refresh-cookie-name') || '',\n theme: this.theme,\n 'style-id': this.styleId,\n locale: this.getAttribute('locale') || '',\n form: this.#resolveForm(form),\n client: { ...this.clientInput, ...client },\n ...overrides,\n });\n }\n },\n);\n"],"names":[],"mappings":";;;;AAaA;;;;;;;;;;AAUG;AACU,MAAA,cAAc,GAAG,oBAAoB,CAChD,CAAqC,UAAa,6FAChD,MAAM,mBAAoB,SAAQ,UAAU,CAAC,UAAU,CAAC,CAAA;AAAxD,QAAA,WAAA,GAAA;;;SAmDC;;AAjDC,QAAA,IAAI,WAAW,GAAA;AACb,YAAA,IAAI;AACF,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;aACtD;YAAC,OAAO,CAAC,EAAE;AACV,gBAAA,OAAO,EAAE,CAAC;aACX;SACF;;AAGD,QAAA,IAAI,SAAS,GAAA;YACX,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;SAC/C;AAiBD,QAAA,kBAAkB,CAAC,EAKD,EAAA;gBALC,EACjB,MAAM,EACN,MAAM,EACN,IAAI,OAEY,EADb,SAAS,GAJK,MAAA,CAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAKlB,CADa,CAAA;YAEZ,OAAO,kBAAkB,iBACvB,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAC1C,MAAM,EACN,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,EAC5C,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAI,EAAE,EACzD,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,EACnD,iBAAiB,EAAE,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,EAAE,EACjE,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,UAAU,EAAE,IAAI,CAAC,OAAO,EACxB,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,EACzC,IAAI,EAAE,uBAAA,IAAI,EAAA,8BAAA,EAAA,GAAA,EAAA,gCAAA,CAAa,CAAjB,IAAA,CAAA,IAAI,EAAc,IAAI,CAAC,EAC7B,MAAM,EAAO,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,WAAW,GAAK,MAAM,CAAA,EAAA,EACrC,SAAS,CAAA,CACZ,CAAC;SACJ;AACF,KAAA;;iFAjCG,IAA0B,EAAA;AAE1B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;AAClC,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,UAAU,CAAC;AAC7B,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,IAAI,CAAC;AAC7B,QAAA,IAAI;YACF,OAAY,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA,EAAK,IAAI,CAAG,CAAA;SAC/C;QAAC,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,IAAI,CAAC;SACb;KACF;AAuBF,IAAA,EAAA,CAAA,EAAA;;;;"}