@fluentui/web-components 3.0.0-beta.82 → 3.0.0-beta.84

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 (153) hide show
  1. package/CHANGELOG.md +20 -2
  2. package/dist/dts/accordion-item/accordion-item.base.d.ts +71 -0
  3. package/dist/dts/accordion-item/accordion-item.d.ts +1 -71
  4. package/dist/dts/accordion-item/index.d.ts +2 -1
  5. package/dist/dts/anchor-button/anchor-button.base.d.ts +144 -0
  6. package/dist/dts/anchor-button/anchor-button.d.ts +2 -144
  7. package/dist/dts/anchor-button/index.d.ts +2 -1
  8. package/dist/dts/avatar/avatar.base.d.ts +42 -0
  9. package/dist/dts/avatar/avatar.d.ts +2 -42
  10. package/dist/dts/avatar/index.d.ts +2 -1
  11. package/dist/dts/button/button.base.d.ts +242 -0
  12. package/dist/dts/button/button.d.ts +2 -242
  13. package/dist/dts/button/index.d.ts +2 -1
  14. package/dist/dts/checkbox/checkbox.base.d.ts +288 -0
  15. package/dist/dts/checkbox/checkbox.d.ts +1 -288
  16. package/dist/dts/checkbox/index.d.ts +2 -1
  17. package/dist/dts/divider/divider.base.d.ts +49 -0
  18. package/dist/dts/divider/divider.d.ts +2 -49
  19. package/dist/dts/divider/index.d.ts +2 -1
  20. package/dist/dts/dropdown/dropdown.base.d.ts +418 -0
  21. package/dist/dts/dropdown/dropdown.d.ts +2 -418
  22. package/dist/dts/dropdown/dropdown.options.d.ts +1 -1
  23. package/dist/dts/dropdown/dropdown.template.d.ts +1 -1
  24. package/dist/dts/dropdown/index.d.ts +2 -1
  25. package/dist/dts/field/field.base.d.ts +120 -0
  26. package/dist/dts/field/field.d.ts +2 -120
  27. package/dist/dts/field/index.d.ts +2 -1
  28. package/dist/dts/link/link.d.ts +1 -1
  29. package/dist/dts/listbox/listbox.d.ts +1 -1
  30. package/dist/dts/progress-bar/index.d.ts +2 -1
  31. package/dist/dts/progress-bar/progress-bar.base.d.ts +73 -0
  32. package/dist/dts/progress-bar/progress-bar.d.ts +2 -73
  33. package/dist/dts/radio/radio.d.ts +1 -1
  34. package/dist/dts/rating-display/index.d.ts +2 -1
  35. package/dist/dts/rating-display/rating-display.base.d.ts +89 -0
  36. package/dist/dts/rating-display/rating-display.d.ts +1 -89
  37. package/dist/dts/spinner/index.d.ts +2 -1
  38. package/dist/dts/spinner/spinner.base.d.ts +14 -0
  39. package/dist/dts/spinner/spinner.d.ts +1 -14
  40. package/dist/dts/switch/switch.d.ts +1 -1
  41. package/dist/dts/tablist/index.d.ts +2 -1
  42. package/dist/dts/tablist/tablist.base.d.ts +95 -0
  43. package/dist/dts/tablist/tablist.d.ts +2 -94
  44. package/dist/dts/tabs/tabs.base.d.ts +90 -0
  45. package/dist/dts/tabs/tabs.d.ts +2 -90
  46. package/dist/dts/text-input/index.d.ts +2 -1
  47. package/dist/dts/text-input/text-input.base.d.ts +393 -0
  48. package/dist/dts/text-input/text-input.d.ts +2 -393
  49. package/dist/dts/textarea/index.d.ts +2 -1
  50. package/dist/dts/textarea/textarea.base.d.ts +347 -0
  51. package/dist/dts/textarea/textarea.d.ts +2 -347
  52. package/dist/esm/accordion/accordion.js +1 -1
  53. package/dist/esm/accordion/accordion.js.map +1 -1
  54. package/dist/esm/accordion-item/accordion-item.base.js +94 -0
  55. package/dist/esm/accordion-item/accordion-item.base.js.map +1 -0
  56. package/dist/esm/accordion-item/accordion-item.js +2 -91
  57. package/dist/esm/accordion-item/accordion-item.js.map +1 -1
  58. package/dist/esm/accordion-item/index.js +2 -1
  59. package/dist/esm/accordion-item/index.js.map +1 -1
  60. package/dist/esm/anchor-button/anchor-button.base.js +147 -0
  61. package/dist/esm/anchor-button/anchor-button.base.js.map +1 -0
  62. package/dist/esm/anchor-button/anchor-button.js +3 -145
  63. package/dist/esm/anchor-button/anchor-button.js.map +1 -1
  64. package/dist/esm/anchor-button/index.js +2 -1
  65. package/dist/esm/anchor-button/index.js.map +1 -1
  66. package/dist/esm/avatar/avatar.base.js +28 -0
  67. package/dist/esm/avatar/avatar.base.js.map +1 -0
  68. package/dist/esm/avatar/avatar.js +2 -26
  69. package/dist/esm/avatar/avatar.js.map +1 -1
  70. package/dist/esm/avatar/index.js +2 -1
  71. package/dist/esm/avatar/index.js.map +1 -1
  72. package/dist/esm/button/button.base.js +283 -0
  73. package/dist/esm/button/button.base.js.map +1 -0
  74. package/dist/esm/button/button.js +3 -281
  75. package/dist/esm/button/button.js.map +1 -1
  76. package/dist/esm/button/button.styles.js +2 -1
  77. package/dist/esm/button/button.styles.js.map +1 -1
  78. package/dist/esm/button/index.js +2 -1
  79. package/dist/esm/button/index.js.map +1 -1
  80. package/dist/esm/checkbox/checkbox.base.js +366 -0
  81. package/dist/esm/checkbox/checkbox.base.js.map +1 -0
  82. package/dist/esm/checkbox/checkbox.js +2 -363
  83. package/dist/esm/checkbox/checkbox.js.map +1 -1
  84. package/dist/esm/checkbox/index.js +2 -1
  85. package/dist/esm/checkbox/index.js.map +1 -1
  86. package/dist/esm/divider/divider.base.js +61 -0
  87. package/dist/esm/divider/divider.base.js.map +1 -0
  88. package/dist/esm/divider/divider.js +3 -58
  89. package/dist/esm/divider/divider.js.map +1 -1
  90. package/dist/esm/divider/index.js +2 -1
  91. package/dist/esm/divider/index.js.map +1 -1
  92. package/dist/esm/dropdown/dropdown.base.js +677 -0
  93. package/dist/esm/dropdown/dropdown.base.js.map +1 -0
  94. package/dist/esm/dropdown/dropdown.js +3 -674
  95. package/dist/esm/dropdown/dropdown.js.map +1 -1
  96. package/dist/esm/dropdown/index.js +2 -1
  97. package/dist/esm/dropdown/index.js.map +1 -1
  98. package/dist/esm/field/field.base.js +189 -0
  99. package/dist/esm/field/field.base.js.map +1 -0
  100. package/dist/esm/field/field.js +3 -187
  101. package/dist/esm/field/field.js.map +1 -1
  102. package/dist/esm/field/index.js +2 -1
  103. package/dist/esm/field/index.js.map +1 -1
  104. package/dist/esm/link/link.js +1 -1
  105. package/dist/esm/link/link.js.map +1 -1
  106. package/dist/esm/progress-bar/index.js +2 -1
  107. package/dist/esm/progress-bar/index.js.map +1 -1
  108. package/dist/esm/progress-bar/progress-bar.base.js +90 -0
  109. package/dist/esm/progress-bar/progress-bar.base.js.map +1 -0
  110. package/dist/esm/progress-bar/progress-bar.js +3 -87
  111. package/dist/esm/progress-bar/progress-bar.js.map +1 -1
  112. package/dist/esm/radio/radio.js +1 -1
  113. package/dist/esm/radio/radio.js.map +1 -1
  114. package/dist/esm/rating-display/index.js +2 -1
  115. package/dist/esm/rating-display/index.js.map +1 -1
  116. package/dist/esm/rating-display/rating-display.base.js +94 -0
  117. package/dist/esm/rating-display/rating-display.base.js.map +1 -0
  118. package/dist/esm/rating-display/rating-display.js +2 -92
  119. package/dist/esm/rating-display/rating-display.js.map +1 -1
  120. package/dist/esm/spinner/index.js +2 -1
  121. package/dist/esm/spinner/index.js.map +1 -1
  122. package/dist/esm/spinner/spinner.base.js +18 -0
  123. package/dist/esm/spinner/spinner.base.js.map +1 -0
  124. package/dist/esm/spinner/spinner.js +2 -17
  125. package/dist/esm/spinner/spinner.js.map +1 -1
  126. package/dist/esm/switch/switch.js +1 -1
  127. package/dist/esm/switch/switch.js.map +1 -1
  128. package/dist/esm/tablist/index.js +2 -1
  129. package/dist/esm/tablist/index.js.map +1 -1
  130. package/dist/esm/tablist/tablist.base.js +248 -0
  131. package/dist/esm/tablist/tablist.base.js.map +1 -0
  132. package/dist/esm/tablist/tablist.js +3 -221
  133. package/dist/esm/tablist/tablist.js.map +1 -1
  134. package/dist/esm/tabs/tabs.base.js +279 -0
  135. package/dist/esm/tabs/tabs.base.js.map +1 -0
  136. package/dist/esm/tabs/tabs.js +2 -276
  137. package/dist/esm/tabs/tabs.js.map +1 -1
  138. package/dist/esm/text-input/index.js +2 -1
  139. package/dist/esm/text-input/index.js.map +1 -1
  140. package/dist/esm/text-input/text-input.base.js +409 -0
  141. package/dist/esm/text-input/text-input.base.js.map +1 -0
  142. package/dist/esm/text-input/text-input.js +3 -407
  143. package/dist/esm/text-input/text-input.js.map +1 -1
  144. package/dist/esm/textarea/index.js +2 -1
  145. package/dist/esm/textarea/index.js.map +1 -1
  146. package/dist/esm/textarea/textarea.base.js +494 -0
  147. package/dist/esm/textarea/textarea.base.js.map +1 -0
  148. package/dist/esm/textarea/textarea.js +3 -491
  149. package/dist/esm/textarea/textarea.js.map +1 -1
  150. package/dist/web-components.d.ts +1 -0
  151. package/dist/web-components.js +707 -556
  152. package/dist/web-components.min.js +265 -265
  153. package/package.json +5 -1
