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

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 +4505 -2986
  3. package/dist/bundled.js +1157 -934
  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 +11 -0
  219. package/dist/vscode-tree/helpers.d.ts.map +1 -0
  220. package/dist/vscode-tree/helpers.js +139 -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 +35 -150
  227. package/dist/vscode-tree/vscode-tree.d.ts.map +1 -1
  228. package/dist/vscode-tree/vscode-tree.js +263 -627
  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 +4 -240
  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 +45 -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 +377 -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 +165 -0
  244. package/dist/vscode-tree-item/vscode-tree-item.styles.js.map +1 -0
  245. package/package.json +38 -38
  246. package/vscode.css-custom-data.json +47 -58
  247. package/vscode.html-custom-data.json +166 -81
@@ -1,6 +1,9 @@
1
1
  import { TemplateResult } from 'lit';
2
2
  import { VscodeSelectBase } from '../includes/vscode-select/vscode-select-base.js';
3
3
  import { AssociatedFormControl } from '../includes/AssociatedFormControl.js';
4
+ export type VscSingleSelectCreateOptionEvent = CustomEvent<{
5
+ value: string;
6
+ }>;
4
7
  /**
5
8
  * Allows to select an item from multiple options.
6
9
  *
@@ -23,27 +26,29 @@ import { AssociatedFormControl } from '../includes/AssociatedFormControl.js';
23
26
  * @prop {boolean} invalid
24
27
  * @attr {boolean} invalid
25
28
  * @attr name - Name which is used as a variable name in the data of the form-container.
29
+ *
26
30
  * @cssprop [--dropdown-z-index=2]
27
- * @cssprop --vscode-badge-background
28
- * @cssprop --vscode-badge-foreground
29
- * @cssprop --vscode-settings-dropdownBorder
30
- * @cssprop --vscode-settings-checkboxBackground
31
- * @cssprop --vscode-settings-dropdownBackground
32
- * @cssprop --vscode-settings-dropdownListBorder
33
- * @cssprop --vscode-focusBorder
34
- * @cssprop --vscode-foreground
35
- * @cssprop --vscode-font-family
36
- * @cssprop --vscode-font-size
37
- * @cssprop --vscode-font-weight
38
- * @cssprop --vscode-list-activeSelectionBackground
39
- * @cssprop --vscode-list-activeSelectionForeground
40
- * @cssprop --vscode-list-focusOutline
41
- * @cssprop --vscode-list-highlightForeground
42
- * @cssprop --vscode-list-focusHighlightForeground
43
- * @cssprop --vscode-list-hoverBackground
44
- * @cssprop --vscode-list-hoverForeground
45
- * @cssprop --vscode-list-hoverBackground
46
- * @cssprop --vscode-settings-textInputBackground
31
+ * @cssprop [--vscode-badge-background=#616161]
32
+ * @cssprop [--vscode-badge-foreground=#f8f8f8]
33
+ * @cssprop [--vscode-settings-dropdownBorder=#3c3c3c]
34
+ * @cssprop [--vscode-settings-checkboxBackground=#313131]
35
+ * @cssprop [--vscode-settings-dropdownBackground=#313131]
36
+ * @cssprop [--vscode-settings-dropdownForeground=#cccccc]
37
+ * @cssprop [--vscode-settings-dropdownListBorder=#454545]
38
+ * @cssprop [--vscode-focusBorder=#0078d4]
39
+ * @cssprop [--vscode-foreground=#cccccc]
40
+ * @cssprop [--vscode-font-family=sans-serif]
41
+ * @cssprop [--vscode-font-size=13px]
42
+ * @cssprop [--vscode-font-weight=normal]
43
+ * @cssprop [--vscode-inputValidation-errorBackground=#5a1d1d]
44
+ * @cssprop [--vscode-inputValidation-errorBorder=#be1100]
45
+ * @cssprop [--vscode-list-activeSelectionBackground=#04395e]
46
+ * @cssprop [--vscode-list-activeSelectionForeground=#ffffff]
47
+ * @cssprop [--vscode-list-focusOutline=#0078d4]
48
+ * @cssprop [--vscode-list-focusHighlightForeground=#2aaaff]
49
+ * @cssprop [--vscode-list-highlightForeground=#2aaaff]
50
+ * @cssprop [--vscode-list-hoverBackground=#2a2d2e]
51
+ * @cssprop [--vscode-list-hoverForeground=#ffffff]
47
52
  */
48
53
  export declare class VscodeSingleSelect extends VscodeSelectBase implements AssociatedFormControl {
49
54
  static styles: import("lit").CSSResult[];
@@ -52,8 +57,6 @@ export declare class VscodeSingleSelect extends VscodeSelectBase implements Asso
52
57
  /** @internal */
53
58
  static formAssociated: boolean;
54
59
  defaultValue: string;
55
- /** @internal */
56
- role: string;
57
60
  name: string | undefined;
58
61
  set selectedIndex(val: number);
59
62
  get selectedIndex(): number;
@@ -77,20 +80,28 @@ export declare class VscodeSingleSelect extends VscodeSelectBase implements Asso
77
80
  /** @internal */
78
81
  get type(): 'select-one';
79
82
  get form(): HTMLFormElement | null;
83
+ /**
84
+ * This variable was introduced for cases where the value is set before the corresponding option
85
+ * exists. This can happen while a framework like Vue or React is rendering the component.
86
+ */
80
87
  private _requestedValueToSetLater;
88
+ protected _createAndSelectSuggestedOption(): Promise<void>;
89
+ protected _dispatchChangeEvent(): void;
90
+ protected _setStateFromSlottedElements(): void;
81
91
  protected _onSlotChange(): void;
82
- protected _onArrowUpKeyDown(): void;
83
- protected _onArrowDownKeyDown(): void;
84
- protected _onEnterKeyDown(): void;
85
- private _onOptionClick;
86
- private _manageRequired;
92
+ protected _onEnterKeyDown(ev: KeyboardEvent): void;
93
+ protected _onOptionClick(ev: MouseEvent): void;
94
+ protected _manageRequired(): void;
87
95
  protected _renderSelectFace(): TemplateResult;
88
96
  protected _renderComboboxFace(): TemplateResult;
89
- protected _renderOptions(): TemplateResult;
97
+ render(): TemplateResult;
90
98
  }
91
99
  declare global {
92
100
  interface HTMLElementTagNameMap {
93
101
  'vscode-single-select': VscodeSingleSelect;
94
102
  }
103
+ interface GlobalEventHandlersEventMap {
104
+ 'vsc-single-select-create-option': VscSingleSelectCreateOptionEvent;
105
+ }
95
106
  }
