@vscode-elements/elements 1.16.1 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/custom-elements.json +1178 -565
  2. package/dist/bundled.js +731 -638
  3. package/dist/includes/VscElement.d.ts.map +1 -1
  4. package/dist/includes/VscElement.js +3 -1
  5. package/dist/includes/VscElement.js.map +1 -1
  6. package/dist/includes/vscode-select/OptionListController.d.ts +61 -0
  7. package/dist/includes/vscode-select/OptionListController.d.ts.map +1 -0
  8. package/dist/includes/vscode-select/OptionListController.js +373 -0
  9. package/dist/includes/vscode-select/OptionListController.js.map +1 -0
  10. package/dist/includes/vscode-select/helpers.d.ts +2 -2
  11. package/dist/includes/vscode-select/helpers.js.map +1 -1
  12. package/dist/includes/vscode-select/styles.d.ts.map +1 -1
  13. package/dist/includes/vscode-select/styles.js +28 -26
  14. package/dist/includes/vscode-select/styles.js.map +1 -1
  15. package/dist/includes/vscode-select/template-elements.d.ts +1 -0
  16. package/dist/includes/vscode-select/template-elements.d.ts.map +1 -1
  17. package/dist/includes/vscode-select/template-elements.js +14 -1
  18. package/dist/includes/vscode-select/template-elements.js.map +1 -1
  19. package/dist/includes/vscode-select/types.d.ts +11 -7
  20. package/dist/includes/vscode-select/types.d.ts.map +1 -1
  21. package/dist/includes/vscode-select/types.js.map +1 -1
  22. package/dist/includes/vscode-select/vscode-select-base.d.ts +26 -31
  23. package/dist/includes/vscode-select/vscode-select-base.d.ts.map +1 -1
  24. package/dist/includes/vscode-select/vscode-select-base.js +228 -325
  25. package/dist/includes/vscode-select/vscode-select-base.js.map +1 -1
  26. package/dist/vscode-button/vscode-button.styles.js +1 -1
  27. package/dist/vscode-button/vscode-button.styles.js.map +1 -1
  28. package/dist/vscode-button-group/vscode-button-group.styles.d.ts.map +1 -1
  29. package/dist/vscode-button-group/vscode-button-group.styles.js +2 -0
  30. package/dist/vscode-button-group/vscode-button-group.styles.js.map +1 -1
  31. package/dist/vscode-icon/vscode-icon.d.ts.map +1 -1
  32. package/dist/vscode-icon/vscode-icon.js +1 -0
  33. package/dist/vscode-icon/vscode-icon.js.map +1 -1
  34. package/dist/vscode-label/vscode-label.d.ts.map +1 -1
  35. package/dist/vscode-label/vscode-label.js +9 -7
  36. package/dist/vscode-label/vscode-label.js.map +1 -1
  37. package/dist/vscode-multi-select/vscode-multi-select.d.ts +9 -1
  38. package/dist/vscode-multi-select/vscode-multi-select.d.ts.map +1 -1
  39. package/dist/vscode-multi-select/vscode-multi-select.js +126 -66
  40. package/dist/vscode-multi-select/vscode-multi-select.js.map +1 -1
  41. package/dist/vscode-scrollable/vscode-scrollable.d.ts +57 -13
  42. package/dist/vscode-scrollable/vscode-scrollable.d.ts.map +1 -1
  43. package/dist/vscode-scrollable/vscode-scrollable.js +187 -82
  44. package/dist/vscode-scrollable/vscode-scrollable.js.map +1 -1
  45. package/dist/vscode-single-select/vscode-single-select.d.ts +4 -4
  46. package/dist/vscode-single-select/vscode-single-select.d.ts.map +1 -1
  47. package/dist/vscode-single-select/vscode-single-select.js +140 -74
  48. package/dist/vscode-single-select/vscode-single-select.js.map +1 -1
  49. package/package.json +7 -5
  50. package/vscode.css-custom-data.json +1 -5
  51. package/vscode.html-custom-data.json +51 -5
