@vscode-elements/elements 1.14.1-pre.2 → 1.15.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 (28) hide show
  1. package/custom-elements.json +548 -342
  2. package/dist/bundled.js +90 -74
  3. package/dist/includes/VscElement.js +1 -1
  4. package/dist/includes/VscElement.js.map +1 -1
  5. package/dist/includes/vscode-select/helpers.d.ts +2 -0
  6. package/dist/includes/vscode-select/helpers.d.ts.map +1 -1
  7. package/dist/includes/vscode-select/helpers.js +26 -0
  8. package/dist/includes/vscode-select/helpers.js.map +1 -1
  9. package/dist/includes/vscode-select/styles.d.ts.map +1 -1
  10. package/dist/includes/vscode-select/styles.js +24 -11
  11. package/dist/includes/vscode-select/styles.js.map +1 -1
  12. package/dist/includes/vscode-select/vscode-select-base.d.ts +8 -1
  13. package/dist/includes/vscode-select/vscode-select-base.d.ts.map +1 -1
  14. package/dist/includes/vscode-select/vscode-select-base.js +64 -9
  15. package/dist/includes/vscode-select/vscode-select-base.js.map +1 -1
  16. package/dist/vscode-multi-select/vscode-multi-select.d.ts +1 -1
  17. package/dist/vscode-multi-select/vscode-multi-select.d.ts.map +1 -1
  18. package/dist/vscode-multi-select/vscode-multi-select.js.map +1 -1
  19. package/dist/vscode-single-select/vscode-single-select.d.ts +5 -1
  20. package/dist/vscode-single-select/vscode-single-select.d.ts.map +1 -1
  21. package/dist/vscode-single-select/vscode-single-select.js +38 -10
  22. package/dist/vscode-single-select/vscode-single-select.js.map +1 -1
  23. package/dist/vscode-toolbar-container/vscode-toolbar-container.d.ts +1 -1
  24. package/dist/vscode-toolbar-container/vscode-toolbar-container.js +1 -1
  25. package/dist/vscode-toolbar-container/vscode-toolbar-container.js.map +1 -1
  26. package/package.json +14 -12
  27. package/vscode.css-custom-data.json +7 -7
  28. package/vscode.html-custom-data.json +14 -14
@@ -1,5 +1,5 @@
1
1
  import { LitElement } from 'lit';
2
- const VERSION = '1.14.1-pre.2';
2
+ const VERSION = '1.15.0';
3
3
  const CONFIG_KEY = '__vscodeElements_disableRegistryWarning__';
4
4
  export class VscElement extends LitElement {
5
5
  /** VSCode Elements version */
@@ -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,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,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.14.1-pre.2';\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,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.15.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 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"]}
@@ -10,4 +10,6 @@ export declare const containsSearch: (subject: string, pattern: string) => Searc
10
10
  export declare const fuzzySearch: (subject: string, pattern: string) => SearchResult;
11
11
  export declare const filterOptionsByPattern: (list: InternalOption[], pattern: string, method: SearchMethod) => InternalOption[];
12
12
  export declare const highlightRanges: (text: string, ranges: [number, number][]) => TemplateResult | TemplateResult[];
13
+ export declare function findNextSelectableOptionIndex(options: InternalOption[], fromIndex: number): number;
14
+ export declare function findPrevSelectableOptionIndex(options: InternalOption[], fromIndex: number): number;
13
15
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/includes/vscode-select/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,cAAc,EAAC,MAAM,KAAK,CAAC;AACzC,OAAO,EAAC,cAAc,EAAE,YAAY,EAAC,MAAM,YAAY,CAAC;AAExD,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,SAAS,MAAM,EACf,SAAS,MAAM,KACd,YAgCF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,EACf,SAAS,MAAM,KACd,YAaF,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,SAAS,MAAM,EACf,SAAS,MAAM,KACd,YAaF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,EAAE,SAAS,MAAM,KAAG,YA4B9D,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,MAAM,cAAc,EAAE,EACtB,SAAS,MAAM,EACf,QAAQ,YAAY,KACnB,cAAc,EA0BhB,CAAC;AAwBF,eAAO,MAAM,eAAe,GAC1B,MAAM,MAAM,EACZ,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KACzB,cAAc,GAAG,cAAc,EA8BjC,CAAC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/includes/vscode-select/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,cAAc,EAAC,MAAM,KAAK,CAAC;AACzC,OAAO,EAAC,cAAc,EAAE,YAAY,EAAC,MAAM,YAAY,CAAC;AAExD,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,SAAS,MAAM,EACf,SAAS,MAAM,KACd,YAgCF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,EACf,SAAS,MAAM,KACd,YAaF,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,SAAS,MAAM,EACf,SAAS,MAAM,KACd,YAaF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,EAAE,SAAS,MAAM,KAAG,YA4B9D,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,MAAM,cAAc,EAAE,EACtB,SAAS,MAAM,EACf,QAAQ,YAAY,KACnB,cAAc,EA0BhB,CAAC;AAwBF,eAAO,MAAM,eAAe,GAC1B,MAAM,MAAM,EACZ,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KACzB,cAAc,GAAG,cAAc,EA8BjC,CAAC;AAEF,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,cAAc,EAAE,EACzB,SAAS,EAAE,MAAM,UAgBlB;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,cAAc,EAAE,EACzB,SAAS,EAAE,MAAM,UAgBlB"}
@@ -137,4 +137,30 @@ export const highlightRanges = (text, ranges) => {
137
137
  });
138
138
  return res;
139
139
  };