@@ -0,0 +1,677 @@
1
+ import { __decorate } from "tslib";
2
+ import { attr, FASTElement, Observable, observable, Updates, volatile } from '@microsoft/fast-element';
3
+ import { isDropdownOption } from '../option/option.options.js';
4
+ import { toggleState } from '../utils/element-internals.js';
5
+ import { getLanguage } from '../utils/language.js';
6
+ import { uniqueId } from '../utils/unique-id.js';
7
+ import { DropdownType } from './dropdown.options.js';
8
+ import { dropdownButtonTemplate, dropdownInputTemplate } from './dropdown.template.js';
9
+ /**
10
+ * A Dropdown Custom HTML Element.
11
+ * Implements the {@link https://w3c.github.io/aria/#combobox | ARIA combobox } role.
12
+ *
13
+ * @remarks
14
+ * The Dropdown element does not provide a form association value. Instead, the slotted Option elements handle form
15
+ * association the same way as {@link (Checkbox:class)} elements. See the {@link (DropdownOption:class)} element for
16
+ * more details.
17
+ *
18
+ * @slot - The default slot. Accepts a {@link (Listbox:class)} element.
19
+ * @slot indicator - The indicator slot.
20
+ * @slot control - The control slot. This slot is automatically populated and should not be manually manipulated.
21
+ *
22
+ * @public
23
+ */
24
+ export class BaseDropdown extends FASTElement {
25
+ /**
26
+ * The ID of the current active descendant.
27
+ *
28
+ * @public
29
+ */
30
+ get activeDescendant() {
31
+ if (this.open) {
32
+ return this.enabledOptions[this.activeIndex]?.id;
33
+ }
34
+ return undefined;
35
+ }
36
+ /**
37
+ * Sets the active index when the active index property changes.
38
+ *
39
+ * @param prev - the previous active index
40
+ * @param next - the current active index
41
+ * @internal
42
+ */
43
+ activeIndexChanged(prev, next) {
44
+ if (typeof next === 'number') {
45
+ const optionIndex = this.matches(':has(:focus-visible)') ? next : -1;
46
+ this.enabledOptions.forEach((option, index) => {
47
+ option.active = index === optionIndex;
48
+ });
49
+ if (this.open) {
50
+ this.enabledOptions[optionIndex]?.scrollIntoView({ block: 'nearest' });
51
+ }
52
+ }
53
+ }
54
+ /**
55
+ * Updates properties on the control element when the control slot changes.
56
+ *
57
+ * @param prev - the previous control element
58
+ * @param next - the current control element
59
+ * @internal
60
+ * @remarks
61
+ * The control element is assigned to the dropdown via the control slot with manual slot assignment.
62
+ */
63
+ controlChanged(prev, next) {
64
+ if (next) {
65
+ next.id = next.id || uniqueId('input-');
66
+ this.controlSlot?.assign(next);
67
+ }
68
+ }
69
+ /**
70
+ * Updates the disabled state of the options when the disabled property changes.
71
+ *
72
+ * @param prev - the previous disabled state
73
+ * @param next - the current disabled state
74
+ */
75
+ disabledChanged(prev, next) {
76
+ Updates.enqueue(() => {
77
+ this.options.forEach(option => {
78
+ option.disabled = option.disabledAttribute || this.disabled;
79
+ });
80
+ });
81
+ }
82
+ /**
83
+ * The display value for the control.
84
+ *
85
+ * @public
86
+ */
87
+ get displayValue() {
88
+ if (!this.$fastController.isConnected || !this.control || (this.isCombobox && this.multiple)) {
89
+ toggleState(this.elementInternals, 'placeholder-shown', false);
90
+ return '';
91
+ }
92
+ this.listFormatter =
93
+ this.listFormatter ??
94
+ new Intl.ListFormat(getLanguage(this), {
95
+ type: 'conjunction',
96
+ style: 'narrow',
97
+ });
98
+ const displayValue = this.listFormatter.format(this.selectedOptions.map(x => x.text));
99
+ toggleState(this.elementInternals, 'placeholder-shown', !displayValue);
100
+ if (this.isCombobox) {
101
+ // comboboxes use an input element for the control, which provides the placeholder behavior
102
+ return displayValue;
103
+ }
104
+ return displayValue || this.placeholder;
105
+ }
106
+ /**
107
+ * Updates properties on the listbox element when the listbox reference changes.
108
+ *
109
+ * @param prev - the previous listbox element
110
+ * @param next - the current listbox element
111
+ * @internal
112
+ *
113
+ * @remarks
114
+ * The listbox element is assigned to the dropdown via the default slot with manual slot assignment.
115
+ */
116
+ listboxChanged(prev, next) {
117
+ if (prev) {
118
+ Observable.getNotifier(this).unsubscribe(prev);
119
+ }
120
+ if (next) {
121
+ next.dropdown = this;
122
+ next.popover = 'manual';
123
+ this.listboxSlot.assign(next);
124
+ const notifier = Observable.getNotifier(this);
125
+ notifier.subscribe(next);
126
+ for (const key of ['disabled', 'multiple']) {
127
+ notifier.notify(key);
128
+ }
129
+ Updates.enqueue(() => {
130
+ this.enabledOptions
131
+ .filter(x => x.defaultSelected)
132
+ .forEach((x, i) => {
133
+ x.selected = this.multiple || i === 0;
134
+ });
135
+ });
136
+ }
137
+ }
138
+ /**
139
+ * Toggles between single and multiple selection modes when the `multiple` property changes.
140
+ *
141
+ * @param prev - the previous multiple state
142
+ * @param next - the next multiple state
143
+ * @internal
144
+ */
145
+ multipleChanged(prev, next) {
146
+ this.elementInternals.ariaMultiSelectable = next ? 'true' : 'false';
147
+ toggleState(this.elementInternals, 'multiple', next);
148
+ this.value = null;
149
+ }
150
+ /**
151
+ * Updates the name of the options when the name property changes.
152
+ *
153
+ * @param prev - the previous name
154
+ * @param next - the current name
155
+ */
156
+ nameChanged(prev, next) {
157
+ Updates.enqueue(() => {
158
+ this.options.forEach(option => {
159
+ option.name = next;
160
+ });
161
+ });
162
+ }
163
+ /**
164
+ * Handles the open state of the dropdown.
165
+ *
166
+ * @param prev - the previous open state
167
+ * @param next - the current open state
168
+ *
169
+ * @internal
170
+ */
171
+ openChanged(prev, next) {
172
+ toggleState(this.elementInternals, 'open', next);
173
+ this.elementInternals.ariaExpanded = next ? 'true' : 'false';
174
+ this.activeIndex = this.selectedIndex ?? -1;
175
+ }
176
+ /**
177
+ * Changes the slotted control element based on the dropdown type.
178
+ *
179
+ * @param prev - the previous dropdown type
180
+ * @param next - the current dropdown type
181
+ * @internal
182
+ */
183
+ typeChanged(prev, next) {
184
+ if (this.$fastController.isConnected) {
185
+ this.insertControl();
186
+ }
187
+ }
188
+ /**
189
+ * The collection of enabled options.
190
+ * @public
191
+ */
192
+ get enabledOptions() {
193
+ return this.listbox?.enabledOptions ?? [];
194
+ }
195
+ /**
196
+ * The form-associated flag.
197
+ * @see {@link https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-face-example | Form-associated custom elements}
198
+ *
199
+ * @public
200
+ */
201
+ static { this.formAssociated = true; }
202
+ /**
203
+ * Resets the form value to its initial value when the form is reset.
204
+ *
205
+ * @internal
206
+ */
207
+ formResetCallback() {
208
+ this.enabledOptions.forEach((x, i) => {
209
+ if (this.multiple) {
210
+ x.selected = !!x.defaultSelected;
211
+ return;
212
+ }
213
+ if (!x.defaultSelected) {
214
+ x.selected = false;
215
+ return;
216
+ }
217
+ this.selectOption(i);
218
+ });
219
+ }
220
+ /**
221
+ * A reference to the first freeform option, if present.
222
+ *
223
+ * @internal
224
+ */
225
+ get freeformOption() {
226
+ return this.enabledOptions.find(x => x.freeform);
227
+ }
228
+ /**
229
+ * Indicates whether the dropdown is a combobox.
230
+ *
231
+ * @internal
232
+ */
233
+ get isCombobox() {
234
+ return this.type === DropdownType.combobox;
235
+ }
236
+ /**
237
+ * The collection of all child options.
238
+ *
239
+ * @public
240
+ */
241
+ get options() {
242
+ return this.listbox?.options ?? [];
243
+ }
244
+ /**
245
+ * The index of the first selected option, scoped to the enabled options.
246
+ *
247
+ * @internal
248
+ * @remarks
249
+ * This property is a reflection of {@link Listbox.selectedIndex}.
250
+ */
251
+ get selectedIndex() {
252
+ return this.enabledOptions.findIndex(x => x.selected) ?? -1;
253
+ }
254
+ /**
255
+ * The collection of selected options.
256
+ *
257
+ * @public
258
+ * @remarks
259
+ * This property is a reflection of {@link Listbox.selectedOptions}.
260
+ */
261
+ get selectedOptions() {
262
+ return this.listbox?.selectedOptions ?? [];
263
+ }
264
+ /**
265
+ * The validation message. Uses the browser's default validation message for native checkboxes if not otherwise
266
+ * specified (e.g., via `setCustomValidity`).
267
+ *
268
+ * @internal
269
+ */
270
+ get validationMessage() {
271
+ if (this.elementInternals.validationMessage) {
272
+ return this.elementInternals.validationMessage;
273
+ }
274
+ if (!this.validationFallbackMessage) {
275
+ const validationMessageFallbackControl = document.createElement('input');
276
+ validationMessageFallbackControl.type = 'radio';
277
+ validationMessageFallbackControl.required = true;
278
+ validationMessageFallbackControl.checked = false;
279
+ this.validationFallbackMessage = validationMessageFallbackControl.validationMessage;
280
+ }
281
+ return this.validationFallbackMessage;
282
+ }
283
+ /**
284
+ * The current value of the selected option.
285
+ *
286
+ * @public
287
+ */
288
+ get value() {
289
+ Observable.notify(this, 'value');
290
+ return this.enabledOptions.find(x => x.selected)?.value ?? null;
291
+ }
292
+ set value(next) {
293
+ if (this.multiple) {
294
+ return;
295
+ }
296
+ this.selectOption(this.enabledOptions.findIndex(x => x.value === next));
297
+ Observable.track(this, 'value');
298
+ }
299
+ /**
300
+ * Handles the change events for the dropdown.
301
+ *
302
+ * @param e - the event object
303
+ *
304
+ * @public
305
+ */
306
+ changeHandler(e) {
307
+ if (this === e.target) {
308
+ return true;
309
+ }
310
+ const optionIndex = this.isCombobox
311
+ ? this.enabledOptions.findIndex(x => x.text === this.control.value)
312
+ : this.enabledOptions.indexOf(e.target);
313
+ this.selectOption(optionIndex, true);
314
+ return true;
315
+ }
316
+ /**
317
+ * Handles the click events for the dropdown.
318
+ *
319
+ * @param e - the event object
320
+ *
321
+ * @public
322
+ */
323
+ clickHandler(e) {
324
+ if (this.disabled) {
325
+ return;
326
+ }
327
+ const target = e.target;
328
+ this.focus();
329
+ if (target === this.control && !this.isCombobox) {
330
+ this.listbox.togglePopover();
331
+ return true;
332
+ }
333
+ if (!this.open) {
334
+ this.listbox.showPopover();
335
+ return true;
336
+ }
337
+ if (isDropdownOption(target)) {
338
+ if (target.disabled) {
339
+ return;
340
+ }
341
+ this.selectOption(this.enabledOptions.indexOf(target), true);
342
+ if (!this.multiple) {
343
+ if (this.isCombobox) {
344
+ this.control.value = target.text;
345
+ this.updateFreeformOption();
346
+ }
347
+ this.listbox.hidePopover();
348
+ }
349
+ }
350
+ return true;
351
+ }
352
+ constructor() {
353
+ super();
354
+ /**
355
+ * The index of the currently active option.
356
+ *
357
+ * @internal
358
+ */
359
+ this.activeIndex = 0;
360
+ /**
361
+ * Sets the listbox ID to a unique value if one is not provided.
362
+ *
363
+ * @override
364
+ * @public
365
+ * @remarks
366
+ * HTML Attribute: `id`
367
+ */
368
+ this.id = uniqueId('dropdown-');
369
+ /**
370
+ * The required state of the dropdown.
371
+ *
372
+ * @public
373
+ * @remarks
374
+ * HTML Attribute: `required`
375
+ */
376
+ this.required = false;
377
+ /**
378
+ * The dropdown type.
379
+ *
380
+ * @public
381
+ * @remarks
382
+ * HTML Attribute: `type`
383
+ */
384
+ this.type = DropdownType.dropdown;
385
+ /**
386
+ * The initial value of the control. When the control is a combobox, this value is used to set the value of the
387
+ * control when the dropdown is initialized.
388
+ *
389
+ * @public
390
+ * @remarks
391
+ * HTML Attribute: `value`
392
+ */
393
+ this.valueAttribute = '';
394
+ /**
395
+ * The internal {@link https://developer.mozilla.org/docs/Web/API/ElementInternals | `ElementInternals`} instance for the component.
396
+ *
397
+ * @internal
398
+ */
399
+ this.elementInternals = this.attachInternals();
400
+ this.elementInternals.role = 'presentation';
401
+ Updates.enqueue(() => {
402
+ this.insertControl();
403
+ });
404
+ }
405
+ /**
406
+ * Filters the options based on the input value.
407
+ *
408
+ * @param value - the input value to filter the options by
409
+ * @param collection - the collection of options to filter
410
+ * @returns the filtered options
411
+ * @internal
412
+ */
413
+ filterOptions(value, collection = this.enabledOptions) {
414
+ if (!this.listCollator) {
415
+ this.listCollator = new Intl.Collator(getLanguage(this), { usage: 'search', sensitivity: 'base' });
416
+ }
417
+ return collection.filter(x => {
418
+ return this.listCollator.compare(x.text.substring(0, Math.min(x.text.length, value.length)), value) === 0;
419
+ });
420
+ }
421
+ /**
422
+ * Focuses the control when the dropdown receives focus.
423
+ *
424
+ * @internal
425
+ */
426
+ focus(options) {
427
+ if (this.disabled) {
428
+ return;
429
+ }
430
+ this.control.focus(options);
431
+ }
432
+ /**
433
+ * Toggles the listbox when the control element loses focus.
434
+ *
435
+ * @param e - the focus event
436
+ * @internal
437
+ */
438
+ focusoutHandler(e) {
439
+ const relatedTarget = e.relatedTarget;
440
+ if (this.open && !this.contains(relatedTarget)) {
441
+ this.listbox.togglePopover();
442
+ }
443
+ return true;
444
+ }
445
+ /**
446
+ * Ensures the active index is within bounds of the enabled options. Out-of-bounds indices are wrapped to the opposite
447
+ * end of the range.
448
+ *
449
+ * @param index - the desired index
450
+ * @param upperBound - the upper bound of the range
451
+ * @returns the index in bounds
452
+ * @internal
453
+ */
454
+ getEnabledIndexInBounds(index, upperBound = this.enabledOptions.length || 0) {
455
+ if (upperBound === 0) {
456
+ return -1;
457
+ }
458
+ return (index + upperBound) % upperBound;
459
+ }
460
+ /**
461
+ * Handles the input events for the dropdown from the control element.
462
+ *
463
+ * @param e - the input event
464
+ * @public
465
+ */
466
+ inputHandler(e) {
467
+ if (!this.open) {
468
+ this.listbox.showPopover();
469
+ }
470
+ this.updateFreeformOption();
471
+ const controlValue = this.control.value;
472
+ const index = this.enabledOptions.indexOf(this.filterOptions(controlValue)[0] ?? null);
473
+ this.activeIndex = index;
474
+ return true;
475
+ }
476
+ /**
477
+ * Inserts the control element based on the dropdown type.
478
+ *
479
+ * @public
480
+ * @remarks
481
+ * This method can be overridden in derived classes to provide custom control elements, though this is not recommended.
482
+ */
483
+ insertControl() {
484
+ this.controlSlot?.assignedNodes().forEach(x => this.removeChild(x));
485
+ if (this.type === DropdownType.combobox) {
486
+ dropdownInputTemplate.render(this, this);
487
+ return;
488
+ }
489
+ dropdownButtonTemplate.render(this, this);
490
+ }
491
+ /**
492
+ * Handles the keydown events for the dropdown.
493
+ *
494
+ * @param e - the keyboard event
495
+ * @public
496
+ */
497
+ keydownHandler(e) {
498
+ let increment = 0;
499
+ switch (e.key) {
500
+ case 'ArrowUp': {
501
+ e.preventDefault();
502
+ increment = -1;
503
+ break;
504
+ }
505
+ case 'ArrowDown': {
506
+ e.preventDefault();
507
+ increment = 1;
508
+ break;
509
+ }
510
+ case ' ': {
511
+ if (this.isCombobox) {
512
+ break;
513
+ }
514
+ e.preventDefault();
515
+ }
516
+ case 'Enter':
517
+ case 'Tab': {
518
+ if (this.open) {
519
+ this.selectOption(this.activeIndex, true);
520
+ if (this.multiple) {
521
+ break;
522
+ }
523
+ this.listbox.hidePopover();
524
+ return e.key === 'Tab';
525
+ }
526
+ this.listbox.showPopover();
527
+ break;
528
+ }
529
+ case 'Escape': {
530
+ this.activeIndex = this.multiple ? 0 : this.selectedIndex;
531
+ this.listbox.hidePopover();
532
+ break;
533
+ }
534
+ }
535
+ if (!increment) {
536
+ return true;
537
+ }
538
+ if (!this.open) {
539
+ this.listbox.showPopover();
540
+ return;
541
+ }
542
+ let nextIndex = this.activeIndex;
543
+ nextIndex += increment;
544
+ let indexInBounds = this.getEnabledIndexInBounds(nextIndex);
545
+ if (indexInBounds === 0 && this.freeformOption?.hidden) {
546
+ indexInBounds = this.getEnabledIndexInBounds(nextIndex + increment);
547
+ }
548
+ this.activeIndex = indexInBounds;
549
+ return true;
550
+ }
551
+ /**
552
+ * Prevents the default behavior of the mousedown event. This is necessary to prevent the input from losing focus
553
+ * when the dropdown is open.
554
+ *
555
+ * @param e - the mouse event
556
+ *
557
+ * @internal
558
+ */
559
+ mousedownHandler(e) {
560
+ if (this.disabled || (e.target === this.control && !this.isCombobox)) {
561
+ return;
562
+ }
563
+ return !isDropdownOption(e.target);
564
+ }
565
+ /**
566
+ * Selects an option by index.
567
+ *
568
+ * @param index - The index of the option to select.
569
+ * @public
570
+ */
571
+ selectOption(index = this.selectedIndex, shouldEmit = false) {
572
+ this.listbox.selectOption(index);
573
+ this.control.value = this.displayValue;
574
+ this.setValidity();
575
+ this.updateFreeformOption();
576
+ if (shouldEmit) {
577
+ this.$emit('change');
578
+ }
579
+ }
580
+ /**
581
+ * Sets the validity of the element.
582
+ *
583
+ * @param flags - Validity flags to set.
584
+ * @param message - Optional message to supply. If not provided, the element's `validationMessage` will be used.
585
+ * @param anchor - Optional anchor to use for the validation message.
586
+ *
587
+ * @internal
588
+ */
589
+ setValidity(flags, message, anchor) {
590
+ if (this.$fastController.isConnected) {
591
+ if (this.disabled || !this.required) {
592
+ this.elementInternals.setValidity({});
593
+ return;
594
+ }
595
+ const valueMissing = this.required && this.listbox.selectedOptions.length === 0;
596
+ this.elementInternals.setValidity({ valueMissing, ...flags }, message ?? this.validationMessage, anchor ?? this.listbox.enabledOptions[0]);
597
+ }
598
+ }
599
+ /**
600
+ * Updates the freeform option with the provided value.
601
+ *
602
+ * @param value - the value to update the freeform option with
603
+ * @internal
604
+ */
605
+ updateFreeformOption(value = this.control.value) {
606
+ if (!this.freeformOption) {
607
+ return;
608
+ }
609
+ if (value === '' ||
610
+ this.filterOptions(value, this.enabledOptions.filter(x => !x.freeform)).length) {
611
+ this.freeformOption.value = '';
612
+ this.freeformOption.selected = false;
613
+ this.freeformOption.hidden = true;
614
+ return;
615
+ }
616
+ this.freeformOption.value = value;
617
+ this.freeformOption.hidden = false;
618
+ }
619
+ }
620
+ __decorate([
621
+ volatile
622
+ ], BaseDropdown.prototype, "activeDescendant", null);
623
+ __decorate([
624
+ observable
625
+ ], BaseDropdown.prototype, "activeIndex", void 0);
626
+ __decorate([
627
+ attr({ attribute: 'aria-labelledby', mode: 'fromView' })
628
+ ], BaseDropdown.prototype, "ariaLabelledBy", void 0);
629
+ __decorate([
630
+ observable
631
+ ], BaseDropdown.prototype, "control", void 0);
632
+ __decorate([
633
+ attr({ mode: 'boolean' })
634
+ ], BaseDropdown.prototype, "disabled", void 0);
635
+ __decorate([
636
+ volatile
637
+ ], BaseDropdown.prototype, "displayValue", null);
638
+ __decorate([
639
+ attr({ attribute: 'id' })
640
+ ], BaseDropdown.prototype, "id", void 0);
641
+ __decorate([
642
+ observable
643
+ ], BaseDropdown.prototype, "indicator", void 0);
644
+ __decorate([
645
+ observable
646
+ ], BaseDropdown.prototype, "indicatorSlot", void 0);
647
+ __decorate([
648
+ attr({ attribute: 'value', mode: 'fromView' })
649
+ ], BaseDropdown.prototype, "initialValue", void 0);
650
+ __decorate([
651
+ observable
652
+ ], BaseDropdown.prototype, "listbox", void 0);
653
+ __decorate([
654
+ observable
655
+ ], BaseDropdown.prototype, "listboxSlot", void 0);
656
+ __decorate([
657
+ attr({ mode: 'boolean' })
658
+ ], BaseDropdown.prototype, "multiple", void 0);
659
+ __decorate([
660
+ attr
661
+ ], BaseDropdown.prototype, "name", void 0);
662
+ __decorate([
663
+ observable
664
+ ], BaseDropdown.prototype, "open", void 0);
665
+ __decorate([
666
+ attr
667
+ ], BaseDropdown.prototype, "placeholder", void 0);
668
+ __decorate([
669
+ attr({ mode: 'boolean' })
670
+ ], BaseDropdown.prototype, "required", void 0);
671
+ __decorate([
672
+ attr
673
+ ], BaseDropdown.prototype, "type", void 0);
674
+ __decorate([
675
+ attr({ attribute: 'value' })
676
+ ], BaseDropdown.prototype, "valueAttribute", void 0);
677
+ //# sourceMappingURL=dropdown.base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown.base.js","sourceRoot":"","sources":["../../../src/dropdown/dropdown.base.ts"],"names":[],"mappings":"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"}