@vscode-elements/elements 2.0.0-pre.1 → 2.0.0-pre.3

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 (247) hide show
  1. package/README.md +5 -1
  2. package/custom-elements.json +3512 -1943
  3. package/dist/bundled.js +1179 -947
  4. package/dist/includes/VscElement.d.ts +9 -1
  5. package/dist/includes/VscElement.d.ts.map +1 -1
  6. package/dist/includes/VscElement.js +38 -5
  7. package/dist/includes/VscElement.js.map +1 -1
  8. package/dist/includes/form-button-widget/LabelledCheckboxOrRadio.d.ts.map +1 -1
  9. package/dist/includes/form-button-widget/base.styles.js +8 -8
  10. package/dist/includes/form-button-widget/base.styles.js.map +1 -1
  11. package/dist/includes/uniqueId.d.ts.map +1 -1
  12. package/dist/includes/vscode-select/OptionListController.d.ts +61 -0
  13. package/dist/includes/vscode-select/OptionListController.d.ts.map +1 -0
  14. package/dist/includes/vscode-select/OptionListController.js +373 -0
  15. package/dist/includes/vscode-select/OptionListController.js.map +1 -0
  16. package/dist/includes/vscode-select/helpers.d.ts +4 -2
  17. package/dist/includes/vscode-select/helpers.d.ts.map +1 -1
  18. package/dist/includes/vscode-select/helpers.js +26 -0
  19. package/dist/includes/vscode-select/helpers.js.map +1 -1
  20. package/dist/includes/vscode-select/styles.d.ts.map +1 -1
  21. package/dist/includes/vscode-select/styles.js +137 -86
  22. package/dist/includes/vscode-select/styles.js.map +1 -1
  23. package/dist/includes/vscode-select/template-elements.d.ts +1 -0
  24. package/dist/includes/vscode-select/template-elements.d.ts.map +1 -1
  25. package/dist/includes/vscode-select/template-elements.js +14 -1
  26. package/dist/includes/vscode-select/template-elements.js.map +1 -1
  27. package/dist/includes/vscode-select/types.d.ts +11 -7
  28. package/dist/includes/vscode-select/types.d.ts.map +1 -1
  29. package/dist/includes/vscode-select/types.js.map +1 -1
  30. package/dist/includes/vscode-select/vscode-select-base.d.ts +42 -31
  31. package/dist/includes/vscode-select/vscode-select-base.d.ts.map +1 -1
  32. package/dist/includes/vscode-select/vscode-select-base.js +379 -245
  33. package/dist/includes/vscode-select/vscode-select-base.js.map +1 -1
  34. package/dist/main.d.ts +4 -0
  35. package/dist/main.d.ts.map +1 -1
  36. package/dist/main.js +4 -0
  37. package/dist/main.js.map +1 -1
  38. package/dist/vscode-badge/vscode-badge.d.ts.map +1 -1
  39. package/dist/vscode-badge/vscode-badge.js +2 -2
  40. package/dist/vscode-badge/vscode-badge.js.map +1 -1
  41. package/dist/vscode-button/vscode-button.d.ts +1 -0
  42. package/dist/vscode-button/vscode-button.d.ts.map +1 -1
  43. package/dist/vscode-button/vscode-button.js +8 -2
  44. package/dist/vscode-button/vscode-button.js.map +1 -1
  45. package/dist/vscode-button/vscode-button.styles.d.ts.map +1 -1
  46. package/dist/vscode-button/vscode-button.styles.js +60 -11
  47. package/dist/vscode-button/vscode-button.styles.js.map +1 -1
  48. package/dist/vscode-button-group/index.d.ts +2 -0
  49. package/dist/vscode-button-group/index.d.ts.map +1 -0
  50. package/dist/vscode-button-group/index.js +2 -0
  51. package/dist/vscode-button-group/index.js.map +1 -0
  52. package/dist/vscode-button-group/vscode-button-group.d.ts +29 -0
  53. package/dist/vscode-button-group/vscode-button-group.d.ts.map +1 -0
  54. package/dist/vscode-button-group/vscode-button-group.js +38 -0
  55. package/dist/vscode-button-group/vscode-button-group.js.map +1 -0
  56. package/dist/vscode-button-group/vscode-button-group.styles.d.ts +4 -0
  57. package/dist/vscode-button-group/vscode-button-group.styles.d.ts.map +1 -0
  58. package/dist/vscode-button-group/vscode-button-group.styles.js +35 -0
  59. package/dist/vscode-button-group/vscode-button-group.styles.js.map +1 -0
  60. package/dist/vscode-checkbox/vscode-checkbox.d.ts +10 -10
  61. package/dist/vscode-checkbox/vscode-checkbox.d.ts.map +1 -1
  62. package/dist/vscode-checkbox/vscode-checkbox.js +12 -14
  63. package/dist/vscode-checkbox/vscode-checkbox.js.map +1 -1
  64. package/dist/vscode-checkbox/vscode-checkbox.styles.js +2 -2
  65. package/dist/vscode-checkbox/vscode-checkbox.styles.js.map +1 -1
  66. package/dist/vscode-checkbox-group/vscode-checkbox-group.d.ts.map +1 -1
  67. package/dist/vscode-checkbox-group/vscode-checkbox-group.js +2 -2
  68. package/dist/vscode-checkbox-group/vscode-checkbox-group.js.map +1 -1
  69. package/dist/vscode-collapsible/vscode-collapsible.d.ts +6 -6
  70. package/dist/vscode-collapsible/vscode-collapsible.d.ts.map +1 -1
  71. package/dist/vscode-collapsible/vscode-collapsible.js +8 -8
  72. package/dist/vscode-collapsible/vscode-collapsible.js.map +1 -1
  73. package/dist/vscode-collapsible/vscode-collapsible.styles.js +6 -6
  74. package/dist/vscode-collapsible/vscode-collapsible.styles.js.map +1 -1
  75. package/dist/vscode-context-menu/vscode-context-menu.d.ts +8 -8
  76. package/dist/vscode-context-menu/vscode-context-menu.d.ts.map +1 -1
  77. package/dist/vscode-context-menu/vscode-context-menu.js +9 -9
  78. package/dist/vscode-context-menu/vscode-context-menu.js.map +1 -1
  79. package/dist/vscode-context-menu/vscode-context-menu.styles.js +7 -7
  80. package/dist/vscode-context-menu/vscode-context-menu.styles.js.map +1 -1
  81. package/dist/vscode-context-menu-item/vscode-context-menu-item.d.ts +9 -9
  82. package/dist/vscode-context-menu-item/vscode-context-menu-item.d.ts.map +1 -1
  83. package/dist/vscode-context-menu-item/vscode-context-menu-item.js +11 -11
  84. package/dist/vscode-context-menu-item/vscode-context-menu-item.js.map +1 -1
  85. package/dist/vscode-context-menu-item/vscode-context-menu-item.styles.d.ts.map +1 -1
  86. package/dist/vscode-context-menu-item/vscode-context-menu-item.styles.js +10 -13
  87. package/dist/vscode-context-menu-item/vscode-context-menu-item.styles.js.map +1 -1
  88. package/dist/vscode-divider/vscode-divider.d.ts +2 -0
  89. package/dist/vscode-divider/vscode-divider.d.ts.map +1 -1
  90. package/dist/vscode-divider/vscode-divider.js +4 -2
  91. package/dist/vscode-divider/vscode-divider.js.map +1 -1
  92. package/dist/vscode-divider/vscode-divider.styles.js +1 -1
  93. package/dist/vscode-divider/vscode-divider.styles.js.map +1 -1
  94. package/dist/vscode-form-container/vscode-form-container.d.ts.map +1 -1
  95. package/dist/vscode-form-container/vscode-form-container.js +2 -2
  96. package/dist/vscode-form-container/vscode-form-container.js.map +1 -1
  97. package/dist/vscode-form-group/vscode-form-group.d.ts.map +1 -1
  98. package/dist/vscode-form-group/vscode-form-group.js +2 -2
  99. package/dist/vscode-form-group/vscode-form-group.js.map +1 -1
  100. package/dist/vscode-form-helper/vscode-form-helper.d.ts.map +1 -1
  101. package/dist/vscode-form-helper/vscode-form-helper.js +1 -2
  102. package/dist/vscode-form-helper/vscode-form-helper.js.map +1 -1
  103. package/dist/vscode-icon/vscode-icon.d.ts +4 -4
  104. package/dist/vscode-icon/vscode-icon.d.ts.map +1 -1
  105. package/dist/vscode-icon/vscode-icon.js +7 -6
  106. package/dist/vscode-icon/vscode-icon.js.map +1 -1
  107. package/dist/vscode-icon/vscode-icon.styles.d.ts.map +1 -1
  108. package/dist/vscode-icon/vscode-icon.styles.js +10 -4
  109. package/dist/vscode-icon/vscode-icon.styles.js.map +1 -1
  110. package/dist/vscode-label/vscode-label.d.ts +3 -3
  111. package/dist/vscode-label/vscode-label.d.ts.map +1 -1
  112. package/dist/vscode-label/vscode-label.js +14 -12
  113. package/dist/vscode-label/vscode-label.js.map +1 -1
  114. package/dist/vscode-label/vscode-label.styles.js +4 -4
  115. package/dist/vscode-label/vscode-label.styles.js.map +1 -1
  116. package/dist/vscode-multi-select/vscode-multi-select.d.ts +39 -26
  117. package/dist/vscode-multi-select/vscode-multi-select.d.ts.map +1 -1
  118. package/dist/vscode-multi-select/vscode-multi-select.js +184 -161
  119. package/dist/vscode-multi-select/vscode-multi-select.js.map +1 -1
  120. package/dist/vscode-option/vscode-option.d.ts.map +1 -1
  121. package/dist/vscode-option/vscode-option.js +2 -2
  122. package/dist/vscode-option/vscode-option.js.map +1 -1
  123. package/dist/vscode-progress-ring/vscode-progress-ring.d.ts +2 -0
  124. package/dist/vscode-progress-ring/vscode-progress-ring.d.ts.map +1 -1
  125. package/dist/vscode-progress-ring/vscode-progress-ring.js +4 -2
  126. package/dist/vscode-progress-ring/vscode-progress-ring.js.map +1 -1
  127. package/dist/vscode-progress-ring/vscode-progress-ring.styles.js +1 -1
  128. package/dist/vscode-progress-ring/vscode-progress-ring.styles.js.map +1 -1
  129. package/dist/vscode-radio/vscode-radio.d.ts +9 -8
  130. package/dist/vscode-radio/vscode-radio.d.ts.map +1 -1
  131. package/dist/vscode-radio/vscode-radio.js +11 -9
  132. package/dist/vscode-radio/vscode-radio.js.map +1 -1
  133. package/dist/vscode-radio/vscode-radio.styles.js +2 -2
  134. package/dist/vscode-radio/vscode-radio.styles.js.map +1 -1
  135. package/dist/vscode-radio-group/vscode-radio-group.d.ts.map +1 -1
  136. package/dist/vscode-radio-group/vscode-radio-group.js +2 -2
  137. package/dist/vscode-radio-group/vscode-radio-group.js.map +1 -1
  138. package/dist/vscode-scrollable/vscode-scrollable.d.ts +61 -17
  139. package/dist/vscode-scrollable/vscode-scrollable.d.ts.map +1 -1
  140. package/dist/vscode-scrollable/vscode-scrollable.js +193 -88
  141. package/dist/vscode-scrollable/vscode-scrollable.js.map +1 -1
  142. package/dist/vscode-scrollable/vscode-scrollable.styles.d.ts.map +1 -1
  143. package/dist/vscode-scrollable/vscode-scrollable.styles.js +17 -5
  144. package/dist/vscode-scrollable/vscode-scrollable.styles.js.map +1 -1
  145. package/dist/vscode-single-select/vscode-single-select.d.ts +39 -28
  146. package/dist/vscode-single-select/vscode-single-select.d.ts.map +1 -1
  147. package/dist/vscode-single-select/vscode-single-select.js +180 -125
  148. package/dist/vscode-single-select/vscode-single-select.js.map +1 -1
  149. package/dist/vscode-split-layout/vscode-split-layout.d.ts +3 -1
  150. package/dist/vscode-split-layout/vscode-split-layout.d.ts.map +1 -1
  151. package/dist/vscode-split-layout/vscode-split-layout.js +8 -3
  152. package/dist/vscode-split-layout/vscode-split-layout.js.map +1 -1
  153. package/dist/vscode-split-layout/vscode-split-layout.styles.js +3 -3
  154. package/dist/vscode-split-layout/vscode-split-layout.styles.js.map +1 -1
  155. package/dist/vscode-tab-header/vscode-tab-header.d.ts.map +1 -1
  156. package/dist/vscode-tab-header/vscode-tab-header.js +2 -2
  157. package/dist/vscode-tab-header/vscode-tab-header.js.map +1 -1
  158. package/dist/vscode-tab-panel/vscode-tab-panel.d.ts.map +1 -1
  159. package/dist/vscode-tab-panel/vscode-tab-panel.js +2 -2
  160. package/dist/vscode-tab-panel/vscode-tab-panel.js.map +1 -1
  161. package/dist/vscode-table/helpers.d.ts.map +1 -1
  162. package/dist/vscode-table/vscode-table.d.ts +1 -0
  163. package/dist/vscode-table/vscode-table.d.ts.map +1 -1
  164. package/dist/vscode-table/vscode-table.js +20 -16
  165. package/dist/vscode-table/vscode-table.js.map +1 -1
  166. package/dist/vscode-table-body/vscode-table-body.d.ts.map +1 -1
  167. package/dist/vscode-table-body/vscode-table-body.js +2 -2
  168. package/dist/vscode-table-body/vscode-table-body.js.map +1 -1
  169. package/dist/vscode-table-cell/vscode-table-cell.d.ts.map +1 -1
  170. package/dist/vscode-table-cell/vscode-table-cell.js +2 -2
  171. package/dist/vscode-table-cell/vscode-table-cell.js.map +1 -1
  172. package/dist/vscode-table-header/vscode-table-header.d.ts.map +1 -1
  173. package/dist/vscode-table-header/vscode-table-header.js +2 -2
  174. package/dist/vscode-table-header/vscode-table-header.js.map +1 -1
  175. package/dist/vscode-table-header-cell/vscode-table-header-cell.d.ts.map +1 -1
  176. package/dist/vscode-table-header-cell/vscode-table-header-cell.js +2 -2
  177. package/dist/vscode-table-header-cell/vscode-table-header-cell.js.map +1 -1
  178. package/dist/vscode-table-row/vscode-table-row.d.ts.map +1 -1
  179. package/dist/vscode-table-row/vscode-table-row.js +2 -2
  180. package/dist/vscode-table-row/vscode-table-row.js.map +1 -1
  181. package/dist/vscode-tabs/vscode-tabs.d.ts.map +1 -1
  182. package/dist/vscode-tabs/vscode-tabs.js +2 -2
  183. package/dist/vscode-tabs/vscode-tabs.js.map +1 -1
  184. package/dist/vscode-textarea/vscode-textarea.d.ts +18 -18
  185. package/dist/vscode-textarea/vscode-textarea.d.ts.map +1 -1
  186. package/dist/vscode-textarea/vscode-textarea.js +20 -20
  187. package/dist/vscode-textarea/vscode-textarea.js.map +1 -1
  188. package/dist/vscode-textarea/vscode-textarea.styles.d.ts.map +1 -1
  189. package/dist/vscode-textarea/vscode-textarea.styles.js +31 -22
  190. package/dist/vscode-textarea/vscode-textarea.styles.js.map +1 -1
  191. package/dist/vscode-textfield/vscode-textfield.d.ts.map +1 -1
  192. package/dist/vscode-textfield/vscode-textfield.js +2 -2
  193. package/dist/vscode-textfield/vscode-textfield.js.map +1 -1
  194. package/dist/vscode-toolbar-button/index.d.ts +2 -0
  195. package/dist/vscode-toolbar-button/index.d.ts.map +1 -0
  196. package/dist/vscode-toolbar-button/index.js +2 -0
  197. package/dist/vscode-toolbar-button/index.js.map +1 -0
  198. package/dist/vscode-toolbar-button/vscode-toolbar-button.d.ts +26 -0
  199. package/dist/vscode-toolbar-button/vscode-toolbar-button.d.ts.map +1 -0
  200. package/dist/vscode-toolbar-button/vscode-toolbar-button.js +83 -0
  201. package/dist/vscode-toolbar-button/vscode-toolbar-button.js.map +1 -0
  202. package/dist/vscode-toolbar-button/vscode-toolbar-button.styles.d.ts +4 -0
  203. package/dist/vscode-toolbar-button/vscode-toolbar-button.styles.d.ts.map +1 -0
  204. package/dist/vscode-toolbar-button/vscode-toolbar-button.styles.js +77 -0
  205. package/dist/vscode-toolbar-button/vscode-toolbar-button.styles.js.map +1 -0
  206. package/dist/vscode-toolbar-container/index.d.ts +2 -0
  207. package/dist/vscode-toolbar-container/index.d.ts.map +1 -0
  208. package/dist/vscode-toolbar-container/index.js +2 -0
  209. package/dist/vscode-toolbar-container/index.js.map +1 -0
  210. package/dist/vscode-toolbar-container/vscode-toolbar-container.d.ts +17 -0
  211. package/dist/vscode-toolbar-container/vscode-toolbar-container.d.ts.map +1 -0
  212. package/dist/vscode-toolbar-container/vscode-toolbar-container.js +25 -0
  213. package/dist/vscode-toolbar-container/vscode-toolbar-container.js.map +1 -0
  214. package/dist/vscode-toolbar-container/vscode-toolbar-container.styles.d.ts +4 -0
  215. package/dist/vscode-toolbar-container/vscode-toolbar-container.styles.d.ts.map +1 -0
  216. package/dist/vscode-toolbar-container/vscode-toolbar-container.styles.js +14 -0
  217. package/dist/vscode-toolbar-container/vscode-toolbar-container.styles.js.map +1 -0
  218. package/dist/vscode-tree/helpers.d.ts +9 -0
  219. package/dist/vscode-tree/helpers.d.ts.map +1 -0
  220. package/dist/vscode-tree/helpers.js +116 -0
  221. package/dist/vscode-tree/helpers.js.map +1 -0
  222. package/dist/vscode-tree/tree-context.d.ts +33 -0
  223. package/dist/vscode-tree/tree-context.d.ts.map +1 -0
  224. package/dist/vscode-tree/tree-context.js +4 -0
  225. package/dist/vscode-tree/tree-context.js.map +1 -0
  226. package/dist/vscode-tree/vscode-tree.d.ts +96 -144
  227. package/dist/vscode-tree/vscode-tree.d.ts.map +1 -1
  228. package/dist/vscode-tree/vscode-tree.js +324 -622
  229. package/dist/vscode-tree/vscode-tree.js.map +1 -1
  230. package/dist/vscode-tree/vscode-tree.styles.d.ts.map +1 -1
  231. package/dist/vscode-tree/vscode-tree.styles.js +31 -231
  232. package/dist/vscode-tree/vscode-tree.styles.js.map +1 -1
  233. package/dist/vscode-tree-item/index.d.ts +2 -0
  234. package/dist/vscode-tree-item/index.d.ts.map +1 -0
  235. package/dist/vscode-tree-item/index.js +2 -0
  236. package/dist/vscode-tree-item/index.js.map +1 -0
  237. package/dist/vscode-tree-item/vscode-tree-item.d.ts +50 -0
  238. package/dist/vscode-tree-item/vscode-tree-item.d.ts.map +1 -0
  239. package/dist/vscode-tree-item/vscode-tree-item.js +418 -0
  240. package/dist/vscode-tree-item/vscode-tree-item.js.map +1 -0
  241. package/dist/vscode-tree-item/vscode-tree-item.styles.d.ts +4 -0
  242. package/dist/vscode-tree-item/vscode-tree-item.styles.d.ts.map +1 -0
  243. package/dist/vscode-tree-item/vscode-tree-item.styles.js +140 -0
  244. package/dist/vscode-tree-item/vscode-tree-item.styles.js.map +1 -0
  245. package/package.json +40 -40
  246. package/vscode.css-custom-data.json +44 -55
  247. package/vscode.html-custom-data.json +154 -45
