@cas-smartdesign/combo-box 7.2.6 → 7.2.8

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.
@@ -1,10 +1,10 @@
1
- import { css as g, unsafeCSS as v, html as b } from "lit";
1
+ import { css as g, unsafeCSS as v, html as x } from "lit";
2
2
  import { property as r } from "lit/decorators/property.js";
3
- import { createPopper as x } from "@popperjs/core";
3
+ import { createPopper as b } from "@popperjs/core";
4
4
  import _ from "@cas-smartdesign/lit-input";
5
5
  import p, { ListDataProvider as y, SelectionType as u } from "@cas-smartdesign/virtual-list";
6
6
  import { generator as w } from "@cas-smartdesign/list-item";
7
- const I = ":host{display:inline-flex;position:relative;cursor:text;font-family:Segoe UI,Lucida Sans,Arial,sans-serif;font-size:16px;color:#111;contain:layout style;flex-direction:column}:host([hidden]),:host([type=hidden]){display:none!important}:host([effective-disabled]){opacity:.6;cursor:default;filter:grayscale(100%)}:host([effective-disabled]) .unfocused-line,:host([effective-disabled]) .focused-line{border-bottom-style:dashed}:host(:not([effective-disabled]):focus) .focused-line,:host(:not([effective-disabled])[focused]) .focused-line{transform:none;transition:transform .25s}:host(:not([effective-disabled]):focus) .label.float,:host(:not([effective-disabled])[focused]) .label.float{color:var(--sd-input-focused-color, #1467ba)}:host([inactive]) .input{pointer-events:none}:host([effective-disabled]:focus),:host([effective-disabled][focused]){box-shadow:0 0 0 1px #111}:host(:not([effective-disabled])[validationlevel]) .focused-line{transform:none;transition:transform .25s}:host([validationlevel=warn i]) .focused-line{border-bottom-color:var(--sd-input-validation-color, #555555)}:host([validationlevel=warn i]) .label,:host([validationlevel=warn i]) .validation-message{color:var(--sd-input-validation-color, #555555)!important}:host([validationlevel=suggest i]) .focused-line{border-bottom-color:var(--sd-input-validation-color, #bf8800)}:host([validationlevel=suggest i]) .label,:host([validationlevel=suggest i]) .validation-message{color:var(--sd-input-validation-color, #bf8800)!important}:host([validationlevel=error i]) .focused-line{border-bottom-color:var(--sd-input-validation-color, #cc0017)}:host([validationlevel=error i]) .label,:host([validationlevel=error i]) .validation-message{color:var(--sd-input-validation-color, #cc0017)!important}:host([validationlevel=warn]) .focused-line{border-bottom-color:var(--sd-input-validation-color, #555555)}:host([validationlevel=warn]) .label,:host([validationlevel=warn]) .validation-message{color:var(--sd-input-validation-color, #555555)!important}:host([validationlevel=suggest]) .focused-line{border-bottom-color:var(--sd-input-validation-color, #bf8800)}:host([validationlevel=suggest]) .label,:host([validationlevel=suggest]) .validation-message{color:var(--sd-input-validation-color, #bf8800)!important}:host([validationlevel=error]) .focused-line{border-bottom-color:var(--sd-input-validation-color, #cc0017)}:host([validationlevel=error]) .label,:host([validationlevel=error]) .validation-message{color:var(--sd-input-validation-color, #cc0017)!important}.validation-message-wrapper{position:relative}.validation-message{position:absolute;left:0;right:0}.label.float{transform:translateY(-75%) scale(.75);width:133%}.label:not(.float){max-width:100%}.floated-label-placeholder{height:20px;width:100%}.label{position:absolute;top:0;left:0;line-height:24px;pointer-events:none;color:var(--sd-input-color, #767676);transition:transform .25s,width .25s;transform-origin:left top}.input-wrapper{position:relative;display:flex;flex-direction:row;align-items:center;background-color:var(--input-wrapper-background-color)}:host([extended-prefix]:focus-within:not([effective-disabled])) .input-wrapper{flex-direction:column;align-items:baseline}:host([extended-prefix]:focus-within:not([effective-disabled])) .input-container{width:100%}:host([extended-prefix]:not(:focus-within)) .input-container,:host([extended-prefix][effective-disabled]) .input-container{width:0px}.input-container{line-height:var(--sd-input-line-height, 24px);flex:1 1 auto}.input{width:100%;background:var(--sd-input-background, transparent);font-family:inherit;font-size:inherit;text-align:inherit;color:inherit;border:none;outline:none;resize:none;padding-left:0;padding-right:0}.input:-webkit-autofill{animation-name:onautofillstart}.input:not(:-webkit-autofill){animation-name:onautofillcancel}@keyframes onautofillstart{0%{outline:none}}@keyframes onautofillcancel{0%{outline:none}}.label,input.input,.validation-message{text-overflow:ellipsis;overflow-x:hidden;white-space:nowrap}.input::-ms-clear{display:none}.input::placeholder{color:var(--sd-input-color, #767676)}.input:-ms-input-placeholder{color:var(--sd-input-color, #767676)}.input::-ms-input-placeholder{color:var(--sd-input-color, #767676)}.underline{height:2px;width:100%;position:relative}.unfocused-line,.focused-line{position:absolute;top:0;right:0;bottom:0;left:0}.unfocused-line{border-bottom:1px solid var(--sd-input-underline-color, #959595)}.focused-line{border-bottom:2px solid var(--sd-input-focused-color, #1467ba);transform-origin:center center;transform:scale3d(0,1,1)}.prefix,.suffix{display:flex;flex-wrap:nowrap}.prefix ::slotted(*),.suffix ::slotted(*){display:flex}:host(:focus){outline:none}.suffix ::slotted(.clear-button),.suffix ::slotted(.toggle-button){cursor:pointer;width:16px;height:32px;padding:0 8px;margin-top:-8px;margin-bottom:-8px;fill:#666;outline:none;flex-shrink:0}.suffix ::slotted(.toggle-button){transition:transform .2s}:host([opened]) .suffix ::slotted(.toggle-button){transform:rotate(180deg)}:host([disabled]) .suffix ::slotted(.clear-button),:host([disabled]) .suffix ::slotted(.toggle-button){display:none!important}:host(:not([has-value])) .suffix ::slotted(.clear-button),:host([null-setting-disallowed]) .suffix ::slotted(.clear-button){display:none!important}:host(:not([allow-custom-value]):not([trigger-only])) .input{caret-color:transparent}:host(:not([allow-custom-value]):not([disabled])) .input{cursor:pointer}#default-slot{display:none}", C = `<svg xmlns="http://www.w3.org/2000/svg" class="toggle-button" slot="suffix" viewBox="0 0 16 16">\r
7
+ const I = ":host{display:inline-flex;position:relative;cursor:text;font-family:Segoe UI,Lucida Sans,Arial,sans-serif;font-size:16px;color:#111;contain:layout style;flex-direction:column}:host([hidden]),:host([type=hidden]){display:none!important}:host([effective-disabled]){opacity:.6;cursor:default;filter:grayscale(100%)}:host([effective-disabled]) .unfocused-line,:host([effective-disabled]) .focused-line{border-bottom-style:dashed}:host(:not([effective-disabled]):focus) .focused-line,:host(:not([effective-disabled])[focused]) .focused-line{transform:none;transition:transform .25s}:host(:not([effective-disabled]):focus) .label.float,:host(:not([effective-disabled])[focused]) .label.float{color:var(--sd-input-focused-color, #1467ba)}:host([inactive]) .input{pointer-events:none}:host([effective-disabled]:focus),:host([effective-disabled][focused]){box-shadow:0 0 0 1px #111}:host(:not([effective-disabled])[validationlevel]) .focused-line,:host(:not([effective-disabled]):invalid) .focused-line{transform:none;transition:transform .25s}:host([validationlevel=warn i]) .focused-line{border-bottom-color:var(--sd-input-validation-color, #555555)}:host([validationlevel=warn i]) .label,:host([validationlevel=warn i]) .validation-message{color:var(--sd-input-validation-color, #555555)!important}:host([validationlevel=suggest i]) .focused-line{border-bottom-color:var(--sd-input-validation-color, #bf8800)}:host([validationlevel=suggest i]) .label,:host([validationlevel=suggest i]) .validation-message{color:var(--sd-input-validation-color, #bf8800)!important}:host([validationlevel=error i]) .focused-line,:host(:not([validationlevel]):invalid) .focused-line{border-bottom-color:var(--sd-input-validation-color, #cc0017)}:host([validationlevel=error i]) .label,:host([validationlevel=error i]) .validation-message,:host(:not([validationlevel]):invalid) .label,:host(:not([validationlevel]):invalid) .validation-message{color:var(--sd-input-validation-color, #cc0017)!important}.validation-message-wrapper{position:relative}.validation-message{position:absolute;left:0;right:0}.label.float{transform:translateY(-75%) scale(.75);width:133%}.label:not(.float){max-width:100%}.floated-label-placeholder{height:20px;width:100%}.label{position:absolute;top:0;left:0;line-height:24px;pointer-events:none;color:var(--sd-input-color, #767676);transition:transform .25s,width .25s;transform-origin:left top}.input-wrapper{position:relative;display:flex;flex-direction:row;align-items:center;background-color:var(--input-wrapper-background-color)}:host([extended-prefix]:focus-within:not([effective-disabled])) .input-wrapper{flex-direction:column;align-items:baseline}:host([extended-prefix]:focus-within:not([effective-disabled])) .input-container{width:100%}:host([extended-prefix]:not(:focus-within)) .input-container,:host([extended-prefix][effective-disabled]) .input-container{width:0px}.input-container{line-height:var(--sd-input-line-height, 24px);flex:1 1 auto}.input{width:100%;background:var(--sd-input-background, transparent);font-family:inherit;font-size:inherit;text-align:inherit;color:inherit;border:none;outline:none;resize:none;padding-left:0;padding-right:0}.input:-webkit-autofill{animation-name:onautofillstart}.input:not(:-webkit-autofill){animation-name:onautofillcancel}@keyframes onautofillstart{0%{outline:none}}@keyframes onautofillcancel{0%{outline:none}}.label,input.input,.validation-message{text-overflow:ellipsis;overflow-x:hidden;white-space:nowrap}.input::placeholder{color:var(--sd-input-color, #767676)}.underline{height:2px;width:100%;position:relative}.unfocused-line,.focused-line{position:absolute;top:0;right:0;bottom:0;left:0}.unfocused-line{border-bottom:1px solid var(--sd-input-underline-color, #959595)}.focused-line{border-bottom:2px solid var(--sd-input-focused-color, #1467ba);transform-origin:center center;transform:scale3d(0,1,1)}.prefix,.suffix{display:flex;flex-wrap:nowrap;max-width:100%}.prefix ::slotted(*),.suffix ::slotted(*){display:flex}:host(:focus){outline:none}.suffix ::slotted(.clear-button),.suffix ::slotted(.toggle-button){cursor:pointer;width:16px;height:32px;padding:0 8px;margin-top:-8px;margin-bottom:-8px;fill:#666;outline:none;flex-shrink:0}.suffix ::slotted(.toggle-button){transition:transform .2s}:host([opened]) .suffix ::slotted(.toggle-button){transform:rotate(180deg)}:host([disabled]) .suffix ::slotted(.clear-button),:host([disabled]) .suffix ::slotted(.toggle-button){display:none!important}:host(:not([has-value])) .suffix ::slotted(.clear-button),:host([null-setting-disallowed]) .suffix ::slotted(.clear-button){display:none!important}:host(:not([allow-custom-value]):not([trigger-only])) .input{caret-color:transparent}:host(:not([allow-custom-value]):not([disabled])) .input{cursor:pointer}#default-slot{display:none}", C = `<svg xmlns="http://www.w3.org/2000/svg" class="toggle-button" slot="suffix" viewBox="0 0 16 16">\r
8
8
  <path d="M13 4v2l-5 5-5-5v-2l5 5z"/>\r
9
9
  </svg>\r
10
10
  `, V = `<svg xmlns="http://www.w3.org/2000/svg" class="clear-button" slot="suffix" viewBox="0 0 16 16">\r