96
107
  //# sourceMappingURL=vscode-single-select.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"vscode-single-select.d.ts","sourceRoot":"","sources":["../../src/vscode-single-select/vscode-single-select.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,cAAc,EAAC,MAAM,KAAK,CAAC;AAIrD,OAAO,EAAC,gBAAgB,EAAC,MAAM,iDAAiD,CAAC;AAEjF,OAAO,EAAC,qBAAqB,EAAC,MAAM,sCAAsC,CAAC;AAG3E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,qBACa,kBACX,SAAQ,gBACR,YAAW,qBAAqB;IAEhC,OAAgB,MAAM,4BAAU;IAEhC,gBAAgB;IAChB,OAAgB,iBAAiB,EAAE,cAAc,CAG/C;IAEF,gBAAgB;IAChB,MAAM,CAAC,cAAc,UAAQ;IAG7B,YAAY,SAAM;IAElB,gBAAgB;IAEP,IAAI,SAAa;IAG1B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAa;IAErC,IACI,aAAa,CAAC,GAAG,EAAE,MAAM,EAK5B;IACD,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IACI,KAAK,CAAC,GAAG,EAAE,MAAM,EAepB;IACD,IAAI,KAAK,IAAI,MAAM,CAMlB;IAGD,QAAQ,UAAS;IAEjB,IAAI,QAAQ,IAAI,aAAa,CAE5B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,YAAY,YAEf;IAED,aAAa,IAAI,OAAO;IAIxB,cAAc,IAAI,OAAO;IAKzB,OAAO,CAAC,KAAK,CAAkB;IAE/B,OAAO,CAAC,UAAU,CAAmB;IAErC,OAAO,CAAC,gBAAgB;;IAuBf,iBAAiB,IAAI,IAAI;IAQlC,gBAAgB;IAChB,iBAAiB,IAAI,IAAI;IAIzB,gBAAgB;IAChB,wBAAwB,CACtB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,GAAG,cAAc,GAChC,IAAI;IAMP,gBAAgB;IAChB,IAAI,IAAI,IAAI,YAAY,CAEvB;IAED,IAAI,IAAI,IAAI,eAAe,GAAG,IAAI,CAEjC;IAED,OAAO,CAAC,yBAAyB,CAAM;cAEpB,aAAa,IAAI,IAAI;cAsBrB,iBAAiB,IAAI,IAAI;cAgBzB,mBAAmB,IAAI,IAAI;cAgB3B,eAAe,IAAI,IAAI;IAQ1C,OAAO,CAAC,cAAc;IAmBtB,OAAO,CAAC,eAAe;cAeJ,iBAAiB,IAAI,cAAc;cAcnC,mBAAmB,IAAI,cAAc;cA4BrC,cAAc,IAAI,cAAc;CAiCpD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,sBAAsB,EAAE,kBAAkB,CAAC;KAC5C;CACF"}