140
+ export function findNextSelectableOptionIndex(options, fromIndex) {
141
+ let result = 0;
142
+ if (fromIndex < 0 || !options[fromIndex] || !options[fromIndex + 1]) {
143
+ return result;
144
+ }
145
+ for (let i = fromIndex + 1; i < options.length; i++) {
146
+ if (!options[i].disabled) {
147
+ result = i;
148
+ break;
149
+ }
150
+ }
151
+ return result;
152
+ }
153
+ export function findPrevSelectableOptionIndex(options, fromIndex) {
154
+ let result = 0;
155
+ if (fromIndex < 0 || !options[fromIndex] || !options[fromIndex - 1]) {
156
+ return result;
157
+ }
158
+ for (let i = fromIndex - 1; i >= 0; i--) {
159
+ if (!options[i].disabled) {
160
+ result = i;
161
+ break;
162
+ }
163
+ }
164
+ return result;
165
+ }
140
166
  //# sourceMappingURL=helpers.js.map
@@ -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"]}
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 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/includes/vscode-select/styles.ts"],"names":[],"mappings":";AAGA,wBAyXE"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../src/includes/vscode-select/styles.ts"],"names":[],"mappings":";AAGA,wBAsYE"}
@@ -106,24 +106,34 @@ export default [
106
106
  }
107
107
 
