@vscode-elements/elements 1.16.0 → 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.
- package/README.md +5 -1
- package/custom-elements.json +1199 -687
- package/dist/bundled.js +888 -812
- package/dist/includes/VscElement.d.ts.map +1 -1
- package/dist/includes/VscElement.js +3 -1
- package/dist/includes/VscElement.js.map +1 -1
- package/dist/includes/vscode-select/OptionListController.d.ts +61 -0
- package/dist/includes/vscode-select/OptionListController.d.ts.map +1 -0
- package/dist/includes/vscode-select/OptionListController.js +373 -0
- package/dist/includes/vscode-select/OptionListController.js.map +1 -0
- package/dist/includes/vscode-select/helpers.d.ts +2 -2
- package/dist/includes/vscode-select/helpers.js.map +1 -1
- package/dist/includes/vscode-select/styles.d.ts.map +1 -1
- package/dist/includes/vscode-select/styles.js +19 -23
- package/dist/includes/vscode-select/styles.js.map +1 -1
- package/dist/includes/vscode-select/template-elements.d.ts +1 -0
- package/dist/includes/vscode-select/template-elements.d.ts.map +1 -1
- package/dist/includes/vscode-select/template-elements.js +14 -1
- package/dist/includes/vscode-select/template-elements.js.map +1 -1
- package/dist/includes/vscode-select/types.d.ts +11 -7
- package/dist/includes/vscode-select/types.d.ts.map +1 -1
- package/dist/includes/vscode-select/types.js.map +1 -1
- package/dist/includes/vscode-select/vscode-select-base.d.ts +25 -31
- package/dist/includes/vscode-select/vscode-select-base.d.ts.map +1 -1
- package/dist/includes/vscode-select/vscode-select-base.js +214 -324
- package/dist/includes/vscode-select/vscode-select-base.js.map +1 -1
- package/dist/vscode-button/vscode-button.styles.js +4 -4
- package/dist/vscode-button/vscode-button.styles.js.map +1 -1
- package/dist/vscode-button-group/vscode-button-group.styles.d.ts.map +1 -1
- package/dist/vscode-button-group/vscode-button-group.styles.js +2 -0
- package/dist/vscode-button-group/vscode-button-group.styles.js.map +1 -1
- package/dist/vscode-icon/vscode-icon.d.ts.map +1 -1
- package/dist/vscode-icon/vscode-icon.js +1 -0
- package/dist/vscode-icon/vscode-icon.js.map +1 -1
- package/dist/vscode-label/vscode-label.d.ts.map +1 -1
- package/dist/vscode-label/vscode-label.js +9 -7
- package/dist/vscode-label/vscode-label.js.map +1 -1
- package/dist/vscode-multi-select/vscode-multi-select.d.ts +9 -1
- package/dist/vscode-multi-select/vscode-multi-select.d.ts.map +1 -1
- package/dist/vscode-multi-select/vscode-multi-select.js +125 -65
- package/dist/vscode-multi-select/vscode-multi-select.js.map +1 -1
- package/dist/vscode-single-select/vscode-single-select.d.ts +4 -4
- package/dist/vscode-single-select/vscode-single-select.d.ts.map +1 -1
- package/dist/vscode-single-select/vscode-single-select.js +140 -74
- package/dist/vscode-single-select/vscode-single-select.js.map +1 -1
- package/package.json +5 -4
- package/vscode.css-custom-data.json +2 -2
- 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,
|
|
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.0';
|
|
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,
|
|
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":"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","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,
|
|
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:
|
|
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` `);\n\n return res;\n }\n\n if (text.indexOf(' ') === 0) {\n res.push(html` `);\n }\n\n res.push(html`${text.trimStart().trimEnd()}`);\n\n if (text.lastIndexOf(' ') === text.length - 1) {\n res.push(html` `);\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":"AAAA,OAAO,EAAC,IAAI,EAAiB,MAAM,KAAK,CAAC;AAQzC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,OAAe,EACf,OAAe,EACD,EAAE;IAChB,MAAM,MAAM,GAAiB;QAC3B,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,EAAE;KACX,CAAC;IACF,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC;QAEvC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBACjB,MAAM,GAAG,UAAU;gBACnB,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,UAAU,GAAG,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAAe,EACf,OAAe,EACD,EAAE;IAChB,MAAM,MAAM,GAAiB;QAC3B,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,EAAE;KACX,CAAC;IACF,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAExE,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,OAAe,EACf,OAAe,EACD,EAAE;IAChB,MAAM,MAAM,GAAiB;QAC3B,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,EAAE;KACX,CAAC;IACF,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAExE,IAAI,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAe,EAAE,OAAe,EAAgB,EAAE;IAC5E,MAAM,MAAM,GAAiB;QAC3B,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,EAAE;KACX,CAAC;IACF,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAExD,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,EAAE;aACX,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;QAEjD,SAAS,GAAG,UAAU,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,IAAsB,EACtB,OAAe,EACf,MAAoB,EACF,EAAE;IACpB,MAAM,QAAQ,GAAqB,EAAE,CAAC;IAEtC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;QAClB,IAAI,MAAoB,CAAC;QAEzB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,mBAAmB;gBACtB,MAAM,GAAG,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACpD,MAAM;YACR,KAAK,YAAY;gBACf,MAAM,GAAG,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC7C,MAAM;YACR,KAAK,UAAU;gBACb,MAAM,GAAG,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAC3C,MAAM;YACR;gBACE,MAAM,GAAG,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,EAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAY,EAAoB,EAAE;IACvD,MAAM,GAAG,GAAqB,EAAE,CAAC;IAEjC,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QACjB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA,QAAQ,CAAC,CAAC;QAEvB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAE9C,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,IAAY,EACZ,MAA0B,EACS,EAAE;IACrC,MAAM,GAAG,GAAqB,EAAE,CAAC;IACjC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;IAEzB,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;QACX,OAAO,IAAI,CAAA,GAAG,IAAI,EAAE,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,8BAA8B;YAC9B,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,gCAAgC;YAChC,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA,MAAM,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAE/C,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,4BAA4B;YAC5B,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,UAAU,6BAA6B,CAC3C,OAAyB,EACzB,SAAiB;IAEjB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;QACpE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC,CAAC;YACX,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,OAAyB,EACzB,SAAiB;IAEjB,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,IAAI,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;QACpE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC,CAAC;YACX,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC","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` `);\n\n return res;\n }\n\n if (text.indexOf(' ') === 0) {\n res.push(html` `);\n }\n\n res.push(html`${text.trimStart().trimEnd()}`);\n\n if (text.lastIndexOf(' ') === text.length - 1) {\n res.push(html` `);\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,
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/includes/vscode-select/styles.ts"],"names":[],"mappings":";AAGA,wBAkYE"}
|