@@ -4,20 +4,35 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { html, nothing } from 'lit';
8
- import { property, query, queryAssignedElements, state } from 'lit/decorators.js';
7
+ import { html, render, nothing } from 'lit';
8
+ import { property, queryAssignedElements, state } from 'lit/decorators.js';
9
9
  import { classMap } from 'lit/directives/class-map.js';
10
+ import { ifDefined } from 'lit/directives/if-defined.js';
11
+ import { repeat } from 'lit/directives/repeat.js';
12
+ import { when } from 'lit/directives/when.js';
10
13
  import '../../vscode-button/index.js';
11
14
  import '../../vscode-option/index.js';
12
- import { filterOptionsByPattern } from './helpers.js';
15
+ import { stylePropertyMap } from '../style-property-map.js';
13
16
  import { VscElement } from '../VscElement.js';
14
- const VISIBLE_OPTS = 10;
15
- const OPT_HEIGHT = 22;
16
- const LIST_HEIGHT = VISIBLE_OPTS + OPT_HEIGHT + 2;
17
+ import { filterOptionsByPattern, highlightRanges } from './helpers.js';
18
+ import { OptionListController } from './OptionListController.js';
19
+ import { checkIcon } from './template-elements.js';
20
+ import '../../vscode-scrollable/vscode-scrollable.js';
21
+ export const VISIBLE_OPTS = 10;
22
+ export const OPT_HEIGHT = 22;
17
23
  /**
18
24
  * @cssprop --dropdown-z-index - workaround for dropdown z-index issues
19
25
  */