@@ -128,7 +128,7 @@ const a = (o = class extends _ {
128
128
  super.disconnectedCallback(), this._popper && (this._popper.destroy(), this._popper = null);
129
129
  }
130
130
  render() {
131
- return b`
131
+ return x`
132
132
  ${super.render()}
133
133
  <slot @slotchange=${this.onDefaultSlotChange} id="default-slot"></slot>
134
134
  `;
@@ -196,7 +196,7 @@ const a = (o = class extends _ {
196
196
  overflowY: "auto"
197
197
  }), this._list.addEventListener("selection", this.handleSelection), this._dataProvider.connectList(this._list)), !this._popper) {
198
198
  const t = this;
199
- this._popper = x(this, this._list, {
199
+ this._popper = b(this, this._list, {
200
200
  placement: "bottom-start",
201
201
  modifiers: [
202
202
  {
@@ -244,9 +244,17 @@ const a = (o = class extends _ {
244
244
  return document.elementFromPoint(t.left + t.width / 2, t.top + t.height / 2);
245
245
  }
246
246
  async handleOpenedStateChange() {
247
- this.inputElement.setAttribute("aria-expanded", String(this.opened)), this.opened ? (this.disabled || (this.ensureListAndPopperInitialized(), this.isLazyLoadConfigured && (this.items.length == 0 || this._lastRequestedFilterText != this.filterText) && this.requestData(0, this._lastRequestedFilterText != this.filterText), this.updateDropdownSizes(), this.ownerDocument.body.appendChild(this._list), this.updateFocusAndSelectedIndexFromValue(), window.requestAnimationFrame(() => {
248
- this._popper && this._popper.update();
249
- }), window.addEventListener("pointerdown", this.handleWindowPointerDown), !this.allowCustomValue && !this._openedByFilterTextChange && this.select()), this._openedByFilterTextChange = !1) : (await this._list.updateComplete, this._popper && await this._popper.update, this.ownerDocument.body.removeChild(this._list), window.removeEventListener("pointerdown", this.handleWindowPointerDown), this.updateValueOnClose(), this.clearFilter(), this.setSelectionRange(0, 0), this.inputElement.removeAttribute("aria-activedescendant"), this._popper && (this._popper.destroy(), this._popper = null));
247
+ if (this.inputElement.setAttribute("aria-expanded", String(this.opened)), this.opened) {
248
+ if (!this.disabled) {
249
+ this.ensureListAndPopperInitialized();
250
+ const t = (this.filterText || "") !== (this._lastRequestedFilterText || "");
251
+ this.isLazyLoadConfigured && (this.items.length == 0 || t) && this.requestData(0, t), this.updateDropdownSizes(), this.ownerDocument.body.appendChild(this._list), this.updateFocusAndSelectedIndexFromValue(), window.requestAnimationFrame(() => {
252
+ this._popper && this._popper.update();
253
+ }), window.addEventListener("pointerdown", this.handleWindowPointerDown), !this.allowCustomValue && !this._openedByFilterTextChange && this.select();
254
+ }
255
+ this._openedByFilterTextChange = !1;
256
+ } else
257
+ await this._list.updateComplete, this._popper && await this._popper.update, this.ownerDocument.body.removeChild(this._list), window.removeEventListener("pointerdown", this.handleWindowPointerDown), this.updateValueOnClose(), this.clearFilter(), this.setSelectionRange(0, 0), this.inputElement.removeAttribute("aria-activedescendant"), this._popper && (this._popper.destroy(), this._popper = null);
250
258
  }
251
259
  updateValueOnClose() {
252
260
  const t = this.comboBoxValue || "";
@@ -303,7 +311,10 @@ const a = (o = class extends _ {
303
311
  return t ? t[this.displayValuePath] : this.comboBoxValue ? this.isCustomValue(this.comboBoxValue) ? this.comboBoxValue : this.comboBoxValue.item[this.displayValuePath] : null;
304
312
  }
305
313
  fireValueChange(t) {
306
- t && this.filterText !== this.value && (this.filterText = this.value, this.opened || (this._openedByFilterTextChange = !0, this.opened = !0), this.dispatchFilterChangeEvent(), this.debouncedFilterItemsInMemory());
314
+ if (t && this.filterText !== this.value) {
315
+ const e = (this.filterText || "") !== this.value;
316
+ this.filterText = this.value, this.opened || (this._openedByFilterTextChange = !0, this.opened = !0), e && (this.dispatchFilterChangeEvent(), this.debouncedFilterItemsInMemory());
317
+ }
307
318
  }
308
319
  clearValue() {
309
320
  this.nullSettingDisallowed || (this.value = null, this.inputElement.removeAttribute("aria-activedescendant"), this._list && (this._list.selectedIndices = []), this.clearFilter(), this.comboBoxValue && (this.comboBoxValue = null, this.dispatchSelectionChangeEvent()));
@@ -351,18 +362,18 @@ const a = (o = class extends _ {
351
362
  detail: { value: this.filterText },
352
363
  composed: !0
353
364
  })
354
- ), this.debouncedRequestData(0, !0);
365
+ ), this.debouncedRequestData(0);
355
366
  }
356
367
  get isLazyLoadConfigured() {
357
368
  return !!this._onDataRequest;
358
369
  }
359
370
  requestData(t, e) {
360
- if (this.isLazyLoadConfigured) {
371
+ if (e == null && (e = (this.filterText || "") !== (this._lastRequestedFilterText || "")), this.isLazyLoadConfigured) {
361
372
  if (!this.opened) {
362
373
  e && (this._dataProvider.items = [], this._itemCache = []);
363
374
  return;
364
375
  }
365
- if (this._lastRequestedPage == t && this._lastRequestedFilterText == this.filterText)
376
+ if (this._lastRequestedPage == t && !e)
366
377
  return;
367
378
  this._pendingDataRequest && this._pendingDataRequest.cancel(o.DATA_REQUEST_CANCELLED);
368
379
  const i = new Promise((s, n) => {
@@ -1 +1 @@
1
- {"version":3,"file":"combo-box.mjs","sources":["../toggle.svg?raw","../clear.svg?raw","../combo-box.ts"],"sourcesContent":["export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" class=\\\"toggle-button\\\" slot=\\\"suffix\\\" viewBox=\\\"0 0 16 16\\\">\\r\\n <path d=\\\"M13 4v2l-5 5-5-5v-2l5 5z\\\"/>\\r\\n</svg>\\r\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" class=\\\"clear-button\\\" slot=\\\"suffix\\\" viewBox=\\\"0 0 16 16\\\">\\r\\n <path d=\\\"M12.96 4.46l-1.42-1.42-3.54 3.55-3.54-3.55-1.42 1.42 3.55 3.54-3.55 3.54 1.42 1.42 3.54-3.55 3.54 3.55 1.42-1.42-3.55-3.54 3.55-3.54z\\\"/>\\r\\n</svg>\\r\\n\"","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { unsafeCSS, PropertyValues, css, TemplateResult, html } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { createPopper, Instance as Popper } from \"@popperjs/core\";\nimport SDInput, { CustomEventMap as InputCustomEventMap } from \"@cas-smartdesign/lit-input\";\nimport VirtualList, { SelectionType, ItemGenerator, ListDataProvider } from \"@cas-smartdesign/virtual-list\";\nimport { ItemData, generator } from \"@cas-smartdesign/list-item\";\n\nconst TAG_NAME = \"sd-combo-box\";\n\nfunction debounce<T>(func: (...args: T[]) => unknown, delay: number): typeof func {\n let timeout: number;\n return function (...args: T[]) {\n if (timeout != null) {\n clearTimeout(timeout);\n }\n timeout = window.setTimeout(() => func(...args), delay);\n };\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TAG_NAME]: ComboBox;\n }\n}\n\nimport style from \"./style.scss?inline\";\nimport toggleSvg from \"./toggle.svg?raw\";\nimport clearSvg from \"./clear.svg?raw\";\n\nexport type ComboBoxValue = {\n index: number;\n item: ItemData | any;\n};\nexport type InMemoryFilter = (filterText: string, item: any) => boolean;\nexport type DataResponse = {\n items: any[];\n finalSizeIsKnown: boolean;\n};\n\nlet idCounter = 0;\n\nexport interface ISelectionEvent {\n selection: ComboBoxValue | string;\n isCustomValue: boolean;\n}\nexport interface IFilterChangeEvent {\n value: string;\n}\n\nexport interface CustomEventMap extends InputCustomEventMap {\n \"selection-change\": CustomEvent<ISelectionEvent>;\n \"filter-change\": CustomEvent<IFilterChangeEvent>;\n}\n\nexport default interface ComboBox {\n addEventListener<K extends keyof CustomEventMap>(\n event: K,\n listener: ((this: this, ev: CustomEventMap[K]) => unknown) | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n addEventListener(\n type: string,\n callback: EventListenerOrEventListenerObject | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n removeEventListener<K extends keyof CustomEventMap>(\n type: K,\n listener: (this: this, ev: CustomEventMap[K]) => unknown,\n options?: boolean | EventListenerOptions,\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): void;\n dispatchEvent<EventType extends CustomEventMap[keyof CustomEventMap]>(event: EventType): boolean;\n}\n\nexport default class ComboBox extends SDInput {\n public static readonly ID: string = TAG_NAME;\n public static ensureDefined = (): void => {\n VirtualList.ensureDefined();\n if (!customElements.get(ComboBox.ID)) {\n customElements.define(ComboBox.ID, ComboBox);\n }\n };\n static formAssociated = true;\n\n private static readonly DATA_REQUEST_CANCELLED: string = \"cancel_data_request\";\n\n @property({ type: Boolean, reflect: true })\n public opened = false;\n @property({ type: Number, attribute: \"item-height\" })\n public itemHeight = 50;\n @property({ type: Boolean, attribute: \"allow-custom-value\", reflect: true })\n public allowCustomValue: boolean;\n @property({ type: Boolean, attribute: \"trigger-only\", reflect: true })\n public triggerOnly: boolean;\n @property({ type: Boolean, attribute: \"null-setting-disallowed\", reflect: true })\n public nullSettingDisallowed: boolean;\n @property({ type: String, attribute: \"display-value-path\", noAccessor: true })\n public displayValuePath = \"caption\";\n @property({ type: String, attribute: \"filter-property\", noAccessor: true })\n public filterProperty: string;\n @property({ type: String, attribute: true, reflect: true })\n public id: string = ComboBox.ID + \"_\" + idCounter++;\n\n public inMemoryFilter: InMemoryFilter = (filterText, item) => {\n if (!filterText) {\n return true;\n }\n const lowerCaseFilter = filterText.toLowerCase();\n if (typeof item.caption == \"string\" && item.caption.toLowerCase().includes(lowerCaseFilter)) {\n return true;\n }\n if (typeof item.description == \"string\" && item.description.toLowerCase().includes(lowerCaseFilter)) {\n return true;\n }\n return false;\n };\n\n public filterText: string;\n public minimumOverlayWidth = 250;\n\n private _comboBoxValue: ComboBoxValue | string;\n private _clearButton: SVGElement;\n private _toggleButton: SVGElement;\n private _popper: Popper;\n private _list: VirtualList;\n private _dataProvider: ListDataProvider;\n private _itemGenerator: ItemGenerator = generator;\n private _itemCache: any[] = [];\n private _declarativeItems: HTMLElement[];\n private _onDataRequest: (filterText: string, page: number) => Promise<DataResponse>;\n private _pendingDataRequest: { cancel: (reason?: any) => void };\n private _openedByFilterTextChange: boolean;\n private _lastRequestedPage: number;\n private _lastRequestedFilterText: string;\n\n constructor() {\n super();\n this._dataProvider = new ListDataProvider();\n this._dataProvider.finalSizeIsKnown = true;\n }\n\n public get clearFilterOnLazyLoadedSelection(): boolean {\n return this.triggerOnly;\n }\n\n /**\n * @deprecated The method should not be used.\n * Use {@link ComboBox#triggerOnly} instead.\n * @param {boolean} value\n */\n public set clearFilterOnLazyLoadedSelection(value: boolean) {\n console.warn(\n \"Using clearFilterOnLazyLoadedSelection setting on a combo-box is deprecated. Use triggerOnly instead.\",\n );\n this.triggerOnly = value;\n }\n\n public get itemGenerator(): ItemGenerator {\n return this._itemGenerator;\n }\n\n public set itemGenerator(value: ItemGenerator) {\n this._itemGenerator = value;\n if (this._list) {\n this._list.itemGenerator = this._itemGenerator;\n }\n }\n\n public get items(): any[] {\n return this._itemCache;\n }\n\n public set items(items: any[]) {\n this._itemCache = items;\n if (this.value && !this.comboBoxValue) {\n this.updateComboBoxValueFromValue();\n }\n this.filterItemsInMemory();\n if (this.opened && this._popper) {\n this._popper.update();\n }\n }\n\n public get finalSizeIsKnown(): boolean {\n return this._dataProvider.finalSizeIsKnown;\n }\n\n public set finalSizeIsKnown(value: boolean) {\n this._dataProvider.finalSizeIsKnown = value;\n }\n\n public configureLazyLoad(onDataRequest: (filterText: string, page: number) => Promise<DataResponse>): void {\n if (!onDataRequest) {\n throw new Error(\"It is not possible to configure lazy load without a given onDataRequest calback.\");\n }\n this._dataProvider.finalSizeIsKnown = false;\n this._onDataRequest = onDataRequest;\n this._dataProvider.onDataRequest = (page: number) => {\n this.requestData(page, false);\n };\n }\n\n public get comboBoxValue(): ComboBoxValue | string {\n return this._comboBoxValue;\n }\n\n public set comboBoxValue(value: ComboBoxValue | string) {\n this._comboBoxValue = value;\n this.updateInputValue(null);\n }\n\n public get selectedIndex(): number {\n if (this.isCustomValue(this.comboBoxValue) || !this.comboBoxValue) {\n return -1;\n }\n return this.comboBoxValue.index;\n }\n\n public get displayValue(): string {\n return this.value;\n }\n\n public open(): void {\n this.opened = true;\n }\n\n static get styles() {\n return [\n css`\n ${unsafeCSS(style)}\n `,\n ];\n }\n\n public disconnectedCallback(): void {\n super.disconnectedCallback();\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n }\n\n public render(): TemplateResult {\n return html`\n ${super.render()}\n <slot @slotchange=${this.onDefaultSlotChange} id=\"default-slot\"></slot>\n `;\n }\n\n public attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n super.attributeChangedCallback(name, oldValue, newValue);\n if (oldValue !== newValue) {\n switch (name) {\n case \"opened\": {\n this.handleOpenedStateChange();\n break;\n }\n case \"item-height\": {\n if (this._list) {\n this._list.itemHeight = this.itemHeight;\n }\n break;\n }\n case \"id\": {\n this.updateListId();\n break;\n }\n }\n }\n }\n\n public firstUpdated(changedProperties: PropertyValues): void {\n super.firstUpdated(changedProperties);\n\n if (this.value && !this.comboBoxValue) {\n this.updateComboBoxValueFromValue();\n }\n window.requestAnimationFrame(() => {\n this.initClearButtton();\n this.initToggleButtton();\n\n this.addEventListener(\"click\", () => {\n if (!this.disabled) {\n this.opened = !this.opened;\n }\n });\n this.addEventListener(\"keydown\", (event: KeyboardEvent) => {\n if (!this.disabled) {\n this.handleKeyDown(event);\n }\n });\n });\n this.inputElement.setAttribute(\"role\", \"combobox\");\n this.inputElement.setAttribute(\"aria-autocomplete\", \"list\");\n }\n\n private updateComboBoxValueFromValue() {\n if (this.value) {\n const selectedIndex = this._itemCache.findIndex((item) => item[this.displayValuePath] === this.value);\n if (selectedIndex > -1) {\n this._comboBoxValue = { index: selectedIndex, item: this._itemCache[selectedIndex] };\n } else if (this.allowCustomValue) {\n this._comboBoxValue = this.value;\n } else {\n this._comboBoxValue = null;\n }\n }\n }\n\n public updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n if (changedProperties.has(\"currentText\")) {\n if (this.currentText) {\n this.setAttribute(\"has-value\", \"\");\n if (this._clearButton) {\n this._clearButton.style.display = \"\";\n }\n } else {\n this.removeAttribute(\"has-value\");\n }\n } else if (changedProperties.has(\"triggerOnly\") && this._list) {\n this._list.selectionType = this.triggerOnly ? SelectionType.TriggerOnly : SelectionType.Single;\n }\n }\n\n private initClearButtton(): void {\n const clearButtonTemplate = document.createElement(\"template\");\n clearButtonTemplate.innerHTML = clearSvg;\n this._clearButton = clearButtonTemplate.content.firstChild as SVGElement;\n this.appendChild(this._clearButton);\n\n this._clearButton.addEventListener(\"click\", (event) => {\n event.preventDefault();\n event.stopPropagation();\n this.opened = false;\n this.clearValue();\n });\n }\n\n private initToggleButtton(): void {\n const toggleButtonTemplate = document.createElement(\"template\");\n toggleButtonTemplate.innerHTML = toggleSvg;\n this._toggleButton = toggleButtonTemplate.content.firstChild as SVGElement;\n this.appendChild(this._toggleButton);\n\n this._toggleButton.addEventListener(\"click\", (event) => {\n event.preventDefault();\n event.stopPropagation();\n this.opened = !this.opened;\n this.select();\n });\n }\n\n private debouncedFilterItemsInMemory = debounce(this.filterItemsInMemory.bind(this), 200);\n private filterItemsInMemory(): void {\n if (this.isLazyLoadConfigured) {\n return;\n }\n let filteredInMemory = false;\n if (this.filterText) {\n if (this.filterProperty) {\n this._dataProvider.items = this._itemCache.filter((item) => {\n return item[this.filterProperty] && String(item[this.filterProperty]).indexOf(this.filterText) > -1;\n });\n filteredInMemory = true;\n } else if (this.inMemoryFilter) {\n this._dataProvider.items = this._itemCache.filter((item) => this.inMemoryFilter(this.filterText, item));\n filteredInMemory = true;\n }\n }\n if (!filteredInMemory) {\n this._dataProvider.items = this._itemCache;\n } else {\n this._list.focusIndex = null;\n }\n if (this.opened && this._popper) {\n this._popper.update();\n }\n }\n\n private ensureListAndPopperInitialized(): void {\n if (!this._list) {\n this._list = document.createElement(VirtualList.ID) as VirtualList;\n this.updateListId();\n this._list.classList.add(\"combo-box-dropdown\");\n this._list.itemHeight = this.itemHeight;\n this._list.itemGenerator = this.itemGenerator;\n this._list.selectionType = this.triggerOnly ? SelectionType.TriggerOnly : SelectionType.Single;\n this._list.setAttribute(\"focus-target\", \"\");\n Object.assign(this._list.style, {\n zIndex: \"21000\",\n boxShadow: `rgba(0, 0, 0, 0.14) 0px 2px 2px 0px,\n rgba(0, 0, 0, 0.12) 0px 1px 5px 0px,\n rgba(0, 0, 0, 0.2) 0px 3px 1px -2px`,\n background: \"white\",\n overflowY: \"auto\",\n });\n this._list.addEventListener(\"selection\", this.handleSelection);\n this._dataProvider.connectList(this._list);\n }\n if (!this._popper) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const comboBox = this;\n this._popper = createPopper(this, this._list, {\n placement: \"bottom-start\",\n modifiers: [\n {\n name: \"computeStyles\",\n options: {\n gpuAcceleration: true,\n },\n },\n {\n name: \"hide\",\n enabled: false,\n },\n {\n name: \"closeIfReferenceHidden\",\n enabled: true,\n phase: \"afterWrite\",\n fn({ state }) {\n const comboBox = state.elements.reference as ComboBox;\n comboBox.closeIfNotVisible();\n },\n },\n {\n name: \"offset\",\n options: {\n offset: ({ placement }) => {\n if (placement.indexOf(\"top\") > -1) {\n return [0, -parseInt(getComputedStyle(comboBox).paddingTop, 10)];\n }\n if (placement.indexOf(\"bottom\") > -1) {\n return [0, -parseInt(getComputedStyle(comboBox).paddingBottom, 10)];\n }\n return [0, 0];\n },\n },\n },\n {\n name: \"adjustWidthIfNeeded\",\n enabled: true,\n phase: \"read\",\n fn({ state }) {\n const list = state.elements.popper as VirtualList;\n list.increaseWidthOnNextRenderIfNeeded();\n },\n },\n ],\n });\n }\n }\n\n private closeIfNotVisible(): void {\n const elementFromPoint = this.elementFromMiddleOfComboBox();\n // elementFromPoint might be the list itself in Safari, thus it needs to be checked as well (Fixes: 244485)\n if (\n !this.contains(elementFromPoint) &&\n !this.shadowRoot.contains(elementFromPoint) &&\n elementFromPoint !== this._list\n ) {\n if (this.triggerOnly) {\n this.value = null;\n }\n this.opened = false;\n }\n }\n\n private elementFromMiddleOfComboBox(): Element {\n const rect = this.getBoundingClientRect();\n return document.elementFromPoint(rect.left + rect.width / 2, rect.top + rect.height / 2);\n }\n\n private handleSelection = (event: CustomEvent) => {\n const selectedItem = this._dataProvider.items[event.detail.index];\n if (!event.detail.selected) {\n // null selection is not allowed via clicking inside the dropdown\n this._list.selectedIndices = [event.detail.index];\n }\n this.comboBoxValue = { index: this._itemCache.indexOf(selectedItem), item: selectedItem };\n this.dispatchSelectionChangeEvent();\n this.opened = false;\n };\n\n private async handleOpenedStateChange(): Promise<void> {\n this.inputElement.setAttribute(\"aria-expanded\", String(this.opened));\n if (this.opened) {\n if (!this.disabled) {\n this.ensureListAndPopperInitialized();\n\n if (\n this.isLazyLoadConfigured &&\n (this.items.length == 0 || this._lastRequestedFilterText != this.filterText)\n ) {\n this.requestData(0, this._lastRequestedFilterText != this.filterText);\n }\n\n this.updateDropdownSizes();\n this.ownerDocument.body.appendChild(this._list);\n this.updateFocusAndSelectedIndexFromValue();\n\n window.requestAnimationFrame(() => {\n if (this._popper) {\n this._popper.update();\n }\n });\n\n window.addEventListener(\"pointerdown\", this.handleWindowPointerDown);\n\n if (!this.allowCustomValue && !this._openedByFilterTextChange) {\n this.select();\n }\n }\n this._openedByFilterTextChange = false;\n } else {\n await this._list.updateComplete;\n if (this._popper) {\n await this._popper.update;\n }\n this.ownerDocument.body.removeChild(this._list);\n window.removeEventListener(\"pointerdown\", this.handleWindowPointerDown);\n this.updateValueOnClose();\n this.clearFilter();\n this.setSelectionRange(0, 0);\n this.inputElement.removeAttribute(\"aria-activedescendant\");\n\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n }\n }\n\n private updateValueOnClose(): void {\n const oldValue = this.comboBoxValue || \"\";\n if (this.nullSettingDisallowed && !this.value && this.comboBoxValue) {\n this.restorePreviousSelection();\n } else if (this.value !== this.convertToDisplayValue(null)) {\n // value change only if needed\n const focusedItem = this._dataProvider.items[this._list.focusIndex] as any;\n if (focusedItem && focusedItem[this.displayValuePath] === this.value) {\n if (focusedItem.disabled) {\n return;\n }\n // 1. select focused item if the input's value is the same\n this.comboBoxValue = { index: this._itemCache.indexOf(focusedItem), item: focusedItem };\n } else if (this.allowCustomValue || !this.value) {\n // 2. set as a custom or empty value\n this.comboBoxValue = this.value;\n } else {\n // 3. try to search for an identical item\n const selectedIndex = this._itemCache.findIndex(\n (item) => item[this.displayValuePath] === this.value && !item.disabled,\n );\n if (selectedIndex > -1) {\n this.comboBoxValue = { index: selectedIndex, item: this._itemCache[selectedIndex] };\n } else {\n this.restorePreviousSelection(); // Fixes C1XRTYID\n }\n }\n }\n if (oldValue !== (this.comboBoxValue || \"\")) {\n this.dispatchSelectionChangeEvent();\n }\n }\n\n private restorePreviousSelection() {\n this.updateInputValue(null);\n }\n\n private updateFocusAndSelectedIndexFromValue(): void {\n if (this.comboBoxValue && !this.isCustomValue(this.comboBoxValue) && !this._openedByFilterTextChange) {\n let index = this.comboBoxValue.index;\n if (index == -1 || this.isLazyLoadConfigured) {\n index = this.items.indexOf(this.comboBoxValue.item);\n if (index == -1) {\n const selectedId = this.comboBoxValue.item.id;\n if (selectedId != null) {\n index = this.items.findIndex((item) => item.id == selectedId);\n }\n }\n }\n this._list.focusIndex = index;\n this._list.selectedIndices = index == -1 ? [] : [index];\n } else {\n this._list.focusIndex = -1;\n this._list.selectedIndices = [];\n }\n this.updateActiveDescendant();\n }\n\n private handleWindowPointerDown = (event: PointerEvent) => {\n const contains = event.target instanceof Node && this.contains(event.target);\n if (!contains && this.opened && event.composedPath().indexOf(this._list) === -1) {\n if (this.triggerOnly) {\n this.value = null;\n }\n this.opened = false;\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case \"Down\":\n case \"ArrowDown\": {\n event.preventDefault();\n this.navigateInList(+1);\n break;\n }\n case \"Up\":\n case \"ArrowUp\": {\n event.preventDefault();\n this.navigateInList(-1);\n break;\n }\n case \"Enter\": {\n if (this.opened) {\n event.preventDefault();\n event.stopPropagation();\n this.opened = false;\n }\n break;\n }\n case \"Escape\": {\n if (this.opened) {\n event.preventDefault();\n event.stopPropagation();\n if (\n this._list.selectedIndices.indexOf(this._list.focusIndex) > -1 &&\n this._dataProvider.items.length > this._list.focusIndex\n ) {\n this.opened = false;\n } else {\n this.clearFilter();\n this.updateInputValue(null);\n this.updateFocusAndSelectedIndexFromValue();\n this._list.selectedIndices.push(this._list.focusIndex);\n }\n }\n break;\n }\n case \"Tab\": {\n if (this.opened) {\n if (this.triggerOnly) {\n this.value = null;\n }\n this.opened = false;\n }\n break;\n }\n }\n };\n\n private navigateInList(offset: number): void {\n if (!this.opened) {\n this.opened = true;\n } else {\n if (this._list.focusIndex == null) {\n if (offset > 0) {\n this._list.focusIndex = 0;\n } else {\n this._list.focusIndex = Math.max(0, this._dataProvider.items.length - 1);\n }\n } else {\n this._list.focusIndex = Math.max(\n 0,\n Math.min(this._dataProvider.items.length - 1, this._list.focusIndex + offset),\n );\n }\n this.updateInputValue(this._dataProvider.items[this._list.focusIndex] as ItemData | any);\n this.updateActiveDescendant();\n if (!this.allowCustomValue) {\n this.select();\n }\n }\n }\n\n private updateActiveDescendant() {\n const focusedListItem = this._list && this._list.getListItem(this._list.focusIndex);\n if (focusedListItem) {\n this.inputElement.setAttribute(\"aria-activedescendant\", focusedListItem.id);\n } else {\n this.inputElement.removeAttribute(\"aria-activedescendant\");\n }\n }\n\n private updateInputValue(item: ItemData): void {\n this.updateComplete.then(() => {\n this.value = this.convertToDisplayValue(item);\n });\n }\n\n private convertToDisplayValue(item: ItemData): string {\n if (item) {\n return item[this.displayValuePath];\n } else if (this.comboBoxValue) {\n if (this.isCustomValue(this.comboBoxValue)) {\n return this.comboBoxValue;\n } else {\n return this.comboBoxValue.item[this.displayValuePath];\n }\n } else {\n return null;\n }\n }\n\n protected fireValueChange(immediate?: boolean): void {\n if (immediate) {\n if (this.filterText !== this.value) {\n this.filterText = this.value;\n if (!this.opened) {\n this._openedByFilterTextChange = true;\n this.opened = true;\n }\n this.dispatchFilterChangeEvent();\n this.debouncedFilterItemsInMemory();\n }\n }\n // consume both change events triggered from input, combo box provides a different API for that\n }\n\n private clearValue(): void {\n if (!this.nullSettingDisallowed) {\n this.value = null;\n this.inputElement.removeAttribute(\"aria-activedescendant\");\n if (this._list) {\n this._list.selectedIndices = [];\n }\n this.clearFilter();\n if (this.comboBoxValue) {\n this.comboBoxValue = null;\n this.dispatchSelectionChangeEvent();\n }\n }\n }\n\n private clearFilter(): void {\n if (this.filterText != null) {\n this.filterText = undefined;\n this.filterItemsInMemory();\n this.dispatchFilterChangeEvent();\n }\n }\n\n private updateDropdownSizes(): void {\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n const overlayMaxHeight = (viewportHeight - this.offsetHeight) * 0.5;\n Object.assign(this._list.style, {\n maxHeight: `${overlayMaxHeight}px`,\n minWidth: `${Math.max(this.offsetWidth, this.minimumOverlayWidth)}px`,\n maxWidth: `max(50vw, ${this.offsetWidth}px)`,\n });\n }\n\n private updateListId() {\n if (this.inputElement && this._list) {\n this._list.id = this.id + \"_list\";\n this.inputElement.setAttribute(\"aria-controls\", this._list.id);\n }\n }\n\n private isCustomValue(value: ComboBoxValue | string): value is string {\n return typeof value === \"string\";\n }\n\n private dispatchSelectionChangeEvent(): void {\n this.updateComplete\n .then(() => {\n this.dispatchEvent(\n new CustomEvent<ISelectionEvent>(\"selection-change\", {\n detail: {\n selection: this.comboBoxValue,\n isCustomValue: this.isCustomValue(this.comboBoxValue),\n },\n }),\n );\n if (this.triggerOnly) {\n this.comboBoxValue = null;\n } else {\n const comboBoxValue = this.comboBoxValue;\n if (typeof comboBoxValue === \"string\") {\n this.setFormValue(comboBoxValue);\n } else {\n this.setFormValue(comboBoxValue?.item?.caption);\n }\n }\n })\n .catch((e) => {\n console.error(\"Could not dispatch selection change event due to:\", e);\n });\n }\n\n private dispatchFilterChangeEvent(): void {\n this.dispatchEvent(\n new CustomEvent<IFilterChangeEvent>(\"filter-change\", {\n detail: { value: this.filterText },\n composed: true,\n }),\n );\n this.debouncedRequestData(0, true);\n }\n\n private get isLazyLoadConfigured(): boolean {\n return !!this._onDataRequest;\n }\n\n /**\n * Used only when lazy loading is configured.\n */\n private debouncedRequestData = debounce(this.requestData.bind(this), 250);\n private requestData(page: number, filterChanged: boolean) {\n if (this.isLazyLoadConfigured) {\n if (!this.opened) {\n if (filterChanged) {\n this._dataProvider.items = [];\n this._itemCache = [];\n }\n return;\n }\n if (this._lastRequestedPage == page && this._lastRequestedFilterText == this.filterText) {\n return;\n }\n if (this._pendingDataRequest) {\n this._pendingDataRequest.cancel(ComboBox.DATA_REQUEST_CANCELLED);\n }\n const cancellationPromise = new Promise<DataResponse>((_resolve, reject) => {\n this._pendingDataRequest = { cancel: reject };\n });\n this._lastRequestedPage = page;\n this._lastRequestedFilterText = this.filterText;\n this.setAttribute(\"loading\", \"\");\n Promise.race([cancellationPromise, this._onDataRequest(this._lastRequestedFilterText, page)])\n .then((dataResponse) => {\n if (this.filterText == this._lastRequestedFilterText && this._lastRequestedPage == page) {\n this._dataProvider.finalSizeIsKnown = dataResponse.finalSizeIsKnown;\n if (filterChanged) {\n this._dataProvider.items = dataResponse.items;\n this._itemCache = dataResponse.items;\n } else {\n this._dataProvider.addItems(dataResponse.items);\n this._itemCache = this._dataProvider.items;\n }\n if (this._list) {\n this._list.itemCount = this._dataProvider.items.length;\n }\n if (this._popper && this.opened) {\n if (this.comboBoxValue && !this.isCustomValue(this.comboBoxValue)) {\n const selectedItem = this.comboBoxValue.item;\n if (\n this._list.selectedIndices.length == 0 ||\n this.items[this._list.selectedIndices[0]] != selectedItem\n ) {\n let index = this.items.indexOf(selectedItem);\n if (index == -1) {\n const selectedId = selectedItem.id;\n if (selectedId != null) {\n index = this.items.findIndex((item) => item.id == selectedId);\n }\n }\n this.comboBoxValue.index = index;\n this._list.selectedIndices = index == -1 ? [] : [index];\n }\n }\n this.updateDropdownSizes();\n this._popper.update();\n }\n }\n this._pendingDataRequest = null;\n this.removeAttribute(\"loading\");\n })\n .catch((e) => {\n if (e !== ComboBox.DATA_REQUEST_CANCELLED) {\n console.error(\n `Data could not be loaded for filter \"${this._lastRequestedFilterText}\" and page number \"${page}\" due to the following error:\\n${e}`,\n );\n this._dataProvider.finalSizeIsKnown = true;\n\n if (this.items.length == 0) {\n this.opened = false;\n } else if (this._list) {\n this._list.itemCount = this.items.length;\n }\n this.removeAttribute(\"loading\");\n }\n this._pendingDataRequest = null;\n });\n }\n }\n\n private get defaultSlot(): HTMLSlotElement {\n return this.shadowRoot.querySelector(\"#default-slot\");\n }\n\n private onDefaultSlotChange(): void {\n this._declarativeItems = this.defaultSlot.assignedElements() as HTMLElement[];\n if (this._declarativeItems.length > 0) {\n this.finalSizeIsKnown = true;\n this.itemGenerator = (_data, index) => {\n return this._declarativeItems[index].cloneNode(true) as HTMLElement;\n };\n this.items = this._declarativeItems.map((item) => {\n const data = {\n caption: item.getAttribute(\"caption\"),\n description: item.getAttribute(\"description\"),\n };\n if (\"caption\" != this.displayValuePath && \"description\" != this.displayValuePath) {\n data[this.displayValuePath] =\n item[this.displayValuePath] || item.getAttribute(this.displayValuePath);\n }\n return data;\n });\n }\n }\n}\n\nComboBox.ensureDefined();\n"],"names":["toggleSvg","clearSvg","TAG_NAME","debounce","func","delay","timeout","args","idCounter","_ComboBox","_a","SDInput","filterText","item","lowerCaseFilter","generator","event","selectedItem","ListDataProvider","value","items","onDataRequest","page","css","unsafeCSS","style","html","name","oldValue","newValue","changedProperties","selectedIndex","SelectionType","clearButtonTemplate","toggleButtonTemplate","filteredInMemory","VirtualList","comboBox","createPopper","state","placement","elementFromPoint","rect","focusedItem","index","selectedId","offset","focusedListItem","immediate","overlayMaxHeight","comboBoxValue","e","filterChanged","cancellationPromise","_resolve","reject","dataResponse","_data","data","__decorateClass","property","ComboBox"],"mappings":";;;;;;u4KAAeA,IAAA;AAAA;AAAA;AAAA,GCAAC,IAAA;AAAA;AAAA;AAAA;;;;;;ACQf,MAAMC,IAAW;AAEjB,SAASC,EAAYC,GAAiCC,GAA4B;AAC1E,MAAAC;AACJ,SAAO,YAAaC,GAAW;AAC3B,IAAID,KAAW,QACX,aAAaA,CAAO,GAExBA,IAAU,OAAO,WAAW,MAAMF,EAAK,GAAGG,CAAI,GAAGF,CAAK;AAAA,EAAA;AAE9D;AAsBA,IAAIG,IAAY;;AAuChB,MAAqBC,KAArBC,IAAA,cAAsCC,EAAQ;AAAA,EA6D1C,cAAc;AACJ,aAjDV,KAAO,SAAS,IAEhB,KAAO,aAAa,IAQpB,KAAO,mBAAmB,WAInB,KAAA,KAAaD,EAAS,KAAK,MAAMF,KAEjC,KAAA,iBAAiC,CAACI,GAAYC,MAAS;AAC1D,UAAI,CAACD;AACM,eAAA;AAEL,YAAAE,IAAkBF,EAAW;AAI/B,aAHA,UAAOC,EAAK,WAAW,YAAYA,EAAK,QAAQ,YAAY,EAAE,SAASC,CAAe,KAGtF,OAAOD,EAAK,eAAe,YAAYA,EAAK,YAAY,YAAY,EAAE,SAASC,CAAe;AAAA,IAG3F,GAIX,KAAO,sBAAsB,KAQ7B,KAAQ,iBAAgCC,GACxC,KAAQ,aAAoB,IAkO5B,KAAQ,+BAA+BZ,EAAS,KAAK,oBAAoB,KAAK,IAAI,GAAG,GAAG,GAwHhF,KAAA,kBAAkB,CAACa,MAAuB;AAC9C,YAAMC,IAAe,KAAK,cAAc,MAAMD,EAAM,OAAO,KAAK;AAC5D,MAACA,EAAM,OAAO,aAEd,KAAK,MAAM,kBAAkB,CAACA,EAAM,OAAO,KAAK,IAE/C,KAAA,gBAAgB,EAAE,OAAO,KAAK,WAAW,QAAQC,CAAY,GAAG,MAAMA,KAC3E,KAAK,6BAA6B,GAClC,KAAK,SAAS;AAAA,IAAA,GA8GV,KAAA,0BAA0B,CAACD,MAAwB;AAEnD,MAAA,EADaA,EAAM,kBAAkB,QAAQ,KAAK,SAASA,EAAM,MAAM,MAC1D,KAAK,UAAUA,EAAM,eAAe,QAAQ,KAAK,KAAK,MAAM,OACrE,KAAK,gBACL,KAAK,QAAQ,OAEjB,KAAK,SAAS;AAAA,IAClB,GAGI,KAAA,gBAAgB,CAACA,MAAyB;AAC9C,cAAQA,EAAM,KAAK;AAAA,QACf,KAAK;AAAA,QACL,KAAK,aAAa;AACd,UAAAA,EAAM,eAAe,GACrB,KAAK,eAAe,CAAE;AACtB;AAAA,QACJ;AAAA,QACA,KAAK;AAAA,QACL,KAAK,WAAW;AACZ,UAAAA,EAAM,eAAe,GACrB,KAAK,eAAe,EAAE;AACtB;AAAA,QACJ;AAAA,QACA,KAAK,SAAS;AACV,UAAI,KAAK,WACLA,EAAM,eAAe,GACrBA,EAAM,gBAAgB,GACtB,KAAK,SAAS;AAElB;AAAA,QACJ;AAAA,QACA,KAAK,UAAU;AACX,UAAI,KAAK,WACLA,EAAM,eAAe,GACrBA,EAAM,gBAAgB,GAElB,KAAK,MAAM,gBAAgB,QAAQ,KAAK,MAAM,UAAU,IAAI,MAC5D,KAAK,cAAc,MAAM,SAAS,KAAK,MAAM,aAE7C,KAAK,SAAS,MAEd,KAAK,YAAY,GACjB,KAAK,iBAAiB,IAAI,GAC1B,KAAK,qCAAqC,GAC1C,KAAK,MAAM,gBAAgB,KAAK,KAAK,MAAM,UAAU;AAG7D;AAAA,QACJ;AAAA,QACA,KAAK,OAAO;AACR,UAAI,KAAK,WACD,KAAK,gBACL,KAAK,QAAQ,OAEjB,KAAK,SAAS;AAElB;AAAA,QACJ;AAAA,MACJ;AAAA,IAAA,GA+JJ,KAAQ,uBAAuBb,EAAS,KAAK,YAAY,KAAK,IAAI,GAAG,GAAG,GAhqB/D,KAAA,gBAAgB,IAAIe,KACzB,KAAK,cAAc,mBAAmB;AAAA,EAC1C;AAAA,EAEA,IAAW,mCAA4C;AACnD,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAW,iCAAiCC,GAAgB;AAChD,YAAA;AAAA,MACJ;AAAA,IAAA,GAEJ,KAAK,cAAcA;AAAA,EACvB;AAAA,EAEA,IAAW,gBAA+B;AACtC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAW,cAAcA,GAAsB;AAC3C,SAAK,iBAAiBA,GAClB,KAAK,UACA,KAAA,MAAM,gBAAgB,KAAK;AAAA,EAExC;AAAA,EAEA,IAAW,QAAe;AACtB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAW,MAAMC,GAAc;AAC3B,SAAK,aAAaA,GACd,KAAK,SAAS,CAAC,KAAK,iBACpB,KAAK,6BAA6B,GAEtC,KAAK,oBAAoB,GACrB,KAAK,UAAU,KAAK,WACpB,KAAK,QAAQ;EAErB;AAAA,EAEA,IAAW,mBAA4B;AACnC,WAAO,KAAK,cAAc;AAAA,EAC9B;AAAA,EAEA,IAAW,iBAAiBD,GAAgB;AACxC,SAAK,cAAc,mBAAmBA;AAAA,EAC1C;AAAA,EAEO,kBAAkBE,GAAkF;AACvG,QAAI,CAACA;AACK,YAAA,IAAI,MAAM,kFAAkF;AAEtG,SAAK,cAAc,mBAAmB,IACtC,KAAK,iBAAiBA,GACjB,KAAA,cAAc,gBAAgB,CAACC,MAAiB;AAC5C,WAAA,YAAYA,GAAM,EAAK;AAAA,IAAA;AAAA,EAEpC;AAAA,EAEA,IAAW,gBAAwC;AAC/C,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAW,cAAcH,GAA+B;AACpD,SAAK,iBAAiBA,GACtB,KAAK,iBAAiB,IAAI;AAAA,EAC9B;AAAA,EAEA,IAAW,gBAAwB;AAC/B,WAAI,KAAK,cAAc,KAAK,aAAa,KAAK,CAAC,KAAK,gBACzC,KAEJ,KAAK,cAAc;AAAA,EAC9B;AAAA,EAEA,IAAW,eAAuB;AAC9B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEO,OAAa;AAChB,SAAK,SAAS;AAAA,EAClB;AAAA,EAEA,WAAW,SAAS;AACT,WAAA;AAAA,MACHI;AAAA,kBACMC,EAAUC,CAAK,CAAC;AAAA;AAAA,IAAA;AAAA,EAG9B;AAAA,EAEO,uBAA6B;AAChC,UAAM,qBAAqB,GACvB,KAAK,YACL,KAAK,QAAQ,WACb,KAAK,UAAU;AAAA,EAEvB;AAAA,EAEO,SAAyB;AACrB,WAAAC;AAAA,cACD,MAAM,QAAQ;AAAA,gCACI,KAAK,mBAAmB;AAAA;AAAA,EAEpD;AAAA,EAEO,yBAAyBC,GAAcC,GAAkBC,GAAwB;AAEpF,QADM,MAAA,yBAAyBF,GAAMC,GAAUC,CAAQ,GACnDD,MAAaC;AACb,cAAQF,GAAM;AAAA,QACV,KAAK,UAAU;AACX,eAAK,wBAAwB;AAC7B;AAAA,QACJ;AAAA,QACA,KAAK,eAAe;AAChB,UAAI,KAAK,UACA,KAAA,MAAM,aAAa,KAAK;AAEjC;AAAA,QACJ;AAAA,QACA,KAAK,MAAM;AACP,eAAK,aAAa;AAClB;AAAA,QACJ;AAAA,MACJ;AAAA,EAER;AAAA,EAEO,aAAaG,GAAyC;AACzD,UAAM,aAAaA,CAAiB,GAEhC,KAAK,SAAS,CAAC,KAAK,iBACpB,KAAK,6BAA6B,GAEtC,OAAO,sBAAsB,MAAM;AAC/B,WAAK,iBAAiB,GACtB,KAAK,kBAAkB,GAElB,KAAA,iBAAiB,SAAS,MAAM;AAC7B,QAAC,KAAK,aACD,KAAA,SAAS,CAAC,KAAK;AAAA,MACxB,CACH,GACI,KAAA,iBAAiB,WAAW,CAACd,MAAyB;AACnD,QAAC,KAAK,YACN,KAAK,cAAcA,CAAK;AAAA,MAC5B,CACH;AAAA,IAAA,CACJ,GACI,KAAA,aAAa,aAAa,QAAQ,UAAU,GAC5C,KAAA,aAAa,aAAa,qBAAqB,MAAM;AAAA,EAC9D;AAAA,EAEQ,+BAA+B;AACnC,QAAI,KAAK,OAAO;AACN,YAAAe,IAAgB,KAAK,WAAW,UAAU,CAAClB,MAASA,EAAK,KAAK,gBAAgB,MAAM,KAAK,KAAK;AACpG,MAAIkB,IAAgB,KACX,KAAA,iBAAiB,EAAE,OAAOA,GAAe,MAAM,KAAK,WAAWA,CAAa,MAC1E,KAAK,mBACZ,KAAK,iBAAiB,KAAK,QAE3B,KAAK,iBAAiB;AAAA,IAE9B;AAAA,EACJ;AAAA,EAEO,QAAQD,GAAyC;AACpD,UAAM,QAAQA,CAAiB,GAC3BA,EAAkB,IAAI,aAAa,IAC/B,KAAK,eACA,KAAA,aAAa,aAAa,EAAE,GAC7B,KAAK,iBACA,KAAA,aAAa,MAAM,UAAU,OAGtC,KAAK,gBAAgB,WAAW,IAE7BA,EAAkB,IAAI,aAAa,KAAK,KAAK,UACpD,KAAK,MAAM,gBAAgB,KAAK,cAAcE,EAAc,cAAcA,EAAc;AAAA,EAEhG;AAAA,EAEQ,mBAAyB;AACvB,UAAAC,IAAsB,SAAS,cAAc,UAAU;AAC7D,IAAAA,EAAoB,YAAYhC,GAC3B,KAAA,eAAegC,EAAoB,QAAQ,YAC3C,KAAA,YAAY,KAAK,YAAY,GAElC,KAAK,aAAa,iBAAiB,SAAS,CAACjB,MAAU;AACnD,MAAAA,EAAM,eAAe,GACrBA,EAAM,gBAAgB,GACtB,KAAK,SAAS,IACd,KAAK,WAAW;AAAA,IAAA,CACnB;AAAA,EACL;AAAA,EAEQ,oBAA0B;AACxB,UAAAkB,IAAuB,SAAS,cAAc,UAAU;AAC9D,IAAAA,EAAqB,YAAYlC,GAC5B,KAAA,gBAAgBkC,EAAqB,QAAQ,YAC7C,KAAA,YAAY,KAAK,aAAa,GAEnC,KAAK,cAAc,iBAAiB,SAAS,CAAClB,MAAU;AACpD,MAAAA,EAAM,eAAe,GACrBA,EAAM,gBAAgB,GACjB,KAAA,SAAS,CAAC,KAAK,QACpB,KAAK,OAAO;AAAA,IAAA,CACf;AAAA,EACL;AAAA,EAGQ,sBAA4B;AAChC,QAAI,KAAK;AACL;AAEJ,QAAImB,IAAmB;AACvB,IAAI,KAAK,eACD,KAAK,kBACL,KAAK,cAAc,QAAQ,KAAK,WAAW,OAAO,CAACtB,MACxCA,EAAK,KAAK,cAAc,KAAK,OAAOA,EAAK,KAAK,cAAc,CAAC,EAAE,QAAQ,KAAK,UAAU,IAAI,EACpG,GACkBsB,IAAA,MACZ,KAAK,mBACZ,KAAK,cAAc,QAAQ,KAAK,WAAW,OAAO,CAACtB,MAAS,KAAK,eAAe,KAAK,YAAYA,CAAI,CAAC,GACnFsB,IAAA,MAGtBA,IAGD,KAAK,MAAM,aAAa,OAFnB,KAAA,cAAc,QAAQ,KAAK,YAIhC,KAAK,UAAU,KAAK,WACpB,KAAK,QAAQ;EAErB;AAAA,EAEQ,iCAAuC;AAoBvC,QAnBC,KAAK,UACN,KAAK,QAAQ,SAAS,cAAcC,EAAY,EAAE,GAClD,KAAK,aAAa,GACb,KAAA,MAAM,UAAU,IAAI,oBAAoB,GACxC,KAAA,MAAM,aAAa,KAAK,YACxB,KAAA,MAAM,gBAAgB,KAAK,eAChC,KAAK,MAAM,gBAAgB,KAAK,cAAcJ,EAAc,cAAcA,EAAc,QACnF,KAAA,MAAM,aAAa,gBAAgB,EAAE,GACnC,OAAA,OAAO,KAAK,MAAM,OAAO;AAAA,MAC5B,QAAQ;AAAA,MACR,WAAW;AAAA;AAAA;AAAA,MAGX,YAAY;AAAA,MACZ,WAAW;AAAA,IAAA,CACd,GACD,KAAK,MAAM,iBAAiB,aAAa,KAAK,eAAe,GACxD,KAAA,cAAc,YAAY,KAAK,KAAK,IAEzC,CAAC,KAAK,SAAS;AAEf,YAAMK,IAAW;AACjB,WAAK,UAAUC,EAAa,MAAM,KAAK,OAAO;AAAA,QAC1C,WAAW;AAAA,QACX,WAAW;AAAA,UACP;AAAA,YACI,MAAM;AAAA,YACN,SAAS;AAAA,cACL,iBAAiB;AAAA,YACrB;AAAA,UACJ;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,SAAS;AAAA,UACb;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,SAAS;AAAA,YACT,OAAO;AAAA,YACP,GAAG,EAAE,OAAAC,KAAS;AAEVF,cADiBE,EAAM,SAAS,UACvB,kBAAkB;AAAA,YAC/B;AAAA,UACJ;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,SAAS;AAAA,cACL,QAAQ,CAAC,EAAE,WAAAC,QACHA,EAAU,QAAQ,KAAK,IAAI,KACpB,CAAC,GAAG,CAAC,SAAS,iBAAiBH,CAAQ,EAAE,YAAY,EAAE,CAAC,IAE/DG,EAAU,QAAQ,QAAQ,IAAI,KACvB,CAAC,GAAG,CAAC,SAAS,iBAAiBH,CAAQ,EAAE,eAAe,EAAE,CAAC,IAE/D,CAAC,GAAG,CAAC;AAAA,YAEpB;AAAA,UACJ;AAAA,UACA;AAAA,YACI,MAAM;AAAA,YACN,SAAS;AAAA,YACT,OAAO;AAAA,YACP,GAAG,EAAE,OAAAE,KAAS;AAEV,cADaA,EAAM,SAAS,OACvB,kCAAkC;AAAA,YAC3C;AAAA,UACJ;AAAA,QACJ;AAAA,MAAA,CACH;AAAA,IACL;AAAA,EACJ;AAAA,EAEQ,oBAA0B;AACxB,UAAAE,IAAmB,KAAK;AAE9B,IACI,CAAC,KAAK,SAASA,CAAgB,KAC/B,CAAC,KAAK,WAAW,SAASA,CAAgB,KAC1CA,MAAqB,KAAK,UAEtB,KAAK,gBACL,KAAK,QAAQ,OAEjB,KAAK,SAAS;AAAA,EAEtB;AAAA,EAEQ,8BAAuC;AACrC,UAAAC,IAAO,KAAK;AACX,WAAA,SAAS,iBAAiBA,EAAK,OAAOA,EAAK,QAAQ,GAAGA,EAAK,MAAMA,EAAK,SAAS,CAAC;AAAA,EAC3F;AAAA,EAaA,MAAc,0BAAyC;AACnD,SAAK,aAAa,aAAa,iBAAiB,OAAO,KAAK,MAAM,CAAC,GAC/D,KAAK,UACA,KAAK,aACN,KAAK,+BAA+B,GAGhC,KAAK,yBACJ,KAAK,MAAM,UAAU,KAAK,KAAK,4BAA4B,KAAK,eAEjE,KAAK,YAAY,GAAG,KAAK,4BAA4B,KAAK,UAAU,GAGxE,KAAK,oBAAoB,GACzB,KAAK,cAAc,KAAK,YAAY,KAAK,KAAK,GAC9C,KAAK,qCAAqC,GAE1C,OAAO,sBAAsB,MAAM;AAC/B,MAAI,KAAK,WACL,KAAK,QAAQ;IACjB,CACH,GAEM,OAAA,iBAAiB,eAAe,KAAK,uBAAuB,GAE/D,CAAC,KAAK,oBAAoB,CAAC,KAAK,6BAChC,KAAK,OAAO,IAGpB,KAAK,4BAA4B,OAEjC,MAAM,KAAK,MAAM,gBACb,KAAK,WACL,MAAM,KAAK,QAAQ,QAEvB,KAAK,cAAc,KAAK,YAAY,KAAK,KAAK,GACvC,OAAA,oBAAoB,eAAe,KAAK,uBAAuB,GACtE,KAAK,mBAAmB,GACxB,KAAK,YAAY,GACZ,KAAA,kBAAkB,GAAG,CAAC,GACtB,KAAA,aAAa,gBAAgB,uBAAuB,GAErD,KAAK,YACL,KAAK,QAAQ,WACb,KAAK,UAAU;AAAA,EAG3B;AAAA,EAEQ,qBAA2B;AACzB,UAAAd,IAAW,KAAK,iBAAiB;AACvC,QAAI,KAAK,yBAAyB,CAAC,KAAK,SAAS,KAAK;AAClD,WAAK,yBAAyB;AAAA,aACvB,KAAK,UAAU,KAAK,sBAAsB,IAAI,GAAG;AAExD,YAAMe,IAAc,KAAK,cAAc,MAAM,KAAK,MAAM,UAAU;AAClE,UAAIA,KAAeA,EAAY,KAAK,gBAAgB,MAAM,KAAK,OAAO;AAClE,YAAIA,EAAY;AACZ;AAGC,aAAA,gBAAgB,EAAE,OAAO,KAAK,WAAW,QAAQA,CAAW,GAAG,MAAMA;MACnE,WAAA,KAAK,oBAAoB,CAAC,KAAK;AAEtC,aAAK,gBAAgB,KAAK;AAAA,WACvB;AAEG,cAAAZ,IAAgB,KAAK,WAAW;AAAA,UAClC,CAAClB,MAASA,EAAK,KAAK,gBAAgB,MAAM,KAAK,SAAS,CAACA,EAAK;AAAA,QAAA;AAElE,QAAIkB,IAAgB,KACX,KAAA,gBAAgB,EAAE,OAAOA,GAAe,MAAM,KAAK,WAAWA,CAAa,MAEhF,KAAK,yBAAyB;AAAA,MAEtC;AAAA,IACJ;AACI,IAAAH,OAAc,KAAK,iBAAiB,OACpC,KAAK,6BAA6B;AAAA,EAE1C;AAAA,EAEQ,2BAA2B;AAC/B,SAAK,iBAAiB,IAAI;AAAA,EAC9B;AAAA,EAEQ,uCAA6C;AAC7C,QAAA,KAAK,iBAAiB,CAAC,KAAK,cAAc,KAAK,aAAa,KAAK,CAAC,KAAK,2BAA2B;AAC9F,UAAAgB,IAAQ,KAAK,cAAc;AAC3B,WAAAA,KAAS,MAAM,KAAK,0BACpBA,IAAQ,KAAK,MAAM,QAAQ,KAAK,cAAc,IAAI,GAC9CA,KAAS,KAAI;AACP,cAAAC,IAAa,KAAK,cAAc,KAAK;AAC3C,QAAIA,KAAc,SACdD,IAAQ,KAAK,MAAM,UAAU,CAAC/B,MAASA,EAAK,MAAMgC,CAAU;AAAA,MAEpE;AAEJ,WAAK,MAAM,aAAaD,GACxB,KAAK,MAAM,kBAAkBA,KAAS,KAAK,CAAC,IAAI,CAACA,CAAK;AAAA,IAAA;AAEtD,WAAK,MAAM,aAAa,IACnB,KAAA,MAAM,kBAAkB;AAEjC,SAAK,uBAAuB;AAAA,EAChC;AAAA,EAgEQ,eAAeE,GAAsB;AACrC,IAAC,KAAK,UAGF,KAAK,MAAM,cAAc,OACrBA,IAAS,IACT,KAAK,MAAM,aAAa,IAEnB,KAAA,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,cAAc,MAAM,SAAS,CAAC,IAGtE,KAAA,MAAM,aAAa,KAAK;AAAA,MACzB;AAAA,MACA,KAAK,IAAI,KAAK,cAAc,MAAM,SAAS,GAAG,KAAK,MAAM,aAAaA,CAAM;AAAA,IAAA,GAGpF,KAAK,iBAAiB,KAAK,cAAc,MAAM,KAAK,MAAM,UAAU,CAAmB,GACvF,KAAK,uBAAuB,GACvB,KAAK,oBACN,KAAK,OAAO,KAjBhB,KAAK,SAAS;AAAA,EAoBtB;AAAA,EAEQ,yBAAyB;AACvB,UAAAC,IAAkB,KAAK,SAAS,KAAK,MAAM,YAAY,KAAK,MAAM,UAAU;AAClF,IAAIA,IACA,KAAK,aAAa,aAAa,yBAAyBA,EAAgB,EAAE,IAErE,KAAA,aAAa,gBAAgB,uBAAuB;AAAA,EAEjE;AAAA,EAEQ,iBAAiBlC,GAAsB;AACtC,SAAA,eAAe,KAAK,MAAM;AACtB,WAAA,QAAQ,KAAK,sBAAsBA,CAAI;AAAA,IAAA,CAC/C;AAAA,EACL;AAAA,EAEQ,sBAAsBA,GAAwB;AAClD,WAAIA,IACOA,EAAK,KAAK,gBAAgB,IAC1B,KAAK,gBACR,KAAK,cAAc,KAAK,aAAa,IAC9B,KAAK,gBAEL,KAAK,cAAc,KAAK,KAAK,gBAAgB,IAGjD;AAAA,EAEf;AAAA,EAEU,gBAAgBmC,GAA2B;AACjD,IAAIA,KACI,KAAK,eAAe,KAAK,UACzB,KAAK,aAAa,KAAK,OAClB,KAAK,WACN,KAAK,4BAA4B,IACjC,KAAK,SAAS,KAElB,KAAK,0BAA0B,GAC/B,KAAK,6BAA6B;AAAA,EAI9C;AAAA,EAEQ,aAAmB;AACnB,IAAC,KAAK,0BACN,KAAK,QAAQ,MACR,KAAA,aAAa,gBAAgB,uBAAuB,GACrD,KAAK,UACA,KAAA,MAAM,kBAAkB,KAEjC,KAAK,YAAY,GACb,KAAK,kBACL,KAAK,gBAAgB,MACrB,KAAK,6BAA6B;AAAA,EAG9C;AAAA,EAEQ,cAAoB;AACpB,IAAA,KAAK,cAAc,SACnB,KAAK,aAAa,QAClB,KAAK,oBAAoB,GACzB,KAAK,0BAA0B;AAAA,EAEvC;AAAA,EAEQ,sBAA4B;AAE1B,UAAAC,MADiB,OAAO,eAAe,SAAS,gBAAgB,gBAC3B,KAAK,gBAAgB;AACzD,WAAA,OAAO,KAAK,MAAM,OAAO;AAAA,MAC5B,WAAW,GAAGA,CAAgB;AAAA,MAC9B,UAAU,GAAG,KAAK,IAAI,KAAK,aAAa,KAAK,mBAAmB,CAAC;AAAA,MACjE,UAAU,aAAa,KAAK,WAAW;AAAA,IAAA,CAC1C;AAAA,EACL;AAAA,EAEQ,eAAe;AACf,IAAA,KAAK,gBAAgB,KAAK,UACrB,KAAA,MAAM,KAAK,KAAK,KAAK,SAC1B,KAAK,aAAa,aAAa,iBAAiB,KAAK,MAAM,EAAE;AAAA,EAErE;AAAA,EAEQ,cAAc9B,GAAgD;AAClE,WAAO,OAAOA,KAAU;AAAA,EAC5B;AAAA,EAEQ,+BAAqC;AACpC,SAAA,eACA,KAAK,MAAM;;AASR,UARK,KAAA;AAAA,QACD,IAAI,YAA6B,oBAAoB;AAAA,UACjD,QAAQ;AAAA,YACJ,WAAW,KAAK;AAAA,YAChB,eAAe,KAAK,cAAc,KAAK,aAAa;AAAA,UACxD;AAAA,QAAA,CACH;AAAA,MAAA,GAED,KAAK;AACL,aAAK,gBAAgB;AAAA,WAClB;AACH,cAAM+B,IAAgB,KAAK;AACvB,QAAA,OAAOA,KAAkB,WACzB,KAAK,aAAaA,CAAa,IAE1B,KAAA,cAAaxC,IAAAwC,KAAA,gBAAAA,EAAe,SAAf,gBAAAxC,EAAqB,OAAO;AAAA,MAEtD;AAAA,IAAA,CACH,EACA,MAAM,CAACyC,MAAM;AACF,cAAA,MAAM,qDAAqDA,CAAC;AAAA,IAAA,CACvE;AAAA,EACT;AAAA,EAEQ,4BAAkC;AACjC,SAAA;AAAA,MACD,IAAI,YAAgC,iBAAiB;AAAA,QACjD,QAAQ,EAAE,OAAO,KAAK,WAAW;AAAA,QACjC,UAAU;AAAA,MAAA,CACb;AAAA,IAAA,GAEA,KAAA,qBAAqB,GAAG,EAAI;AAAA,EACrC;AAAA,EAEA,IAAY,uBAAgC;AACjC,WAAA,CAAC,CAAC,KAAK;AAAA,EAClB;AAAA,EAMQ,YAAY7B,GAAc8B,GAAwB;AACtD,QAAI,KAAK,sBAAsB;AACvB,UAAA,CAAC,KAAK,QAAQ;AACd,QAAIA,MACK,KAAA,cAAc,QAAQ,IAC3B,KAAK,aAAa;AAEtB;AAAA,MACJ;AACA,UAAI,KAAK,sBAAsB9B,KAAQ,KAAK,4BAA4B,KAAK;AACzE;AAEJ,MAAI,KAAK,uBACA,KAAA,oBAAoB,OAAOZ,EAAS,sBAAsB;AAEnE,YAAM2C,IAAsB,IAAI,QAAsB,CAACC,GAAUC,MAAW;AACnE,aAAA,sBAAsB,EAAE,QAAQA,EAAO;AAAA,MAAA,CAC/C;AACD,WAAK,qBAAqBjC,GAC1B,KAAK,2BAA2B,KAAK,YAChC,KAAA,aAAa,WAAW,EAAE,GAC/B,QAAQ,KAAK,CAAC+B,GAAqB,KAAK,eAAe,KAAK,0BAA0B/B,CAAI,CAAC,CAAC,EACvF,KAAK,CAACkC,MAAiB;AACpB,YAAI,KAAK,cAAc,KAAK,4BAA4B,KAAK,sBAAsBlC,MAC1E,KAAA,cAAc,mBAAmBkC,EAAa,kBAC/CJ,KACK,KAAA,cAAc,QAAQI,EAAa,OACxC,KAAK,aAAaA,EAAa,UAE1B,KAAA,cAAc,SAASA,EAAa,KAAK,GACzC,KAAA,aAAa,KAAK,cAAc,QAErC,KAAK,UACL,KAAK,MAAM,YAAY,KAAK,cAAc,MAAM,SAEhD,KAAK,WAAW,KAAK,SAAQ;AAC7B,cAAI,KAAK,iBAAiB,CAAC,KAAK,cAAc,KAAK,aAAa,GAAG;AACzD,kBAAAvC,IAAe,KAAK,cAAc;AACxC,gBACI,KAAK,MAAM,gBAAgB,UAAU,KACrC,KAAK,MAAM,KAAK,MAAM,gBAAgB,CAAC,CAAC,KAAKA,GAC/C;AACE,kBAAI2B,IAAQ,KAAK,MAAM,QAAQ3B,CAAY;AAC3C,kBAAI2B,KAAS,IAAI;AACb,sBAAMC,IAAa5B,EAAa;AAChC,gBAAI4B,KAAc,SACdD,IAAQ,KAAK,MAAM,UAAU,CAAC/B,MAASA,EAAK,MAAMgC,CAAU;AAAA,cAEpE;AACA,mBAAK,cAAc,QAAQD,GAC3B,KAAK,MAAM,kBAAkBA,KAAS,KAAK,CAAC,IAAI,CAACA,CAAK;AAAA,YAC1D;AAAA,UACJ;AACA,eAAK,oBAAoB,GACzB,KAAK,QAAQ;QACjB;AAEJ,aAAK,sBAAsB,MAC3B,KAAK,gBAAgB,SAAS;AAAA,MAAA,CACjC,EACA,MAAM,CAACO,MAAM;AACN,QAAAA,MAAMzC,EAAS,2BACP,QAAA;AAAA,UACJ,wCAAwC,KAAK,wBAAwB,sBAAsBY,CAAI;AAAA,EAAkC6B,CAAC;AAAA,QAAA,GAEtI,KAAK,cAAc,mBAAmB,IAElC,KAAK,MAAM,UAAU,IACrB,KAAK,SAAS,KACP,KAAK,UACP,KAAA,MAAM,YAAY,KAAK,MAAM,SAEtC,KAAK,gBAAgB,SAAS,IAElC,KAAK,sBAAsB;AAAA,MAAA,CAC9B;AAAA,IACT;AAAA,EACJ;AAAA,EAEA,IAAY,cAA+B;AAChC,WAAA,KAAK,WAAW,cAAc,eAAe;AAAA,EACxD;AAAA,EAEQ,sBAA4B;AAC3B,SAAA,oBAAoB,KAAK,YAAY,iBAAiB,GACvD,KAAK,kBAAkB,SAAS,MAChC,KAAK,mBAAmB,IACnB,KAAA,gBAAgB,CAACM,GAAOb,MAClB,KAAK,kBAAkBA,CAAK,EAAE,UAAU,EAAI,GAEvD,KAAK,QAAQ,KAAK,kBAAkB,IAAI,CAAC/B,MAAS;AAC9C,YAAM6C,IAAO;AAAA,QACT,SAAS7C,EAAK,aAAa,SAAS;AAAA,QACpC,aAAaA,EAAK,aAAa,aAAa;AAAA,MAAA;AAEhD,aAAiB,KAAK,oBAAlB,aAAuD,KAAK,oBAAtB,kBACjC6C,EAAA,KAAK,gBAAgB,IACtB7C,EAAK,KAAK,gBAAgB,KAAKA,EAAK,aAAa,KAAK,gBAAgB,IAEvE6C;AAAA,IAAA,CACV;AAAA,EAET;AACJ,GAt0BIhD,EAAuB,KAAaR,GACpCQ,EAAc,gBAAgB,MAAY;AACtC,EAAA0B,EAAY,cAAc,GACrB,eAAe,IAAI1B,EAAS,EAAE,KAChB,eAAA,OAAOA,EAAS,IAAIA,CAAQ;AAC/C,GAEJA,EAAO,iBAAiB,IAExBA,EAAwB,yBAAiC,uBAV7DA;AAaWiD,EAAA;AAAA,EADNC,EAAS,EAAE,MAAM,SAAS,SAAS,IAAM;AAAA,GAZzBnD,EAaV,WAAA,UAAA,CAAA;AAEAkD,EAAA;AAAA,EADNC,EAAS,EAAE,MAAM,QAAQ,WAAW,eAAe;AAAA,GAdnCnD,EAeV,WAAA,cAAA,CAAA;AAEAkD,EAAA;AAAA,EADNC,EAAS,EAAE,MAAM,SAAS,WAAW,sBAAsB,SAAS,IAAM;AAAA,GAhB1DnD,EAiBV,WAAA,oBAAA,CAAA;AAEAkD,EAAA;AAAA,EADNC,EAAS,EAAE,MAAM,SAAS,WAAW,gBAAgB,SAAS,IAAM;AAAA,GAlBpDnD,EAmBV,WAAA,eAAA,CAAA;AAEAkD,EAAA;AAAA,EADNC,EAAS,EAAE,MAAM,SAAS,WAAW,2BAA2B,SAAS,IAAM;AAAA,GApB/DnD,EAqBV,WAAA,yBAAA,CAAA;AAEAkD,EAAA;AAAA,EADNC,EAAS,EAAE,MAAM,QAAQ,WAAW,sBAAsB,YAAY,IAAM;AAAA,GAtB5DnD,EAuBV,WAAA,oBAAA,CAAA;AAEAkD,EAAA;AAAA,EADNC,EAAS,EAAE,MAAM,QAAQ,WAAW,mBAAmB,YAAY,IAAM;AAAA,GAxBzDnD,EAyBV,WAAA,kBAAA,CAAA;AAEAkD,EAAA;AAAA,EADNC,EAAS,EAAE,MAAM,QAAQ,WAAW,IAAM,SAAS,IAAM;AAAA,GA1BzCnD,EA2BV,WAAA,MAAA,CAAA;AA3BX,IAAqBoD,IAArBpD;AAy0BAoD,EAAS,cAAc;"}
1
+ {"version":3,"file":"combo-box.mjs","sources":["../toggle.svg?raw","../clear.svg?raw","../combo-box.ts"],"sourcesContent":["export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" class=\\\"toggle-button\\\" slot=\\\"suffix\\\" viewBox=\\\"0 0 16 16\\\">\\r\\n <path d=\\\"M13 4v2l-5 5-5-5v-2l5 5z\\\"/>\\r\\n</svg>\\r\\n\"","export default \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" class=\\\"clear-button\\\" slot=\\\"suffix\\\" viewBox=\\\"0 0 16 16\\\">\\r\\n <path d=\\\"M12.96 4.46l-1.42-1.42-3.54 3.55-3.54-3.55-1.42 1.42 3.55 3.54-3.55 3.54 1.42 1.42 3.54-3.55 3.54 3.55 1.42-1.42-3.55-3.54 3.55-3.54z\\\"/>\\r\\n</svg>\\r\\n\"","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { unsafeCSS, PropertyValues, css, TemplateResult, html } from \"lit\";\nimport { property } from \"lit/decorators/property.js\";\nimport { createPopper, Instance as Popper } from \"@popperjs/core\";\nimport SDInput, { CustomEventMap as InputCustomEventMap } from \"@cas-smartdesign/lit-input\";\nimport VirtualList, { SelectionType, ItemGenerator, ListDataProvider } from \"@cas-smartdesign/virtual-list\";\nimport { ItemData, generator } from \"@cas-smartdesign/list-item\";\n\nconst TAG_NAME = \"sd-combo-box\";\n\nfunction debounce<T>(func: (...args: T[]) => unknown, delay: number): typeof func {\n let timeout: number;\n return function (...args: T[]) {\n if (timeout != null) {\n clearTimeout(timeout);\n }\n timeout = window.setTimeout(() => func(...args), delay);\n };\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TAG_NAME]: ComboBox;\n }\n}\n\nimport style from \"./style.scss?inline\";\nimport toggleSvg from \"./toggle.svg?raw\";\nimport clearSvg from \"./clear.svg?raw\";\n\nexport type ComboBoxValue = {\n index: number;\n item: ItemData | any;\n};\nexport type InMemoryFilter = (filterText: string, item: any) => boolean;\nexport type DataResponse = {\n items: any[];\n finalSizeIsKnown: boolean;\n};\n\nlet idCounter = 0;\n\nexport interface ISelectionEvent {\n selection: ComboBoxValue | string;\n isCustomValue: boolean;\n}\nexport interface IFilterChangeEvent {\n value: string;\n}\n\nexport interface CustomEventMap extends InputCustomEventMap {\n \"selection-change\": CustomEvent<ISelectionEvent>;\n \"filter-change\": CustomEvent<IFilterChangeEvent>;\n}\n\nexport default interface ComboBox {\n addEventListener<K extends keyof CustomEventMap>(\n event: K,\n listener: ((this: this, ev: CustomEventMap[K]) => unknown) | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n addEventListener(\n type: string,\n callback: EventListenerOrEventListenerObject | null,\n options?: AddEventListenerOptions | boolean,\n ): void;\n removeEventListener<K extends keyof CustomEventMap>(\n type: K,\n listener: (this: this, ev: CustomEventMap[K]) => unknown,\n options?: boolean | EventListenerOptions,\n ): void;\n removeEventListener(\n type: string,\n listener: EventListenerOrEventListenerObject,\n options?: boolean | EventListenerOptions,\n ): void;\n dispatchEvent<EventType extends CustomEventMap[keyof CustomEventMap]>(event: EventType): boolean;\n}\n\nexport default class ComboBox extends SDInput {\n public static readonly ID: string = TAG_NAME;\n public static ensureDefined = (): void => {\n VirtualList.ensureDefined();\n if (!customElements.get(ComboBox.ID)) {\n customElements.define(ComboBox.ID, ComboBox);\n }\n };\n static formAssociated = true;\n\n private static readonly DATA_REQUEST_CANCELLED: string = \"cancel_data_request\";\n\n @property({ type: Boolean, reflect: true })\n public opened = false;\n @property({ type: Number, attribute: \"item-height\" })\n public itemHeight = 50;\n @property({ type: Boolean, attribute: \"allow-custom-value\", reflect: true })\n public allowCustomValue: boolean;\n @property({ type: Boolean, attribute: \"trigger-only\", reflect: true })\n public triggerOnly: boolean;\n @property({ type: Boolean, attribute: \"null-setting-disallowed\", reflect: true })\n public nullSettingDisallowed: boolean;\n @property({ type: String, attribute: \"display-value-path\", noAccessor: true })\n public displayValuePath = \"caption\";\n @property({ type: String, attribute: \"filter-property\", noAccessor: true })\n public filterProperty: string;\n @property({ type: String, attribute: true, reflect: true })\n public id: string = ComboBox.ID + \"_\" + idCounter++;\n\n public inMemoryFilter: InMemoryFilter = (filterText, item) => {\n if (!filterText) {\n return true;\n }\n const lowerCaseFilter = filterText.toLowerCase();\n if (typeof item.caption == \"string\" && item.caption.toLowerCase().includes(lowerCaseFilter)) {\n return true;\n }\n if (typeof item.description == \"string\" && item.description.toLowerCase().includes(lowerCaseFilter)) {\n return true;\n }\n return false;\n };\n\n public filterText: string;\n public minimumOverlayWidth = 250;\n\n private _comboBoxValue: ComboBoxValue | string;\n private _clearButton: SVGElement;\n private _toggleButton: SVGElement;\n private _popper: Popper;\n private _list: VirtualList;\n private _dataProvider: ListDataProvider;\n private _itemGenerator: ItemGenerator = generator;\n private _itemCache: any[] = [];\n private _declarativeItems: HTMLElement[];\n private _onDataRequest: (filterText: string, page: number) => Promise<DataResponse>;\n private _pendingDataRequest: { cancel: (reason?: any) => void };\n private _openedByFilterTextChange: boolean;\n private _lastRequestedPage: number;\n private _lastRequestedFilterText: string;\n\n constructor() {\n super();\n this._dataProvider = new ListDataProvider();\n this._dataProvider.finalSizeIsKnown = true;\n }\n\n public get clearFilterOnLazyLoadedSelection(): boolean {\n return this.triggerOnly;\n }\n\n /**\n * @deprecated The method should not be used.\n * Use {@link ComboBox#triggerOnly} instead.\n * @param {boolean} value\n */\n public set clearFilterOnLazyLoadedSelection(value: boolean) {\n console.warn(\n \"Using clearFilterOnLazyLoadedSelection setting on a combo-box is deprecated. Use triggerOnly instead.\",\n );\n this.triggerOnly = value;\n }\n\n public get itemGenerator(): ItemGenerator {\n return this._itemGenerator;\n }\n\n public set itemGenerator(value: ItemGenerator) {\n this._itemGenerator = value;\n if (this._list) {\n this._list.itemGenerator = this._itemGenerator;\n }\n }\n\n public get items(): any[] {\n return this._itemCache;\n }\n\n public set items(items: any[]) {\n this._itemCache = items;\n if (this.value && !this.comboBoxValue) {\n this.updateComboBoxValueFromValue();\n }\n this.filterItemsInMemory();\n if (this.opened && this._popper) {\n this._popper.update();\n }\n }\n\n public get finalSizeIsKnown(): boolean {\n return this._dataProvider.finalSizeIsKnown;\n }\n\n public set finalSizeIsKnown(value: boolean) {\n this._dataProvider.finalSizeIsKnown = value;\n }\n\n public configureLazyLoad(onDataRequest: (filterText: string, page: number) => Promise<DataResponse>): void {\n if (!onDataRequest) {\n throw new Error(\"It is not possible to configure lazy load without a given onDataRequest calback.\");\n }\n this._dataProvider.finalSizeIsKnown = false;\n this._onDataRequest = onDataRequest;\n this._dataProvider.onDataRequest = (page: number) => {\n this.requestData(page, false);\n };\n }\n\n public get comboBoxValue(): ComboBoxValue | string {\n return this._comboBoxValue;\n }\n\n public set comboBoxValue(value: ComboBoxValue | string) {\n this._comboBoxValue = value;\n this.updateInputValue(null);\n }\n\n public get selectedIndex(): number {\n if (this.isCustomValue(this.comboBoxValue) || !this.comboBoxValue) {\n return -1;\n }\n return this.comboBoxValue.index;\n }\n\n public get displayValue(): string {\n return this.value;\n }\n\n public open(): void {\n this.opened = true;\n }\n\n static get styles() {\n return [\n css`\n ${unsafeCSS(style)}\n `,\n ];\n }\n\n public disconnectedCallback(): void {\n super.disconnectedCallback();\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n }\n\n public render(): TemplateResult {\n return html`\n ${super.render()}\n <slot @slotchange=${this.onDefaultSlotChange} id=\"default-slot\"></slot>\n `;\n }\n\n public attributeChangedCallback(name: string, oldValue: string, newValue: string): void {\n super.attributeChangedCallback(name, oldValue, newValue);\n if (oldValue !== newValue) {\n switch (name) {\n case \"opened\": {\n this.handleOpenedStateChange();\n break;\n }\n case \"item-height\": {\n if (this._list) {\n this._list.itemHeight = this.itemHeight;\n }\n break;\n }\n case \"id\": {\n this.updateListId();\n break;\n }\n }\n }\n }\n\n public firstUpdated(changedProperties: PropertyValues): void {\n super.firstUpdated(changedProperties);\n\n if (this.value && !this.comboBoxValue) {\n this.updateComboBoxValueFromValue();\n }\n window.requestAnimationFrame(() => {\n this.initClearButtton();\n this.initToggleButtton();\n\n this.addEventListener(\"click\", () => {\n if (!this.disabled) {\n this.opened = !this.opened;\n }\n });\n this.addEventListener(\"keydown\", (event: KeyboardEvent) => {\n if (!this.disabled) {\n this.handleKeyDown(event);\n }\n });\n });\n this.inputElement.setAttribute(\"role\", \"combobox\");\n this.inputElement.setAttribute(\"aria-autocomplete\", \"list\");\n }\n\n private updateComboBoxValueFromValue() {\n if (this.value) {\n const selectedIndex = this._itemCache.findIndex((item) => item[this.displayValuePath] === this.value);\n if (selectedIndex > -1) {\n this._comboBoxValue = { index: selectedIndex, item: this._itemCache[selectedIndex] };\n } else if (this.allowCustomValue) {\n this._comboBoxValue = this.value;\n } else {\n this._comboBoxValue = null;\n }\n }\n }\n\n public updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n if (changedProperties.has(\"currentText\")) {\n if (this.currentText) {\n this.setAttribute(\"has-value\", \"\");\n if (this._clearButton) {\n this._clearButton.style.display = \"\";\n }\n } else {\n this.removeAttribute(\"has-value\");\n }\n } else if (changedProperties.has(\"triggerOnly\") && this._list) {\n this._list.selectionType = this.triggerOnly ? SelectionType.TriggerOnly : SelectionType.Single;\n }\n }\n\n private initClearButtton(): void {\n const clearButtonTemplate = document.createElement(\"template\");\n clearButtonTemplate.innerHTML = clearSvg;\n this._clearButton = clearButtonTemplate.content.firstChild as SVGElement;\n this.appendChild(this._clearButton);\n\n this._clearButton.addEventListener(\"click\", (event) => {\n event.preventDefault();\n event.stopPropagation();\n this.opened = false;\n this.clearValue();\n });\n }\n\n private initToggleButtton(): void {\n const toggleButtonTemplate = document.createElement(\"template\");\n toggleButtonTemplate.innerHTML = toggleSvg;\n this._toggleButton = toggleButtonTemplate.content.firstChild as SVGElement;\n this.appendChild(this._toggleButton);\n\n this._toggleButton.addEventListener(\"click\", (event) => {\n event.preventDefault();\n event.stopPropagation();\n this.opened = !this.opened;\n this.select();\n });\n }\n\n private debouncedFilterItemsInMemory = debounce(this.filterItemsInMemory.bind(this), 200);\n private filterItemsInMemory(): void {\n if (this.isLazyLoadConfigured) {\n return;\n }\n let filteredInMemory = false;\n if (this.filterText) {\n if (this.filterProperty) {\n this._dataProvider.items = this._itemCache.filter((item) => {\n return item[this.filterProperty] && String(item[this.filterProperty]).indexOf(this.filterText) > -1;\n });\n filteredInMemory = true;\n } else if (this.inMemoryFilter) {\n this._dataProvider.items = this._itemCache.filter((item) => this.inMemoryFilter(this.filterText, item));\n filteredInMemory = true;\n }\n }\n if (!filteredInMemory) {\n this._dataProvider.items = this._itemCache;\n } else {\n this._list.focusIndex = null;\n }\n if (this.opened && this._popper) {\n this._popper.update();\n }\n }\n\n private ensureListAndPopperInitialized(): void {\n if (!this._list) {\n this._list = document.createElement(VirtualList.ID) as VirtualList;\n this.updateListId();\n this._list.classList.add(\"combo-box-dropdown\");\n this._list.itemHeight = this.itemHeight;\n this._list.itemGenerator = this.itemGenerator;\n this._list.selectionType = this.triggerOnly ? SelectionType.TriggerOnly : SelectionType.Single;\n this._list.setAttribute(\"focus-target\", \"\");\n Object.assign(this._list.style, {\n zIndex: \"21000\",\n boxShadow: `rgba(0, 0, 0, 0.14) 0px 2px 2px 0px,\n rgba(0, 0, 0, 0.12) 0px 1px 5px 0px,\n rgba(0, 0, 0, 0.2) 0px 3px 1px -2px`,\n background: \"white\",\n overflowY: \"auto\",\n });\n this._list.addEventListener(\"selection\", this.handleSelection);\n this._dataProvider.connectList(this._list);\n }\n if (!this._popper) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const comboBox = this;\n this._popper = createPopper(this, this._list, {\n placement: \"bottom-start\",\n modifiers: [\n {\n name: \"computeStyles\",\n options: {\n gpuAcceleration: true,\n },\n },\n {\n name: \"hide\",\n enabled: false,\n },\n {\n name: \"closeIfReferenceHidden\",\n enabled: true,\n phase: \"afterWrite\",\n fn({ state }) {\n const comboBox = state.elements.reference as ComboBox;\n comboBox.closeIfNotVisible();\n },\n },\n {\n name: \"offset\",\n options: {\n offset: ({ placement }) => {\n if (placement.indexOf(\"top\") > -1) {\n return [0, -parseInt(getComputedStyle(comboBox).paddingTop, 10)];\n }\n if (placement.indexOf(\"bottom\") > -1) {\n return [0, -parseInt(getComputedStyle(comboBox).paddingBottom, 10)];\n }\n return [0, 0];\n },\n },\n },\n {\n name: \"adjustWidthIfNeeded\",\n enabled: true,\n phase: \"read\",\n fn({ state }) {\n const list = state.elements.popper as VirtualList;\n list.increaseWidthOnNextRenderIfNeeded();\n },\n },\n ],\n });\n }\n }\n\n private closeIfNotVisible(): void {\n const elementFromPoint = this.elementFromMiddleOfComboBox();\n // elementFromPoint might be the list itself in Safari, thus it needs to be checked as well (Fixes: 244485)\n if (\n !this.contains(elementFromPoint) &&\n !this.shadowRoot.contains(elementFromPoint) &&\n elementFromPoint !== this._list\n ) {\n if (this.triggerOnly) {\n this.value = null;\n }\n this.opened = false;\n }\n }\n\n private elementFromMiddleOfComboBox(): Element {\n const rect = this.getBoundingClientRect();\n return document.elementFromPoint(rect.left + rect.width / 2, rect.top + rect.height / 2);\n }\n\n private handleSelection = (event: CustomEvent) => {\n const selectedItem = this._dataProvider.items[event.detail.index];\n if (!event.detail.selected) {\n // null selection is not allowed via clicking inside the dropdown\n this._list.selectedIndices = [event.detail.index];\n }\n this.comboBoxValue = { index: this._itemCache.indexOf(selectedItem), item: selectedItem };\n this.dispatchSelectionChangeEvent();\n this.opened = false;\n };\n\n private async handleOpenedStateChange(): Promise<void> {\n this.inputElement.setAttribute(\"aria-expanded\", String(this.opened));\n if (this.opened) {\n if (!this.disabled) {\n this.ensureListAndPopperInitialized();\n\n const filterChanged = (this.filterText || \"\") !== (this._lastRequestedFilterText || \"\");\n if (this.isLazyLoadConfigured && (this.items.length == 0 || filterChanged)) {\n this.requestData(0, filterChanged);\n }\n\n this.updateDropdownSizes();\n this.ownerDocument.body.appendChild(this._list);\n this.updateFocusAndSelectedIndexFromValue();\n\n window.requestAnimationFrame(() => {\n if (this._popper) {\n this._popper.update();\n }\n });\n\n window.addEventListener(\"pointerdown\", this.handleWindowPointerDown);\n\n if (!this.allowCustomValue && !this._openedByFilterTextChange) {\n this.select();\n }\n }\n this._openedByFilterTextChange = false;\n } else {\n await this._list.updateComplete;\n if (this._popper) {\n await this._popper.update;\n }\n this.ownerDocument.body.removeChild(this._list);\n window.removeEventListener(\"pointerdown\", this.handleWindowPointerDown);\n this.updateValueOnClose();\n this.clearFilter();\n this.setSelectionRange(0, 0);\n this.inputElement.removeAttribute(\"aria-activedescendant\");\n\n if (this._popper) {\n this._popper.destroy();\n this._popper = null;\n }\n }\n }\n\n private updateValueOnClose(): void {\n const oldValue = this.comboBoxValue || \"\";\n if (this.nullSettingDisallowed && !this.value && this.comboBoxValue) {\n this.restorePreviousSelection();\n } else if (this.value !== this.convertToDisplayValue(null)) {\n // value change only if needed\n const focusedItem = this._dataProvider.items[this._list.focusIndex] as any;\n if (focusedItem && focusedItem[this.displayValuePath] === this.value) {\n if (focusedItem.disabled) {\n return;\n }\n // 1. select focused item if the input's value is the same\n this.comboBoxValue = { index: this._itemCache.indexOf(focusedItem), item: focusedItem };\n } else if (this.allowCustomValue || !this.value) {\n // 2. set as a custom or empty value\n this.comboBoxValue = this.value;\n } else {\n // 3. try to search for an identical item\n const selectedIndex = this._itemCache.findIndex(\n (item) => item[this.displayValuePath] === this.value && !item.disabled,\n );\n if (selectedIndex > -1) {\n this.comboBoxValue = { index: selectedIndex, item: this._itemCache[selectedIndex] };\n } else {\n this.restorePreviousSelection(); // Fixes C1XRTYID\n }\n }\n }\n if (oldValue !== (this.comboBoxValue || \"\")) {\n this.dispatchSelectionChangeEvent();\n }\n }\n\n private restorePreviousSelection() {\n this.updateInputValue(null);\n }\n\n private updateFocusAndSelectedIndexFromValue(): void {\n if (this.comboBoxValue && !this.isCustomValue(this.comboBoxValue) && !this._openedByFilterTextChange) {\n let index = this.comboBoxValue.index;\n if (index == -1 || this.isLazyLoadConfigured) {\n index = this.items.indexOf(this.comboBoxValue.item);\n if (index == -1) {\n const selectedId = this.comboBoxValue.item.id;\n if (selectedId != null) {\n index = this.items.findIndex((item) => item.id == selectedId);\n }\n }\n }\n this._list.focusIndex = index;\n this._list.selectedIndices = index == -1 ? [] : [index];\n } else {\n this._list.focusIndex = -1;\n this._list.selectedIndices = [];\n }\n this.updateActiveDescendant();\n }\n\n private handleWindowPointerDown = (event: PointerEvent) => {\n const contains = event.target instanceof Node && this.contains(event.target);\n if (!contains && this.opened && event.composedPath().indexOf(this._list) === -1) {\n if (this.triggerOnly) {\n this.value = null;\n }\n this.opened = false;\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n switch (event.key) {\n case \"Down\":\n case \"ArrowDown\": {\n event.preventDefault();\n this.navigateInList(+1);\n break;\n }\n case \"Up\":\n case \"ArrowUp\": {\n event.preventDefault();\n this.navigateInList(-1);\n break;\n }\n case \"Enter\": {\n if (this.opened) {\n event.preventDefault();\n event.stopPropagation();\n this.opened = false;\n }\n break;\n }\n case \"Escape\": {\n if (this.opened) {\n event.preventDefault();\n event.stopPropagation();\n if (\n this._list.selectedIndices.indexOf(this._list.focusIndex) > -1 &&\n this._dataProvider.items.length > this._list.focusIndex\n ) {\n this.opened = false;\n } else {\n this.clearFilter();\n this.updateInputValue(null);\n this.updateFocusAndSelectedIndexFromValue();\n this._list.selectedIndices.push(this._list.focusIndex);\n }\n }\n break;\n }\n case \"Tab\": {\n if (this.opened) {\n if (this.triggerOnly) {\n this.value = null;\n }\n this.opened = false;\n }\n break;\n }\n }\n };\n\n private navigateInList(offset: number): void {\n if (!this.opened) {\n this.opened = true;\n } else {\n if (this._list.focusIndex == null) {\n if (offset > 0) {\n this._list.focusIndex = 0;\n } else {\n this._list.focusIndex = Math.max(0, this._dataProvider.items.length - 1);\n }\n } else {\n this._list.focusIndex = Math.max(\n 0,\n Math.min(this._dataProvider.items.length - 1, this._list.focusIndex + offset),\n );\n }\n this.updateInputValue(this._dataProvider.items[this._list.focusIndex] as ItemData | any);\n this.updateActiveDescendant();\n if (!this.allowCustomValue) {\n this.select();\n }\n }\n }\n\n private updateActiveDescendant() {\n const focusedListItem = this._list && this._list.getListItem(this._list.focusIndex);\n if (focusedListItem) {\n this.inputElement.setAttribute(\"aria-activedescendant\", focusedListItem.id);\n } else {\n this.inputElement.removeAttribute(\"aria-activedescendant\");\n }\n }\n\n private updateInputValue(item: ItemData): void {\n this.updateComplete.then(() => {\n this.value = this.convertToDisplayValue(item);\n });\n }\n\n private convertToDisplayValue(item: ItemData): string {\n if (item) {\n return item[this.displayValuePath];\n } else if (this.comboBoxValue) {\n if (this.isCustomValue(this.comboBoxValue)) {\n return this.comboBoxValue;\n } else {\n return this.comboBoxValue.item[this.displayValuePath];\n }\n } else {\n return null;\n }\n }\n\n protected fireValueChange(immediate?: boolean): void {\n if (immediate) {\n if (this.filterText !== this.value) {\n const effectiveFilterChange = (this.filterText || \"\") !== this.value;\n this.filterText = this.value;\n if (!this.opened) {\n this._openedByFilterTextChange = true;\n this.opened = true;\n }\n if (effectiveFilterChange) {\n this.dispatchFilterChangeEvent();\n this.debouncedFilterItemsInMemory();\n }\n }\n }\n // consume both change events triggered from input, combo box provides a different API for that\n }\n\n private clearValue(): void {\n if (!this.nullSettingDisallowed) {\n this.value = null;\n this.inputElement.removeAttribute(\"aria-activedescendant\");\n if (this._list) {\n this._list.selectedIndices = [];\n }\n this.clearFilter();\n if (this.comboBoxValue) {\n this.comboBoxValue = null;\n this.dispatchSelectionChangeEvent();\n }\n }\n }\n\n private clearFilter(): void {\n if (this.filterText != null) {\n this.filterText = undefined;\n this.filterItemsInMemory();\n this.dispatchFilterChangeEvent();\n }\n }\n\n private updateDropdownSizes(): void {\n const viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n const overlayMaxHeight = (viewportHeight - this.offsetHeight) * 0.5;\n Object.assign(this._list.style, {\n maxHeight: `${overlayMaxHeight}px`,\n minWidth: `${Math.max(this.offsetWidth, this.minimumOverlayWidth)}px`,\n maxWidth: `max(50vw, ${this.offsetWidth}px)`,\n });\n }\n\n private updateListId() {\n if (this.inputElement && this._list) {\n this._list.id = this.id + \"_list\";\n this.inputElement.setAttribute(\"aria-controls\", this._list.id);\n }\n }\n\n private isCustomValue(value: ComboBoxValue | string): value is string {\n return typeof value === \"string\";\n }\n\n private dispatchSelectionChangeEvent(): void {\n this.updateComplete\n .then(() => {\n this.dispatchEvent(\n new CustomEvent<ISelectionEvent>(\"selection-change\", {\n detail: {\n selection: this.comboBoxValue,\n isCustomValue: this.isCustomValue(this.comboBoxValue),\n },\n }),\n );\n if (this.triggerOnly) {\n this.comboBoxValue = null;\n } else {\n const comboBoxValue = this.comboBoxValue;\n if (typeof comboBoxValue === \"string\") {\n this.setFormValue(comboBoxValue);\n } else {\n this.setFormValue(comboBoxValue?.item?.caption);\n }\n }\n })\n .catch((e) => {\n console.error(\"Could not dispatch selection change event due to:\", e);\n });\n }\n\n private dispatchFilterChangeEvent(): void {\n this.dispatchEvent(\n new CustomEvent<IFilterChangeEvent>(\"filter-change\", {\n detail: { value: this.filterText },\n composed: true,\n }),\n );\n this.debouncedRequestData(0);\n }\n\n private get isLazyLoadConfigured(): boolean {\n return !!this._onDataRequest;\n }\n\n /**\n * Used only when lazy loading is configured.\n */\n private debouncedRequestData = debounce(this.requestData.bind(this), 250);\n private requestData(page: number, filterChanged?: boolean) {\n if (filterChanged == null) {\n filterChanged = (this.filterText || \"\") !== (this._lastRequestedFilterText || \"\");\n }\n if (this.isLazyLoadConfigured) {\n if (!this.opened) {\n if (filterChanged) {\n this._dataProvider.items = [];\n this._itemCache = [];\n }\n return;\n }\n if (this._lastRequestedPage == page && !filterChanged) {\n return;\n }\n if (this._pendingDataRequest) {\n this._pendingDataRequest.cancel(ComboBox.DATA_REQUEST_CANCELLED);\n }\n const cancellationPromise = new Promise<DataResponse>((_resolve, reject) => {\n this._pendingDataRequest = { cancel: reject };\n });\n this._lastRequestedPage = page;\n this._lastRequestedFilterText = this.filterText;\n this.setAttribute(\"loading\", \"\");\n Promise.race([cancellationPromise, this._onDataRequest(this._lastRequestedFilterText, page)])\n .then((dataResponse) => {\n if (this.filterText == this._lastRequestedFilterText && this._lastRequestedPage == page) {\n this._dataProvider.finalSizeIsKnown = dataResponse.finalSizeIsKnown;\n if (filterChanged) {\n this._dataProvider.items = dataResponse.items;\n this._itemCache = dataResponse.items;\n } else {\n this._dataProvider.addItems(dataResponse.items);\n this._itemCache = this._dataProvider.items;\n }\n if (this._list) {\n this._list.itemCount = this._dataProvider.items.length;\n }\n if (this._popper && this.opened) {\n if (this.comboBoxValue && !this.isCustomValue(this.comboBoxValue)) {\n const selectedItem = this.comboBoxValue.item;\n if (\n this._list.selectedIndices.length == 0 ||\n this.items[this._list.selectedIndices[0]] != selectedItem\n ) {\n let index = this.items.indexOf(selectedItem);\n if (index == -1) {\n const selectedId = selectedItem.id;\n if (selectedId != null) {\n index = this.items.findIndex((item) => item.id == selectedId);\n }\n }\n this.comboBoxValue.index = index;\n this._list.selectedIndices = index == -1 ? [] : [index];\n }\n }\n this.updateDropdownSizes();\n this._popper.update();\n }\n }\n this._pendingDataRequest = null;\n this.removeAttribute(\"loading\");\n })\n .catch((e) => {\n if (e !== ComboBox.DATA_REQUEST_CANCELLED) {\n console.error(\n `Data could not be loaded for filter \"${this._lastRequestedFilterText}\" and page number \"${page}\" due to the following error:\\n${e}`,\n );\n this._dataProvider.finalSizeIsKnown = true;\n\n if (this.items.length == 0) {\n this.opened = false;\n } else if (this._list) {\n this._list.itemCount = this.items.length;\n }\n this.removeAttribute(\"loading\");\n }\n this._pendingDataRequest = null;\n });\n }\n }\n\n private get defaultSlot(): HTMLSlotElement {\n return this.shadowRoot.querySelector(\"#default-slot\");\n }\n\n private onDefaultSlotChange(): void {\n this._declarativeItems = this.defaultSlot.assignedElements() as HTMLElement[];\n if (this._declarativeItems.length > 0) {\n this.finalSizeIsKnown = true;\n this.itemGenerator = (_data, index) => {\n return this._declarativeItems[index].cloneNode(true) as HTMLElement;\n };\n this.items = this._declarativeItems.map((item) => {\n const data = {\n caption: item.getAttribute(\"caption\"),\n description: item.getAttribute(\"description\"),\n };\n if (\"caption\" != this.displayValuePath && \"description\" != this.displayValuePath) {\n data[this.displayValuePath] =\n item[this.displayValuePath] || item.getAttribute(this.displayValuePath);\n }\n return data;\n });\n }\n }\n}\n\nComboBox.ensureDefined();\n"],"names":["toggleSvg","clearSvg","TAG_NAME","debounce","func","delay","timeout","args","idCounter","_ComboBox","_a","SDInput","filterText","item","lowerCaseFilter","generator","event","selectedItem","ListDataProvider","value","items","onDataRequest","page","css","unsafeCSS","style","html","name","oldValue","newValue","changedProperties","selectedIndex","SelectionType","clearButtonTemplate","toggleButtonTemplate","filteredInMemory","VirtualList","comboBox","createPopper","state","placement","elementFromPoint","rect","filterChanged","focusedItem","index","selectedId","offset","focusedListItem","immediate","effectiveFilterChange","overlayMaxHeight","comboBoxValue","e","cancellationPromise","_resolve","reject","dataResponse","_data","data","__decorateClass","property","ComboBox"],"mappings":"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"}