1
+ {"version":3,"file":"vscode-single-select.d.ts","sourceRoot":"","sources":["../../src/vscode-single-select/vscode-single-select.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,cAAc,EAAC,MAAM,KAAK,CAAC;AAKrD,OAAO,EAAC,gBAAgB,EAAC,MAAM,iDAAiD,CAAC;AACjF,OAAO,EAAC,qBAAqB,EAAC,MAAM,sCAAsC,CAAC;AAG3E,MAAM,MAAM,gCAAgC,GAAG,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAC,CAAC,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,qBACa,kBACX,SAAQ,gBACR,YAAW,qBAAqB;IAEhC,OAAgB,MAAM,4BAAU;IAEhC,gBAAgB;IAChB,OAAgB,iBAAiB,EAAE,cAAc,CAG/C;IAEF,gBAAgB;IAChB,MAAM,CAAC,cAAc,UAAQ;IAG7B,YAAY,SAAM;IAGlB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAa;IAErC,IACI,aAAa,CAAC,GAAG,EAAE,MAAM,EAe5B;IACD,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IACI,KAAK,CAAC,GAAG,EAAE,MAAM,EAWpB;IACD,IAAI,KAAK,IAAI,MAAM,CAElB;IAGD,QAAQ,UAAS;IAEjB,IAAI,QAAQ,IAAI,aAAa,CAE5B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,YAAY,YAEf;IAED,aAAa,IAAI,OAAO;IAIxB,cAAc,IAAI,OAAO;IAKzB,OAAO,CAAC,KAAK,CAAkB;IAE/B,OAAO,CAAC,UAAU,CAAmB;IAErC,OAAO,CAAC,gBAAgB;;IAqBf,iBAAiB,IAAI,IAAI;IAQlC,gBAAgB;IAChB,iBAAiB,IAAI,IAAI;IAIzB,gBAAgB;IAChB,wBAAwB,CACtB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,GAAG,cAAc,GAChC,IAAI;IAMP,gBAAgB;IAChB,IAAI,IAAI,IAAI,YAAY,CAEvB;IAED,IAAI,IAAI,IAAI,eAAe,GAAG,IAAI,CAEjC;IAED;;;OAGG;IACH,OAAO,CAAC,yBAAyB,CAAM;cAEd,+BAA+B;cAgBrC,oBAAoB,IAAI,IAAI;cAc5B,4BAA4B,IAAI,IAAI;cASpC,aAAa,IAAI,IAAI;cAwBrB,eAAe,CAAC,EAAE,EAAE,aAAa,GAAG,IAAI;cAoCxC,cAAc,CAAC,EAAE,EAAE,UAAU;cAkC7B,eAAe;cAcf,iBAAiB,IAAI,cAAc;cAuBnC,mBAAmB,IAAI,cAAc;IAiD/C,MAAM,IAAI,cAAc;CAUlC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,sBAAsB,EAAE,kBAAkB,CAAC;KAC5C;IAED,UAAU,2BAA2B;QACnC,iCAAiC,EAAE,gCAAgC,CAAC;KACrE;CACF"}
@@ -5,12 +5,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
7
  import { html, LitElement } from 'lit';
8
- import { customElement, property, query } from 'lit/decorators.js';
9
- import { classMap } from 'lit/directives/class-map.js';
8
+ import { property, query } from 'lit/decorators.js';
9
+ import { ifDefined } from 'lit/directives/if-defined.js';
10
+ import { customElement } from '../includes/VscElement.js';
10
11
  import { chevronDownIcon } from '../includes/vscode-select/template-elements.js';
11
12
  import { VscodeSelectBase } from '../includes/vscode-select/vscode-select-base.js';
12
13
  import styles from './vscode-single-select.styles.js';
13
- import { highlightRanges } from '../includes/vscode-select/helpers.js';
14
14
  /**
15
15
  * Allows to select an item from multiple options.
16
16
  *
@@ -33,58 +33,62 @@ import { highlightRanges } from '../includes/vscode-select/helpers.js';
33
33
  * @prop {boolean} invalid
34
34
  * @attr {boolean} invalid
35
35
  * @attr name - Name which is used as a variable name in the data of the form-container.
36
+ *
36
37
  * @cssprop [--dropdown-z-index=2]
37
- * @cssprop --vscode-badge-background
38
- * @cssprop --vscode-badge-foreground
39
- * @cssprop --vscode-settings-dropdownBorder
40
- * @cssprop --vscode-settings-checkboxBackground
41
- * @cssprop --vscode-settings-dropdownBackground
42
- * @cssprop --vscode-settings-dropdownListBorder
43
- * @cssprop --vscode-focusBorder
44
- * @cssprop --vscode-foreground
45
- * @cssprop --vscode-font-family
46
- * @cssprop --vscode-font-size
47
- * @cssprop --vscode-font-weight
48
- * @cssprop --vscode-list-activeSelectionBackground
49
- * @cssprop --vscode-list-activeSelectionForeground
50
- * @cssprop --vscode-list-focusOutline
51
- * @cssprop --vscode-list-highlightForeground
52
- * @cssprop --vscode-list-focusHighlightForeground
53
- * @cssprop --vscode-list-hoverBackground
54
- * @cssprop --vscode-list-hoverForeground
55
- * @cssprop --vscode-list-hoverBackground
56
- * @cssprop --vscode-settings-textInputBackground
38
+ * @cssprop [--vscode-badge-background=#616161]
39
+ * @cssprop [--vscode-badge-foreground=#f8f8f8]
40
+ * @cssprop [--vscode-settings-dropdownBorder=#3c3c3c]
41
+ * @cssprop [--vscode-settings-checkboxBackground=#313131]
42
+ * @cssprop [--vscode-settings-dropdownBackground=#313131]
43
+ * @cssprop [--vscode-settings-dropdownForeground=#cccccc]
44
+ * @cssprop [--vscode-settings-dropdownListBorder=#454545]
45
+ * @cssprop [--vscode-focusBorder=#0078d4]
46
+ * @cssprop [--vscode-foreground=#cccccc]
47
+ * @cssprop [--vscode-font-family=sans-serif]
48
+ * @cssprop [--vscode-font-size=13px]
49
+ * @cssprop [--vscode-font-weight=normal]
50
+ * @cssprop [--vscode-inputValidation-errorBackground=#5a1d1d]
51
+ * @cssprop [--vscode-inputValidation-errorBorder=#be1100]
52
+ * @cssprop [--vscode-list-activeSelectionBackground=#04395e]
53
+ * @cssprop [--vscode-list-activeSelectionForeground=#ffffff]
54
+ * @cssprop [--vscode-list-focusOutline=#0078d4]
55
+ * @cssprop [--vscode-list-focusHighlightForeground=#2aaaff]
56
+ * @cssprop [--vscode-list-highlightForeground=#2aaaff]
57
+ * @cssprop [--vscode-list-hoverBackground=#2a2d2e]
58
+ * @cssprop [--vscode-list-hoverForeground=#ffffff]
57
59
  */
58
60
  let VscodeSingleSelect = class VscodeSingleSelect extends VscodeSelectBase {
59
61
  set selectedIndex(val) {
60
- this._selectedIndex = val;
61
- this._value = this._options[this._selectedIndex]
62
- ? this._options[this._selectedIndex].value
63
- : '';
62
+ this._opts.selectedIndex = val;
63
+ const op = this._opts.getOptionByIndex(val);
64
+ if (op) {
65
+ this._opts.activeIndex = val;
66
+ this._value = op.value;
67
+ this._internals.setFormValue(this._value);
68
+ this._manageRequired();
69
+ }
70
+ else {
71
+ this._value = '';
72
+ this._internals.setFormValue('');
73
+ this._manageRequired();
74
+ }
64
75
  }
65
76
  get selectedIndex() {
66
- return this._selectedIndex;
77
+ return this._opts.selectedIndex;
67
78
  }
68
79
  set value(val) {
69
- if (this._options[this._selectedIndex]) {
70
- this._options[this._selectedIndex].selected = false;
71
- }
72
- this._selectedIndex = this._options.findIndex((op) => op.value === val);
73
- if (this._selectedIndex > -1) {
74
- this._options[this._selectedIndex].selected = true;
75
- this._value = val;
80
+ this._opts.value = val;
81
+ if (this._opts.selectedIndex > -1) {
76
82
  this._requestedValueToSetLater = '';
77
83
  }
78
84
  else {
79
- this._value = '';
80
85
  this._requestedValueToSetLater = val;
81
86
  }
87
+ this._internals.setFormValue(this._value);
88
+ this._manageRequired();
82
89
  }
83
90
  get value() {
84
- if (this._options[this._selectedIndex]) {
85
- return this._options[this._selectedIndex]?.value ?? '';
86
- }
87
- return '';
91
+ return this._opts.value;
88
92
  }
89
93
  get validity() {
90
94
  return this._internals.validity;
@@ -107,21 +111,21 @@ let VscodeSingleSelect = class VscodeSingleSelect extends VscodeSelectBase {
107
111
  }
108
112
  const input = this.renderRoot.querySelector('.combobox-input');
109
113
  if (input) {
110
- input.value = this._options[this._selectedIndex]
111
- ? this._options[this._selectedIndex].label
112
- : '';
114
+ const selectedOption = this._opts.getSelectedOption();
115
+ input.value = selectedOption?.label ?? '';
113
116
  }
114
117
  }
115
118
  constructor() {
116
119
  super();
117
120
  this.defaultValue = '';
118
- /** @internal */
119
- this.role = 'listbox';
120
121
  this.name = undefined;
121
122
  this.required = false;
123
+ /**
124
+ * This variable was introduced for cases where the value is set before the corresponding option
125
+ * exists. This can happen while a framework like Vue or React is rendering the component.
126
+ */
122
127
  this._requestedValueToSetLater = '';
123
- /** @internal */
124
- this._multiple = false;
128
+ this._opts.multiSelect = false;
125
129
  this._internals = this.attachInternals();
126
130
  }
127
131
  connectedCallback() {
@@ -147,145 +151,199 @@ let VscodeSingleSelect = class VscodeSingleSelect extends VscodeSelectBase {
147
151
  get form() {
148
152
  return this._internals.form;
149
153
  }
154
+ async _createAndSelectSuggestedOption() {
155
+ const nextIndex = this._createSuggestedOption();
156
+ await this.updateComplete;
157
+ this._opts.selectedIndex = nextIndex;
158
+ this._dispatchChangeEvent();
159
+ const opCreateEvent = new CustomEvent('vsc-single-select-create-option', { detail: { value: this._opts.getOptionByIndex(nextIndex)?.value ?? '' } });
160
+ this.dispatchEvent(opCreateEvent);
161
+ this.open = false;
162
+ this._isPlaceholderOptionActive = false;
163
+ }
164
+ _dispatchChangeEvent() {
165
+ /** @deprecated */
166
+ this.dispatchEvent(new CustomEvent('vsc-change', {
167
+ detail: {
168
+ selectedIndex: this._opts.selectedIndex,
169
+ value: this._value,
170
+ },
171
+ }));
172
+ super._dispatchChangeEvent();
173
+ }
174
+ _setStateFromSlottedElements() {
175
+ super._setStateFromSlottedElements();
176
+ if (!this.combobox && this._opts.selectedIndexes.length === 0) {
177
+ this._opts.selectedIndex = this._opts.options.length > 0 ? 0 : -1;
178
+ }
179
+ }
180
+ //#region event handlers
150
181
  _onSlotChange() {
151
182
  super._onSlotChange();
152
183
  if (this._requestedValueToSetLater) {
153
184
  // the value is set before the available options are appended
154
- const foundIndex = this._options.findIndex((op) => op.value === this._requestedValueToSetLater);
155
- if (foundIndex > 0) {
156
- this._selectedIndex = foundIndex;
185
+ const foundOption = this._opts.getOptionByValue(this._requestedValueToSetLater);
186
+ if (foundOption) {
187
+ this._opts.selectedIndex = foundOption.index;
157
188
  this._requestedValueToSetLater = '';
158
189
  }
159
190
  }
160
- if (this._selectedIndex > -1 && this._options.length > 0) {
161
- this._internals.setFormValue(this._options[this._selectedIndex].value);
191
+ if (this._opts.selectedIndex > -1 && this._opts.numOptions > 0) {
192
+ this._internals.setFormValue(this._opts.value);
193
+ this._manageRequired();
162
194
  }
163
195
  else {
164
196
  this._internals.setFormValue(null);
197
+ this._manageRequired();
165
198
  }
166
199
  }
167
- _onArrowUpKeyDown() {
168
- super._onArrowUpKeyDown();
169
- if (this.open || this._selectedIndex <= 0) {
170
- return;
200
+ _onEnterKeyDown(ev) {
201
+ super._onEnterKeyDown(ev);
202
+ let valueChanged = false;
203
+ if (this.combobox) {
204
+ if (this.open) {
205
+ if (this._isPlaceholderOptionActive) {
206
+ this._createAndSelectSuggestedOption();
207
+ }
208
+ else {
209
+ valueChanged = this._opts.activeIndex !== this._opts.selectedIndex;
210
+ this._opts.selectedIndex = this._opts.activeIndex;
211
+ this.open = false;
212
+ }
213
+ }
214
+ else {
215
+ this.open = true;
216
+ this._scrollActiveElementToTop();
217
+ }
171
218
  }
172
- this._filterPattern = '';
173
- this._selectedIndex -= 1;
174
- this._activeIndex = this._selectedIndex;
175
- this._value = this._options[this._selectedIndex].value;
176
- this._internals.setFormValue(this._value);
177
- this._manageRequired();
178
- this._dispatchChangeEvent();
179
- }
180
- _onArrowDownKeyDown() {
181
- super._onArrowDownKeyDown();
182
- if (this.open || this._selectedIndex >= this._options.length - 1) {
183
- return;
219
+ else {
220
+ if (this.open) {
221
+ valueChanged = this._opts.activeIndex !== this._opts.selectedIndex;
222
+ this._opts.selectedIndex = this._opts.activeIndex;
223
+ this.open = false;
224
+ }
225
+ else {
226
+ this.open = true;
227
+ this._scrollActiveElementToTop();
228
+ }
229
+ }
230
+ if (valueChanged) {
231
+ this._dispatchChangeEvent();
232
+ this.updateInputValue();
233
+ this._internals.setFormValue(this._opts.value);
234
+ this._manageRequired();
184
235
  }
185
- this._filterPattern = '';
186
- this._selectedIndex += 1;
187
- this._activeIndex = this._selectedIndex;
188
- this._value = this._options[this._selectedIndex].value;
189
- this._internals.setFormValue(this._value);
190
- this._manageRequired();
191
- this._dispatchChangeEvent();
192
- }
193
- _onEnterKeyDown() {
194
- super._onEnterKeyDown();
195
- this.updateInputValue();
196
- this._internals.setFormValue(this._value);
197
- this._manageRequired();
198
236
  }
199
237
  _onOptionClick(ev) {
238
+ super._onOptionClick(ev);
200
239
  const composedPath = ev.composedPath();
201
- const optEl = composedPath.find((et) => et?.matches('li.option'));
240
+ const optEl = composedPath.find((et) => {
241
+ const el = et;
242
+ if ('matches' in el) {
243
+ return el.matches('li.option');
244
+ }
245
+ return;
246
+ });
202
247
  if (!optEl || optEl.matches('.disabled')) {
203
248
  return;
204
249
  }
205
- this._selectedIndex = Number(optEl.dataset.index);
206
- this._value = this._options[this._selectedIndex].value;
207
- this._toggleDropdown(false);
208
- this._internals.setFormValue(this._value);
209
- this._manageRequired();
210
- this._dispatchChangeEvent();
250
+ const isPlaceholderOption = optEl.classList.contains('placeholder');
251
+ if (isPlaceholderOption) {
252
+ if (this.creatable) {
253
+ this._createAndSelectSuggestedOption();
254
+ }
255
+ }
256
+ else {
257
+ this._opts.selectedIndex = Number(optEl.dataset.index);
258
+ this.open = false;
259
+ this._internals.setFormValue(this._value);
260
+ this._manageRequired();
261
+ this._dispatchChangeEvent();
262
+ }
211
263
  }
264
+ //#endregion
212
265
  _manageRequired() {
213
266
  const { value } = this;
214
267
  if (value === '' && this.required) {
215
- this._internals.setValidity({
216
- valueMissing: true,
217
- }, 'Please select an item in the list.', this._face);
268
+ this._internals.setValidity({ valueMissing: true }, 'Please select an item in the list.', this._face);
218
269
  }
219
270
  else {
220
271
  this._internals.setValidity({});
221
272
  }
222
273
  }
274
+ //#region render functions
223
275
  _renderSelectFace() {
224
- const label = this._options[this._selectedIndex]?.label ?? '';
276
+ const selectedOption = this._opts.getSelectedOption();
277
+ const label = selectedOption?.label ?? '';
278
+ const activeDescendant = this._opts.activeIndex > -1 ? `op-${this._opts.activeIndex}` : '';
225
279
  return html `
226
280
  <div
281
+ aria-activedescendant=${activeDescendant}
282
+ aria-controls="select-listbox"
283
+ aria-expanded=${this.open ? 'true' : 'false'}
284
+ aria-haspopup="listbox"
285
+ aria-label=${ifDefined(this.label)}
227
286
  class="select-face face"
228
287
  @click=${this._onFaceClick}
229
- tabindex=${this.tabIndex > -1 ? 0 : -1}
288
+ role="combobox"
289
+ tabindex="0"
230
290
  >
231
291
  <span class="text">${label}</span> ${chevronDownIcon}
232
292
  </div>
233
293
  `;
234
294
  }
235
295
  _renderComboboxFace() {
236
- const inputVal = this._selectedIndex > -1 ? this._options[this._selectedIndex].label : '';
296
+ let inputVal = '';
297
+ if (this._isBeingFiltered) {
298
+ inputVal = this._opts.filterPattern;
299
+ }
300
+ else {
301
+ const op = this._opts.getSelectedOption();
302
+ inputVal = op?.label ?? '';
303
+ }
304
+ const activeDescendant = this._opts.activeIndex > -1 ? `op-${this._opts.activeIndex}` : '';
305
+ const expanded = this.open ? 'true' : 'false';
237
306
  return html `
238
307
  <div class="combobox-face face">
239
308
  <input
309
+ aria-activedescendant=${activeDescendant}
310
+ aria-autocomplete="list"
311
+ aria-controls="select-listbox"
312
+ aria-expanded=${expanded}
313
+ aria-haspopup="listbox"
314
+ aria-label=${ifDefined(this.label)}
240
315
  class="combobox-input"
316
+ role="combobox"
241
317
  spellcheck="false"
242
318
  type="text"
243
319
  autocomplete="off"
244
320
  .value=${inputVal}
245
321
  @focus=${this._onComboboxInputFocus}
322
+ @blur=${this._onComboboxInputBlur}
246
323
  @input=${this._onComboboxInputInput}
247
324
  @click=${this._onComboboxInputClick}
325
+ @keydown=${this._onComboboxInputSpaceKeyDown}
248
326
  >
249
327
  <button
328
+ aria-label="Open the list of options"
250
329
  class="combobox-button"
251
330
  type="button"
252
331
  @click=${this._onComboboxButtonClick}
253
332
  @keydown=${this._onComboboxButtonKeyDown}
333
+ tabindex="-1"
254
334
  >
255
335
  ${chevronDownIcon}
256
336
  </button>
257
337
  </div>
258
338
  `;
259
339
  }
260
- _renderOptions() {
261
- const list = this.combobox ? this._filteredOptions : this._options;
262
- const options = list.map((op, index) => {
263
- const classes = classMap({
264
- option: true,
265
- disabled: op.disabled,
266
- selected: op.selected,
267
- active: index === this._activeIndex && !op.disabled,
268
- });
269
- return html `
270
- <li
271
- class=${classes}
272
- data-index=${op.index}
273
- data-filtered-index=${index}
274
- >
275
- ${(op.ranges?.length ?? 0 > 0)
276
- ? highlightRanges(op.label, op.ranges ?? [])
277
- : op.label}
278
- </li>
279
- `;
280
- });
340
+ render() {
281
341
  return html `
282
- <ul
283
- class="options"
284
- @mouseover=${this._onOptionMouseOver}
285
- @click=${this._onOptionClick}
286
- >
287
- ${options}
288
- </ul>
342
+ <div class="single-select">
343
+ <slot class="main-slot" @slotchange=${this._onSlotChange}></slot>
344
+ ${this.combobox ? this._renderComboboxFace() : this._renderSelectFace()}
345
+ ${this._renderDropdown()}
346
+ </div>
289
347
  `;
290
348
  }
291
349
  };
@@ -300,9 +358,6 @@ VscodeSingleSelect.formAssociated = true;
300
358
  __decorate([
301
359
  property({ attribute: 'default-value' })
302
360
  ], VscodeSingleSelect.prototype, "defaultValue", void 0);
303
- __decorate([
304
- property({ type: String, attribute: true, reflect: true })
305
- ], VscodeSingleSelect.prototype, "role", void 0);
306
361
  __decorate([
307
362
  property({ reflect: true })
308
363
  ], VscodeSingleSelect.prototype, "name", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"vscode-single-select.js","sourceRoot":"","sources":["../../src/vscode-single-select/vscode-single-select.ts"],"names":[],"mappings":"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","sourcesContent":["import {html, LitElement, TemplateResult} from 'lit';\nimport {customElement, property, query} from 'lit/decorators.js';\nimport {classMap} from 'lit/directives/class-map.js';\nimport {chevronDownIcon} from '../includes/vscode-select/template-elements.js';\nimport {VscodeSelectBase} from '../includes/vscode-select/vscode-select-base.js';\nimport styles from './vscode-single-select.styles.js';\nimport {AssociatedFormControl} from '../includes/AssociatedFormControl.js';\nimport {highlightRanges} from '../includes/vscode-select/helpers.js';\n\n/**\n * Allows to select an item from multiple options.\n *\n * When participating in a form, it supports the `:invalid` pseudo class. Otherwise the error styles\n * can be applied through the `invalid` property.\n *\n * @tag vscode-single-select\n *\n * ## Types\n *\n * ```typescript\n *interface Option {\n * label: string;\n * value: string;\n * description: string;\n * selected: boolean;\n * disabled: boolean;\n *}\n * ```\n * @prop {boolean} invalid\n * @attr {boolean} invalid\n * @attr name - Name which is used as a variable name in the data of the form-container.\n * @cssprop [--dropdown-z-index=2]\n * @cssprop --vscode-badge-background\n * @cssprop --vscode-badge-foreground\n * @cssprop --vscode-settings-dropdownBorder\n * @cssprop --vscode-settings-checkboxBackground\n * @cssprop --vscode-settings-dropdownBackground\n * @cssprop --vscode-settings-dropdownListBorder\n * @cssprop --vscode-focusBorder\n * @cssprop --vscode-foreground\n * @cssprop --vscode-font-family\n * @cssprop --vscode-font-size\n * @cssprop --vscode-font-weight\n * @cssprop --vscode-list-activeSelectionBackground\n * @cssprop --vscode-list-activeSelectionForeground\n * @cssprop --vscode-list-focusOutline\n * @cssprop --vscode-list-highlightForeground\n * @cssprop --vscode-list-focusHighlightForeground\n * @cssprop --vscode-list-hoverBackground\n * @cssprop --vscode-list-hoverForeground\n * @cssprop --vscode-list-hoverBackground\n * @cssprop --vscode-settings-textInputBackground\n */\n@customElement('vscode-single-select')\nexport class VscodeSingleSelect\n extends VscodeSelectBase\n implements AssociatedFormControl\n{\n static override styles = styles;\n\n /** @internal */\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n /** @internal */\n static formAssociated = true;\n\n @property({attribute: 'default-value'})\n defaultValue = '';\n\n /** @internal */\n @property({type: String, attribute: true, reflect: true})\n override role = 'listbox';\n\n @property({reflect: true})\n name: string | undefined = undefined;\n\n @property({type: Number, attribute: 'selected-index'})\n set selectedIndex(val: number) {\n this._selectedIndex = val;\n this._value = this._options[this._selectedIndex]\n ? this._options[this._selectedIndex].value\n : '';\n }\n get selectedIndex(): number {\n return this._selectedIndex;\n }\n\n @property({type: String})\n set value(val: string) {\n if (this._options[this._selectedIndex]) {\n this._options[this._selectedIndex].selected = false;\n }\n\n this._selectedIndex = this._options.findIndex((op) => op.value === val);\n\n if (this._selectedIndex > -1) {\n this._options[this._selectedIndex].selected = true;\n this._value = val;\n this._requestedValueToSetLater = '';\n } else {\n this._value = '';\n this._requestedValueToSetLater = val;\n }\n }\n get value(): string {\n if (this._options[this._selectedIndex]) {\n return this._options[this._selectedIndex]?.value ?? '';\n }\n\n return '';\n }\n\n @property({type: Boolean, reflect: true})\n required = false;\n\n get validity(): ValidityState {\n return this._internals.validity;\n }\n\n get validationMessage(): string {\n return this._internals.validationMessage;\n }\n\n get willValidate() {\n return this._internals.willValidate;\n }\n\n checkValidity(): boolean {\n return this._internals.checkValidity();\n }\n\n reportValidity(): boolean {\n return this._internals.reportValidity();\n }\n\n @query('.face')\n private _face!: HTMLDivElement;\n\n private _internals: ElementInternals;\n\n private updateInputValue() {\n if (!this.combobox) {\n return;\n }\n\n const input = this.renderRoot.querySelector(\n '.combobox-input'\n ) as HTMLInputElement;\n\n if (input) {\n input.value = this._options[this._selectedIndex]\n ? this._options[this._selectedIndex].label\n : '';\n }\n }\n\n constructor() {\n super();\n /** @internal */\n this._multiple = false;\n this._internals = this.attachInternals();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.updateComplete.then(() => {\n this._manageRequired();\n });\n }\n\n /** @internal */\n formResetCallback(): void {\n this.value = this.defaultValue;\n }\n\n /** @internal */\n formStateRestoreCallback(\n state: string,\n _mode: 'restore' | 'autocomplete'\n ): void {\n this.updateComplete.then(() => {\n this.value = state;\n });\n }\n\n /** @internal */\n get type(): 'select-one' {\n return 'select-one';\n }\n\n get form(): HTMLFormElement | null {\n return this._internals.form;\n }\n\n private _requestedValueToSetLater = '';\n\n protected override _onSlotChange(): void {\n super._onSlotChange();\n\n if (this._requestedValueToSetLater) {\n // the value is set before the available options are appended\n const foundIndex = this._options.findIndex(\n (op) => op.value === this._requestedValueToSetLater\n );\n\n if (foundIndex > 0) {\n this._selectedIndex = foundIndex;\n this._requestedValueToSetLater = '';\n }\n }\n\n if (this._selectedIndex > -1 && this._options.length > 0) {\n this._internals.setFormValue(this._options[this._selectedIndex].value);\n } else {\n this._internals.setFormValue(null);\n }\n }\n\n protected override _onArrowUpKeyDown(): void {\n super._onArrowUpKeyDown();\n\n if (this.open || this._selectedIndex <= 0) {\n return;\n }\n\n this._filterPattern = '';\n this._selectedIndex -= 1;\n this._activeIndex = this._selectedIndex;\n this._value = this._options[this._selectedIndex].value;\n this._internals.setFormValue(this._value);\n this._manageRequired();\n this._dispatchChangeEvent();\n }\n\n protected override _onArrowDownKeyDown(): void {\n super._onArrowDownKeyDown();\n\n if (this.open || this._selectedIndex >= this._options.length - 1) {\n return;\n }\n\n this._filterPattern = '';\n this._selectedIndex += 1;\n this._activeIndex = this._selectedIndex;\n this._value = this._options[this._selectedIndex].value;\n this._internals.setFormValue(this._value);\n this._manageRequired();\n this._dispatchChangeEvent();\n }\n\n protected override _onEnterKeyDown(): void {\n super._onEnterKeyDown();\n\n this.updateInputValue();\n this._internals.setFormValue(this._value);\n this._manageRequired();\n }\n\n private _onOptionClick(ev: MouseEvent) {\n const composedPath = ev.composedPath();\n const optEl = composedPath.find((et) =>\n (et as HTMLElement)?.matches('li.option')\n ) as HTMLElement | undefined;\n\n if (!optEl || optEl.matches('.disabled')) {\n return;\n }\n\n this._selectedIndex = Number((optEl as HTMLElement).dataset.index);\n this._value = this._options[this._selectedIndex].value;\n\n this._toggleDropdown(false);\n this._internals.setFormValue(this._value);\n this._manageRequired();\n this._dispatchChangeEvent();\n }\n\n private _manageRequired() {\n const {value} = this;\n if (value === '' && this.required) {\n this._internals.setValidity(\n {\n valueMissing: true,\n },\n 'Please select an item in the list.',\n this._face\n );\n } else {\n this._internals.setValidity({});\n }\n }\n\n protected override _renderSelectFace(): TemplateResult {\n const label = this._options[this._selectedIndex]?.label ?? '';\n\n return html`\n <div\n class=\"select-face face\"\n @click=${this._onFaceClick}\n tabindex=${this.tabIndex > -1 ? 0 : -1}\n >\n <span class=\"text\">${label}</span> ${chevronDownIcon}\n </div>\n `;\n }\n\n protected override _renderComboboxFace(): TemplateResult {\n const inputVal =\n this._selectedIndex > -1 ? this._options[this._selectedIndex].label : '';\n\n return html`\n <div class=\"combobox-face face\">\n <input\n class=\"combobox-input\"\n spellcheck=\"false\"\n type=\"text\"\n autocomplete=\"off\"\n .value=${inputVal}\n @focus=${this._onComboboxInputFocus}\n @input=${this._onComboboxInputInput}\n @click=${this._onComboboxInputClick}\n >\n <button\n class=\"combobox-button\"\n type=\"button\"\n @click=${this._onComboboxButtonClick}\n @keydown=${this._onComboboxButtonKeyDown}\n >\n ${chevronDownIcon}\n </button>\n </div>\n `;\n }\n\n protected override _renderOptions(): TemplateResult {\n const list = this.combobox ? this._filteredOptions : this._options;\n const options = list.map((op, index) => {\n const classes = classMap({\n option: true,\n disabled: op.disabled,\n selected: op.selected,\n active: index === this._activeIndex && !op.disabled,\n });\n\n return html`\n <li\n class=${classes}\n data-index=${op.index}\n data-filtered-index=${index}\n >\n ${(op.ranges?.length ?? 0 > 0)\n ? highlightRanges(op.label, op.ranges ?? [])\n : op.label}\n </li>\n `;\n });\n\n return html`\n <ul\n class=\"options\"\n @mouseover=${this._onOptionMouseOver}\n @click=${this._onOptionClick}\n >\n ${options}\n </ul>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'vscode-single-select': VscodeSingleSelect;\n }\n}\n"]}
1
+ {"version":3,"file":"vscode-single-select.js","sourceRoot":"","sources":["../../src/vscode-single-select/vscode-single-select.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAC,IAAI,EAAE,UAAU,EAAiB,MAAM,KAAK,CAAC;AACrD,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAC,SAAS,EAAC,MAAM,8BAA8B,CAAC;AACvD,OAAO,EAAC,aAAa,EAAC,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAC,eAAe,EAAC,MAAM,gDAAgD,CAAC;AAC/E,OAAO,EAAC,gBAAgB,EAAC,MAAM,iDAAiD,CAAC;AAEjF,OAAO,MAAM,MAAM,kCAAkC,CAAC;AAItD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEI,IAAM,kBAAkB,GAAxB,MAAM,kBACX,SAAQ,gBAAgB;IAqBxB,IAAI,aAAa,CAAC,GAAW;QAC3B,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC;QAE/B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAE5C,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,GAAG,CAAC;YAC7B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC;YACvB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IACD,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;IAClC,CAAC;IAGD,IAAI,KAAK,CAAC,GAAW;QACnB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;QAEvB,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,yBAAyB,GAAG,GAAG,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IACD,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,KAAe,CAAC;IACpC,CAAC;IAKD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;IAC3C,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;IACtC,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;IACzC,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC;IAC1C,CAAC;IAOO,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CACzC,iBAAiB,CACE,CAAC;QAEtB,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;YACtD,KAAK,CAAC,KAAK,GAAG,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IAED;QACE,KAAK,EAAE,CAAC;QAvFV,iBAAY,GAAG,EAAE,CAAC;QAGlB,SAAI,GAAuB,SAAS,CAAC;QAyCrC,aAAQ,GAAG,KAAK,CAAC;QAgFjB;;;WAGG;QACK,8BAAyB,GAAG,EAAE,CAAC;QAxCrC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IAC3C,CAAC;IAEQ,iBAAiB;QACxB,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAE1B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB;IAChB,iBAAiB;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;IACjC,CAAC;IAED,gBAAgB;IAChB,wBAAwB,CACtB,KAAa,EACb,KAAiC;QAEjC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,gBAAgB;IAChB,IAAI,IAAI;QACN,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IAC9B,CAAC;IAQkB,KAAK,CAAC,+BAA+B;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAEhD,MAAM,IAAI,CAAC,cAAc,CAAC;QAE1B,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,MAAM,aAAa,GAAqC,IAAI,WAAW,CACrE,iCAAiC,EACjC,EAAC,MAAM,EAAE,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,KAAK,IAAI,EAAE,EAAC,EAAC,CACvE,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,0BAA0B,GAAG,KAAK,CAAC;IAC1C,CAAC;IAEkB,oBAAoB;QACrC,kBAAkB;QAClB,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,YAAY,EAAE;YAC5B,MAAM,EAAE;gBACN,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa;gBACvC,KAAK,EAAE,IAAI,CAAC,MAAM;aACnB;SACF,CAAC,CACH,CAAC;QAEF,KAAK,CAAC,oBAAoB,EAAE,CAAC;IAC/B,CAAC;IAEkB,4BAA4B;QAC7C,KAAK,CAAC,4BAA4B,EAAE,CAAC;QAErC,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,wBAAwB;IACL,aAAa;QAC9B,KAAK,CAAC,aAAa,EAAE,CAAC;QAEtB,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnC,6DAA6D;YAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAC7C,IAAI,CAAC,yBAAyB,CAC/B,CAAC;YAEF,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC;gBAC7C,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC;YACtC,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC;YACzD,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEkB,eAAe,CAAC,EAAiB;QAClD,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,YAAY,GAAG,KAAK,CAAC;QAEzB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;oBACpC,IAAI,CAAC,+BAA+B,EAAE,CAAC;gBACzC,CAAC;qBAAM,CAAC;oBACN,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;oBACnE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;oBAClD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;gBACpB,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;gBACnE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;gBAClD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACnC,CAAC;QACH,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC;YACzD,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAEkB,cAAc,CAAC,EAAc;QAC9C,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;YACrC,MAAM,EAAE,GAAG,EAAiB,CAAC;YAE7B,IAAI,SAAS,IAAI,EAAE,EAAE,CAAC;gBACpB,OAAO,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACjC,CAAC;YAED,OAAO;QACT,CAAC,CAA4B,CAAC;QAE9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QAED,MAAM,mBAAmB,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAEpE,IAAI,mBAAmB,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,+BAA+B,EAAE,CAAC;YACzC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAE,KAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAExE,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,YAAY;IAEO,eAAe;QAChC,MAAM,EAAC,KAAK,EAAC,GAAG,IAAI,CAAC;QACrB,IAAI,KAAK,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,CAAC,UAAU,CAAC,WAAW,CACzB,EAAC,YAAY,EAAE,IAAI,EAAC,EACpB,oCAAoC,EACpC,IAAI,CAAC,KAAK,CACX,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,0BAA0B;IACP,iBAAiB;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,cAAc,EAAE,KAAK,IAAI,EAAE,CAAC;QAC1C,MAAM,gBAAgB,GACpB,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpE,OAAO,IAAI,CAAA;;gCAEiB,gBAAgB;;wBAExB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;;qBAE/B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;;iBAEzB,IAAI,CAAC,YAAY;;;;6BAIL,KAAK,WAAW,eAAe;;KAEvD,CAAC;IACJ,CAAC;IAEkB,mBAAmB;QACpC,IAAI,QAAQ,GAAG,EAAE,CAAC;QAElB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC1C,QAAQ,GAAG,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC;QAC7B,CAAC;QAED,MAAM,gBAAgB,GACpB,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAE9C,OAAO,IAAI,CAAA;;;kCAGmB,gBAAgB;;;0BAGxB,QAAQ;;uBAEX,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;mBAMzB,QAAQ;mBACR,IAAI,CAAC,qBAAqB;kBAC3B,IAAI,CAAC,oBAAoB;mBACxB,IAAI,CAAC,qBAAqB;mBAC1B,IAAI,CAAC,qBAAqB;qBACxB,IAAI,CAAC,4BAA4B;;;;;;mBAMnC,IAAI,CAAC,sBAAsB;qBACzB,IAAI,CAAC,wBAAwB;;;YAGtC,eAAe;;;KAGtB,CAAC;IACJ,CAAC;IAEQ,MAAM;QACb,OAAO,IAAI,CAAA;;8CAE+B,IAAI,CAAC,aAAa;UACtD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE;UACrE,IAAI,CAAC,eAAe,EAAE;;KAE3B,CAAC;IACJ,CAAC;;AAjXe,yBAAM,GAAG,MAAM,AAAT,CAAU;AAEhC,gBAAgB;AACA,oCAAiB,GAAmB;IAClD,GAAG,UAAU,CAAC,iBAAiB;IAC/B,cAAc,EAAE,IAAI;CACrB,AAHgC,CAG/B;AAEF,gBAAgB;AACT,iCAAc,GAAG,IAAI,AAAP,CAAQ;AAG7B;IADC,QAAQ,CAAC,EAAC,SAAS,EAAE,eAAe,EAAC,CAAC;wDACrB;AAGlB;IADC,QAAQ,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;gDACW;AAGrC;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAC,CAAC;uDAgBrD;AAMD;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;+CAYxB;AAMD;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;oDACxB;AAuBT;IADP,KAAK,CAAC,OAAO,CAAC;iDACgB;AAnFpB,kBAAkB;IAD9B,aAAa,CAAC,sBAAsB,CAAC;GACzB,kBAAkB,CAuX9B","sourcesContent":["import {html, LitElement, TemplateResult} from 'lit';\nimport {property, query} from 'lit/decorators.js';\nimport {ifDefined} from 'lit/directives/if-defined.js';\nimport {customElement} from '../includes/VscElement.js';\nimport {chevronDownIcon} from '../includes/vscode-select/template-elements.js';\nimport {VscodeSelectBase} from '../includes/vscode-select/vscode-select-base.js';\nimport {AssociatedFormControl} from '../includes/AssociatedFormControl.js';\nimport styles from './vscode-single-select.styles.js';\n\nexport type VscSingleSelectCreateOptionEvent = CustomEvent<{value: string}>;\n\n/**\n * Allows to select an item from multiple options.\n *\n * When participating in a form, it supports the `:invalid` pseudo class. Otherwise the error styles\n * can be applied through the `invalid` property.\n *\n * @tag vscode-single-select\n *\n * ## Types\n *\n * ```typescript\n *interface Option {\n * label: string;\n * value: string;\n * description: string;\n * selected: boolean;\n * disabled: boolean;\n *}\n * ```\n * @prop {boolean} invalid\n * @attr {boolean} invalid\n * @attr name - Name which is used as a variable name in the data of the form-container.\n *\n * @cssprop [--dropdown-z-index=2]\n * @cssprop [--vscode-badge-background=#616161]\n * @cssprop [--vscode-badge-foreground=#f8f8f8]\n * @cssprop [--vscode-settings-dropdownBorder=#3c3c3c]\n * @cssprop [--vscode-settings-checkboxBackground=#313131]\n * @cssprop [--vscode-settings-dropdownBackground=#313131]\n * @cssprop [--vscode-settings-dropdownForeground=#cccccc]\n * @cssprop [--vscode-settings-dropdownListBorder=#454545]\n * @cssprop [--vscode-focusBorder=#0078d4]\n * @cssprop [--vscode-foreground=#cccccc]\n * @cssprop [--vscode-font-family=sans-serif]\n * @cssprop [--vscode-font-size=13px]\n * @cssprop [--vscode-font-weight=normal]\n * @cssprop [--vscode-inputValidation-errorBackground=#5a1d1d]\n * @cssprop [--vscode-inputValidation-errorBorder=#be1100]\n * @cssprop [--vscode-list-activeSelectionBackground=#04395e]\n * @cssprop [--vscode-list-activeSelectionForeground=#ffffff]\n * @cssprop [--vscode-list-focusOutline=#0078d4]\n * @cssprop [--vscode-list-focusHighlightForeground=#2aaaff]\n * @cssprop [--vscode-list-highlightForeground=#2aaaff]\n * @cssprop [--vscode-list-hoverBackground=#2a2d2e]\n * @cssprop [--vscode-list-hoverForeground=#ffffff]\n */\n@customElement('vscode-single-select')\nexport class VscodeSingleSelect\n extends VscodeSelectBase\n implements AssociatedFormControl\n{\n static override styles = styles;\n\n /** @internal */\n static override shadowRootOptions: ShadowRootInit = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n\n /** @internal */\n static formAssociated = true;\n\n @property({attribute: 'default-value'})\n defaultValue = '';\n\n @property({reflect: true})\n name: string | undefined = undefined;\n\n @property({type: Number, attribute: 'selected-index'})\n set selectedIndex(val: number) {\n this._opts.selectedIndex = val;\n\n const op = this._opts.getOptionByIndex(val);\n\n if (op) {\n this._opts.activeIndex = val;\n this._value = op.value;\n this._internals.setFormValue(this._value);\n this._manageRequired();\n } else {\n this._value = '';\n this._internals.setFormValue('');\n this._manageRequired();\n }\n }\n get selectedIndex(): number {\n return this._opts.selectedIndex;\n }\n\n @property({type: String})\n set value(val: string) {\n this._opts.value = val;\n\n if (this._opts.selectedIndex > -1) {\n this._requestedValueToSetLater = '';\n } else {\n this._requestedValueToSetLater = val;\n }\n\n this._internals.setFormValue(this._value);\n this._manageRequired();\n }\n get value(): string {\n return this._opts.value as string;\n }\n\n @property({type: Boolean, reflect: true})\n required = false;\n\n get validity(): ValidityState {\n return this._internals.validity;\n }\n\n get validationMessage(): string {\n return this._internals.validationMessage;\n }\n\n get willValidate() {\n return this._internals.willValidate;\n }\n\n checkValidity(): boolean {\n return this._internals.checkValidity();\n }\n\n reportValidity(): boolean {\n return this._internals.reportValidity();\n }\n\n @query('.face')\n private _face!: HTMLDivElement;\n\n private _internals: ElementInternals;\n\n private updateInputValue() {\n if (!this.combobox) {\n return;\n }\n\n const input = this.renderRoot.querySelector(\n '.combobox-input'\n ) as HTMLInputElement;\n\n if (input) {\n const selectedOption = this._opts.getSelectedOption();\n input.value = selectedOption?.label ?? '';\n }\n }\n\n constructor() {\n super();\n this._opts.multiSelect = false;\n this._internals = this.attachInternals();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.updateComplete.then(() => {\n this._manageRequired();\n });\n }\n\n /** @internal */\n formResetCallback(): void {\n this.value = this.defaultValue;\n }\n\n /** @internal */\n formStateRestoreCallback(\n state: string,\n _mode: 'restore' | 'autocomplete'\n ): void {\n this.updateComplete.then(() => {\n this.value = state;\n });\n }\n\n /** @internal */\n get type(): 'select-one' {\n return 'select-one';\n }\n\n get form(): HTMLFormElement | null {\n return this._internals.form;\n }\n\n /**\n * This variable was introduced for cases where the value is set before the corresponding option\n * exists. This can happen while a framework like Vue or React is rendering the component.\n */\n private _requestedValueToSetLater = '';\n\n protected override async _createAndSelectSuggestedOption() {\n const nextIndex = this._createSuggestedOption();\n\n await this.updateComplete;\n\n this._opts.selectedIndex = nextIndex;\n this._dispatchChangeEvent();\n const opCreateEvent: VscSingleSelectCreateOptionEvent = new CustomEvent(\n 'vsc-single-select-create-option',\n {detail: {value: this._opts.getOptionByIndex(nextIndex)?.value ?? ''}}\n );\n this.dispatchEvent(opCreateEvent);\n this.open = false;\n this._isPlaceholderOptionActive = false;\n }\n\n protected override _dispatchChangeEvent(): void {\n /** @deprecated */\n this.dispatchEvent(\n new CustomEvent('vsc-change', {\n detail: {\n selectedIndex: this._opts.selectedIndex,\n value: this._value,\n },\n })\n );\n\n super._dispatchChangeEvent();\n }\n\n protected override _setStateFromSlottedElements(): void {\n super._setStateFromSlottedElements();\n\n if (!this.combobox && this._opts.selectedIndexes.length === 0) {\n this._opts.selectedIndex = this._opts.options.length > 0 ? 0 : -1;\n }\n }\n\n //#region event handlers\n protected override _onSlotChange(): void {\n super._onSlotChange();\n\n if (this._requestedValueToSetLater) {\n // the value is set before the available options are appended\n const foundOption = this._opts.getOptionByValue(\n this._requestedValueToSetLater\n );\n\n if (foundOption) {\n this._opts.selectedIndex = foundOption.index;\n this._requestedValueToSetLater = '';\n }\n }\n\n if (this._opts.selectedIndex > -1 && this._opts.numOptions > 0) {\n this._internals.setFormValue(this._opts.value as string);\n this._manageRequired();\n } else {\n this._internals.setFormValue(null);\n this._manageRequired();\n }\n }\n\n protected override _onEnterKeyDown(ev: KeyboardEvent): void {\n super._onEnterKeyDown(ev);\n let valueChanged = false;\n\n if (this.combobox) {\n if (this.open) {\n if (this._isPlaceholderOptionActive) {\n this._createAndSelectSuggestedOption();\n } else {\n valueChanged = this._opts.activeIndex !== this._opts.selectedIndex;\n this._opts.selectedIndex = this._opts.activeIndex;\n this.open = false;\n }\n } else {\n this.open = true;\n this._scrollActiveElementToTop();\n }\n } else {\n if (this.open) {\n valueChanged = this._opts.activeIndex !== this._opts.selectedIndex;\n this._opts.selectedIndex = this._opts.activeIndex;\n this.open = false;\n } else {\n this.open = true;\n this._scrollActiveElementToTop();\n }\n }\n\n if (valueChanged) {\n this._dispatchChangeEvent();\n this.updateInputValue();\n this._internals.setFormValue(this._opts.value as string);\n this._manageRequired();\n }\n }\n\n protected override _onOptionClick(ev: MouseEvent) {\n super._onOptionClick(ev);\n const composedPath = ev.composedPath();\n const optEl = composedPath.find((et) => {\n const el = et as HTMLElement;\n\n if ('matches' in el) {\n return el.matches('li.option');\n }\n\n return;\n }) as HTMLElement | undefined;\n\n if (!optEl || optEl.matches('.disabled')) {\n return;\n }\n\n const isPlaceholderOption = optEl.classList.contains('placeholder');\n\n if (isPlaceholderOption) {\n if (this.creatable) {\n this._createAndSelectSuggestedOption();\n }\n } else {\n this._opts.selectedIndex = Number((optEl as HTMLElement).dataset.index);\n\n this.open = false;\n this._internals.setFormValue(this._value);\n this._manageRequired();\n this._dispatchChangeEvent();\n }\n }\n //#endregion\n\n protected override _manageRequired() {\n const {value} = this;\n if (value === '' && this.required) {\n this._internals.setValidity(\n {valueMissing: true},\n 'Please select an item in the list.',\n this._face\n );\n } else {\n this._internals.setValidity({});\n }\n }\n\n //#region render functions\n protected override _renderSelectFace(): TemplateResult {\n const selectedOption = this._opts.getSelectedOption();\n const label = selectedOption?.label ?? '';\n const activeDescendant =\n this._opts.activeIndex > -1 ? `op-${this._opts.activeIndex}` : '';\n\n return html`\n <div\n aria-activedescendant=${activeDescendant}\n aria-controls=\"select-listbox\"\n aria-expanded=${this.open ? 'true' : 'false'}\n aria-haspopup=\"listbox\"\n aria-label=${ifDefined(this.label)}\n class=\"select-face face\"\n @click=${this._onFaceClick}\n role=\"combobox\"\n tabindex=\"0\"\n >\n <span class=\"text\">${label}</span> ${chevronDownIcon}\n </div>\n `;\n }\n\n protected override _renderComboboxFace(): TemplateResult {\n let inputVal = '';\n\n if (this._isBeingFiltered) {\n inputVal = this._opts.filterPattern;\n } else {\n const op = this._opts.getSelectedOption();\n inputVal = op?.label ?? '';\n }\n\n const activeDescendant =\n this._opts.activeIndex > -1 ? `op-${this._opts.activeIndex}` : '';\n const expanded = this.open ? 'true' : 'false';\n\n return html`\n <div class=\"combobox-face face\">\n <input\n aria-activedescendant=${activeDescendant}\n aria-autocomplete=\"list\"\n aria-controls=\"select-listbox\"\n aria-expanded=${expanded}\n aria-haspopup=\"listbox\"\n aria-label=${ifDefined(this.label)}\n class=\"combobox-input\"\n role=\"combobox\"\n spellcheck=\"false\"\n type=\"text\"\n autocomplete=\"off\"\n .value=${inputVal}\n @focus=${this._onComboboxInputFocus}\n @blur=${this._onComboboxInputBlur}\n @input=${this._onComboboxInputInput}\n @click=${this._onComboboxInputClick}\n @keydown=${this._onComboboxInputSpaceKeyDown}\n >\n <button\n aria-label=\"Open the list of options\"\n class=\"combobox-button\"\n type=\"button\"\n @click=${this._onComboboxButtonClick}\n @keydown=${this._onComboboxButtonKeyDown}\n tabindex=\"-1\"\n >\n ${chevronDownIcon}\n </button>\n </div>\n `;\n }\n\n override render(): TemplateResult {\n return html`\n <div class=\"single-select\">\n <slot class=\"main-slot\" @slotchange=${this._onSlotChange}></slot>\n ${this.combobox ? this._renderComboboxFace() : this._renderSelectFace()}\n ${this._renderDropdown()}\n </div>\n `;\n }\n //#endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'vscode-single-select': VscodeSingleSelect;\n }\n\n interface GlobalEventHandlersEventMap {\n 'vsc-single-select-create-option': VscSingleSelectCreateOptionEvent;\n }\n}\n"]}
@@ -18,7 +18,9 @@ export type VscSplitLayoutChangeEvent = CustomEvent<{
18
18
  *
19
19
  * @prop {'start' | 'end' | 'none'} fixedPane
20
20
  *
21
- * @cssprop [--hover-border=var(--vscode-sash-hoverBorder)]
21
+ * @cssprop [--separator-border=#454545]
22
+ * @cssprop [--vscode-editorWidget-border=#454545]
23
+ * @cssprop [--vscode-sash-hoverBorder=#0078d4]
22
24
  */
23
25
  export declare class VscodeSplitLayout extends VscElement {
24
26
  static styles: import("lit").CSSResultGroup;