@@ -6,11 +6,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { html, LitElement } from 'lit';
8
8
  import { property, query } from 'lit/decorators.js';
9
+ import { ifDefined } from 'lit/directives/if-defined.js';
9
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 { findNextSelectableOptionIndex, findPrevSelectableOptionIndex, } from '../includes/vscode-select/helpers.js';
14
14
  /**
15
15
  * Allows to select an item from multiple options.
16
16
  *
@@ -59,10 +59,11 @@ import { findNextSelectableOptionIndex, findPrevSelectableOptionIndex, } from '.
59
59
  */
60
60
  let VscodeSingleSelect = class VscodeSingleSelect extends VscodeSelectBase {
61
61
  set selectedIndex(val) {
62
- this._selectedIndex = val;
63
- if (this._options[val]) {
64
- this._activeIndex = val;
65
- this._value = this._options[val].value;
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;
66
67
  this._internals.setFormValue(this._value);
67
68
  this._manageRequired();
68
69
  }
@@ -73,30 +74,21 @@ let VscodeSingleSelect = class VscodeSingleSelect extends VscodeSelectBase {
73
74
  }
74
75
  }
75
76
  get selectedIndex() {
76
- return this._selectedIndex;
77
+ return this._opts.selectedIndex;
77
78
  }
78
79
  set value(val) {
79
- if (this._options[this._selectedIndex]) {
80
- this._options[this._selectedIndex].selected = false;
81
- }
82
- this._selectedIndex = this._options.findIndex((op) => op.value === val);
83
- if (this._selectedIndex > -1) {
84
- this._options[this._selectedIndex].selected = true;
85
- this._value = val;
80
+ this._opts.value = val;
81
+ if (this._opts.selectedIndex > -1) {
86
82
  this._requestedValueToSetLater = '';
87
83
  }
88
84
  else {
89
- this._value = '';
90
85
  this._requestedValueToSetLater = val;
91
86
  }
92
87
  this._internals.setFormValue(this._value);
93
88
  this._manageRequired();
94
89
  }
95
90
  get value() {
96
- if (this._options[this._selectedIndex]) {
97
- return this._options[this._selectedIndex]?.value ?? '';
98
- }
99
- return '';
91
+ return this._opts.value;
100
92
  }
101
93
  get validity() {
102
94
  return this._internals.validity;
@@ -119,16 +111,13 @@ let VscodeSingleSelect = class VscodeSingleSelect extends VscodeSelectBase {
119
111
  }
120
112
  const input = this.renderRoot.querySelector('.combobox-input');
121
113
  if (input) {
122
- input.value = this._options[this._selectedIndex]
123
- ? this._options[this._selectedIndex].label
124
- : '';
114
+ const selectedOption = this._opts.getSelectedOption();
115
+ input.value = selectedOption?.label ?? '';
125
116
  }
126
117
  }
127
118
  constructor() {
128
119
  super();
129
120
  this.defaultValue = '';
130
- /** @internal */
131
- this.role = 'listbox';
132
121
  this.name = undefined;
133
122
  this.required = false;
134
123
  /**
@@ -136,8 +125,7 @@ let VscodeSingleSelect = class VscodeSingleSelect extends VscodeSelectBase {
136
125
  * exists. This can happen while a framework like Vue or React is rendering the component.
137
126
  */
138
127
  this._requestedValueToSetLater = '';
139
- /** @internal */
140
- this._multiple = false;
128
+ this._opts.multiSelect = false;
141
129
  this._internals = this.attachInternals();
142
130
  }
143
131
  connectedCallback() {
@@ -166,25 +154,42 @@ let VscodeSingleSelect = class VscodeSingleSelect extends VscodeSelectBase {
166
154
  async _createAndSelectSuggestedOption() {
167
155
  const nextIndex = this._createSuggestedOption();
168
156
  await this.updateComplete;
169
- this.selectedIndex = nextIndex;
157
+ this._opts.selectedIndex = nextIndex;
170
158
  this._dispatchChangeEvent();
171
- const opCreateEvent = new CustomEvent('vsc-single-select-create-option', { detail: { value: this._options[nextIndex]?.value ?? '' } });
159
+ const opCreateEvent = new CustomEvent('vsc-single-select-create-option', { detail: { value: this._opts.getOptionByIndex(nextIndex)?.value ?? '' } });
172
160
  this.dispatchEvent(opCreateEvent);
173
- this._toggleDropdown(false);
161
+ this.open = false;
174
162
  this._isPlaceholderOptionActive = false;
175
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
176
181
  _onSlotChange() {
177
182
  super._onSlotChange();
178
183
  if (this._requestedValueToSetLater) {
179
184
  // the value is set before the available options are appended
180
- const foundIndex = this._options.findIndex((op) => op.value === this._requestedValueToSetLater);
181
- if (foundIndex > 0) {
182
- this._selectedIndex = foundIndex;
185
+ const foundOption = this._opts.getOptionByValue(this._requestedValueToSetLater);
186
+ if (foundOption) {
187
+ this._opts.selectedIndex = foundOption.index;
183
188
  this._requestedValueToSetLater = '';
184
189
  }
185
190
  }
186
- if (this._selectedIndex > -1 && this._options.length > 0) {
187
- 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);
188
193
  this._manageRequired();
189
194
  }
190
195
  else {
@@ -192,41 +197,42 @@ let VscodeSingleSelect = class VscodeSingleSelect extends VscodeSelectBase {
192
197
  this._manageRequired();
193
198
  }
194
199
  }
195
- _onArrowUpKeyDown() {
196
- super._onArrowUpKeyDown();
197
- if (this.open || this._selectedIndex <= 0) {
198
- return;
199
- }
200
- const options = this.combobox ? this._filteredOptions : this._options;
201
- const prevIndex = findPrevSelectableOptionIndex(options, this._activeIndex);
202
- this._filterPattern = '';
203
- this._selectedIndex = prevIndex;
204
- this._activeIndex = prevIndex;
205
- this._value = prevIndex > -1 ? this._options[prevIndex].value : '';
206
- this._internals.setFormValue(this._value);
207
- this._manageRequired();
208
- this._dispatchChangeEvent();
209
- }
210
- _onArrowDownKeyDown() {
211
- super._onArrowDownKeyDown();
212
- if (this.open || this._selectedIndex >= this._options.length - 1) {
213
- return;
214
- }
215
- const options = this.combobox ? this._filteredOptions : this._options;
216
- const nextIndex = findNextSelectableOptionIndex(options, this._activeIndex);
217
- this._filterPattern = '';
218
- this._selectedIndex = nextIndex;
219
- this._activeIndex = nextIndex;
220
- this._value = nextIndex > -1 ? this._options[nextIndex].value : '';
221
- this._internals.setFormValue(this._value);
222
- this._manageRequired();
223
- this._dispatchChangeEvent();
224
- }
225
200
  _onEnterKeyDown(ev) {
226
201
  super._onEnterKeyDown(ev);
227
- this.updateInputValue();
228
- this._internals.setFormValue(this._value);
229
- this._manageRequired();
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
+ }
218
+ }
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();
235
+ }
230
236
  }
231
237
  _onOptionClick(ev) {
232
238
  super._onOptionClick(ev);
@@ -248,14 +254,14 @@ let VscodeSingleSelect = class VscodeSingleSelect extends VscodeSelectBase {
248
254
  }
249
255
  }
250
256
  else {
251
- this._selectedIndex = Number(optEl.dataset.index);
252
- this._value = this._options[this._selectedIndex].value;
253
- this._toggleDropdown(false);
257
+ this._opts.selectedIndex = Number(optEl.dataset.index);
258
+ this.open = false;
254
259
  this._internals.setFormValue(this._value);
255
260
  this._manageRequired();
256
261
  this._dispatchChangeEvent();
257
262
  }
258
263
  }
264
+ //#endregion
259
265
  _manageRequired() {
260
266
  const { value } = this;
261
267
  if (value === '' && this.required) {
@@ -265,18 +271,81 @@ let VscodeSingleSelect = class VscodeSingleSelect extends VscodeSelectBase {
265
271
  this._internals.setValidity({});
266
272
  }
267
273
  }
274
+ //#region render functions
268
275
  _renderSelectFace() {
269
- 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}` : '';
270
279
  return html `
271
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)}
272
286
  class="select-face face"
273
287
  @click=${this._onFaceClick}
274
- tabindex=${this.tabIndex > -1 ? 0 : -1}
288
+ role="combobox"
289
+ tabindex="0"
275
290
  >
276
291
  <span class="text">${label}</span> ${chevronDownIcon}
277
292
  </div>
278
293
  `;
279
294
  }
295
+ _renderComboboxFace() {
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';
306
+ return html `
307
+ <div class="combobox-face face">
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)}
315
+ class="combobox-input"
316
+ role="combobox"
317
+ spellcheck="false"
318
+ type="text"
319
+ autocomplete="off"
320
+ .value=${inputVal}
321
+ @focus=${this._onComboboxInputFocus}
322
+ @blur=${this._onComboboxInputBlur}
323
+ @input=${this._onComboboxInputInput}
324
+ @click=${this._onComboboxInputClick}
325
+ @keydown=${this._onComboboxInputSpaceKeyDown}
326
+ >
327
+ <button
328
+ aria-label="Open the list of options"
329
+ class="combobox-button"
330
+ type="button"
331
+ @click=${this._onComboboxButtonClick}
332
+ @keydown=${this._onComboboxButtonKeyDown}
333
+ tabindex="-1"
334
+ >
335
+ ${chevronDownIcon}
336
+ </button>
337
+ </div>
338
+ `;
339
+ }
340
+ render() {
341
+ return html `
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>
347
+ `;
348
+ }
280
349
  };
281
350
  VscodeSingleSelect.styles = styles;
282
351
  /** @internal */
@@ -289,9 +358,6 @@ VscodeSingleSelect.formAssociated = true;
289
358
  __decorate([
290
359
  property({ attribute: 'default-value' })
291
360
  ], VscodeSingleSelect.prototype, "defaultValue", void 0);
292
- __decorate([
293
- property({ type: String, attribute: true, reflect: true })
294
- ], VscodeSingleSelect.prototype, "role", void 0);
295
361
  __decorate([
296
362
  property({ reflect: true })
297
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 {property, query} from 'lit/decorators.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 styles from './vscode-single-select.styles.js';\nimport {AssociatedFormControl} from '../includes/AssociatedFormControl.js';\nimport {\n findNextSelectableOptionIndex,\n findPrevSelectableOptionIndex,\n} from '../includes/vscode-select/helpers.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 /** @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\n if (this._options[val]) {\n this._activeIndex = val;\n this._value = this._options[val].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._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 this._internals.setFormValue(this._value);\n this._manageRequired();\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 /**\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.selectedIndex = nextIndex;\n this._dispatchChangeEvent();\n const opCreateEvent: VscSingleSelectCreateOptionEvent = new CustomEvent(\n 'vsc-single-select-create-option',\n {detail: {value: this._options[nextIndex]?.value ?? ''}}\n );\n this.dispatchEvent(opCreateEvent);\n this._toggleDropdown(false);\n this._isPlaceholderOptionActive = false;\n }\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 this._manageRequired();\n } else {\n this._internals.setFormValue(null);\n this._manageRequired();\n }\n }\n\n protected override _onArrowUpKeyDown(): void {\n super._onArrowUpKeyDown();\n\n if (this.open || this._selectedIndex <= 0) {\n return;\n }\n\n const options = this.combobox ? this._filteredOptions : this._options;\n const prevIndex = findPrevSelectableOptionIndex(options, this._activeIndex);\n\n this._filterPattern = '';\n this._selectedIndex = prevIndex;\n this._activeIndex = prevIndex;\n this._value = prevIndex > -1 ? this._options[prevIndex].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 const options = this.combobox ? this._filteredOptions : this._options;\n const nextIndex = findNextSelectableOptionIndex(options, this._activeIndex);\n\n this._filterPattern = '';\n this._selectedIndex = nextIndex;\n this._activeIndex = nextIndex;\n this._value = nextIndex > -1 ? this._options[nextIndex].value : '';\n this._internals.setFormValue(this._value);\n this._manageRequired();\n this._dispatchChangeEvent();\n }\n\n protected override _onEnterKeyDown(ev: KeyboardEvent): void {\n super._onEnterKeyDown(ev);\n\n this.updateInputValue();\n this._internals.setFormValue(this._value);\n this._manageRequired();\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._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\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 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\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"]}
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 {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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vscode-elements/elements",
3
- "version": "1.16.1",
3
+ "version": "1.17.0",
4
4
  "description": "Webcomponents for creating Visual Studio Code extensions",
5
5
  "main": "dist/main.js",
6
6
  "module": "dist/main.js",
@@ -32,7 +32,8 @@
32
32
  "checksize": "npm run build && cat dist/bundled.js | gzip -9 | wc -c",
33
33
  "icons": "node scripts/generateIconList.js",
34
34
  "vscode-data": "wireit",
35
- "ncu": "ncu -u"
35
+ "ncu": "ncu -u",
36
+ "prepare": "npx playwright install chromium --only-shell"
36
37
  },
37
38
  "wireit": {
38
39
  "analyze": {
@@ -163,8 +164,9 @@
163
164
  "chokidar": "^4.0.3",
164
165
  "concurrently": "^9.1.2",
165
166
  "custom-element-vs-code-integration": "^1.5.0",
167
+ "custom-elements-manifest-deprecator": "^1.2.0",
166
168
  "deepmerge": "^4.3.1",
167
- "dotenv": "^16.4.7",
169
+ "dotenv": "^17.0.0",
168
170
  "eslint-plugin-lit": "^2.0.0",
169
171
  "eslint-plugin-wc": "^3.0.0",
170
172
  "mocha": "^11.1.0",
@@ -173,9 +175,9 @@
173
175
  "rimraf": "^6.0.1",
174
176
  "rollup": "^4.39.0",
175
177
  "rollup-plugin-filesize": "^10.0.0",
176
- "rollup-plugin-visualizer": "^5.14.0",
178
+ "rollup-plugin-visualizer": "^6.0.0",
177
179
  "semver": "^7.7.1",
178
- "sinon": "^20.0.0",
180
+ "sinon": "^21.0.0",
179
181
  "ts-lit-plugin": "^2.0.2",
180
182
  "typescript": "^5.8.2",
181
183
  "wireit": "^0.14.11"
@@ -181,11 +181,7 @@
181
181
  { "name": "--vscode-focusBorder", "values": [] },
182
182
  { "name": "--vscode-inputValidation-errorBackground", "values": [] },
183
183
  { "name": "--vscode-inputValidation-errorBorder", "values": [] },
184
- {
185
- "name": "--min-thumb-height",
186
- "description": "Scrollbar thumb minimum height",
187
- "values": []
188
- },
184
+ { "name": "--min-thumb-height", "description": "", "values": [] },
189
185
  { "name": "--vscode-scrollbar-shadow", "values": [] },
190
186
  { "name": "--vscode-scrollbarSlider-background", "values": [] },
191
187
  { "name": "--vscode-scrollbarSlider-hoverBackground", "values": [] },
@@ -281,6 +281,11 @@
281
281
  "description": "Options can be filtered by typing into a text input field.",
282
282
  "values": []
283
283
  },
284
+ {
285
+ "name": "label",
286
+ "description": "Accessible label for screen readers. When a `<vscode-label>` is connected\nto the component, it will be filled automatically.",
287
+ "values": []
288
+ },
284
289
  {
285
290
  "name": "disabled",
286
291
  "description": "The element cannot be used and is not focusable.",
@@ -373,12 +378,48 @@
373
378
  },
374
379
  {
375
380
  "name": "vscode-scrollable",
376
- "description": "\n---\n\n\n### **CSS Properties:**\n - **--min-thumb-height** - Scrollbar thumb minimum height _(default: 20px)_\n- **--vscode-scrollbar-shadow** - undefined _(default: #000000)_\n- **--vscode-scrollbarSlider-background** - undefined _(default: rgba(121, 121, 121, 0.4))_\n- **--vscode-scrollbarSlider-hoverBackground** - undefined _(default: rgba(100, 100, 100, 0.7))_\n- **--vscode-scrollbarSlider-activeBackground** - undefined _(default: rgba(191, 191, 191, 0.4))_",
381
+ "description": "\n---\n\n\n### **CSS Properties:**\n - **--min-thumb-height** - _(default: undefined)_\n- **--vscode-scrollbar-shadow** - undefined _(default: #000000)_\n- **--vscode-scrollbarSlider-background** - undefined _(default: rgba(121, 121, 121, 0.4))_\n- **--vscode-scrollbarSlider-hoverBackground** - undefined _(default: rgba(100, 100, 100, 0.7))_\n- **--vscode-scrollbarSlider-activeBackground** - undefined _(default: rgba(191, 191, 191, 0.4))_",
377
382
  "attributes": [
378
- { "name": "shadow", "values": [] },
379
- { "name": "scrolled", "values": [] },
380
- { "name": "scroll-pos", "values": [] },
381
- { "name": "scroll-max", "values": [] }
383
+ {
384
+ "name": "always-visible",
385
+ "description": "By default, the scrollbar appears only when the cursor hovers over the\ncomponent. With this option, the scrollbar will always be visible.",
386
+ "values": []
387
+ },
388
+ {
389
+ "name": "fast-scroll-sensitivity",
390
+ "description": "Scrolling speed multiplier when pressing `Alt`. This property is designed to use the value of\n`editor.fastScrollSensitivity`, `workbench.list.fastScrollSensitivity` or\n`terminal.integrated.fastScrollSensitivity` depending on the context.",
391
+ "values": []
392
+ },
393
+ {
394
+ "name": "min-thumb-size",
395
+ "description": "This setting defines the scrollbar's minimum size when the component contains a large amount of content.",
396
+ "values": []
397
+ },
398
+ {
399
+ "name": "mouse-wheel-scroll-sensitivity",
400
+ "description": "A multiplier to be used on the `deltaY` of the mouse wheel scroll events. This property is\ndesigned to use the value of `editor.mouseWheelScrollSensitivity`,\n`workbench.list.mouseWheelScrollSensitivity` or\n`terminal.integrated.mouseWheelScrollSensitivity` depending on the context.",
401
+ "values": []
402
+ },
403
+ {
404
+ "name": "shadow",
405
+ "description": "Controls shadow visibility when content overflows.",
406
+ "values": []
407
+ },
408
+ {
409
+ "name": "scrolled",
410
+ "description": "It's true when `scrollPos` greater than 0",
411
+ "values": []
412
+ },
413
+ {
414
+ "name": "scroll-pos",
415
+ "description": "Scroll position.",
416
+ "values": []
417
+ },
418
+ {
419
+ "name": "scroll-max",
420
+ "description": "The maximum amount of the `scrollPos`.",
421
+ "values": []
422
+ }
382
423
  ],
383
424
  "references": []
384
425
  },
@@ -407,6 +448,11 @@
407
448
  "description": "Options can be filtered by typing into a text input field.",
408
449
  "values": []
409
450
  },
451
+ {
452
+ "name": "label",
453
+ "description": "Accessible label for screen readers. When a `<vscode-label>` is connected\nto the component, it will be filled automatically.",
454
+ "values": []
455
+ },
410
456
  {
411
457
  "name": "disabled",
412
458
  "description": "The element cannot be used and is not focusable.",