108
108
  .combobox-button {
109
+ align-items: center;
109
110
  background-color: transparent;
110
111
  border: 0;
112
+ border-radius: 2px;
113
+ box-sizing: content-box;
111
114
  color: var(--vscode-foreground, #cccccc);
112
115
  cursor: pointer;
116
+ display: flex;
113
117
  flex-shrink: 0;
114
- height: 24px;
115
- margin: 0;
116
- padding: 0;
117
- width: 30px;
118
+ height: 16px;
119
+ justify-content: center;
120
+ margin: 1px 1px 0 0;
121
+ padding: 3px;
122
+ width: 22px;
118
123
  }
119
124
 
120
- .combobox-button:focus,
121
- .combobox-button:hover {
122
- background-color: var(--vscode-list-hoverBackground, #2a2d2e);
125
+ .combobox-button:hover,
126
+ .combobox-button:focus-visible {
127
+ background-color: var(
128
+ --vscode-toolbar-hoverBackground,
129
+ rgba(90, 93, 94, 0.31)
130
+ );
131
+ outline-style: dashed;
132
+ outline-color: var(--vscode-toolbar-hoverOutline, transparent);
123
133
  }
124
134
 
125
- .combobox-button:focus {
126
- outline: 0;
135
+ .combobox-button:focus-visible {
136
+ outline: none;
127
137
  }
128
138
 
129
139
  .icon {
@@ -131,10 +141,13 @@ export default [
131
141
  display: block;
132
142
  height: 14px;
133
143
  pointer-events: none;
144
+ width: 14px;
145
+ }
146
+
147
+ .select-face .icon {
134
148
  position: absolute;
135
- right: 8px;
149
+ right: 6px;
136
150
  top: 5px;
137
- width: 14px;
138
151
  }
139
152
 
140
153
  .icon svg {
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/includes/vscode-select/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,OAAO,aAAa,MAAM,sBAAsB,CAAC;AAEjD,eAAe;IACb,aAAa;IACb,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsXF;CACF,CAAC","sourcesContent":["import {css} from 'lit';\nimport defaultStyles from '../default.styles.js';\n\nexport default [\n defaultStyles,\n css`\n :host {\n display: inline-block;\n max-width: 100%;\n outline: none;\n position: relative;\n width: 320px;\n }\n\n .main-slot {\n display: none;\n }\n\n .select-face,\n .combobox-face {\n background-color: var(--vscode-settings-dropdownBackground, #313131);\n border-color: var(--vscode-settings-dropdownBorder, #3c3c3c);\n border-radius: 2px;\n border-style: solid;\n border-width: 1px;\n box-sizing: border-box;\n color: var(--vscode-settings-dropdownForeground, #cccccc);\n font-family: var(--vscode-font-family, sans-serif);\n font-size: var(--vscode-font-size, 13px);\n font-weight: var(--vscode-font-weight, normal);\n line-height: 18px;\n position: relative;\n user-select: none;\n width: 100%;\n }\n\n :host([invalid]) .select-face,\n :host(:invalid) .select-face,\n :host([invalid]) .combobox-face,\n :host(:invalid) .combobox-face {\n background-color: var(--vscode-inputValidation-errorBackground, #5a1d1d);\n border-color: var(--vscode-inputValidation-errorBorder, #be1100);\n }\n\n .select-face {\n cursor: pointer;\n display: block;\n padding: 3px 4px;\n }\n\n .select-face .text {\n display: block;\n height: 18px;\n overflow: hidden;\n }\n\n .select-face.multiselect {\n padding: 0;\n }\n\n .select-face-badge {\n background-color: var(--vscode-badge-background, #616161);\n border-radius: 2px;\n color: var(--vscode-badge-foreground, #f8f8f8);\n display: inline-block;\n flex-shrink: 0;\n font-size: 11px;\n line-height: 16px;\n margin: 2px;\n padding: 2px 3px;\n text-transform: uppercase;\n white-space: nowrap;\n }\n\n .select-face-badge.no-item {\n background-color: transparent;\n color: inherit;\n }\n\n .combobox-face {\n display: flex;\n }\n\n :host(:focus) .select-face,\n :host(:focus) .combobox-face,\n :host([focused]) .select-face,\n :host([focused]) .combobox-face {\n border-color: var(--vscode-focusBorder, #0078d4);\n outline: none;\n }\n\n .combobox-input {\n background-color: transparent;\n box-sizing: border-box;\n border: 0;\n color: var(--vscode-foreground, #cccccc);\n display: block;\n font-family: var(--vscode-font-family, sans-serif);\n font-size: var(--vscode-font-size, 13px);\n line-height: 16px;\n padding: 4px;\n width: 100%;\n }\n\n .combobox-input:focus {\n outline: none;\n }\n\n .combobox-button {\n background-color: transparent;\n border: 0;\n color: var(--vscode-foreground, #cccccc);\n cursor: pointer;\n flex-shrink: 0;\n height: 24px;\n margin: 0;\n padding: 0;\n width: 30px;\n }\n\n .combobox-button:focus,\n .combobox-button:hover {\n background-color: var(--vscode-list-hoverBackground, #2a2d2e);\n }\n\n .combobox-button:focus {\n outline: 0;\n }\n\n .icon {\n color: var(--vscode-foreground, #cccccc);\n display: block;\n height: 14px;\n pointer-events: none;\n position: absolute;\n right: 8px;\n top: 5px;\n width: 14px;\n }\n\n .icon svg {\n color: var(--vscode-foreground, #cccccc);\n height: 100%;\n width: 100%;\n }\n\n .dropdown {\n background-color: var(--vscode-settings-dropdownBackground, #313131);\n border-color: var(--vscode-settings-dropdownListBorder, #454545);\n border-radius: 0 0 3px 3px;\n border-style: solid;\n border-width: 1px;\n box-sizing: border-box;\n left: 0;\n padding-bottom: 2px;\n position: absolute;\n top: 100%;\n width: 100%;\n z-index: var(--dropdown-z-index, 2);\n }\n\n :host([position='above']) .dropdown {\n border-radius: 3px 3px 0 0;\n bottom: 26px;\n padding-bottom: 0;\n padding-top: 2px;\n top: auto;\n }\n\n :host(:focus) .dropdown,\n :host([focused]) .dropdown {\n border-color: var(--vscode-focusBorder, #0078d4);\n }\n\n .options {\n box-sizing: border-box;\n cursor: pointer;\n list-style: none;\n margin: 0;\n max-height: 222px;\n overflow: auto;\n padding: 1px;\n }\n\n .option {\n align-items: center;\n box-sizing: border-box;\n color: var(--vscode-foreground, #cccccc);\n cursor: pointer;\n display: flex;\n font-family: var(--vscode-font-family, sans-serif);\n font-size: var(--vscode-font-size, 13px);\n font-weight: var(--vscode-font-weight, normal);\n height: 22px;\n line-height: 18px;\n min-height: calc(var(--vscode-font-size) * 1.3);\n padding: 1px 3px;\n user-select: none;\n outline-color: transparent;\n outline-offset: -1px;\n outline-style: solid;\n outline-width: 1px;\n }\n\n .option b {\n color: var(--vscode-list-highlightForeground, #2aaaff);\n }\n\n .option.active b {\n color: var(--vscode-list-focusHighlightForeground, #2aaaff);\n }\n\n .option:not(.disabled):hover {\n background-color: var(--vscode-list-hoverBackground, #2a2d2e);\n color: var(--vscode-list-hoverForeground, #ffffff);\n }\n\n :host-context(body[data-vscode-theme-kind='vscode-high-contrast'])\n .option:hover,\n :host-context(body[data-vscode-theme-kind='vscode-high-contrast-light'])\n .option:hover {\n outline-style: dotted;\n outline-color: var(--vscode-list-focusOutline, #0078d4);\n outline-width: 1px;\n }\n\n .option.disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\n\n .option.active,\n .option.active:hover {\n background-color: var(--vscode-list-activeSelectionBackground, #04395e);\n color: var(--vscode-list-activeSelectionForeground, #ffffff);\n outline-color: var(--vscode-list-activeSelectionBackground, #04395e);\n outline-style: solid;\n outline-width: 1px;\n }\n\n .no-options {\n align-items: center;\n border-color: transparent;\n border-style: solid;\n border-width: 1px;\n color: var(--vscode-foreground, #cccccc);\n cursor: default;\n display: flex;\n font-family: var(--vscode-font-family, sans-serif);\n font-size: var(--vscode-font-size, 13px);\n font-weight: var(--vscode-font-weight, normal);\n line-height: 18px;\n min-height: calc(var(--vscode-font-size) * 1.3);\n opacity: 0.85;\n padding: 1px 3px;\n user-select: none;\n }\n\n .placeholder {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .placeholder span {\n font-weight: bold;\n }\n\n .placeholder:not(.disabled):hover {\n color: var(--vscode-list-activeSelectionForeground, #ffffff);\n }\n\n :host-context(body[data-vscode-theme-kind='vscode-high-contrast'])\n .option.active,\n :host-context(body[data-vscode-theme-kind='vscode-high-contrast-light'])\n .option.active:hover {\n outline-color: var(--vscode-list-focusOutline, #0078d4);\n outline-style: dashed;\n }\n\n .option-label {\n display: block;\n pointer-events: none;\n width: 100%;\n }\n\n .dropdown.multiple .option.selected {\n background-color: var(--vscode-list-hoverBackground, #2a2d2e);\n outline-color: var(--vscode-list-hoverBackground, #2a2d2e);\n }\n\n .dropdown.multiple .option.selected.active {\n background-color: var(--vscode-list-activeSelectionBackground, #04395e);\n color: var(--vscode-list-activeSelectionForeground, #ffffff);\n outline-color: var(--vscode-list-activeSelectionBackground, #04395e);\n }\n\n .checkbox-icon {\n background-color: var(--vscode-settings-checkboxBackground, #313131);\n border: 1px solid currentColor;\n border-radius: 2px;\n box-sizing: border-box;\n height: 14px;\n margin-right: 5px;\n overflow: hidden;\n position: relative;\n width: 14px;\n }\n\n .checkbox-icon.checked:before,\n .checkbox-icon.checked:after {\n content: '';\n display: block;\n height: 5px;\n position: absolute;\n transform: rotate(-45deg);\n width: 10px;\n }\n\n .checkbox-icon.checked:before {\n background-color: var(--vscode-foreground, #cccccc);\n left: 1px;\n top: 2.5px;\n }\n\n .checkbox-icon.checked:after {\n background-color: var(--vscode-settings-checkboxBackground, #313131);\n left: 1px;\n top: -0.5px;\n }\n\n .dropdown-controls {\n display: flex;\n justify-content: flex-end;\n padding: 4px;\n }\n\n .dropdown-controls :not(:last-child) {\n margin-right: 4px;\n }\n\n .action-icon {\n align-items: center;\n background-color: transparent;\n border: 0;\n color: var(--vscode-foreground, #cccccc);\n cursor: pointer;\n display: flex;\n height: 24px;\n justify-content: center;\n padding: 0;\n width: 24px;\n }\n\n .action-icon:focus {\n outline: none;\n }\n\n .action-icon:focus-visible {\n outline: 1px solid var(--vscode-focusBorder, #0078d4);\n outline-offset: -1px;\n }\n\n .description {\n border-color: var(--vscode-settings-dropdownBorder, #3c3c3c);\n border-style: solid;\n border-width: 1px 0 0;\n color: var(--vscode-foreground, #cccccc);\n font-family: var(--vscode-font-family, sans-serif);\n font-size: var(--vscode-font-size, 13px);\n font-weight: var(--vscode-font-weight, normal);\n line-height: 1.3;\n padding: 6px 4px;\n word-wrap: break-word;\n }\n\n :host([position='above']) .description {\n border-width: 0 0 1px;\n }\n `,\n];\n"]}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/includes/vscode-select/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,OAAO,aAAa,MAAM,sBAAsB,CAAC;AAEjD,eAAe;IACb,aAAa;IACb,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmYF;CACF,CAAC","sourcesContent":["import {css} from 'lit';\nimport defaultStyles from '../default.styles.js';\n\nexport default [\n defaultStyles,\n css`\n :host {\n display: inline-block;\n max-width: 100%;\n outline: none;\n position: relative;\n width: 320px;\n }\n\n .main-slot {\n display: none;\n }\n\n .select-face,\n .combobox-face {\n background-color: var(--vscode-settings-dropdownBackground, #313131);\n border-color: var(--vscode-settings-dropdownBorder, #3c3c3c);\n border-radius: 2px;\n border-style: solid;\n border-width: 1px;\n box-sizing: border-box;\n color: var(--vscode-settings-dropdownForeground, #cccccc);\n font-family: var(--vscode-font-family, sans-serif);\n font-size: var(--vscode-font-size, 13px);\n font-weight: var(--vscode-font-weight, normal);\n line-height: 18px;\n position: relative;\n user-select: none;\n width: 100%;\n }\n\n :host([invalid]) .select-face,\n :host(:invalid) .select-face,\n :host([invalid]) .combobox-face,\n :host(:invalid) .combobox-face {\n background-color: var(--vscode-inputValidation-errorBackground, #5a1d1d);\n border-color: var(--vscode-inputValidation-errorBorder, #be1100);\n }\n\n .select-face {\n cursor: pointer;\n display: block;\n padding: 3px 4px;\n }\n\n .select-face .text {\n display: block;\n height: 18px;\n overflow: hidden;\n }\n\n .select-face.multiselect {\n padding: 0;\n }\n\n .select-face-badge {\n background-color: var(--vscode-badge-background, #616161);\n border-radius: 2px;\n color: var(--vscode-badge-foreground, #f8f8f8);\n display: inline-block;\n flex-shrink: 0;\n font-size: 11px;\n line-height: 16px;\n margin: 2px;\n padding: 2px 3px;\n text-transform: uppercase;\n white-space: nowrap;\n }\n\n .select-face-badge.no-item {\n background-color: transparent;\n color: inherit;\n }\n\n .combobox-face {\n display: flex;\n }\n\n :host(:focus) .select-face,\n :host(:focus) .combobox-face,\n :host([focused]) .select-face,\n :host([focused]) .combobox-face {\n border-color: var(--vscode-focusBorder, #0078d4);\n outline: none;\n }\n\n .combobox-input {\n background-color: transparent;\n box-sizing: border-box;\n border: 0;\n color: var(--vscode-foreground, #cccccc);\n display: block;\n font-family: var(--vscode-font-family, sans-serif);\n font-size: var(--vscode-font-size, 13px);\n line-height: 16px;\n padding: 4px;\n width: 100%;\n }\n\n .combobox-input:focus {\n outline: none;\n }\n\n .combobox-button {\n align-items: center;\n background-color: transparent;\n border: 0;\n border-radius: 2px;\n box-sizing: content-box;\n color: var(--vscode-foreground, #cccccc);\n cursor: pointer;\n display: flex;\n flex-shrink: 0;\n height: 16px;\n justify-content: center;\n margin: 1px 1px 0 0;\n padding: 3px;\n width: 22px;\n }\n\n .combobox-button:hover,\n .combobox-button:focus-visible {\n background-color: var(\n --vscode-toolbar-hoverBackground,\n rgba(90, 93, 94, 0.31)\n );\n outline-style: dashed;\n outline-color: var(--vscode-toolbar-hoverOutline, transparent);\n }\n\n .combobox-button:focus-visible {\n outline: none;\n }\n\n .icon {\n color: var(--vscode-foreground, #cccccc);\n display: block;\n height: 14px;\n pointer-events: none;\n width: 14px;\n }\n\n .select-face .icon {\n position: absolute;\n right: 6px;\n top: 5px;\n }\n\n .icon svg {\n color: var(--vscode-foreground, #cccccc);\n height: 100%;\n width: 100%;\n }\n\n .dropdown {\n background-color: var(--vscode-settings-dropdownBackground, #313131);\n border-color: var(--vscode-settings-dropdownListBorder, #454545);\n border-radius: 0 0 3px 3px;\n border-style: solid;\n border-width: 1px;\n box-sizing: border-box;\n left: 0;\n padding-bottom: 2px;\n position: absolute;\n top: 100%;\n width: 100%;\n z-index: var(--dropdown-z-index, 2);\n }\n\n :host([position='above']) .dropdown {\n border-radius: 3px 3px 0 0;\n bottom: 26px;\n padding-bottom: 0;\n padding-top: 2px;\n top: auto;\n }\n\n :host(:focus) .dropdown,\n :host([focused]) .dropdown {\n border-color: var(--vscode-focusBorder, #0078d4);\n }\n\n .options {\n box-sizing: border-box;\n cursor: pointer;\n list-style: none;\n margin: 0;\n max-height: 222px;\n overflow: auto;\n padding: 1px;\n }\n\n .option {\n align-items: center;\n box-sizing: border-box;\n color: var(--vscode-foreground, #cccccc);\n cursor: pointer;\n display: flex;\n font-family: var(--vscode-font-family, sans-serif);\n font-size: var(--vscode-font-size, 13px);\n font-weight: var(--vscode-font-weight, normal);\n height: 22px;\n line-height: 18px;\n min-height: calc(var(--vscode-font-size) * 1.3);\n padding: 1px 3px;\n user-select: none;\n outline-color: transparent;\n outline-offset: -1px;\n outline-style: solid;\n outline-width: 1px;\n }\n\n .option b {\n color: var(--vscode-list-highlightForeground, #2aaaff);\n }\n\n .option.active b {\n color: var(--vscode-list-focusHighlightForeground, #2aaaff);\n }\n\n .option:not(.disabled):hover {\n background-color: var(--vscode-list-hoverBackground, #2a2d2e);\n color: var(--vscode-list-hoverForeground, #ffffff);\n }\n\n :host-context(body[data-vscode-theme-kind='vscode-high-contrast'])\n .option:hover,\n :host-context(body[data-vscode-theme-kind='vscode-high-contrast-light'])\n .option:hover {\n outline-style: dotted;\n outline-color: var(--vscode-list-focusOutline, #0078d4);\n outline-width: 1px;\n }\n\n .option.disabled {\n cursor: not-allowed;\n opacity: 0.4;\n }\n\n .option.active,\n .option.active:hover {\n background-color: var(--vscode-list-activeSelectionBackground, #04395e);\n color: var(--vscode-list-activeSelectionForeground, #ffffff);\n outline-color: var(--vscode-list-activeSelectionBackground, #04395e);\n outline-style: solid;\n outline-width: 1px;\n }\n\n .no-options {\n align-items: center;\n border-color: transparent;\n border-style: solid;\n border-width: 1px;\n color: var(--vscode-foreground, #cccccc);\n cursor: default;\n display: flex;\n font-family: var(--vscode-font-family, sans-serif);\n font-size: var(--vscode-font-size, 13px);\n font-weight: var(--vscode-font-weight, normal);\n line-height: 18px;\n min-height: calc(var(--vscode-font-size) * 1.3);\n opacity: 0.85;\n padding: 1px 3px;\n user-select: none;\n }\n\n .placeholder {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .placeholder span {\n font-weight: bold;\n }\n\n .placeholder:not(.disabled):hover {\n color: var(--vscode-list-activeSelectionForeground, #ffffff);\n }\n\n :host-context(body[data-vscode-theme-kind='vscode-high-contrast'])\n .option.active,\n :host-context(body[data-vscode-theme-kind='vscode-high-contrast-light'])\n .option.active:hover {\n outline-color: var(--vscode-list-focusOutline, #0078d4);\n outline-style: dashed;\n }\n\n .option-label {\n display: block;\n pointer-events: none;\n width: 100%;\n }\n\n .dropdown.multiple .option.selected {\n background-color: var(--vscode-list-hoverBackground, #2a2d2e);\n outline-color: var(--vscode-list-hoverBackground, #2a2d2e);\n }\n\n .dropdown.multiple .option.selected.active {\n background-color: var(--vscode-list-activeSelectionBackground, #04395e);\n color: var(--vscode-list-activeSelectionForeground, #ffffff);\n outline-color: var(--vscode-list-activeSelectionBackground, #04395e);\n }\n\n .checkbox-icon {\n background-color: var(--vscode-settings-checkboxBackground, #313131);\n border: 1px solid currentColor;\n border-radius: 2px;\n box-sizing: border-box;\n height: 14px;\n margin-right: 5px;\n overflow: hidden;\n position: relative;\n width: 14px;\n }\n\n .checkbox-icon.checked:before,\n .checkbox-icon.checked:after {\n content: '';\n display: block;\n height: 5px;\n position: absolute;\n transform: rotate(-45deg);\n width: 10px;\n }\n\n .checkbox-icon.checked:before {\n background-color: var(--vscode-foreground, #cccccc);\n left: 1px;\n top: 2.5px;\n }\n\n .checkbox-icon.checked:after {\n background-color: var(--vscode-settings-checkboxBackground, #313131);\n left: 1px;\n top: -0.5px;\n }\n\n .dropdown-controls {\n display: flex;\n justify-content: flex-end;\n padding: 4px;\n }\n\n .dropdown-controls :not(:last-child) {\n margin-right: 4px;\n }\n\n .action-icon {\n align-items: center;\n background-color: transparent;\n border: 0;\n color: var(--vscode-foreground, #cccccc);\n cursor: pointer;\n display: flex;\n height: 24px;\n justify-content: center;\n padding: 0;\n width: 24px;\n }\n\n .action-icon:focus {\n outline: none;\n }\n\n .action-icon:focus-visible {\n outline: 1px solid var(--vscode-focusBorder, #0078d4);\n outline-offset: -1px;\n }\n\n .description {\n border-color: var(--vscode-settings-dropdownBorder, #3c3c3c);\n border-style: solid;\n border-width: 1px 0 0;\n color: var(--vscode-foreground, #cccccc);\n font-family: var(--vscode-font-family, sans-serif);\n font-size: var(--vscode-font-size, 13px);\n font-weight: var(--vscode-font-weight, normal);\n line-height: 1.3;\n padding: 6px 4px;\n word-wrap: break-word;\n }\n\n :host([position='above']) .description {\n border-width: 0 0 1px;\n }\n `,\n];\n"]}
@@ -1,4 +1,4 @@
1
- import { nothing, TemplateResult } from 'lit';
1
+ import { nothing, TemplateResult, PropertyValues } from 'lit';
2
2
  import '../../vscode-button/index.js';
3
3
  import '../../vscode-option/index.js';
4
4
  import type { InternalOption, Option, SearchMethod } from './types.js';
@@ -59,6 +59,9 @@ export declare class VscodeSelectBase extends VscElement {
59
59
  constructor();
60
60
  connectedCallback(): void;
61
61
  disconnectedCallback(): void;
62
+ protected _firstUpdateCompleted: boolean;
63
+ protected firstUpdated(_changedProperties: PropertyValues): void;
64
+ protected willUpdate(changedProperties: PropertyValues): void;
62
65
  protected _activeIndex: number;
63
66
  protected _currentDescription: string;
64
67
  protected _filter: SearchMethod;
@@ -71,6 +74,7 @@ export declare class VscodeSelectBase extends VscElement {
71
74
  protected _values: string[];
72
75
  protected _listScrollTop: number;
73
76
  protected _isPlaceholderOptionActive: boolean;
77
+ private _isBeingFiltered;
74
78
  private _listElement;
75
79
  /** @internal */
76
80
  protected _multiple: boolean;
@@ -87,6 +91,7 @@ export declare class VscodeSelectBase extends VscElement {
87
91
  private _originalTabIndex;
88
92
  protected get _currentOptions(): InternalOption[];
89
93
  protected get _isSuggestedOptionVisible(): boolean;
94
+ protected _manageRequired(): void;
90
95
  protected _setStateFromSlottedElements(): void;
91
96
  protected _toggleDropdown(visible: boolean): Promise<void>;
92
97
  protected _createSuggestedOption(): number;
@@ -100,6 +105,7 @@ export declare class VscodeSelectBase extends VscElement {
100
105
  protected _onComboboxButtonKeyDown(ev: KeyboardEvent): void;
101
106
  protected _onOptionMouseOver(ev: MouseEvent): void;
102
107
  protected _onPlaceholderOptionMouseOut(): void;
108
+ protected _onNoOptionsClick(ev: MouseEvent): void;
103
109
  protected _onEnterKeyDown(ev: KeyboardEvent): void;
104
110
  private _onSpaceKeyDown;
105
111
  private _scrollActiveElementToTop;
@@ -111,6 +117,7 @@ export declare class VscodeSelectBase extends VscElement {
111
117
  private _onComponentBlur;
112
118
  protected _onSlotChange(): void;
113
119
  protected _onComboboxInputFocus(ev: FocusEvent): void;
120
+ protected _onComboboxInputBlur(): void;
114
121
  protected _onComboboxInputInput(ev: InputEvent): void;
115
122
  protected _onComboboxInputClick(): void;
116
123
  protected _onOptionClick(_ev: MouseEvent): void;
@@ -1 +1 @@
1
- {"version":3,"file":"vscode-select-base.d.ts","sourceRoot":"","sources":["../../../src/includes/vscode-select/vscode-select-base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,OAAO,EAAE,cAAc,EAAC,MAAM,KAAK,CAAC;AAI1D,OAAO,8BAA8B,CAAC;AACtC,OAAO,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAC,cAAc,EAAE,MAAM,EAAE,YAAY,EAAC,MAAM,YAAY,CAAC;AAErE,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAM5C;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,gBAAgB;IAEP,YAAY,SAAW;IAGhC,SAAS,UAAS;IAElB;;OAEG;IAEH,QAAQ,UAAS;IAEjB;;OAEG;IACH,IACI,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAa7B;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;OAEG;IAEH,OAAO,UAAS;IAEhB;;;;;;;;;OASG;IACH,IACI,MAAM,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,mBAAmB,EAiBxE;IACD,IAAI,MAAM,IAAI,UAAU,GAAG,OAAO,GAAG,YAAY,GAAG,mBAAmB,CAEtE;IAED;;OAEG;IAEH,OAAO,UAAS;IAEhB;;OAEG;IAEH,IAAI,UAAS;IAEb;;;OAGG;IACH,IACI,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,EAEzB;IACD,IAAI,OAAO,IAAI,MAAM,EAAE,CAUtB;IAED;;OAEG;IAEH,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAW;IAEtC,gBAAgB;IAEP,QAAQ,SAAK;IAMtB,OAAO,CAAC,gBAAgB,CAAkB;;IAWjC,iBAAiB,IAAI,IAAI;IAOzB,oBAAoB,IAAI,IAAI;IAQrC,SAAS,CAAC,YAAY,SAAM;IAG5B,SAAS,CAAC,mBAAmB,SAAM;IAGnC,SAAS,CAAC,OAAO,EAAE,YAAY,CAAW;IAG1C,SAAS,KAAK,gBAAgB,IAAI,cAAc,EAAE,CAUjD;IAGD,SAAS,CAAC,cAAc,SAAM;IAG9B,SAAS,CAAC,cAAc,SAAM;IAG9B,SAAS,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAM;IAG1C,SAAS,CAAC,QAAQ,EAAE,cAAc,EAAE,CAAM;IAG1C,SAAS,CAAC,MAAM,SAAM;IAGtB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,CAAM;IAGjC,SAAS,CAAC,cAAc,SAAK;IAG7B,SAAS,CAAC,0BAA0B,UAAS;IAG7C,OAAO,CAAC,YAAY,CAAoB;IAExC,gBAAgB;IAChB,SAAS,CAAC,SAAS,UAAS;IAE5B;;;;OAIG;IACH,SAAS,CAAC,oBAAoB,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAC,CAAM;IAE7D,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,iBAAiB,CAAiC;IAE1D,SAAS,KAAK,eAAe,IAAI,cAAc,EAAE,CAEhD;IAED,SAAS,KAAK,yBAAyB,YAKtC;IAED,SAAS,CAAC,4BAA4B;cAiDtB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBhE,SAAS,CAAC,sBAAsB;IAUhC,SAAS,CAAC,oBAAoB,IAAI,IAAI;cA0BtB,+BAA+B;IAE/C,SAAS,CAAC,YAAY,IAAI,IAAI;IAQ9B,OAAO,CAAC,eAAe,CAQrB;IAEF,OAAO,CAAC,YAAY,CAGlB;IAEF,OAAO,CAAC,uBAAuB;IAS/B,SAAS,CAAC,sBAAsB,IAAI,IAAI;IAIxC,SAAS,CAAC,wBAAwB,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI;IAM3D,SAAS,CAAC,kBAAkB,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;IAsBlD,SAAS,CAAC,4BAA4B;IAItC,SAAS,CAAC,eAAe,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI;IA0DlD,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,yBAAyB;YAInB,0BAA0B;IA2CxC,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAkBnC,SAAS,CAAC,mBAAmB,IAAI,IAAI;IA0BrC,OAAO,CAAC,mBAAmB,CAyBzB;IAEF,OAAO,CAAC,iBAAiB,CAEvB;IAEF,OAAO,CAAC,gBAAgB,CAEtB;IAEF,SAAS,CAAC,aAAa,IAAI,IAAI;IAK/B,SAAS,CAAC,qBAAqB,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;IAIrD,SAAS,CAAC,qBAAqB,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI;IAMrD,SAAS,CAAC,qBAAqB,IAAI,IAAI;IAIvC,SAAS,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU;IAIxC,SAAS,CAAC,cAAc,IAAI,cAAc,GAAG,cAAc,EAAE;IAiD7D,SAAS,CAAC,wBAAwB,CAAC,WAAW,EAAE,OAAO;IA2BvD,OAAO,CAAC,kBAAkB;IAY1B,SAAS,CAAC,iBAAiB,IAAI,cAAc;IAI7C,OAAO,CAAC,uBAAuB;IAe/B,SAAS,CAAC,mBAAmB,IAAI,cAAc;IA6B/C,SAAS,CAAC,uBAAuB,IAAI,cAAc;IAInD,OAAO,CAAC,eAAe;IAed,MAAM,IAAI,cAAc;CAOlC"}
1
+ {"version":3,"file":"vscode-select-base.d.ts","sourceRoot":"","sources":["../../../src/includes/vscode-select/vscode-select-base.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ import { classMap } from 'lit/directives/class-map.js';
10
10
  import { repeat } from 'lit/directives/repeat.js';
11
11
  import '../../vscode-button/index.js';
12
12
  import '../../vscode-option/index.js';
13
- import { filterOptionsByPattern, highlightRanges } from './helpers.js';
13
+ import { filterOptionsByPattern, findNextSelectableOptionIndex, findPrevSelectableOptionIndex, highlightRanges, } from './helpers.js';
14
14
  import { VscElement } from '../VscElement.js';
15
15
  import { chevronDownIcon } from './template-elements.js';
16
16
  const VISIBLE_OPTS = 10;
@@ -109,6 +109,7 @@ export class VscodeSelectBase extends VscElement {
109
109
  this.position = 'below';
110
110
  /** @internal */
111
111
  this.tabIndex = 0;
112
+ this._firstUpdateCompleted = false;
112
113
  this._activeIndex = -1;
113
114
  this._currentDescription = '';
114
115
  this._filter = 'fuzzy';
@@ -120,6 +121,7 @@ export class VscodeSelectBase extends VscElement {
120
121
  this._values = [];
121
122
  this._listScrollTop = 0;
122
123
  this._isPlaceholderOptionActive = false;
124
+ this._isBeingFiltered = false;
123
125
  /** @internal */
124
126
  this._multiple = false;
125
127
  /**
@@ -188,6 +190,14 @@ export class VscodeSelectBase extends VscElement {
188
190
  this.removeEventListener('focus', this._onComponentFocus);
189
191
  this.removeEventListener('blur', this._onComponentBlur);
190
192
  }
193
+ firstUpdated(_changedProperties) {
194
+ this._firstUpdateCompleted = true;
195
+ }
196
+ willUpdate(changedProperties) {
197
+ if (changedProperties.has('required') && this._firstUpdateCompleted) {
198
+ this._manageRequired();
199
+ }
200
+ }
191
201
  get _filteredOptions() {
192
202
  if (!this.combobox || this._filterPattern === '') {
193
203
  return this._options;
@@ -198,10 +208,14 @@ export class VscodeSelectBase extends VscElement {
198
208
  return this.combobox ? this._filteredOptions : this._options;
199
209
  }
200
210
  get _isSuggestedOptionVisible() {
211
+ if (!(this.combobox && this.creatable)) {
212
+ return false;
213
+ }
201
214
  const filterPatternExistsAsOption = typeof this._valueOptionIndexMap[this._filterPattern] !== 'undefined';
202
215
  const filtered = this._filterPattern.length > 0;
203
- return this.combobox && !filterPatternExistsAsOption && filtered;
216
+ return !filterPatternExistsAsOption && filtered;
204
217
  }
218
+ _manageRequired() { }
205
219
  _setStateFromSlottedElements() {
206
220
  const options = [];
207
221
  let nextIndex = 0;
@@ -245,6 +259,9 @@ export class VscodeSelectBase extends VscElement {
245
259
  async _toggleDropdown(visible) {
246
260
  this.open = visible;
247
261
  this.ariaExpanded = String(visible);
262
+ if (visible && !this._multiple) {
263
+ this._activeIndex = this._selectedIndex;
264
+ }
248
265
  if (visible && !this._multiple && !this.combobox) {
249
266
  this._activeIndex = this._selectedIndex;
250
267
  if (this._activeIndex > VISIBLE_OPTS - 1) {
@@ -331,7 +348,11 @@ export class VscodeSelectBase extends VscElement {
331
348
  _onPlaceholderOptionMouseOut() {
332
349
  this._isPlaceholderOptionActive = false;
333
350
  }
351
+ _onNoOptionsClick(ev) {
352
+ ev.stopPropagation();
353
+ }
334
354
  _onEnterKeyDown(ev) {
355
+ this._isBeingFiltered = false;
335
356
  const clickedOnAcceptButton = ev?.composedPath
336
357
  ? ev
337
358
  .composedPath()
@@ -440,9 +461,14 @@ export class VscodeSelectBase extends VscElement {
440
461
  this._isPlaceholderOptionActive = false;
441
462
  }
442
463
  else {
443
- const optionIndex = Math.max(this._activeIndex - 1, 0);
444
- this._activeIndex = optionIndex;
445
- this._adjustOptionListScrollPos('up', optionIndex);
464
+ const currentOptions = this.combobox
465
+ ? this._filteredOptions
466
+ : this._options;
467
+ const prevSelectable = findPrevSelectableOptionIndex(currentOptions, this._activeIndex);
468
+ if (prevSelectable > -1) {
469
+ this._activeIndex = prevSelectable;
470
+ this._adjustOptionListScrollPos('up', prevSelectable);
471
+ }
446
472
  }
447
473
  }
448
474
  }
@@ -450,6 +476,9 @@ export class VscodeSelectBase extends VscElement {
450
476
  let numOpts = this.combobox
451
477
  ? this._filteredOptions.length
452
478
  : this._options.length;
479
+ const currentOptions = this.combobox
480
+ ? this._filteredOptions
481
+ : this._options;
453
482
  const suggestedOptionVisible = this._isSuggestedOptionVisible;
454
483
  if (suggestedOptionVisible) {
455
484
  numOpts += 1;
@@ -464,8 +493,11 @@ export class VscodeSelectBase extends VscElement {
464
493
  this._activeIndex = -1;
465
494
  }
466
495
  else if (this._activeIndex < numOpts - 1) {
467
- this._activeIndex += 1;
468
- this._adjustOptionListScrollPos('down', this._activeIndex);
496
+ const nextSelectable = findNextSelectableOptionIndex(currentOptions, this._activeIndex);
497
+ if (nextSelectable > -1) {
498
+ this._activeIndex = nextSelectable;
499
+ this._adjustOptionListScrollPos('down', nextSelectable);
500
+ }
469
501
  }
470
502
  }
471
503
  }
@@ -475,16 +507,24 @@ export class VscodeSelectBase extends VscElement {
475
507
  }
476
508
  _onComboboxInputFocus(ev) {
477
509
  ev.target.select();
510
+ this._isBeingFiltered = false;
511
+ this._filterPattern = '';
512
+ }
513
+ _onComboboxInputBlur() {
514
+ this._isBeingFiltered = false;
478
515
  }
479
516
  _onComboboxInputInput(ev) {
517
+ this._isBeingFiltered = true;
480
518
  this._filterPattern = ev.target.value;
481
519
  this._activeIndex = -1;
482
520
  this._toggleDropdown(true);
483
521
  }
484
522
  _onComboboxInputClick() {
523
+ this._isBeingFiltered = this._filterPattern !== '';
485
524
  this._toggleDropdown(true);
486
525
  }
487
526
  _onOptionClick(_ev) {
527
+ this._isBeingFiltered = false;
488
528
  return;
489
529
  }
490
530
  _renderOptions() {
@@ -547,7 +587,9 @@ export class VscodeSelectBase extends VscElement {
547
587
  }
548
588
  else {
549
589
  return isListEmpty
550
- ? html `<li class="no-options">No options</li>`
590
+ ? html `<li class="no-options" @click=${this._onNoOptionsClick}>
591
+ No options
592
+ </li>`
551
593
  : nothing;
552
594
  }
553
595
  }
@@ -578,7 +620,16 @@ export class VscodeSelectBase extends VscElement {
578
620
  }
579
621
  }
580
622
  _renderComboboxFace() {
581
- const inputVal = this._selectedIndex > -1 ? this._options[this._selectedIndex]?.label : '';
623
+ let inputVal = '';
624
+ if (this._isBeingFiltered) {
625
+ inputVal = this._filterPattern;
626
+ }
627
+ else {
628
+ inputVal =
629
+ this._selectedIndex > -1
630
+ ? (this._options[this._selectedIndex]?.label ?? '')
631
+ : '';
632
+ }
582
633
  return html `
583
634
  <div class="combobox-face face">
584
635
  ${this._multiple ? this._renderMultiSelectLabel() : nothing}
@@ -589,6 +640,7 @@ export class VscodeSelectBase extends VscElement {
589
640
  autocomplete="off"
590
641
  .value=${inputVal}
591
642
  @focus=${this._onComboboxInputFocus}
643
+ @blur=${this._onComboboxInputBlur}
592
644
  @input=${this._onComboboxInputInput}
593
645
  @click=${this._onComboboxInputClick}
594
646
  >
@@ -702,6 +754,9 @@ __decorate([
702
754
  __decorate([
703
755
  state()
704
756
  ], VscodeSelectBase.prototype, "_isPlaceholderOptionActive", void 0);
757
+ __decorate([
758
+ state()
759
+ ], VscodeSelectBase.prototype, "_isBeingFiltered", void 0);
705
760
  __decorate([
706
761
  query('.options')
707
762
  ], VscodeSelectBase.prototype, "_listElement", void 0);