@vscode-elements/elements 1.16.1 → 1.16.2-pre.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 (47) hide show
  1. package/custom-elements.json +1199 -687
  2. package/dist/bundled.js +885 -809
  3. package/dist/includes/VscElement.d.ts.map +1 -1
  4. package/dist/includes/VscElement.js +3 -1
  5. package/dist/includes/VscElement.js.map +1 -1
  6. package/dist/includes/vscode-select/OptionListController.d.ts +61 -0
  7. package/dist/includes/vscode-select/OptionListController.d.ts.map +1 -0
  8. package/dist/includes/vscode-select/OptionListController.js +373 -0
  9. package/dist/includes/vscode-select/OptionListController.js.map +1 -0
  10. package/dist/includes/vscode-select/helpers.d.ts +2 -2
  11. package/dist/includes/vscode-select/helpers.js.map +1 -1
  12. package/dist/includes/vscode-select/styles.d.ts.map +1 -1
  13. package/dist/includes/vscode-select/styles.js +19 -23
  14. package/dist/includes/vscode-select/styles.js.map +1 -1
  15. package/dist/includes/vscode-select/template-elements.d.ts +1 -0
  16. package/dist/includes/vscode-select/template-elements.d.ts.map +1 -1
  17. package/dist/includes/vscode-select/template-elements.js +14 -1
  18. package/dist/includes/vscode-select/template-elements.js.map +1 -1
  19. package/dist/includes/vscode-select/types.d.ts +11 -7
  20. package/dist/includes/vscode-select/types.d.ts.map +1 -1
  21. package/dist/includes/vscode-select/types.js.map +1 -1
  22. package/dist/includes/vscode-select/vscode-select-base.d.ts +25 -31
  23. package/dist/includes/vscode-select/vscode-select-base.d.ts.map +1 -1
  24. package/dist/includes/vscode-select/vscode-select-base.js +214 -324
  25. package/dist/includes/vscode-select/vscode-select-base.js.map +1 -1
  26. package/dist/vscode-button/vscode-button.styles.js +1 -1
  27. package/dist/vscode-button/vscode-button.styles.js.map +1 -1
  28. package/dist/vscode-button-group/vscode-button-group.styles.d.ts.map +1 -1
  29. package/dist/vscode-button-group/vscode-button-group.styles.js +2 -0
  30. package/dist/vscode-button-group/vscode-button-group.styles.js.map +1 -1
  31. package/dist/vscode-icon/vscode-icon.d.ts.map +1 -1
  32. package/dist/vscode-icon/vscode-icon.js +1 -0
  33. package/dist/vscode-icon/vscode-icon.js.map +1 -1
  34. package/dist/vscode-label/vscode-label.d.ts.map +1 -1
  35. package/dist/vscode-label/vscode-label.js +9 -7
  36. package/dist/vscode-label/vscode-label.js.map +1 -1
  37. package/dist/vscode-multi-select/vscode-multi-select.d.ts +9 -1
  38. package/dist/vscode-multi-select/vscode-multi-select.d.ts.map +1 -1
  39. package/dist/vscode-multi-select/vscode-multi-select.js +125 -65
  40. package/dist/vscode-multi-select/vscode-multi-select.js.map +1 -1
  41. package/dist/vscode-single-select/vscode-single-select.d.ts +4 -4
  42. package/dist/vscode-single-select/vscode-single-select.d.ts.map +1 -1
  43. package/dist/vscode-single-select/vscode-single-select.js +140 -74
  44. package/dist/vscode-single-select/vscode-single-select.js.map +1 -1
  45. package/package.json +5 -4
  46. package/vscode.css-custom-data.json +2 -2
  47. package/vscode.html-custom-data.json +19 -9