20
26
  export class VscodeSelectBase extends VscElement {
27
+ /**
28
+ * Options can be filtered by typing into a text input field.
29
+ */
30
+ set combobox(enabled) {
31
+ this._opts.comboboxMode = enabled;
32
+ }
33
+ get combobox() {
34
+ return this._opts.comboboxMode;
35
+ }
21
36
  /**
22
37
  * The element cannot be used and is not focusable.
23
38
  */
@@ -54,26 +69,31 @@ export class VscodeSelectBase extends VscElement {
54
69
  'startsWith',
55
70
  'startsWithPerTerm',
56
71
  ];
72
+ let fm;
57
73
  if (validValues.includes(val)) {
58
- this._filter = val;
74
+ // this._filter = val as FilterMethod;
75
+ fm = val;
59
76
  }
60
77
  else {
61
- this._filter = 'fuzzy';
78
+ // this._filter = 'fuzzy';
79
+ // eslint-disable-next-line no-console
62
80
  console.warn(`[VSCode Webview Elements] Invalid filter: "${val}", fallback to default. Valid values are: "contains", "fuzzy", "startsWith", "startsWithPerm".`, this);
81
+ fm = 'fuzzy';
63
82
  }
83
+ this._opts.filterMethod = fm;
64
84
  }
65
85
  get filter() {
66
- return this._filter;
86
+ return this._opts.filterMethod;
67
87
  }