@@ -1 +1 @@
1
- {"version":3,"file":"VscElement.d.ts","sourceRoot":"","sources":["../../src/includes/VscElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,KAAK,CAAC;AAK/B,qBAAa,UAAW,SAAQ,UAAU;IACxC,8BAA8B;IAC9B,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;AAED,KAAK,kBAAkB,GAAG,IAAI,CAAC,OAAO,WAAW,EAAE,KAAK,CAAC,CAAC;AAE1D,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAE3B,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,MACnC,eAAe,kBAAkB,SAoC1C,CAAC"}
1
+ {"version":3,"file":"VscElement.d.ts","sourceRoot":"","sources":["../../src/includes/VscElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,KAAK,CAAC;AAK/B,qBAAa,UAAW,SAAQ,UAAU;IACxC,8BAA8B;IAC9B,IAAI,OAAO,IAAI,MAAM,CAEpB;CACF;AAED,KAAK,kBAAkB,GAAG,IAAI,CAAC,OAAO,WAAW,EAAE,KAAK,CAAC,CAAC;AAE1D,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAE3B,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,MACnC,eAAe,kBAAkB,SAsC1C,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { LitElement } from 'lit';
2
- const VERSION = '1.16.1';
2
+ const VERSION = '1.16.2-pre.0';
3
3
  const CONFIG_KEY = '__vscodeElements_disableRegistryWarning__';
4
4
  export class VscElement extends LitElement {
5
5
  /** VSCode Elements version */
@@ -24,6 +24,7 @@ export const customElement = (tagName) => {
24
24
  const anotherVersion = el?.version;
25
25
  let message = '';
26
26
  if (!anotherVersion) {
27
+ // eslint-disable-next-line no-console
27
28
  console.warn(tagName, 'is already registered by an unknown custom element handler class.');
28
29
  message +=
29
30
  'is already registered by an unknown custom element handler class.';
@@ -37,6 +38,7 @@ export const customElement = (tagName) => {
37
38
  message +=
38
39
  'is already registered by the same version of VSCode Elements. ';
39
40
  }
41
+ // eslint-disable-next-line no-console
40
42
  console.warn(`[VSCode Elements] ${tagName} ${message}\nTo suppress this warning, set window.${CONFIG_KEY} to true`);
41
43
  };
42
44
  };
@@ -1 +1 @@
1
- {"version":3,"file":"VscElement.js","sourceRoot":"","sources":["../../src/includes/VscElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,KAAK,CAAC;AAE/B,MAAM,OAAO,GAAG,QAAQ,CAAC;AACzB,MAAM,UAAU,GAAG,2CAA2C,CAAC;AAE/D,MAAM,OAAO,UAAW,SAAQ,UAAU;IACxC,8BAA8B;IAC9B,IAAI,OAAO;QACT,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AASD;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE;IAC/C,OAAO,CAAC,aAAiC,EAAE,EAAE;QAC3C,MAAM,kBAAkB,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEvD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,aAAyC,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,cAAc,GAAI,EAAiB,EAAE,OAAO,CAAC;QACnD,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CACV,OAAO,EACP,mEAAmE,CACpE,CAAC;YACF,OAAO;gBACL,mEAAmE,CAAC;QACxE,CAAC;aAAM,IAAI,cAAc,KAAK,OAAO,EAAE,CAAC;YACtC,OAAO;gBACL,mEAAmE,CAAC;YACtE,OAAO,IAAI,oBAAoB,OAAO,8BAA8B,cAAc,IAAI,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,gEAAgE,CAAC;QACrE,CAAC;QAED,OAAO,CAAC,IAAI,CACV,qBAAqB,OAAO,IAAI,OAAO,0CAA0C,UAAU,UAAU,CACtG,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {LitElement} from 'lit';\n\nconst VERSION = '1.16.1';\nconst CONFIG_KEY = '__vscodeElements_disableRegistryWarning__';\n\nexport class VscElement extends LitElement {\n /** VSCode Elements version */\n get version(): string {\n return VERSION;\n }\n}\n\ntype CustomElementClass = Omit<typeof HTMLElement, 'new'>;\n\nexport type Constructor<T> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): T;\n};\n\n/**\n * Own implementation of Lit's customElement decorator.\n */\nexport const customElement = (tagName: string) => {\n return (classOrTarget: CustomElementClass) => {\n const customElementClass = customElements.get(tagName);\n\n if (!customElementClass) {\n customElements.define(tagName, classOrTarget as CustomElementConstructor);\n return;\n }\n\n if (CONFIG_KEY in window) {\n return;\n }\n\n const el = document.createElement(tagName);\n const anotherVersion = (el as VscElement)?.version;\n let message = '';\n\n if (!anotherVersion) {\n console.warn(\n tagName,\n 'is already registered by an unknown custom element handler class.'\n );\n message +=\n 'is already registered by an unknown custom element handler class.';\n } else if (anotherVersion !== VERSION) {\n message +=\n 'is already registered by a different version of VSCode Elements. ';\n message += `This version is \"${VERSION}\", while the other one is \"${anotherVersion}\".`;\n } else {\n message +=\n 'is already registered by the same version of VSCode Elements. ';\n }\n\n console.warn(\n `[VSCode Elements] ${tagName} ${message}\\nTo suppress this warning, set window.${CONFIG_KEY} to true`\n );\n };\n};\n"]}
1
+ {"version":3,"file":"VscElement.js","sourceRoot":"","sources":["../../src/includes/VscElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,KAAK,CAAC;AAE/B,MAAM,OAAO,GAAG,cAAc,CAAC;AAC/B,MAAM,UAAU,GAAG,2CAA2C,CAAC;AAE/D,MAAM,OAAO,UAAW,SAAQ,UAAU;IACxC,8BAA8B;IAC9B,IAAI,OAAO;QACT,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AASD;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAe,EAAE,EAAE;IAC/C,OAAO,CAAC,aAAiC,EAAE,EAAE;QAC3C,MAAM,kBAAkB,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEvD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,aAAyC,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QAED,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,cAAc,GAAI,EAAiB,EAAE,OAAO,CAAC;QACnD,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACV,OAAO,EACP,mEAAmE,CACpE,CAAC;YACF,OAAO;gBACL,mEAAmE,CAAC;QACxE,CAAC;aAAM,IAAI,cAAc,KAAK,OAAO,EAAE,CAAC;YACtC,OAAO;gBACL,mEAAmE,CAAC;YACtE,OAAO,IAAI,oBAAoB,OAAO,8BAA8B,cAAc,IAAI,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,gEAAgE,CAAC;QACrE,CAAC;QAED,sCAAsC;QACtC,OAAO,CAAC,IAAI,CACV,qBAAqB,OAAO,IAAI,OAAO,0CAA0C,UAAU,UAAU,CACtG,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import {LitElement} from 'lit';\n\nconst VERSION = '1.16.2-pre.0';\nconst CONFIG_KEY = '__vscodeElements_disableRegistryWarning__';\n\nexport class VscElement extends LitElement {\n /** VSCode Elements version */\n get version(): string {\n return VERSION;\n }\n}\n\ntype CustomElementClass = Omit<typeof HTMLElement, 'new'>;\n\nexport type Constructor<T> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): T;\n};\n\n/**\n * Own implementation of Lit's customElement decorator.\n */\nexport const customElement = (tagName: string) => {\n return (classOrTarget: CustomElementClass) => {\n const customElementClass = customElements.get(tagName);\n\n if (!customElementClass) {\n customElements.define(tagName, classOrTarget as CustomElementConstructor);\n return;\n }\n\n if (CONFIG_KEY in window) {\n return;\n }\n\n const el = document.createElement(tagName);\n const anotherVersion = (el as VscElement)?.version;\n let message = '';\n\n if (!anotherVersion) {\n // eslint-disable-next-line no-console\n console.warn(\n tagName,\n 'is already registered by an unknown custom element handler class.'\n );\n message +=\n 'is already registered by an unknown custom element handler class.';\n } else if (anotherVersion !== VERSION) {\n message +=\n 'is already registered by a different version of VSCode Elements. ';\n message += `This version is \"${VERSION}\", while the other one is \"${anotherVersion}\".`;\n } else {\n message +=\n 'is already registered by the same version of VSCode Elements. ';\n }\n\n // eslint-disable-next-line no-console\n console.warn(\n `[VSCode Elements] ${tagName} ${message}\\nTo suppress this warning, set window.${CONFIG_KEY} to true`\n );\n };\n};\n"]}
@@ -0,0 +1,61 @@
1
+ import { ReactiveController, ReactiveControllerHost } from 'lit';
2
+ import { FilterMethod, InternalOption, Option } from './types';
3
+ export declare class OptionListController implements ReactiveController {
4
+ private _activeIndex;
5
+ private _host;
6
+ private _options;
7
+ private _filterPattern;
8
+ private _filterMethod;
9
+ private _combobox;
10
+ private _indexByValue;
11
+ private _indexByLabel;
12
+ private _selectedIndex;
13
+ private _selectedIndexes;
14
+ private _multiSelect;
15
+ private _numOfVisibleOptions;
16
+ constructor(host: ReactiveControllerHost);
17
+ hostConnected(): void;
18
+ get activeIndex(): number;
19
+ set activeIndex(index: number);
20
+ get relativeActiveIndex(): number;
21
+ set comboboxMode(enabled: boolean);
22
+ get comboboxMode(): boolean;
23
+ get multiSelect(): boolean;
24
+ set multiSelect(multiSelect: boolean);
25
+ get selectedIndex(): number;
26
+ set selectedIndex(index: number);
27
+ get selectedIndexes(): number[];
28
+ set selectedIndexes(value: number[]);
29
+ set value(newValue: string | string[]);
30
+ get value(): string | string[];
31
+ set multiSelectValue(newValue: string[]);
32
+ get multiSelectValue(): string[];
33
+ get filterPattern(): string;
34
+ set filterPattern(pattern: string);
35
+ get filterMethod(): FilterMethod;
36
+ set filterMethod(method: FilterMethod);
37
+ get options(): InternalOption[];
38
+ get numOfVisibleOptions(): number;
39
+ get numOptions(): number;
40
+ populate(options: Option[]): void;
41
+ add(option: Option): void;
42
+ clear(): void;
43
+ getIsIndexSelected(index: number): boolean;
44
+ expandMultiSelection(values: string[]): void;
45
+ toggleActiveMultiselectOption(): void;
46
+ toggleOptionSelected(optIndex: number): void;
47
+ getActiveOption(): InternalOption | null;
48
+ getSelectedOption(): InternalOption | null;
49
+ getOptionByIndex(index: number): InternalOption;
50
+ findOptionIndex(value: string): number;
51
+ getOptionByValue(value: string, includeHiddenOptions?: boolean): InternalOption | null;
52
+ getOptionByLabel(label: string): InternalOption | null;
53
+ next(fromIndex?: number): InternalOption | null;
54
+ prev(fromIndex?: number): InternalOption | null;
55
+ activateDefault(): void;
56
+ selectAll(): void;
57
+ selectNone(): void;
58
+ private _searchByPattern;
59
+ private _updateState;
60
+ }
61
+ //# sourceMappingURL=OptionListController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptionListController.d.ts","sourceRoot":"","sources":["../../../src/includes/vscode-select/OptionListController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAE,sBAAsB,EAAC,MAAM,KAAK,CAAC;AAC/D,OAAO,EAAC,YAAY,EAAE,cAAc,EAAE,MAAM,EAAC,MAAM,SAAS,CAAC;AAS7D,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,cAAc,CAAM;IAC5B,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,cAAc,CAAM;IAC5B,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,oBAAoB,CAAK;gBAErB,IAAI,EAAE,sBAAsB;IAIxC,aAAa,IAAI,IAAI;IAIrB,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,EAG5B;IAED,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,EAGhC;IAED,IAAI,YAAY,IALU,OAAO,CAOhC;IAED,IAAI,WAAW,IAIc,OAAO,CAFnC;IAED,IAAI,WAAW,CAAC,WAAW,EAAE,OAAO,EAKnC;IAED,IAAI,aAAa,IAIQ,MAAM,CAF9B;IAED,IAAI,aAAa,CAAC,KAAK,EAAE,MAAM,EAS9B;IAED,IAAI,eAAe,IAIQ,MAAM,EAAE,CAFlC;IAED,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,EAclC;IAED,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAWpC;IAED,IAAI,KAAK,IAAI,MAAM,GAAG,MAAM,EAAE,CAU7B;IAED,IAAI,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAMtC;IAED,IAAI,gBAAgB,IAAI,MAAM,EAAE,CAI/B;IAED,IAAI,aAAa,IAIU,MAAM,CAFhC;IAED,IAAI,aAAa,CAAC,OAAO,EAAE,MAAM,EAKhC;IAED,IAAI,YAAY,IAAI,YAAY,CAE/B;IAED,IAAI,YAAY,CAAC,MAAM,EAAE,YAAY,EAKpC;IAED,IAAI,OAAO,IAAI,cAAc,EAAE,CAE9B;IAED,IAAI,mBAAmB,WAEtB;IAED,IAAI,UAAU,WAEb;IAMD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE;IAwB1B,GAAG,CAAC,MAAM,EAAE,MAAM;IAsClB,KAAK;IAOL,kBAAkB,CAAC,KAAK,EAAE,MAAM;IAQhC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE;IAYrC,6BAA6B;IAkB7B,oBAAoB,CAAC,QAAQ,EAAE,MAAM;IAarC,eAAe,IAAI,cAAc,GAAG,IAAI;IAIxC,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAI1C,gBAAgB,CAAC,KAAK,EAAE,MAAM;IAI9B,eAAe,CAAC,KAAK,EAAE,MAAM;IAI7B,gBAAgB,CACd,KAAK,EAAE,MAAM,EACb,oBAAoB,UAAQ,GAC3B,cAAc,GAAG,IAAI;IAcxB,gBAAgB,CAAC,KAAK,EAAE,MAAM;IAU9B,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAkB/C,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAmB/C,eAAe;IAkBf,SAAS;IAaT,UAAU;IAiBV,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,YAAY;CA6BrB"}
@@ -0,0 +1,373 @@
1
+ import { containsSearch, fuzzySearch, startsWithPerTermSearch, startsWithSearch, } from './helpers';
2
+ export class OptionListController {
3
+ constructor(host) {
4
+ this._activeIndex = -1;
5
+ this._options = [];
6
+ this._filterPattern = '';
7
+ this._filterMethod = 'fuzzy';
8
+ this._combobox = false;
9
+ this._indexByValue = new Map();
10
+ this._indexByLabel = new Map();
11
+ this._selectedIndex = -1;
12
+ this._selectedIndexes = new Set();
13
+ this._multiSelect = false;
14
+ this._numOfVisibleOptions = 0;
15
+ (this._host = host).addController(this);
16
+ }
17
+ hostConnected() { }
18
+ //#region getters/setters
19
+ get activeIndex() {
20
+ return this._activeIndex;
21
+ }
22
+ set activeIndex(index) {
23
+ this._activeIndex = index;
24
+ this._host.requestUpdate();
25
+ }
26
+ get relativeActiveIndex() {
27
+ return this._options[this._activeIndex]?.filteredIndex ?? -1;
28
+ }
29
+ set comboboxMode(enabled) {
30
+ this._combobox = enabled;
31
+ this._host.requestUpdate();
32
+ }
33
+ get comboboxMode() {
34
+ return this._combobox;
35
+ }
36
+ get multiSelect() {
37
+ return this._multiSelect;
38
+ }
39
+ set multiSelect(multiSelect) {
40
+ this._selectedIndex = -1;
41
+ this._selectedIndexes.clear();
42
+ this._multiSelect = multiSelect;
43
+ this._host.requestUpdate();
44
+ }
45
+ get selectedIndex() {
46
+ return this._selectedIndex;
47
+ }
48
+ set selectedIndex(index) {
49
+ if (this._selectedIndex !== -1) {
50
+ this._options[this._selectedIndex].selected ??= false;
51
+ }
52
+ const op = this.getOptionByIndex(index);
53
+ this._selectedIndex = op ? index : -1;
54
+ this._host.requestUpdate();
55
+ }
56
+ get selectedIndexes() {
57
+ return Array.from(this._selectedIndexes);
58
+ }
59
+ set selectedIndexes(value) {
60
+ this._selectedIndexes.forEach((v) => {
61
+ this._options[v].selected = false;
62
+ });
63
+ this._selectedIndexes = new Set(value);
64
+ value.forEach((v) => {
65
+ if (this._options[v] !== undefined) {
66
+ this._options[v].selected = true;
67
+ }
68
+ });
69
+ this._host.requestUpdate();
70
+ }
71
+ set value(newValue) {
72
+ if (this._multiSelect) {
73
+ const valueList = newValue
74
+ .map((v) => this._indexByValue.get(v))
75
+ .filter((v) => v !== undefined);
76
+ this._selectedIndexes = new Set(valueList);
77
+ }
78
+ else {
79
+ this._selectedIndex = this._indexByValue.get(newValue) ?? -1;
80
+ }
81
+ this._host.requestUpdate();
82
+ }
83
+ get value() {
84
+ if (this._multiSelect) {
85
+ return this._selectedIndexes.size > 0
86
+ ? Array.from(this._selectedIndexes).map((v) => this._options[v].value)
87
+ : [];
88
+ }
89
+ else {
90
+ return this._selectedIndex > -1
91
+ ? this._options[this._selectedIndex].value
92
+ : '';
93
+ }
94
+ }
95
+ set multiSelectValue(newValue) {
96
+ const valueList = newValue
97
+ .map((v) => this._indexByValue.get(v))
98
+ .filter((v) => v !== undefined);
99
+ this._selectedIndexes = new Set(valueList);
100
+ }
101
+ get multiSelectValue() {
102
+ return this._selectedIndexes.size > 0
103
+ ? Array.from(this._selectedIndexes).map((v) => this._options[v].value)
104
+ : [];
105
+ }
106
+ get filterPattern() {
107
+ return this._filterPattern;
108
+ }
109
+ set filterPattern(pattern) {
110
+ if (pattern !== this._filterPattern) {
111
+ this._filterPattern = pattern;
112
+ this._updateState();
113
+ }
114
+ }
115
+ get filterMethod() {
116
+ return this._filterMethod;
117
+ }
118
+ set filterMethod(method) {
119
+ if (method !== this._filterMethod) {
120
+ this._filterMethod = method;
121
+ this._updateState();
122
+ }
123
+ }
124
+ get options() {
125
+ return this._options;
126
+ }
127
+ get numOfVisibleOptions() {
128
+ return this._numOfVisibleOptions;
129
+ }
130
+ get numOptions() {
131
+ return this._options.length;
132
+ }
133
+ //#endregion
134
+ //#region public functions
135
+ populate(options) {
136
+ this._indexByValue.clear();
137
+ this._indexByLabel.clear();
138
+ this._options = options.map((op, index) => {
139
+ this._indexByValue.set(op.value ?? '', index);
140
+ this._indexByLabel.set(op.label ?? '', index);
141
+ return {
142
+ description: op.description ?? '',
143
+ disabled: op.disabled ?? false,
144
+ label: op.label ?? '',
145
+ selected: op.selected ?? false,
146
+ value: op.value ?? '',
147
+ index,
148
+ filteredIndex: index,
149
+ ranges: [],
150
+ visible: true,
151
+ };
152
+ });
153
+ this._numOfVisibleOptions = this._options.length;
154
+ }
155
+ add(option) {
156
+ const nextIndex = this._options.length;
157
+ const { description, disabled, label, selected, value } = option;
158
+ let visible = true;
159
+ let ranges = [];
160
+ if (this._combobox && this._filterPattern !== '') {
161
+ const res = this._searchByPattern(label ?? '');
162
+ visible = res.match;
163
+ ranges = res.ranges;
164
+ }
165
+ this._indexByValue.set(value ?? '', nextIndex);
166
+ this._indexByLabel.set(label ?? '', nextIndex);
167
+ if (selected) {
168
+ this._selectedIndex = nextIndex;
169
+ this._selectedIndexes.add(nextIndex);
170
+ this._activeIndex = nextIndex;
171
+ }
172
+ this._options.push({
173
+ index: nextIndex,
174
+ filteredIndex: nextIndex,
175
+ description: description ?? '',
176
+ disabled: disabled ?? false,
177
+ label: label ?? '',
178
+ selected: selected ?? false,
179
+ value: value ?? '',
180
+ visible,
181
+ ranges,
182
+ });
183
+ if (visible) {
184
+ this._numOfVisibleOptions += 1;
185
+ }
186
+ }
187
+ clear() {
188
+ this._options = [];
189
+ this._indexByValue.clear();
190
+ this._indexByLabel.clear();
191
+ this._numOfVisibleOptions = 0;
192
+ }
193
+ getIsIndexSelected(index) {
194
+ if (this._multiSelect) {
195
+ return this._selectedIndexes.has(index);
196
+ }
197
+ else {
198
+ return this._selectedIndex === index;
199
+ }
200
+ }
201
+ expandMultiSelection(values) {
202
+ values.forEach((v) => {
203
+ const foundIndex = this._indexByValue.get(v) ?? -1;
204
+ if (foundIndex !== -1) {
205
+ this._selectedIndexes.add(foundIndex);
206
+ }
207
+ });
208
+ this._host.requestUpdate();
209
+ }
210
+ toggleActiveMultiselectOption() {
211
+ const activeOption = this._options[this._activeIndex] ?? null;
212
+ if (!activeOption) {
213
+ return;
214
+ }
215
+ const checked = this._selectedIndexes.has(activeOption.index);
216
+ if (checked) {
217
+ this._selectedIndexes.delete(activeOption.index);
218
+ }
219
+ else {
220
+ this._selectedIndexes.add(activeOption.index);
221
+ }
222
+ this._host.requestUpdate();
223
+ }
224
+ toggleOptionSelected(optIndex) {
225
+ const checked = this._selectedIndexes.has(optIndex);
226
+ this._options[optIndex].selected = !this._options[optIndex].selected;
227
+ if (checked) {
228
+ this._selectedIndexes.delete(optIndex);
229
+ }
230
+ else {
231
+ this._selectedIndexes.add(optIndex);
232
+ }
233
+ this._host.requestUpdate();
234
+ }
235
+ getActiveOption() {
236
+ return this._options[this._activeIndex] ?? null;
237
+ }
238
+ getSelectedOption() {
239
+ return this._options[this._selectedIndex] ?? null;
240
+ }
241
+ getOptionByIndex(index) {
242
+ return this._options[index] ?? null;
243
+ }
244
+ findOptionIndex(value) {
245
+ return this._indexByValue.get(value) ?? -1;
246
+ }
247
+ getOptionByValue(value, includeHiddenOptions = false) {
248
+ const index = this._indexByValue.get(value) ?? -1;
249
+ if (index === -1) {
250
+ return null;
251
+ }
252
+ if (!includeHiddenOptions) {
253
+ return this._options[index].visible ? this._options[index] : null;
254
+ }
255
+ return this._options[index];
256
+ }
257
+ getOptionByLabel(label) {
258
+ const index = this._indexByLabel.get(label) ?? -1;
259
+ if (index === -1) {
260
+ return null;
261
+ }
262
+ return this._options[index];
263
+ }
264
+ next(fromIndex) {
265
+ const from = fromIndex ?? this._activeIndex;
266
+ let nextIndex = -1;
267
+ for (let i = from + 1; i < this._options.length; i++) {
268
+ if (this._options[i] &&
269
+ !this._options[i].disabled &&
270
+ this._options[i].visible) {
271
+ nextIndex = i;
272
+ break;
273
+ }
274
+ }
275
+ return nextIndex > -1 ? this._options[nextIndex] : null;
276
+ }
277
+ prev(fromIndex) {
278
+ const from = fromIndex ?? this._activeIndex;
279
+ let prevIndex = -1;
280
+ for (let i = from - 1; i >= 0; i--) {
281
+ if (this._options[i] &&
282
+ !this._options[i].disabled &&
283
+ this._options[i].visible) {
284
+ prevIndex = i;
285
+ break;
286
+ }
287
+ }
288
+ return prevIndex > -1 ? this._options[prevIndex] : null;
289
+ }
290
+ activateDefault() {
291
+ if (this._multiSelect) {
292
+ if (this._selectedIndexes.size > 0) {
293
+ const indexes = this._selectedIndexes.values();
294
+ const first = indexes.next();
295
+ this._activeIndex = first.value ? first.value : 0;
296
+ }
297
+ }
298
+ else {
299
+ if (this._selectedIndex > -1) {
300
+ this._activeIndex = this._selectedIndex;
301
+ }
302
+ else {
303
+ this._activeIndex = 0;
304
+ }
305
+ }
306
+ this._host.requestUpdate();
307
+ }
308
+ selectAll() {
309
+ if (!this._multiSelect) {
310
+ return;
311
+ }
312
+ this._options.forEach((_, i) => {
313
+ this._options[i].selected = true;
314
+ this._selectedIndexes.add(i);
315
+ });
316
+ this._host.requestUpdate();
317
+ }
318
+ selectNone() {
319
+ if (!this._multiSelect) {
320
+ return;
321
+ }
322
+ this._options.forEach((_, i) => {
323
+ this._options[i].selected = false;
324
+ });
325
+ this._selectedIndexes.clear();
326
+ this._host.requestUpdate();
327
+ }
328
+ //#endregion
329
+ //#region private functions
330
+ _searchByPattern(text) {
331
+ let result;
332
+ switch (this._filterMethod) {
333
+ case 'startsWithPerTerm':
334
+ result = startsWithPerTermSearch(text, this._filterPattern);
335
+ break;
336
+ case 'startsWith':
337
+ result = startsWithSearch(text, this._filterPattern);
338
+ break;
339
+ case 'contains':
340
+ result = containsSearch(text, this._filterPattern);
341
+ break;
342
+ default:
343
+ result = fuzzySearch(text, this._filterPattern);
344
+ }
345
+ return result;
346
+ }
347
+ _updateState() {
348
+ if (!this._combobox || this._filterPattern === '') {
349
+ this._options.forEach((_, i) => {
350
+ this._options[i].visible = true;
351
+ this._options[i].ranges = [];
352
+ });
353
+ this._numOfVisibleOptions = this._options.length;
354
+ }
355
+ else {
356
+ let filteredListNextIndex = -1;
357
+ this._numOfVisibleOptions = 0;
358
+ this._options.forEach(({ label }, i) => {
359
+ const result = this._searchByPattern(label);
360
+ this._options[i].visible = result.match;
361
+ this._options[i].ranges = result.ranges;
362
+ this._options[i].filteredIndex = result.match
363
+ ? ++filteredListNextIndex
364
+ : -1;
365
+ if (result.match) {
366
+ this._numOfVisibleOptions += 1;
367
+ }
368
+ });
369
+ }
370
+ this._host.requestUpdate();
371
+ }
372
+ }
373
+ //# sourceMappingURL=OptionListController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptionListController.js","sourceRoot":"","sources":["../../../src/includes/vscode-select/OptionListController.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,WAAW,EAEX,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAEnB,MAAM,OAAO,oBAAoB;IAc/B,YAAY,IAA4B;QAbhC,iBAAY,GAAG,CAAC,CAAC,CAAC;QAElB,aAAQ,GAAqB,EAAE,CAAC;QAChC,mBAAc,GAAG,EAAE,CAAC;QACpB,kBAAa,GAAiB,OAAO,CAAC;QACtC,cAAS,GAAG,KAAK,CAAC;QAClB,kBAAa,GAAwB,IAAI,GAAG,EAAE,CAAC;QAC/C,kBAAa,GAAwB,IAAI,GAAG,EAAE,CAAC;QAC/C,mBAAc,GAAG,CAAC,CAAC,CAAC;QACpB,qBAAgB,GAAgB,IAAI,GAAG,EAAE,CAAC;QAC1C,iBAAY,GAAG,KAAK,CAAC;QACrB,yBAAoB,GAAG,CAAC,CAAC;QAG/B,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,aAAa,KAAU,CAAC;IAExB,yBAAyB;IAEzB,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,WAAW,CAAC,KAAa;QAC3B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,aAAa,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,IAAI,YAAY,CAAC,OAAgB;QAC/B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,WAAW,CAAC,WAAoB;QAClC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,IAAI,aAAa,CAAC,KAAa;QAC7B,IAAI,IAAI,CAAC,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC;QACxD,CAAC;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAExC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,eAAe,CAAC,KAAe;QACjC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAClC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAEvC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBACnC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,KAAK,CAAC,QAA2B;QACnC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,SAAS,GAAI,QAAqB;iBACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBACrC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;YAElC,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,KAAK;QACP,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC;gBACnC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;gBACtE,CAAC,CAAC,EAAE,CAAC;QACT,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;gBAC7B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK;gBAC1C,CAAC,CAAC,EAAE,CAAC;QACT,CAAC;IACH,CAAC;IAED,IAAI,gBAAgB,CAAC,QAAkB;QACrC,MAAM,SAAS,GAAI,QAAqB;aACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACrC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QAElC,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC;YACnC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACtE,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,IAAI,aAAa,CAAC,OAAe;QAC/B,IAAI,OAAO,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YACpC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;YAC9B,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,IAAI,YAAY,CAAC,MAAoB;QACnC,IAAI,MAAM,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;YAClC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;YAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,YAAY;IAEZ,0BAA0B;IAE1B,QAAQ,CAAC,OAAiB;QACxB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAE3B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE;YACxC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;YAE9C,OAAO;gBACL,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE;gBACjC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,KAAK;gBAC9B,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE;gBACrB,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,KAAK;gBAC9B,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE;gBACrB,KAAK;gBACL,aAAa,EAAE,KAAK;gBACpB,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IACnD,CAAC;IAED,GAAG,CAAC,MAAc;QAChB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACvC,MAAM,EAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAC,GAAG,MAAM,CAAC;QAC/D,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,MAAM,GAAuB,EAAE,CAAC;QAEpC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,KAAK,EAAE,EAAE,CAAC;YACjD,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC/C,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC;YACpB,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;QAE/C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjB,KAAK,EAAE,SAAS;YAChB,aAAa,EAAE,SAAS;YACxB,WAAW,EAAE,WAAW,IAAI,EAAE;YAC9B,QAAQ,EAAE,QAAQ,IAAI,KAAK;YAC3B,KAAK,EAAE,KAAK,IAAI,EAAE;YAClB,QAAQ,EAAE,QAAQ,IAAI,KAAK;YAC3B,KAAK,EAAE,KAAK,IAAI,EAAE;YAClB,OAAO;YACP,MAAM;SACP,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,oBAAoB,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,kBAAkB,CAAC,KAAa;QAC9B,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,cAAc,KAAK,KAAK,CAAC;QACvC,CAAC;IACH,CAAC;IAED,oBAAoB,CAAC,MAAgB;QACnC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACnB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAEnD,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,6BAA6B;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;QAE9D,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAE9D,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,oBAAoB,CAAC,QAAgB;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC;QAErE,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC;IAClD,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC;IACpD,CAAC;IAED,gBAAgB,CAAC,KAAa;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IACtC,CAAC;IAED,eAAe,CAAC,KAAa;QAC3B,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,gBAAgB,CACd,KAAa,EACb,oBAAoB,GAAG,KAAK;QAE5B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAElD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,gBAAgB,CAAC,KAAa;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAElD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,SAAkB;QACrB,MAAM,IAAI,GAAG,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC;QAC5C,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrD,IACE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAChB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;gBAC1B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EACxB,CAAC;gBACD,SAAS,GAAG,CAAC,CAAC;gBACd,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC,SAAkB;QACrB,MAAM,IAAI,GAAG,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC;QAE5C,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IACE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAChB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;gBAC1B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,EACxB,CAAC;gBACD,SAAS,GAAG,CAAC,CAAC;gBACd,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,CAAC;IAED,eAAe;QACb,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;gBAC/C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC7B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,SAAS;QACP,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC7B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;YACjC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC7B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAE9B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,YAAY;IAEZ,2BAA2B;IAEnB,gBAAgB,CAAC,IAAY;QACnC,IAAI,MAAoB,CAAC;QAEzB,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;YAC3B,KAAK,mBAAmB;gBACtB,MAAM,GAAG,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;gBAC5D,MAAM;YACR,KAAK,YAAY;gBACf,MAAM,GAAG,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;gBACrD,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;gBACnD,MAAM;YACR;gBACE,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,KAAK,EAAE,EAAE,CAAC;YAClD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC7B,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;gBAChC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,IAAI,qBAAqB,GAAG,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;YAE9B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAC,KAAK,EAAC,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;gBACxC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;gBACxC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,MAAM,CAAC,KAAK;oBAC3C,CAAC,CAAC,EAAE,qBAAqB;oBACzB,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEP,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,IAAI,CAAC,oBAAoB,IAAI,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC;CAGF","sourcesContent":["import {ReactiveController, ReactiveControllerHost} from 'lit';\nimport {FilterMethod, InternalOption, Option} from './types';\nimport {\n containsSearch,\n fuzzySearch,\n SearchResult,\n startsWithPerTermSearch,\n startsWithSearch,\n} from './helpers';\n\nexport class OptionListController implements ReactiveController {\n private _activeIndex = -1;\n private _host: ReactiveControllerHost;\n private _options: InternalOption[] = [];\n private _filterPattern = '';\n private _filterMethod: FilterMethod = 'fuzzy';\n private _combobox = false;\n private _indexByValue: Map<string, number> = new Map();\n private _indexByLabel: Map<string, number> = new Map();\n private _selectedIndex = -1;\n private _selectedIndexes: Set<number> = new Set();\n private _multiSelect = false;\n private _numOfVisibleOptions = 0;\n\n constructor(host: ReactiveControllerHost) {\n (this._host = host).addController(this);\n }\n\n hostConnected(): void {}\n\n //#region getters/setters\n\n get activeIndex(): number {\n return this._activeIndex;\n }\n\n set activeIndex(index: number) {\n this._activeIndex = index;\n this._host.requestUpdate();\n }\n\n get relativeActiveIndex(): number {\n return this._options[this._activeIndex]?.filteredIndex ?? -1;\n }\n\n set comboboxMode(enabled: boolean) {\n this._combobox = enabled;\n this._host.requestUpdate();\n }\n\n get comboboxMode() {\n return this._combobox;\n }\n\n get multiSelect() {\n return this._multiSelect;\n }\n\n set multiSelect(multiSelect: boolean) {\n this._selectedIndex = -1;\n this._selectedIndexes.clear();\n this._multiSelect = multiSelect;\n this._host.requestUpdate();\n }\n\n get selectedIndex() {\n return this._selectedIndex;\n }\n\n set selectedIndex(index: number) {\n if (this._selectedIndex !== -1) {\n this._options[this._selectedIndex].selected ??= false;\n }\n\n const op = this.getOptionByIndex(index);\n\n this._selectedIndex = op ? index : -1;\n this._host.requestUpdate();\n }\n\n get selectedIndexes() {\n return Array.from(this._selectedIndexes);\n }\n\n set selectedIndexes(value: number[]) {\n this._selectedIndexes.forEach((v) => {\n this._options[v].selected = false;\n });\n\n this._selectedIndexes = new Set(value);\n\n value.forEach((v) => {\n if (this._options[v] !== undefined) {\n this._options[v].selected = true;\n }\n });\n\n this._host.requestUpdate();\n }\n\n set value(newValue: string | string[]) {\n if (this._multiSelect) {\n const valueList = (newValue as string[])\n .map((v) => this._indexByValue.get(v))\n .filter((v) => v !== undefined);\n\n this._selectedIndexes = new Set(valueList);\n } else {\n this._selectedIndex = this._indexByValue.get(newValue as string) ?? -1;\n }\n this._host.requestUpdate();\n }\n\n get value(): string | string[] {\n if (this._multiSelect) {\n return this._selectedIndexes.size > 0\n ? Array.from(this._selectedIndexes).map((v) => this._options[v].value)\n : [];\n } else {\n return this._selectedIndex > -1\n ? this._options[this._selectedIndex].value\n : '';\n }\n }\n\n set multiSelectValue(newValue: string[]) {\n const valueList = (newValue as string[])\n .map((v) => this._indexByValue.get(v))\n .filter((v) => v !== undefined);\n\n this._selectedIndexes = new Set(valueList);\n }\n\n get multiSelectValue(): string[] {\n return this._selectedIndexes.size > 0\n ? Array.from(this._selectedIndexes).map((v) => this._options[v].value)\n : [];\n }\n\n get filterPattern() {\n return this._filterPattern;\n }\n\n set filterPattern(pattern: string) {\n if (pattern !== this._filterPattern) {\n this._filterPattern = pattern;\n this._updateState();\n }\n }\n\n get filterMethod(): FilterMethod {\n return this._filterMethod;\n }\n\n set filterMethod(method: FilterMethod) {\n if (method !== this._filterMethod) {\n this._filterMethod = method;\n this._updateState();\n }\n }\n\n get options(): InternalOption[] {\n return this._options;\n }\n\n get numOfVisibleOptions() {\n return this._numOfVisibleOptions;\n }\n\n get numOptions() {\n return this._options.length;\n }\n\n //#endregion\n\n //#region public functions\n\n populate(options: Option[]) {\n this._indexByValue.clear();\n this._indexByLabel.clear();\n\n this._options = options.map((op, index) => {\n this._indexByValue.set(op.value ?? '', index);\n this._indexByLabel.set(op.label ?? '', index);\n\n return {\n description: op.description ?? '',\n disabled: op.disabled ?? false,\n label: op.label ?? '',\n selected: op.selected ?? false,\n value: op.value ?? '',\n index,\n filteredIndex: index,\n ranges: [],\n visible: true,\n };\n });\n\n this._numOfVisibleOptions = this._options.length;\n }\n\n add(option: Option) {\n const nextIndex = this._options.length;\n const {description, disabled, label, selected, value} = option;\n let visible = true;\n let ranges: [number, number][] = [];\n\n if (this._combobox && this._filterPattern !== '') {\n const res = this._searchByPattern(label ?? '');\n visible = res.match;\n ranges = res.ranges;\n }\n\n this._indexByValue.set(value ?? '', nextIndex);\n this._indexByLabel.set(label ?? '', nextIndex);\n\n if (selected) {\n this._selectedIndex = nextIndex;\n this._selectedIndexes.add(nextIndex);\n this._activeIndex = nextIndex;\n }\n\n this._options.push({\n index: nextIndex,\n filteredIndex: nextIndex,\n description: description ?? '',\n disabled: disabled ?? false,\n label: label ?? '',\n selected: selected ?? false,\n value: value ?? '',\n visible,\n ranges,\n });\n\n if (visible) {\n this._numOfVisibleOptions += 1;\n }\n }\n\n clear() {\n this._options = [];\n this._indexByValue.clear();\n this._indexByLabel.clear();\n this._numOfVisibleOptions = 0;\n }\n\n getIsIndexSelected(index: number) {\n if (this._multiSelect) {\n return this._selectedIndexes.has(index);\n } else {\n return this._selectedIndex === index;\n }\n }\n\n expandMultiSelection(values: string[]) {\n values.forEach((v) => {\n const foundIndex = this._indexByValue.get(v) ?? -1;\n\n if (foundIndex !== -1) {\n this._selectedIndexes.add(foundIndex);\n }\n });\n\n this._host.requestUpdate();\n }\n\n toggleActiveMultiselectOption() {\n const activeOption = this._options[this._activeIndex] ?? null;\n\n if (!activeOption) {\n return;\n }\n\n const checked = this._selectedIndexes.has(activeOption.index);\n\n if (checked) {\n this._selectedIndexes.delete(activeOption.index);\n } else {\n this._selectedIndexes.add(activeOption.index);\n }\n\n this._host.requestUpdate();\n }\n\n toggleOptionSelected(optIndex: number) {\n const checked = this._selectedIndexes.has(optIndex);\n this._options[optIndex].selected = !this._options[optIndex].selected;\n\n if (checked) {\n this._selectedIndexes.delete(optIndex);\n } else {\n this._selectedIndexes.add(optIndex);\n }\n\n this._host.requestUpdate();\n }\n\n getActiveOption(): InternalOption | null {\n return this._options[this._activeIndex] ?? null;\n }\n\n getSelectedOption(): InternalOption | null {\n return this._options[this._selectedIndex] ?? null;\n }\n\n getOptionByIndex(index: number) {\n return this._options[index] ?? null;\n }\n\n findOptionIndex(value: string) {\n return this._indexByValue.get(value) ?? -1;\n }\n\n getOptionByValue(\n value: string,\n includeHiddenOptions = false\n ): InternalOption | null {\n const index = this._indexByValue.get(value) ?? -1;\n\n if (index === -1) {\n return null;\n }\n\n if (!includeHiddenOptions) {\n return this._options[index].visible ? this._options[index] : null;\n }\n\n return this._options[index];\n }\n\n getOptionByLabel(label: string) {\n const index = this._indexByLabel.get(label) ?? -1;\n\n if (index === -1) {\n return null;\n }\n\n return this._options[index];\n }\n\n next(fromIndex?: number): InternalOption | null {\n const from = fromIndex ?? this._activeIndex;\n let nextIndex = -1;\n\n for (let i = from + 1; i < this._options.length; i++) {\n if (\n this._options[i] &&\n !this._options[i].disabled &&\n this._options[i].visible\n ) {\n nextIndex = i;\n break;\n }\n }\n\n return nextIndex > -1 ? this._options[nextIndex] : null;\n }\n\n prev(fromIndex?: number): InternalOption | null {\n const from = fromIndex ?? this._activeIndex;\n\n let prevIndex = -1;\n\n for (let i = from - 1; i >= 0; i--) {\n if (\n this._options[i] &&\n !this._options[i].disabled &&\n this._options[i].visible\n ) {\n prevIndex = i;\n break;\n }\n }\n\n return prevIndex > -1 ? this._options[prevIndex] : null;\n }\n\n activateDefault() {\n if (this._multiSelect) {\n if (this._selectedIndexes.size > 0) {\n const indexes = this._selectedIndexes.values();\n const first = indexes.next();\n this._activeIndex = first.value ? first.value : 0;\n }\n } else {\n if (this._selectedIndex > -1) {\n this._activeIndex = this._selectedIndex;\n } else {\n this._activeIndex = 0;\n }\n }\n\n this._host.requestUpdate();\n }\n\n selectAll() {\n if (!this._multiSelect) {\n return;\n }\n\n this._options.forEach((_, i) => {\n this._options[i].selected = true;\n this._selectedIndexes.add(i);\n });\n\n this._host.requestUpdate();\n }\n\n selectNone() {\n if (!this._multiSelect) {\n return;\n }\n\n this._options.forEach((_, i) => {\n this._options[i].selected = false;\n });\n this._selectedIndexes.clear();\n\n this._host.requestUpdate();\n }\n\n //#endregion\n\n //#region private functions\n\n private _searchByPattern(text: string) {\n let result: SearchResult;\n\n switch (this._filterMethod) {\n case 'startsWithPerTerm':\n result = startsWithPerTermSearch(text, this._filterPattern);\n break;\n case 'startsWith':\n result = startsWithSearch(text, this._filterPattern);\n break;\n case 'contains':\n result = containsSearch(text, this._filterPattern);\n break;\n default:\n result = fuzzySearch(text, this._filterPattern);\n }\n\n return result;\n }\n\n private _updateState() {\n if (!this._combobox || this._filterPattern === '') {\n this._options.forEach((_, i) => {\n this._options[i].visible = true;\n this._options[i].ranges = [];\n });\n this._numOfVisibleOptions = this._options.length;\n } else {\n let filteredListNextIndex = -1;\n this._numOfVisibleOptions = 0;\n\n this._options.forEach(({label}, i) => {\n const result = this._searchByPattern(label);\n this._options[i].visible = result.match;\n this._options[i].ranges = result.ranges;\n this._options[i].filteredIndex = result.match\n ? ++filteredListNextIndex\n : -1;\n\n if (result.match) {\n this._numOfVisibleOptions += 1;\n }\n });\n }\n\n this._host.requestUpdate();\n }\n\n //#endregion\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { TemplateResult } from 'lit';
2
- import { InternalOption, SearchMethod } from './types.js';
2
+ import { InternalOption, FilterMethod } from './types.js';
3
3
  export type SearchResult = {
4
4
  match: boolean;
5
5
  ranges: [number, number][];
@@ -8,7 +8,7 @@ export declare const startsWithPerTermSearch: (subject: string, pattern: string)
8
8
  export declare const startsWithSearch: (subject: string, pattern: string) => SearchResult;
9
9
  export declare const containsSearch: (subject: string, pattern: string) => SearchResult;
10
10
  export declare const fuzzySearch: (subject: string, pattern: string) => SearchResult;
11
- export declare const filterOptionsByPattern: (list: InternalOption[], pattern: string, method: SearchMethod) => InternalOption[];
11
+ export declare const filterOptionsByPattern: (list: InternalOption[], pattern: string, method: FilterMethod) => InternalOption[];
12
12
  export declare const highlightRanges: (text: string, ranges: [number, number][]) => TemplateResult | TemplateResult[];
13
13
  export declare function findNextSelectableOptionIndex(options: InternalOption[], fromIndex: number): number;
14
14
  export declare function findPrevSelectableOptionIndex(options: InternalOption[], fromIndex: number): number;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/includes/vscode-select/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import {html, TemplateResult} from 'lit';\nimport {InternalOption, SearchMethod} from './types.js';\n\nexport type SearchResult = {\n match: boolean;\n ranges: [number, number][];\n};\n\nexport const startsWithPerTermSearch = (\n subject: string,\n pattern: string\n): SearchResult => {\n const result: SearchResult = {\n match: false,\n ranges: [],\n };\n const lcSubject = subject.toLowerCase();\n const lcPattern = pattern.toLowerCase();\n const terms = lcSubject.split(' ');\n let offset = 0;\n\n terms.forEach((t, i) => {\n if (i > 0) {\n offset += terms[i - 1].length + 1;\n }\n\n if (result.match) {\n return;\n }\n\n const foundIndex = t.indexOf(lcPattern);\n const patternLength = lcPattern.length;\n\n if (foundIndex === 0) {\n result.match = true;\n result.ranges.push([\n offset + foundIndex,\n Math.min(offset + foundIndex + patternLength, subject.length),\n ]);\n }\n });\n\n return result;\n};\n\nexport const startsWithSearch = (\n subject: string,\n pattern: string\n): SearchResult => {\n const result: SearchResult = {\n match: false,\n ranges: [],\n };\n const foundIndex = subject.toLowerCase().indexOf(pattern.toLowerCase());\n\n if (foundIndex === 0) {\n result.match = true;\n result.ranges = [[0, pattern.length]];\n }\n\n return result;\n};\n\nexport const containsSearch = (\n subject: string,\n pattern: string\n): SearchResult => {\n const result: SearchResult = {\n match: false,\n ranges: [],\n };\n const foundIndex = subject.toLowerCase().indexOf(pattern.toLowerCase());\n\n if (foundIndex > -1) {\n result.match = true;\n result.ranges = [[foundIndex, foundIndex + pattern.length]];\n }\n\n return result;\n};\n\nexport const fuzzySearch = (subject: string, pattern: string): SearchResult => {\n const result: SearchResult = {\n match: false,\n ranges: [],\n };\n let fromIndex = 0;\n let foundIndex = 0;\n const iMax = pattern.length - 1;\n const lcSubject = subject.toLowerCase();\n const lcPattern = pattern.toLowerCase();\n\n for (let i = 0; i <= iMax; i++) {\n foundIndex = lcSubject.indexOf(lcPattern[i], fromIndex);\n\n if (foundIndex === -1) {\n return {\n match: false,\n ranges: [],\n };\n }\n\n result.match = true;\n result.ranges.push([foundIndex, foundIndex + 1]);\n\n fromIndex = foundIndex + 1;\n }\n\n return result;\n};\n\nexport const filterOptionsByPattern = (\n list: InternalOption[],\n pattern: string,\n method: SearchMethod\n): InternalOption[] => {\n const filtered: InternalOption[] = [];\n\n list.forEach((op) => {\n let result: SearchResult;\n\n switch (method) {\n case 'startsWithPerTerm':\n result = startsWithPerTermSearch(op.label, pattern);\n break;\n case 'startsWith':\n result = startsWithSearch(op.label, pattern);\n break;\n case 'contains':\n result = containsSearch(op.label, pattern);\n break;\n default:\n result = fuzzySearch(op.label, pattern);\n }\n\n if (result.match) {\n filtered.push({...op, ranges: result.ranges});\n }\n });\n\n return filtered;\n};\n\nconst preventSpaces = (text: string): TemplateResult[] => {\n const res: TemplateResult[] = [];\n\n if (text === ' ') {\n res.push(html`&nbsp;`);\n\n return res;\n }\n\n if (text.indexOf(' ') === 0) {\n res.push(html`&nbsp;`);\n }\n\n res.push(html`${text.trimStart().trimEnd()}`);\n\n if (text.lastIndexOf(' ') === text.length - 1) {\n res.push(html`&nbsp;`);\n }\n\n return res;\n};\n\nexport const highlightRanges = (\n text: string,\n ranges: [number, number][]\n): TemplateResult | TemplateResult[] => {\n const res: TemplateResult[] = [];\n const rl = ranges.length;\n\n if (rl < 1) {\n return html`${text}`;\n }\n\n ranges.forEach((r, i) => {\n const match = text.substring(r[0], r[1]);\n\n if (i === 0 && r[0] !== 0) {\n // text before the first range\n res.push(...preventSpaces(text.substring(0, ranges[0][0])));\n }\n\n if (i > 0 && i < rl && r[0] - ranges[i - 1][1] !== 0) {\n // text before the current range\n res.push(...preventSpaces(text.substring(ranges[i - 1][1], r[0])));\n }\n\n res.push(html`<b>${preventSpaces(match)}</b>`);\n\n if (i === rl - 1 && r[1] < text.length) {\n // text after the last range\n res.push(...preventSpaces(text.substring(r[1], text.length)));\n }\n });\n\n return res;\n};\n\nexport function findNextSelectableOptionIndex(\n options: InternalOption[],\n fromIndex: number\n) {\n let result = 0;\n\n if (fromIndex < 0 || !options[fromIndex] || !options[fromIndex + 1]) {\n return result;\n }\n\n for (let i = fromIndex + 1; i < options.length; i++) {\n if (!options[i].disabled) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nexport function findPrevSelectableOptionIndex(\n options: InternalOption[],\n fromIndex: number\n) {\n let result = 0;\n\n if (fromIndex < 0 || !options[fromIndex] || !options[fromIndex - 1]) {\n return result;\n }\n\n for (let i = fromIndex - 1; i >= 0; i--) {\n if (!options[i].disabled) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/includes/vscode-select/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import {html, TemplateResult} from 'lit';\nimport {InternalOption, FilterMethod} from './types.js';\n\nexport type SearchResult = {\n match: boolean;\n ranges: [number, number][];\n};\n\nexport const startsWithPerTermSearch = (\n subject: string,\n pattern: string\n): SearchResult => {\n const result: SearchResult = {\n match: false,\n ranges: [],\n };\n const lcSubject = subject.toLowerCase();\n const lcPattern = pattern.toLowerCase();\n const terms = lcSubject.split(' ');\n let offset = 0;\n\n terms.forEach((t, i) => {\n if (i > 0) {\n offset += terms[i - 1].length + 1;\n }\n\n if (result.match) {\n return;\n }\n\n const foundIndex = t.indexOf(lcPattern);\n const patternLength = lcPattern.length;\n\n if (foundIndex === 0) {\n result.match = true;\n result.ranges.push([\n offset + foundIndex,\n Math.min(offset + foundIndex + patternLength, subject.length),\n ]);\n }\n });\n\n return result;\n};\n\nexport const startsWithSearch = (\n subject: string,\n pattern: string\n): SearchResult => {\n const result: SearchResult = {\n match: false,\n ranges: [],\n };\n const foundIndex = subject.toLowerCase().indexOf(pattern.toLowerCase());\n\n if (foundIndex === 0) {\n result.match = true;\n result.ranges = [[0, pattern.length]];\n }\n\n return result;\n};\n\nexport const containsSearch = (\n subject: string,\n pattern: string\n): SearchResult => {\n const result: SearchResult = {\n match: false,\n ranges: [],\n };\n const foundIndex = subject.toLowerCase().indexOf(pattern.toLowerCase());\n\n if (foundIndex > -1) {\n result.match = true;\n result.ranges = [[foundIndex, foundIndex + pattern.length]];\n }\n\n return result;\n};\n\nexport const fuzzySearch = (subject: string, pattern: string): SearchResult => {\n const result: SearchResult = {\n match: false,\n ranges: [],\n };\n let fromIndex = 0;\n let foundIndex = 0;\n const iMax = pattern.length - 1;\n const lcSubject = subject.toLowerCase();\n const lcPattern = pattern.toLowerCase();\n\n for (let i = 0; i <= iMax; i++) {\n foundIndex = lcSubject.indexOf(lcPattern[i], fromIndex);\n\n if (foundIndex === -1) {\n return {\n match: false,\n ranges: [],\n };\n }\n\n result.match = true;\n result.ranges.push([foundIndex, foundIndex + 1]);\n\n fromIndex = foundIndex + 1;\n }\n\n return result;\n};\n\nexport const filterOptionsByPattern = (\n list: InternalOption[],\n pattern: string,\n method: FilterMethod\n): InternalOption[] => {\n const filtered: InternalOption[] = [];\n\n list.forEach((op) => {\n let result: SearchResult;\n\n switch (method) {\n case 'startsWithPerTerm':\n result = startsWithPerTermSearch(op.label, pattern);\n break;\n case 'startsWith':\n result = startsWithSearch(op.label, pattern);\n break;\n case 'contains':\n result = containsSearch(op.label, pattern);\n break;\n default:\n result = fuzzySearch(op.label, pattern);\n }\n\n if (result.match) {\n filtered.push({...op, ranges: result.ranges});\n }\n });\n\n return filtered;\n};\n\nconst preventSpaces = (text: string): TemplateResult[] => {\n const res: TemplateResult[] = [];\n\n if (text === ' ') {\n res.push(html`&nbsp;`);\n\n return res;\n }\n\n if (text.indexOf(' ') === 0) {\n res.push(html`&nbsp;`);\n }\n\n res.push(html`${text.trimStart().trimEnd()}`);\n\n if (text.lastIndexOf(' ') === text.length - 1) {\n res.push(html`&nbsp;`);\n }\n\n return res;\n};\n\nexport const highlightRanges = (\n text: string,\n ranges: [number, number][]\n): TemplateResult | TemplateResult[] => {\n const res: TemplateResult[] = [];\n const rl = ranges.length;\n\n if (rl < 1) {\n return html`${text}`;\n }\n\n ranges.forEach((r, i) => {\n const match = text.substring(r[0], r[1]);\n\n if (i === 0 && r[0] !== 0) {\n // text before the first range\n res.push(...preventSpaces(text.substring(0, ranges[0][0])));\n }\n\n if (i > 0 && i < rl && r[0] - ranges[i - 1][1] !== 0) {\n // text before the current range\n res.push(...preventSpaces(text.substring(ranges[i - 1][1], r[0])));\n }\n\n res.push(html`<b>${preventSpaces(match)}</b>`);\n\n if (i === rl - 1 && r[1] < text.length) {\n // text after the last range\n res.push(...preventSpaces(text.substring(r[1], text.length)));\n }\n });\n\n return res;\n};\n\nexport function findNextSelectableOptionIndex(\n options: InternalOption[],\n fromIndex: number\n) {\n let result = 0;\n\n if (fromIndex < 0 || !options[fromIndex] || !options[fromIndex + 1]) {\n return result;\n }\n\n for (let i = fromIndex + 1; i < options.length; i++) {\n if (!options[i].disabled) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nexport function findPrevSelectableOptionIndex(\n options: InternalOption[],\n fromIndex: number\n) {\n let result = 0;\n\n if (fromIndex < 0 || !options[fromIndex] || !options[fromIndex - 1]) {\n return result;\n }\n\n for (let i = fromIndex - 1; i >= 0; i--) {\n if (!options[i].disabled) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/includes/vscode-select/styles.ts"],"names":[],"mappings":";AAGA,wBAsYE"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/includes/vscode-select/styles.ts"],"names":[],"mappings":";AAGA,wBAkYE"}