68
88
  /**
69
89
  * @attr [options=[]]
70
90
  * @type {Option[]}
71
91
  */
72
92
  set options(opts) {
73
- this._options = opts.map((op, index) => ({ ...op, index }));
93
+ this._opts.populate(opts);
74
94
  }
75
95
  get options() {
76
- return this._options.map(({ label, value, description, selected, disabled }) => ({
96
+ return this._opts.options.map(({ label, value, description, selected, disabled }) => ({
77
97
  label,
78
98
  value,
79
99
  description,
@@ -83,12 +103,12 @@ export class VscodeSelectBase extends VscElement {
83
103
  }
84
104
  constructor() {
85
105
  super();
86
- /** @internal */
87
- this.ariaExpanded = 'false';
106
+ this.creatable = false;
88
107
  /**
89
- * Options can be filtered by typing into a text input field.
108
+ * Accessible label for screen readers. When a `<vscode-label>` is connected
109
+ * to the component, it will be filled automatically.
90
110
  */
91
- this.combobox = false;
111
+ this.label = '';
92
112
  /**
93
113
  * Sets the invalid state manually.
94
114
  */
@@ -105,26 +125,17 @@ export class VscodeSelectBase extends VscElement {
105
125
  * Position of the options list when visible.
106
126
  */
107
127
  this.position = 'below';
108
- /** @internal */
109
- this.tabIndex = 0;
110
- this._activeIndex = -1;
128
+ this._opts = new OptionListController(this);
129
+ this._firstUpdateCompleted = false;
111
130
  this._currentDescription = '';
112
131
  this._filter = 'fuzzy';
113
- this._filterPattern = '';
114
- this._selectedIndex = -1;
115
132
  this._selectedIndexes = [];
116
133
  this._options = [];
117
134
  this._value = '';
118
135
  this._values = [];
119
- this._listScrollTop = 0;
120
- /** @internal */
121
- this._multiple = false;
122
- /**
123
- * @internal
124
- * Quick-searchable map for searching a value in the options list.
125
- * Keys are the options values, values are the option indexes.
126
- */
127
- this._valueOptionIndexMap = {};
136
+ this._isPlaceholderOptionActive = false;
137
+ this._isBeingFiltered = false;
138
+ this._optionListScrollPos = 0;
128
139
  this._isHoverForbidden = false;
129
140
  this._disabled = false;
130
141
  this._originalTabIndex = undefined;
@@ -132,14 +143,43 @@ export class VscodeSelectBase extends VscElement {
132
143
  const path = event.composedPath();
133
144
  const found = path.findIndex((et) => et === this);
134
145
  if (found === -1) {
135
- this._toggleDropdown(false);
136
- window.removeEventListener('click', this._onClickOutside);
146
+ this.open = false;
137
147
  }
138
148
  };
139
149
  this._onMouseMove = () => {
140
150
  this._isHoverForbidden = false;
141
151
  window.removeEventListener('mousemove', this._onMouseMove);
142
152
  };
153
+ this._onOptionListScroll = (ev) => {
154
+ this._optionListScrollPos = ev.detail;
155
+ };
156
+ this._onComponentKeyDown = (event) => {
157
+ if ([' ', 'ArrowUp', 'ArrowDown', 'Escape'].includes(event.key)) {
158
+ event.stopPropagation();
159
+ event.preventDefault();
160
+ }
161
+ if (event.key === 'Enter') {
162
+ this._onEnterKeyDown(event);
163
+ }
164
+ if (event.key === ' ') {
165
+ this._onSpaceKeyDown();
166
+ }
167
+ if (event.key === 'Escape') {
168
+ this._onEscapeKeyDown();
169
+ }
170
+ if (event.key === 'ArrowUp') {
171
+ this._onArrowUpKeyDown();
172
+ }
173
+ if (event.key === 'ArrowDown') {
174
+ this._onArrowDownKeyDown();
175
+ }
176
+ };
177
+ this._onComponentFocus = () => {
178
+ this.focused = true;
179
+ };
180
+ this._onComponentBlur = () => {
181
+ this.focused = false;
182
+ };
143
183
  this.addEventListener('vsc-option-state-change', (ev) => {
144
184
  ev.stopPropagation();
145
185
  this._setStateFromSlottedElements();
@@ -151,6 +191,7 @@ export class VscodeSelectBase extends VscElement {
151
191
  this.addEventListener('keydown', this._onComponentKeyDown);
152
192
  this.addEventListener('focus', this._onComponentFocus);
153
193
  this.addEventListener('blur', this._onComponentBlur);
194
+ this._setAutoFocus();
154
195
  }
155
196
  disconnectedCallback() {
156
197
  super.disconnectedCallback();
@@ -158,23 +199,67 @@ export class VscodeSelectBase extends VscElement {
158
199
  this.removeEventListener('focus', this._onComponentFocus);
159
200
  this.removeEventListener('blur', this._onComponentBlur);
160
201
  }
202
+ firstUpdated(_changedProperties) {
203
+ this._firstUpdateCompleted = true;
204
+ }
205
+ willUpdate(changedProperties) {
206
+ if (changedProperties.has('required') && this._firstUpdateCompleted) {
207
+ this._manageRequired();
208
+ }
209
+ }
210
+ update(changedProperties) {
211
+ super.update(changedProperties);
212
+ if (changedProperties.has('open')) {
213
+ if (this.open) {
214
+ this._opts.activateDefault();
215
+ this._scrollActiveElementToTop();
216
+ window.addEventListener('click', this._onClickOutside);
217
+ }
218
+ else {
219
+ window.removeEventListener('click', this._onClickOutside);
220
+ }
221
+ }
222
+ }
161
223
  get _filteredOptions() {
162
- if (!this.combobox || this._filterPattern === '') {
224
+ if (!this.combobox || this._opts.filterPattern === '') {
163
225
  return this._options;
164
226
  }
165
- return filterOptionsByPattern(this._options, this._filterPattern, this._filter);
227
+ return filterOptionsByPattern(this._options, this._opts.filterPattern, this._filter);
166
228
  }
167
- get _currentOptions() {
168
- return this.combobox ? this._filteredOptions : this._options;
229
+ _setAutoFocus() {
230
+ if (this.hasAttribute('autofocus')) {
231
+ if (this.tabIndex < 0) {
232
+ this.tabIndex = 0;
233
+ }
234
+ if (this.combobox) {
235
+ this.updateComplete.then(() => {
236
+ this.shadowRoot
237
+ ?.querySelector('.combobox-input')
238
+ .focus();
239
+ });
240
+ }
241
+ else {
242
+ this.updateComplete.then(() => {
243
+ this.shadowRoot
244
+ ?.querySelector('.select-face')
245
+ .focus();
246
+ });
247
+ }
248
+ }
169
249
  }
250
+ get _isSuggestedOptionVisible() {
251
+ if (!(this.combobox && this.creatable)) {
252
+ return false;
253
+ }
254
+ const filterPatternExistsAsOption = this._opts.getOptionByValue(this._opts.filterPattern) !== null;
255
+ const filtered = this._opts.filterPattern.length > 0;
256
+ return !filterPatternExistsAsOption && filtered;
257
+ }
258
+ _manageRequired() { }
170
259
  _setStateFromSlottedElements() {
171
- const options = [];
172
- let nextIndex = 0;
173
260
  const optionElements = this._assignedOptions ?? [];
174
- const selectedIndexes = [];
175
- const values = [];
176
- this._valueOptionIndexMap = {};
177
- optionElements.forEach((el, i) => {
261
+ this._opts.clear();
262
+ optionElements.forEach((el) => {
178
263
  const { innerText, description, disabled } = el;
179
264
  const value = typeof el.value === 'string' ? el.value : innerText.trim();
180
265
  const selected = el.selected ?? false;
@@ -183,81 +268,61 @@ export class VscodeSelectBase extends VscElement {
183
268
  value,
184
269
  description,
185
270
  selected,
186
- index: nextIndex,
187
271
  disabled,
188
272
  };
189
- nextIndex = options.push(op);
190
- if (selected && !this._multiple) {
191
- this._activeIndex = i;
192
- }
193
- if (selected) {
194
- selectedIndexes.push(options.length - 1);
195
- values.push(value);
196
- }
197
- this._valueOptionIndexMap[op.value] = op.index;
273
+ this._opts.add(op);
198
274
  });
199
- this._options = options;
200
- if (selectedIndexes.length > 0) {
201
- this._selectedIndex = selectedIndexes[0];
202
- this._selectedIndexes = selectedIndexes;
203
- this._value = values[0];
204
- this._values = values;
205
- }
206
- if (!this._multiple && !this.combobox && selectedIndexes.length === 0) {
207
- this._selectedIndex = this._options.length > 0 ? 0 : -1;
208
- }
209
275
  }
210
- async _toggleDropdown(visible) {
211
- this.open = visible;
212
- this.ariaExpanded = String(visible);
213
- if (visible && !this._multiple && !this.combobox) {
214
- this._activeIndex = this._selectedIndex;
215
- if (this._activeIndex > VISIBLE_OPTS - 1) {
216
- await this.updateComplete;
217
- this._listElement.scrollTop = Math.floor(this._activeIndex * OPT_HEIGHT);
218
- }
219
- }
220
- if (visible) {
221
- window.addEventListener('click', this._onClickOutside);
222
- }
223
- else {
224
- window.removeEventListener('click', this._onClickOutside);
225
- }
276
+ _createSuggestedOption() {
277
+ const nextSelectedIndex = this._opts.numOptions;
278
+ const op = document.createElement('vscode-option');
279
+ op.value = this._opts.filterPattern;
280
+ render(this._opts.filterPattern, op);
281
+ this.appendChild(op);
282
+ return nextSelectedIndex;
226
283
  }
227
284
  _dispatchChangeEvent() {
228
- if (!this._multiple) {
229
- /** @deprecated */
230
- this.dispatchEvent(new CustomEvent('vsc-change', {
231
- detail: {
232
- selectedIndex: this._selectedIndex,
233
- value: this._value,
234
- },
235
- }));
236
- }
237
- else {
238
- /** @deprecated */
239
- this.dispatchEvent(new CustomEvent('vsc-change', {
240
- detail: {
241
- selectedIndexes: this._selectedIndexes,
242
- value: this._values,
243
- },
244
- }));
245
- }
246
285
  this.dispatchEvent(new Event('change'));
247
286
  this.dispatchEvent(new Event('input'));
248
287
  }
249
- _onFaceClick() {
250
- this._toggleDropdown(!this.open);
251
- if (this._multiple) {
252
- this._activeIndex = 0;
253
- }
254
- }
288
+ async _createAndSelectSuggestedOption() { }
255
289
  _toggleComboboxDropdown() {
256
- this._filterPattern = '';
257
- this._toggleDropdown(!this.open);
258
- if (this._multiple) {
259
- this._activeIndex = -1;
290
+ this._opts.filterPattern = '';
291
+ this.open = !this.open;
292
+ }
293
+ _scrollActiveElementToTop() {
294
+ this._optionListScrollPos = Math.floor(this._opts.relativeActiveIndex * OPT_HEIGHT);
295
+ }
296
+ async _adjustOptionListScrollPos(direction, optionIndex) {
297
+ let numOpts = this._opts.numOfVisibleOptions;
298
+ const suggestedOptionVisible = this._isSuggestedOptionVisible;
299
+ if (suggestedOptionVisible) {
300
+ numOpts += 1;
301
+ }
302
+ if (numOpts <= VISIBLE_OPTS) {
303
+ return;
260
304
  }
305
+ this._isHoverForbidden = true;
306
+ window.addEventListener('mousemove', this._onMouseMove);
307
+ const ulScrollTop = this._optionListScrollPos;
308
+ const liPosY = optionIndex * OPT_HEIGHT;
309
+ const fullyVisible = liPosY >= ulScrollTop &&
310
+ liPosY <= ulScrollTop + VISIBLE_OPTS * OPT_HEIGHT - OPT_HEIGHT;
311
+ if (direction === 'down') {
312
+ if (!fullyVisible) {
313
+ this._optionListScrollPos =
314
+ optionIndex * OPT_HEIGHT - (VISIBLE_OPTS - 1) * OPT_HEIGHT;
315
+ }
316
+ }
317
+ if (direction === 'up') {
318
+ if (!fullyVisible) {
319
+ this._optionListScrollPos = Math.floor(this._opts.relativeActiveIndex * OPT_HEIGHT);
320
+ }
321
+ }
322
+ }
323
+ //#region event handlers
324
+ _onFaceClick() {
325
+ this.open = !this.open;
261
326
  }
262
327
  _onComboboxButtonClick() {
263
328
  this._toggleComboboxDropdown();
@@ -275,130 +340,97 @@ export class VscodeSelectBase extends VscElement {
275
340
  if (!el.matches('.option')) {
276
341
  return;
277
342
  }
278
- this._activeIndex = Number(this.combobox ? el.dataset.filteredIndex : el.dataset.index);
279
- }
280
- _onEnterKeyDown() {
281
- const list = this.combobox ? this._filteredOptions : this._options;
282
- const showDropdownNext = !this.open;
283
- this._toggleDropdown(showDropdownNext);
284
- if (!this._multiple &&
285
- !showDropdownNext &&
286
- this._selectedIndex !== this._activeIndex) {
287
- this._selectedIndex =
288
- this._activeIndex > -1 ? list[this._activeIndex].index : -1;
289
- this._value =
290
- this._selectedIndex > -1
291
- ? this._options[this._selectedIndex].value
292
- : '';
293
- this._dispatchChangeEvent();
343
+ if (el.matches('.placeholder')) {
344
+ this._isPlaceholderOptionActive = true;
345
+ this._opts.activeIndex = -1;
294
346
  }
295
- if (this.combobox) {
296
- if (!this._multiple && !showDropdownNext) {
297
- this._selectedIndex =
298
- this._activeIndex > -1
299
- ? this._filteredOptions[this._activeIndex].index
300
- : -1;
301
- }
302
- if (!this._multiple && showDropdownNext) {
303
- this.updateComplete.then(() => {
304
- this._scrollActiveElementToTop();
305
- });
306
- }
307
- }
308
- if (this._multiple && showDropdownNext) {
309
- this._activeIndex = 0;
347
+ else {
348
+ this._isPlaceholderOptionActive = false;
349
+ this._opts.activeIndex = +el.dataset.index;
350
+ }
351
+ }
352
+ _onPlaceholderOptionMouseOut() {
353
+ this._isPlaceholderOptionActive = false;
354
+ }
355
+ _onNoOptionsClick(ev) {
356
+ ev.stopPropagation();
357
+ }
358
+ _onEnterKeyDown(ev) {
359
+ this._isBeingFiltered = false;
360
+ const clickedOnAcceptButton = ev?.composedPath
361
+ ? ev
362
+ .composedPath()
363
+ .find((el) => el.matches
364
+ ? el.matches('vscode-button.button-accept')
365
+ : false)
366
+ : false;
367
+ if (clickedOnAcceptButton) {
368
+ return;
310
369
  }
311
370
  }
312
371
  _onSpaceKeyDown() {
313
372
  if (!this.open) {
314
- this._toggleDropdown(true);
373
+ this.open = true;
315
374
  return;
316
375
  }
317
- if (this.open && this._multiple && this._activeIndex > -1) {
318
- const opts = this.combobox ? this._filteredOptions : this._options;
319
- const { selected } = opts[this._activeIndex];
320
- opts[this._activeIndex].selected = !selected;
321
- this._selectedIndexes = [];
322
- opts.forEach(({ index, selected }) => {
323
- if (selected) {
324
- this._selectedIndexes.push(index);
325
- }
326
- });
327
- }
328
- }
329
- _scrollActiveElementToTop() {
330
- this._listElement.scrollTop = Math.floor(this._activeIndex * OPT_HEIGHT);
331
- }
332
- async _adjustOptionListScrollPos(direction) {
333
- const numOpts = this.combobox
334
- ? this._filteredOptions.length
335
- : this._options.length;
336
- if (numOpts <= VISIBLE_OPTS) {
337
- return;
338
- }
339
- this._isHoverForbidden = true;
340
- window.addEventListener('mousemove', this._onMouseMove);
341
- if (!this._listElement) {
342
- await this.updateComplete;
343
- }
344
- const ulScrollTop = this._listElement.scrollTop;
345
- const liPosY = this._activeIndex * OPT_HEIGHT;
346
- if (direction === 'down') {
347
- if (liPosY + OPT_HEIGHT >= LIST_HEIGHT + ulScrollTop) {
348
- this._listElement.scrollTop =
349
- (this._activeIndex - (VISIBLE_OPTS - 1)) * OPT_HEIGHT;
350
- }
351
- }
352
- if (direction === 'up') {
353
- if (liPosY <= ulScrollTop - OPT_HEIGHT) {
354
- this._scrollActiveElementToTop();
355
- }
356
- }
357
376
  }
358
377
  _onArrowUpKeyDown() {
359
378
  if (this.open) {
360
- if (this._activeIndex <= 0) {
379
+ if (this._opts.activeIndex <= 0 && !(this.combobox && this.creatable)) {
361
380
  return;
362
381
  }
363
- this._activeIndex -= 1;
364
- this._adjustOptionListScrollPos('up');
382
+ if (this._isPlaceholderOptionActive) {
383
+ const optionIndex = this._opts.numOfVisibleOptions - 1;
384
+ this._opts.activeIndex = optionIndex;
385
+ this._isPlaceholderOptionActive = false;
386
+ }
387
+ else {
388
+ const prevOp = this._opts.prev();
389
+ if (prevOp !== null) {
390
+ this._opts.activeIndex = prevOp?.index ?? -1;
391
+ const prevSelectableIndex = prevOp?.filteredIndex ?? -1;
392
+ if (prevSelectableIndex > -1) {
393
+ this._adjustOptionListScrollPos('up', prevSelectableIndex);
394
+ }
395
+ }
396
+ }
397
+ }
398
+ else {
399
+ this.open = true;
400
+ this._opts.activateDefault();
365
401
  }
366
402
  }
367
403
  _onArrowDownKeyDown() {
404
+ let numOpts = this._opts.numOfVisibleOptions;
405
+ const suggestedOptionVisible = this._isSuggestedOptionVisible;
406
+ if (suggestedOptionVisible) {
407
+ numOpts += 1;
408
+ }
368
409
  if (this.open) {
369
- if (this._activeIndex >= this._currentOptions.length - 1) {
410
+ if (this._isPlaceholderOptionActive && this._opts.activeIndex === -1) {
370
411
  return;
371
412
  }
372
- this._activeIndex += 1;
373
- this._adjustOptionListScrollPos('down');
374
- }
375
- }
376
- _onComponentKeyDown(event) {
377
- if ([' ', 'ArrowUp', 'ArrowDown', 'Escape'].includes(event.key)) {
378
- event.stopPropagation();
379
- event.preventDefault();
380
- }
381
- if (event.key === 'Enter') {
382
- this._onEnterKeyDown();
383
- }
384
- if (event.key === ' ') {
385
- this._onSpaceKeyDown();
386
- }
387
- if (event.key === 'Escape') {
388
- this._toggleDropdown(false);
389
- }
390
- if (event.key === 'ArrowUp') {
391
- this._onArrowUpKeyDown();
413
+ const nextOp = this._opts.next();
414
+ if (suggestedOptionVisible && nextOp === null) {
415
+ this._isPlaceholderOptionActive = true;
416
+ this._adjustOptionListScrollPos('down', numOpts - 1);
417
+ this._opts.activeIndex = -1;
418
+ }
419
+ else if (nextOp !== null) {
420
+ const nextSelectableIndex = nextOp?.filteredIndex ?? -1;
421
+ this._opts.activeIndex = nextOp?.index ?? -1;
422
+ if (nextSelectableIndex > -1) {
423
+ this._adjustOptionListScrollPos('down', nextSelectableIndex);
424
+ }
425
+ }
392
426
  }
393
- if (event.key === 'ArrowDown') {
394
- this._onArrowDownKeyDown();
427
+ else {
428
+ this.open = true;
429
+ this._opts.activateDefault();
395
430
  }
396
431
  }
397
- _onComponentFocus() {
398
- this.focused = true;
399
- }
400
- _onComponentBlur() {
401
- this.focused = false;
432
+ _onEscapeKeyDown() {
433
+ this.open = false;
402
434
  }
403
435
  _onSlotChange() {
404
436
  this._setStateFromSlottedElements();
@@ -406,23 +438,121 @@ export class VscodeSelectBase extends VscElement {
406
438
  }
407
439
  _onComboboxInputFocus(ev) {
408
440
  ev.target.select();
441
+ this._isBeingFiltered = false;
442
+ this._opts.filterPattern = '';
443
+ }
444
+ _onComboboxInputBlur() {
445
+ this._isBeingFiltered = false;
409
446
  }
410
447
  _onComboboxInputInput(ev) {
411
- this._filterPattern = ev.target.value;
412
- this._activeIndex = -1;
413
- this._toggleDropdown(true);
448
+ this._isBeingFiltered = true;
449
+ this._opts.filterPattern = ev.target.value;
450
+ this._opts.activeIndex = -1;
451
+ this.open = true;
414
452
  }
415
453
  _onComboboxInputClick() {
416
- this._toggleDropdown(true);
454
+ this._isBeingFiltered = this._opts.filterPattern !== '';
455
+ this.open = true;
456
+ }
457
+ _onComboboxInputSpaceKeyDown(ev) {
458
+ if (ev.key === ' ') {
459
+ ev.stopPropagation();
460
+ }
461
+ }
462
+ _onOptionClick(_ev) {
463
+ this._isBeingFiltered = false;
464
+ return;
465
+ }
466
+ //#endregion
467
+ //#region render functions
468
+ _renderCheckbox(checked, label) {
469
+ const checkboxClasses = {
470
+ 'checkbox-icon': true,
471
+ checked,
472
+ };
473
+ return html `<span class=${classMap(checkboxClasses)}>${checkIcon}</span
474
+ ><span class="option-label">${label}</span>`;
417
475
  }
418
476
  _renderOptions() {
419
- return [];
477
+ const list = this._opts.options;
478
+ return html `
479
+ <ul
480
+ aria-label=${ifDefined(this.label ?? undefined)}
481
+ aria-multiselectable=${ifDefined(this._opts.multiSelect ? 'true' : undefined)}
482
+ class="options"
483
+ id="select-listbox"
484
+ role="listbox"
485
+ tabindex="-1"
486
+ @click=${this._onOptionClick}
487
+ @mouseover=${this._onOptionMouseOver}
488
+ >
489
+ ${repeat(list, (op) => op.index, (op, index) => {
490
+ if (!op.visible) {
491
+ return nothing;
492
+ }
493
+ const active = op.index === this._opts.activeIndex && !op.disabled;
494
+ const selected = this._opts.getIsIndexSelected(op.index);
495
+ const optionClasses = {
496
+ active,
497
+ disabled: op.disabled,
498
+ option: true,
499
+ selected,
500
+ };
501
+ const labelText = (op.ranges?.length ?? 0 > 0)
502
+ ? highlightRanges(op.label, op.ranges ?? [])
503
+ : op.label;
504
+ return html `
505
+ <li
506
+ aria-selected=${selected ? 'true' : 'false'}
507
+ class=${classMap(optionClasses)}
508
+ data-index=${op.index}
509
+ data-filtered-index=${index}
510
+ id=${`op-${op.index}`}
511
+ role="option"
512
+ tabindex="-1"
513
+ >
514
+ ${when(this._opts.multiSelect, () => this._renderCheckbox(selected, labelText), () => labelText)}
515
+ </li>
516
+ `;
517
+ })}
518
+ ${this._renderPlaceholderOption(this._opts.numOfVisibleOptions < 1)}
519
+ </ul>
520
+ `;
521
+ }
522
+ _renderPlaceholderOption(isListEmpty) {
523
+ if (!this.combobox) {
524
+ return nothing;
525
+ }
526
+ const foundOption = this._opts.getOptionByLabel(this._opts.filterPattern);
527
+ if (foundOption) {
528
+ return nothing;
529
+ }
530
+ if (this.creatable && this._opts.filterPattern.length > 0) {
531
+ return html `<li
532
+ class=${classMap({
533
+ option: true,
534
+ placeholder: true,
535
+ active: this._isPlaceholderOptionActive,
536
+ })}
537
+ @mouseout=${this._onPlaceholderOptionMouseOut}
538
+ >
539
+ Add "${this._opts.filterPattern}"
540
+ </li>`;
541
+ }
542
+ else {
543
+ return isListEmpty
544
+ ? html `<li class="no-options" @click=${this._onNoOptionsClick}>
545
+ No options
546
+ </li>`
547
+ : nothing;
548
+ }
420
549
  }
421
550
  _renderDescription() {
422
- if (!this._options[this._activeIndex]) {
551
+ const op = this._opts.getActiveOption();
552
+ if (!op) {
423
553
  return nothing;
424
554
  }
425
- const { description } = this._options[this._activeIndex];
555
+ const { description } = op;
426
556
  return description
427
557
  ? html `<div class="description">${description}</div>`
428
558
  : nothing;
@@ -437,32 +567,45 @@ export class VscodeSelectBase extends VscElement {
437
567
  return html `${nothing}`;
438
568
  }
439
569
  _renderDropdown() {
440
- const classes = classMap({
570
+ const classes = {
441
571
  dropdown: true,
442
- multiple: this._multiple,
443
- });
572
+ multiple: this._opts.multiSelect,
573
+ open: this.open,
574
+ };
575
+ const visibleOptions = this._isSuggestedOptionVisible || this._opts.numOfVisibleOptions === 0
576
+ ? this._opts.numOfVisibleOptions + 1
577
+ : this._opts.numOfVisibleOptions;
578
+ const scrollPaneHeight = Math.min(visibleOptions * OPT_HEIGHT, VISIBLE_OPTS * OPT_HEIGHT);
444
579
  return html `
445
- <div class=${classes}>
580
+ <div class=${classMap(classes)}>
446
581
  ${this.position === 'above' ? this._renderDescription() : nothing}
447
- ${this._renderOptions()} ${this._renderDropdownControls()}
582
+ <vscode-scrollable
583
+ always-visible
584
+ class="scrollable"
585
+ min-thumb-size="40"
586
+ tabindex="-1"
587
+ @vsc-scrollable-scroll=${this._onOptionListScroll}
588
+ .scrollPos=${this._optionListScrollPos}
589
+ .style=${stylePropertyMap({
590
+ height: `${scrollPaneHeight}px`,
591
+ })}
592
+ >
593
+ ${this._renderOptions()} ${this._renderDropdownControls()}
594
+ </vscode-scrollable>
448
595
  ${this.position === 'below' ? this._renderDescription() : nothing}
449
596
  </div>
450
597
  `;
451
598
  }
452
- render() {
453
- return html `
454
- <slot class="main-slot" @slotchange=${this._onSlotChange}></slot>
455
- ${this.combobox ? this._renderComboboxFace() : this._renderSelectFace()}
456
- ${this.open ? this._renderDropdown() : nothing}
457
- `;
458
- }
459
599
  }
460
600
  __decorate([
461
- property({ type: String, reflect: true, attribute: 'aria-expanded' })
462
- ], VscodeSelectBase.prototype, "ariaExpanded", void 0);
601
+ property({ type: Boolean, reflect: true })
602
+ ], VscodeSelectBase.prototype, "creatable", void 0);
463
603
  __decorate([
464
604
  property({ type: Boolean, reflect: true })
465
- ], VscodeSelectBase.prototype, "combobox", void 0);
605
+ ], VscodeSelectBase.prototype, "combobox", null);
606
+ __decorate([
607
+ property({ reflect: true })
608
+ ], VscodeSelectBase.prototype, "label", void 0);
466
609
  __decorate([
467
610
  property({ type: Boolean, reflect: true })
468
611
  ], VscodeSelectBase.prototype, "disabled", null);
@@ -484,18 +627,12 @@ __decorate([
484
627
  __decorate([
485
628
  property({ reflect: true })
486
629
  ], VscodeSelectBase.prototype, "position", void 0);
487
- __decorate([
488
- property({ type: Number, attribute: true, reflect: true })
489
- ], VscodeSelectBase.prototype, "tabIndex", void 0);
490
630
  __decorate([
491
631
  queryAssignedElements({
492
632
  flatten: true,
493
633
  selector: 'vscode-option',
494
634
  })
495
635
  ], VscodeSelectBase.prototype, "_assignedOptions", void 0);
496
- __decorate([
497
- state()
498
- ], VscodeSelectBase.prototype, "_activeIndex", void 0);
499
636
  __decorate([
500
637
  state()
501
638
  ], VscodeSelectBase.prototype, "_currentDescription", void 0);
@@ -505,12 +642,6 @@ __decorate([
505
642
  __decorate([
506
643
  state()
507
644
  ], VscodeSelectBase.prototype, "_filteredOptions", null);
508
- __decorate([
509
- state()
510
- ], VscodeSelectBase.prototype, "_filterPattern", void 0);
511
- __decorate([
512
- state()
513
- ], VscodeSelectBase.prototype, "_selectedIndex", void 0);
514
645
  __decorate([
515
646
  state()
516
647
  ], VscodeSelectBase.prototype, "_selectedIndexes", void 0);
@@ -525,8 +656,11 @@ __decorate([
525
656
  ], VscodeSelectBase.prototype, "_values", void 0);
526
657
  __decorate([
527
658
  state()
528
- ], VscodeSelectBase.prototype, "_listScrollTop", void 0);
659
+ ], VscodeSelectBase.prototype, "_isPlaceholderOptionActive", void 0);
660
+ __decorate([
661
+ state()
662
+ ], VscodeSelectBase.prototype, "_isBeingFiltered", void 0);
529
663
  __decorate([
530
- query('.options')
531
- ], VscodeSelectBase.prototype, "_listElement", void 0);
664
+ state()
665
+ ], VscodeSelectBase.prototype, "_optionListScrollPos", void 0);
532
666
  //# sourceMappingURL=vscode-select-base.js.map