@fluentui/web-components 2.1.3 → 2.2.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.
@@ -10541,49 +10541,32 @@ var ListboxRole;
10541
10541
  * @public
10542
10542
  */
10543
10543
 
10544
- class Listbox extends FoundationElement {
10544
+ class Listbox$1 extends FoundationElement {
10545
10545
  constructor() {
10546
10546
  super(...arguments);
10547
10547
  /**
10548
- * The index of the selected option
10549
- *
10550
- * @public
10551
- */
10552
-
10553
- this.selectedIndex = -1;
10554
- /**
10555
- * @internal
10556
- */
10557
-
10558
- this.typeaheadBuffer = "";
10559
- /**
10560
- * @internal
10561
- */
10562
-
10563
- this.typeaheadTimeout = -1;
10564
- /**
10565
- * Flag for the typeahead timeout expiration.
10548
+ * The internal unfiltered list of selectable options.
10566
10549
  *
10567
10550
  * @internal
10568
10551
  */
10569
10552
 
10570
- this.typeAheadExpired = true;
10553
+ this._options = [];
10571
10554
  /**
10572
10555
  * The role of the element.
10573
10556
  *
10574
10557
  * @public
10575
10558
  * @remarks
10576
- * HTML Attribute: role
10559
+ * HTML Attribute: `role`
10577
10560
  */
10578
10561
 
10579
10562
  this.role = ListboxRole.listbox;
10580
10563
  /**
10581
- * The internal unfiltered list of selectable options.
10564
+ * The index of the selected option.
10582
10565
  *
10583
- * @internal
10566
+ * @public
10584
10567
  */
10585
10568
 
10586
- this._options = [];
10569
+ this.selectedIndex = -1;
10587
10570
  /**
10588
10571
  * A collection of the selected options.
10589
10572
  *
@@ -10600,66 +10583,52 @@ class Listbox extends FoundationElement {
10600
10583
 
10601
10584
  this.shouldSkipFocus = false;
10602
10585
  /**
10603
- * Move focus to an option whose label matches characters typed by the user.
10604
- * Consecutive keystrokes are batched into a buffer of search text used
10605
- * to match against the set of options. If TYPE_AHEAD_TIMEOUT_MS passes
10606
- * between consecutive keystrokes, the search restarts.
10586
+ * The current typeahead buffer string.
10607
10587
  *
10608
- * @param key - the key to be evaluated
10588
+ * @internal
10609
10589
  */
10610
10590
 
10611
- this.handleTypeAhead = key => {
10612
- if (this.typeaheadTimeout) {
10613
- window.clearTimeout(this.typeaheadTimeout);
10614
- }
10615
-
10616
- this.typeaheadTimeout = window.setTimeout(() => this.typeAheadExpired = true, Listbox.TYPE_AHEAD_TIMEOUT_MS);
10617
-
10618
- if (key.length > 1) {
10619
- return;
10620
- }
10591
+ this.typeaheadBuffer = "";
10592
+ /**
10593
+ * Flag for the typeahead timeout expiration.
10594
+ *
10595
+ * @internal
10596
+ */
10621
10597
 
10622
- this.typeaheadBuffer = `${this.typeAheadExpired ? "" : this.typeaheadBuffer}${key}`;
10623
- };
10624
- }
10598
+ this.typeaheadExpired = true;
10599
+ /**
10600
+ * The timeout ID for the typeahead handler.
10601
+ *
10602
+ * @internal
10603
+ */
10625
10604
 
10626
- selectedIndexChanged(prev, next) {
10627
- this.setSelectedOptions();
10605
+ this.typeaheadTimeout = -1;
10628
10606
  }
10607
+ /**
10608
+ * The first selected option.
10609
+ *
10610
+ * @internal
10611
+ */
10629
10612
 
10630
- typeaheadBufferChanged(prev, next) {
10631
- if (this.$fastController.isConnected) {
10632
- const pattern = this.typeaheadBuffer.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&");
10633
- const re = new RegExp(`^${pattern}`, "gi");
10634
- const filteredOptions = this.options.filter(o => o.text.trim().match(re));
10635
-
10636
- if (filteredOptions.length) {
10637
- const selectedIndex = this.options.indexOf(filteredOptions[0]);
10638
10613
 
10639
- if (selectedIndex > -1) {
10640
- this.selectedIndex = selectedIndex;
10641
- }
10642
- }
10614
+ get firstSelectedOption() {
10615
+ var _a;
10643
10616
 
10644
- this.typeAheadExpired = false;
10645
- }
10617
+ return (_a = this.selectedOptions[0]) !== null && _a !== void 0 ? _a : null;
10646
10618
  }
10619
+ /**
10620
+ * The number of options.
10621
+ *
10622
+ * @public
10623
+ */
10647
10624
 
10648
- slottedOptionsChanged(prev, next) {
10649
- if (this.$fastController.isConnected) {
10650
- this.options = next.reduce((options, item) => {
10651
- if (isListboxOption(item)) {
10652
- options.push(item);
10653
- }
10654
10625
 
10655
- return options;
10656
- }, []);
10657
- this.options.forEach(o => {
10658
- o.id = o.id || uniqueId("option-");
10659
- });
10660
- this.setSelectedOptions();
10661
- this.setDefaultSelectedOption();
10626
+ get length() {
10627
+ if (this.options) {
10628
+ return this.options.length;
10662
10629
  }
10630
+
10631
+ return 0;
10663
10632
  }
10664
10633
  /**
10665
10634
  * The list of options.
@@ -10677,23 +10646,39 @@ class Listbox extends FoundationElement {
10677
10646
  this._options = value;
10678
10647
  Observable.notify(this, "options");
10679
10648
  }
10649
+ /**
10650
+ * Flag for the typeahead timeout expiration.
10651
+ *
10652
+ * @deprecated use `Listbox.typeaheadExpired`
10653
+ * @internal
10654
+ */
10680
10655
 
10681
- selectedOptionsChanged(prev, next) {
10682
- if (this.$fastController.isConnected) {
10683
- this.options.forEach(o => {
10684
- o.selected = next.includes(o);
10685
- });
10686
- }
10656
+
10657
+ get typeAheadExpired() {
10658
+ return this.typeaheadExpired;
10659
+ }
10660
+
10661
+ set typeAheadExpired(value) {
10662
+ this.typeaheadExpired = value;
10687
10663
  }
10688
10664
  /**
10665
+ * Handle click events for listbox options.
10666
+ *
10689
10667
  * @internal
10690
10668
  */
10691
10669
 
10692
10670
 
10693
- get firstSelectedOption() {
10694
- return this.selectedOptions[0];
10671
+ clickHandler(e) {
10672
+ const captured = e.target.closest(`option,[role=option]`);
10673
+
10674
+ if (captured && !captured.disabled) {
10675
+ this.selectedIndex = this.options.indexOf(captured);
10676
+ return true;
10677
+ }
10695
10678
  }
10696
10679
  /**
10680
+ * Focus the first selected option and scroll it into view.
10681
+ *
10697
10682
  * @internal
10698
10683
  */
10699
10684
 
@@ -10709,6 +10694,10 @@ class Listbox extends FoundationElement {
10709
10694
  }
10710
10695
  }
10711
10696
  /**
10697
+ * Handles `focusin` actions for the component. When the component receives focus,
10698
+ * the list of selected options is refreshed and the first selected option is scrolled
10699
+ * into view.
10700
+ *
10712
10701
  * @internal
10713
10702
  */
10714
10703
 
@@ -10721,6 +10710,116 @@ class Listbox extends FoundationElement {
10721
10710
 
10722
10711
  this.shouldSkipFocus = false;
10723
10712
  }
10713
+ /**
10714
+ * Moves focus to an option whose label matches characters typed by the user.
10715
+ * Consecutive keystrokes are batched into a buffer of search text used
10716
+ * to match against the set of options. If `TYPE_AHEAD_TIMEOUT_MS` passes
10717
+ * between consecutive keystrokes, the search restarts.
10718
+ *
10719
+ * @param key - the key to be evaluated
10720
+ */
10721
+
10722
+
10723
+ handleTypeAhead(key) {
10724
+ if (this.typeaheadTimeout) {
10725
+ window.clearTimeout(this.typeaheadTimeout);
10726
+ }
10727
+
10728
+ this.typeaheadTimeout = window.setTimeout(() => this.typeaheadExpired = true, Listbox$1.TYPE_AHEAD_TIMEOUT_MS);
10729
+
10730
+ if (key.length > 1) {
10731
+ return;
10732
+ }
10733
+
10734
+ this.typeaheadBuffer = `${this.typeaheadExpired ? "" : this.typeaheadBuffer}${key}`;
10735
+ }
10736
+ /**
10737
+ * Handles `keydown` actions for listbox navigation and typeahead.
10738
+ *
10739
+ * @internal
10740
+ */
10741
+
10742
+
10743
+ keydownHandler(e) {
10744
+ if (this.disabled) {
10745
+ return true;
10746
+ }
10747
+
10748
+ this.shouldSkipFocus = false;
10749
+ const key = e.key;
10750
+
10751
+ switch (key) {
10752
+ // Select the first available option
10753
+ case keyHome:
10754
+ {
10755
+ if (!e.shiftKey) {
10756
+ e.preventDefault();
10757
+ this.selectFirstOption();
10758
+ }
10759
+
10760
+ break;
10761
+ }
10762
+ // Select the next selectable option
10763
+
10764
+ case keyArrowDown:
10765
+ {
10766
+ if (!e.shiftKey) {
10767
+ e.preventDefault();
10768
+ this.selectNextOption();
10769
+ }
10770
+
10771
+ break;
10772
+ }
10773
+ // Select the previous selectable option
10774
+
10775
+ case keyArrowUp:
10776
+ {
10777
+ if (!e.shiftKey) {
10778
+ e.preventDefault();
10779
+ this.selectPreviousOption();
10780
+ }
10781
+
10782
+ break;
10783
+ }
10784
+ // Select the last available option
10785
+
10786
+ case keyEnd:
10787
+ {
10788
+ e.preventDefault();
10789
+ this.selectLastOption();
10790
+ break;
10791
+ }
10792
+
10793
+ case keyTab:
10794
+ {
10795
+ this.focusAndScrollOptionIntoView();
10796
+ return true;
10797
+ }
10798
+
10799
+ case keyEnter:
10800
+ case keyEscape:
10801
+ {
10802
+ return true;
10803
+ }
10804
+
10805
+ case keySpace:
10806
+ {
10807
+ if (this.typeaheadExpired) {
10808
+ return true;
10809
+ }
10810
+ }
10811
+ // Send key to Typeahead handler
10812
+
10813
+ default:
10814
+ {
10815
+ if (key.length === 1) {
10816
+ this.handleTypeAhead(`${key}`);
10817
+ }
10818
+
10819
+ return true;
10820
+ }
10821
+ }
10822
+ }
10724
10823
  /**
10725
10824
  * Prevents `focusin` events from firing before `click` events when the
10726
10825
  * element is unfocused.
@@ -10734,40 +10833,37 @@ class Listbox extends FoundationElement {
10734
10833
  return true;
10735
10834
  }
10736
10835
  /**
10836
+ * Updates the list of selected options when the `selectedIndex` changes.
10837
+ *
10838
+ * @param prev - the previous selected index value
10839
+ * @param next - the current selected index value
10840
+ *
10737
10841
  * @internal
10738
10842
  */
10739
10843
 
10740
10844
 
10741
- setDefaultSelectedOption() {
10742
- if (this.options && this.$fastController.isConnected) {
10743
- const selectedIndex = this.options.findIndex(el => el.getAttribute("selected") !== null);
10744
-
10745
- if (selectedIndex !== -1) {
10746
- this.selectedIndex = selectedIndex;
10747
- return;
10748
- }
10749
-
10750
- this.selectedIndex = 0;
10751
- }
10845
+ selectedIndexChanged(prev, next) {
10846
+ this.setSelectedOptions();
10752
10847
  }
10753
10848
  /**
10754
- * Sets an option as selected and gives it focus.
10849
+ * Updates the selectedness of each option when the list of selected options changes.
10755
10850
  *
10756
- * @param index - option index to select
10757
- * @public
10851
+ * @param prev - the previous list of selected options
10852
+ * @param next - the current list of selected options
10853
+ *
10854
+ * @internal
10758
10855
  */
10759
10856
 
10760
10857
 
10761
- setSelectedOptions() {
10762
- if (this.$fastController.isConnected && this.options) {
10763
- const selectedOption = this.options[this.selectedIndex] || null;
10764
- this.selectedOptions = this.options.filter(el => el.isSameNode(selectedOption));
10765
- this.ariaActiveDescendant = this.firstSelectedOption ? this.firstSelectedOption.id : "";
10766
- this.focusAndScrollOptionIntoView();
10858
+ selectedOptionsChanged(prev, next) {
10859
+ if (this.$fastController.isConnected) {
10860
+ this.options.forEach(o => {
10861
+ o.selected = next.includes(o);
10862
+ });
10767
10863
  }
10768
10864
  }
10769
10865
  /**
10770
- * Moves focus to the first selectable option
10866
+ * Moves focus to the first selectable option.
10771
10867
  *
10772
10868
  * @public
10773
10869
  */
@@ -10779,7 +10875,7 @@ class Listbox extends FoundationElement {
10779
10875
  }
10780
10876
  }
10781
10877
  /**
10782
- * Moves focus to the last selectable option
10878
+ * Moves focus to the last selectable option.
10783
10879
  *
10784
10880
  * @internal
10785
10881
  */
@@ -10791,7 +10887,7 @@ class Listbox extends FoundationElement {
10791
10887
  }
10792
10888
  }
10793
10889
  /**
10794
- * Moves focus to the next selectable option
10890
+ * Moves focus to the next selectable option.
10795
10891
  *
10796
10892
  * @internal
10797
10893
  */
@@ -10802,16 +10898,8 @@ class Listbox extends FoundationElement {
10802
10898
  this.selectedIndex += 1;
10803
10899
  }
10804
10900
  }
10805
-
10806
- get length() {
10807
- if (this.options) {
10808
- return this.options.length;
10809
- }
10810
-
10811
- return 0;
10812
- }
10813
10901
  /**
10814
- * Moves focus to the previous selectable option
10902
+ * Moves focus to the previous selectable option.
10815
10903
  *
10816
10904
  * @internal
10817
10905
  */
@@ -10823,138 +10911,126 @@ class Listbox extends FoundationElement {
10823
10911
  }
10824
10912
  }
10825
10913
  /**
10826
- * Handles click events for listbox options
10914
+ * Updates the selected index to match the first selected option.
10827
10915
  *
10828
10916
  * @internal
10829
10917
  */
10830
10918
 
10831
10919
 
10832
- clickHandler(e) {
10833
- const captured = e.target.closest(`option,[role=option]`);
10920
+ setDefaultSelectedOption() {
10921
+ if (this.options && this.$fastController.isConnected) {
10922
+ const selectedIndex = this.options.findIndex(el => el.getAttribute("selected") !== null);
10834
10923
 
10835
- if (captured && !captured.disabled) {
10836
- this.selectedIndex = this.options.indexOf(captured);
10837
- return true;
10924
+ if (selectedIndex !== -1) {
10925
+ this.selectedIndex = selectedIndex;
10926
+ return;
10927
+ }
10928
+
10929
+ this.selectedIndex = 0;
10838
10930
  }
10839
10931
  }
10840
10932
  /**
10841
- * Handles keydown actions for listbox navigation and typeahead
10933
+ * Sets the selected option and gives it focus.
10842
10934
  *
10843
- * @internal
10935
+ * @public
10844
10936
  */
10845
10937
 
10846
10938
 
10847
- keydownHandler(e) {
10848
- if (this.disabled) {
10849
- return true;
10850
- }
10851
-
10852
- this.shouldSkipFocus = false;
10853
- const key = e.key;
10854
-
10855
- switch (key) {
10856
- // Select the first available option
10857
- case "Home":
10858
- {
10859
- if (!e.shiftKey) {
10860
- e.preventDefault();
10861
- this.selectFirstOption();
10862
- }
10939
+ setSelectedOptions() {
10940
+ var _a, _b, _c;
10863
10941
 
10864
- break;
10865
- }
10866
- // Select the next selectable option
10942
+ if (this.$fastController.isConnected && this.options) {
10943
+ const selectedOption = (_a = this.options[this.selectedIndex]) !== null && _a !== void 0 ? _a : null;
10944
+ this.selectedOptions = this.options.filter(el => el.isSameNode(selectedOption));
10945
+ this.ariaActiveDescendant = (_c = (_b = this.firstSelectedOption) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : "";
10946
+ this.focusAndScrollOptionIntoView();
10947
+ }
10948
+ }
10949
+ /**
10950
+ * Updates the list of options and resets the selected option when the slotted option content changes.
10951
+ *
10952
+ * @param prev - the previous list of slotted options
10953
+ * @param next - the current list of slotted options
10954
+ *
10955
+ * @internal
10956
+ */
10867
10957
 
10868
- case "ArrowDown":
10869
- {
10870
- if (!e.shiftKey) {
10871
- e.preventDefault();
10872
- this.selectNextOption();
10873
- }
10874
10958
 
10875
- break;
10959
+ slottedOptionsChanged(prev, next) {
10960
+ if (this.$fastController.isConnected) {
10961
+ this.options = next.reduce((options, item) => {
10962
+ if (isListboxOption(item)) {
10963
+ options.push(item);
10876
10964
  }
10877
- // Select the previous selectable option
10878
10965
 
10879
- case "ArrowUp":
10880
- {
10881
- if (!e.shiftKey) {
10882
- e.preventDefault();
10883
- this.selectPreviousOption();
10884
- }
10885
-
10886
- break;
10887
- }
10888
- // Select the last available option
10966
+ return options;
10967
+ }, []);
10968
+ this.options.forEach(o => {
10969
+ o.id = o.id || uniqueId("option-");
10970
+ });
10971
+ this.setSelectedOptions();
10972
+ this.setDefaultSelectedOption();
10973
+ }
10974
+ }
10975
+ /**
10976
+ * Updates the filtered list of options when the typeahead buffer changes.
10977
+ *
10978
+ * @param prev - the previous typeahead buffer value
10979
+ * @param next - the current typeahead buffer value
10980
+ *
10981
+ * @internal
10982
+ */
10889
10983
 
10890
- case "End":
10891
- {
10892
- e.preventDefault();
10893
- this.selectLastOption();
10894
- break;
10895
- }
10896
10984
 
10897
- case "Tab":
10898
- {
10899
- this.focusAndScrollOptionIntoView();
10900
- return true;
10901
- }
10985
+ typeaheadBufferChanged(prev, next) {
10986
+ if (this.$fastController.isConnected) {
10987
+ const pattern = this.typeaheadBuffer.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&");
10988
+ const re = new RegExp(`^${pattern}`, "gi");
10989
+ const filteredOptions = this.options.filter(o => o.text.trim().match(re));
10902
10990
 
10903
- case "Enter":
10904
- case "Escape":
10905
- {
10906
- return true;
10907
- }
10991
+ if (filteredOptions.length) {
10992
+ const selectedIndex = this.options.indexOf(filteredOptions[0]);
10908
10993
 
10909
- case " ":
10910
- {
10911
- if (this.typeAheadExpired) {
10912
- return true;
10913
- }
10994
+ if (selectedIndex > -1) {
10995
+ this.selectedIndex = selectedIndex;
10914
10996
  }
10915
- // Send key to Typeahead handler
10916
-
10917
- default:
10918
- {
10919
- if (key.length === 1) {
10920
- this.handleTypeAhead(`${key}`);
10921
- }
10997
+ }
10922
10998
 
10923
- return true;
10924
- }
10999
+ this.typeaheadExpired = false;
10925
11000
  }
10926
11001
  }
10927
11002
 
10928
11003
  }
10929
11004
  /**
10930
- * Typeahead timeout in milliseconds.
11005
+ * A static filter to include only selectable options.
10931
11006
  *
10932
- * @internal
11007
+ * @param n - element to filter
11008
+ * @public
10933
11009
  */
10934
11010
 
10935
- Listbox.TYPE_AHEAD_TIMEOUT_MS = 1000;
11011
+ Listbox$1.slottedOptionFilter = n => isListboxOption(n) && !n.disabled && !n.hidden;
10936
11012
  /**
10937
- * A static filter to include only enabled elements
11013
+ * Typeahead timeout in milliseconds.
10938
11014
  *
10939
- * @param n - element to filter
10940
- * @public
11015
+ * @internal
10941
11016
  */
10942
11017
 
10943
- Listbox.slottedOptionFilter = n => isListboxOption(n) && !n.disabled && !n.hidden;
10944
-
10945
- __decorate$1([observable], Listbox.prototype, "selectedIndex", void 0);
10946
11018
 
10947
- __decorate$1([observable], Listbox.prototype, "typeaheadBuffer", void 0);
10948
-
10949
- __decorate$1([attr], Listbox.prototype, "role", void 0);
11019
+ Listbox$1.TYPE_AHEAD_TIMEOUT_MS = 1000;
10950
11020
 
10951
11021
  __decorate$1([attr({
10952
11022
  mode: "boolean"
10953
- })], Listbox.prototype, "disabled", void 0);
11023
+ })], Listbox$1.prototype, "disabled", void 0);
11024
+
11025
+ __decorate$1([attr], Listbox$1.prototype, "role", void 0);
11026
+
11027
+ __decorate$1([observable], Listbox$1.prototype, "selectedIndex", void 0);
10954
11028
 
10955
- __decorate$1([observable], Listbox.prototype, "slottedOptions", void 0);
11029
+ __decorate$1([observable], Listbox$1.prototype, "selectedOptions", void 0);
10956
11030
 
10957
- __decorate$1([observable], Listbox.prototype, "selectedOptions", void 0);
11031
+ __decorate$1([observable], Listbox$1.prototype, "slottedOptions", void 0);
11032
+
11033
+ __decorate$1([observable], Listbox$1.prototype, "typeaheadBuffer", void 0);
10958
11034
  /**
10959
11035
  * Includes ARIA states and properties relating to the ARIA listbox role
10960
11036
  *
@@ -10982,9 +11058,9 @@ __decorate$1([observable], DelegatesARIAListbox.prototype, "ariaDisabled", void
10982
11058
  __decorate$1([observable], DelegatesARIAListbox.prototype, "ariaExpanded", void 0);
10983
11059
 
10984
11060
  applyMixins(DelegatesARIAListbox, ARIAGlobalStatesAndProperties);
10985
- applyMixins(Listbox, DelegatesARIAListbox);
11061
+ applyMixins(Listbox$1, DelegatesARIAListbox);
10986
11062
 
10987
- class _Combobox extends Listbox {}
11063
+ class _Combobox extends Listbox$1 {}
10988
11064
  /**
10989
11065
  * A form-associated base class for the {@link (Combobox:class)} component.
10990
11066
  *
@@ -11212,12 +11288,13 @@ class Combobox$1 extends FormAssociatedCombobox {
11212
11288
 
11213
11289
  this.selectedOptions = [captured];
11214
11290
  this.control.value = captured.text;
11291
+ this.updateValue(true);
11215
11292
  }
11216
11293
 
11217
11294
  this.open = !this.open;
11218
11295
 
11219
- if (!this.open) {
11220
- this.updateValue(true);
11296
+ if (this.open) {
11297
+ this.control.focus();
11221
11298
  }
11222
11299
 
11223
11300
  return true;
@@ -11273,6 +11350,28 @@ class Combobox$1 extends FormAssociatedCombobox {
11273
11350
  });
11274
11351
  }
11275
11352
  }
11353
+ /**
11354
+ * Focus the control and scroll the first selected option into view.
11355
+ *
11356
+ * @internal
11357
+ * @remarks
11358
+ * Overrides: `Listbox.focusAndScrollOptionIntoView`
11359
+ */
11360
+
11361
+
11362
+ focusAndScrollOptionIntoView() {
11363
+ if (this.contains(document.activeElement)) {
11364
+ this.control.focus();
11365
+
11366
+ if (this.firstSelectedOption) {
11367
+ requestAnimationFrame(() => {
11368
+ this.firstSelectedOption.scrollIntoView({
11369
+ block: "nearest"
11370
+ });
11371
+ });
11372
+ }
11373
+ }
11374
+ }
11276
11375
  /**
11277
11376
  * Handle focus state when the element or its children lose focus.
11278
11377
  *
@@ -11620,7 +11719,7 @@ applyMixins(Combobox$1, StartEnd, DelegatesARIACombobox);
11620
11719
  */
11621
11720
 
11622
11721
  const comboboxTemplate = (context, definition) => html`<template autocomplete="${x => x.autocomplete}" class="${x => x.disabled ? "disabled" : ""} ${x => x.position}" tabindex="${x => !x.disabled ? "0" : null}" aria-disabled="${x => x.ariaDisabled}" aria-autocomplete="${x => x.autocomplete}" @click="${(x, c) => x.clickHandler(c.event)}" @focusout="${(x, c) => x.focusoutHandler(c.event)}"><div class="control" part="control">${startSlotTemplate(context, definition)}<slot name="control"><input class="selected-value" part="selected-value" placeholder="${x => x.placeholder}" role="${x => x.role}" type="text" aria-activedescendant="${x => x.open ? x.ariaActiveDescendant : null}" aria-controls="${x => x.listboxId}" aria-expanded="${x => x.ariaExpanded}" aria-haspopup="listbox" ?disabled="${x => x.disabled}" :value="${x => x.value}" @input="${(x, c) => x.inputHandler(c.event)}" @keydown="${(x, c) => x.keydownHandler(c.event)}" @keyup="${(x, c) => x.keyupHandler(c.event)}" ${ref("control")} /><div class="indicator" part="indicator" aria-hidden="true"><slot name="indicator">${definition.indicator || ""}</slot></div></slot>${endSlotTemplate(context, definition)}</div><div aria-disabled="${x => x.disabled}" class="listbox" id="${x => x.listboxId}" part="listbox" role="listbox" ?disabled="${x => x.disabled}" ?hidden="${x => !x.open}" ${ref("listbox")}><slot ${slotted({
11623
- filter: Listbox.slottedOptionFilter,
11722
+ filter: Listbox$1.slottedOptionFilter,
11624
11723
  flatten: true,
11625
11724
  property: "slottedOptions"
11626
11725
  })}></slot></div></template>`;
@@ -13859,13 +13958,59 @@ __decorate$1([attr], Flipper.prototype, "direction", void 0);
13859
13958
 
13860
13959
  const listboxOptionTemplate = (context, definition) => html`<template aria-selected="${x => x.selected}" class="${x => x.selected ? "selected" : ""} ${x => x.disabled ? "disabled" : ""}" role="option">${startSlotTemplate(context, definition)}<span class="content" part="content"><slot></slot></span>${endSlotTemplate(context, definition)}</template>`;
13861
13960
 
13961
+ /**
13962
+ * A Listbox Custom HTML Element.
13963
+ * Implements the {@link https://w3c.github.io/aria/#listbox | ARIA listbox }.
13964
+ *
13965
+ * @public
13966
+ */
13967
+
13968
+ class ListboxElement extends Listbox$1 {
13969
+ /**
13970
+ * Prevents `focusin` events from firing before `click` events when the
13971
+ * element is unfocused.
13972
+ *
13973
+ * @override
13974
+ * @internal
13975
+ */
13976
+ mousedownHandler(e) {
13977
+ if (e.offsetX >= 0 && e.offsetX <= this.scrollWidth) {
13978
+ return super.mousedownHandler(e);
13979
+ }
13980
+ }
13981
+ /**
13982
+ * Ensures the size is a positive integer when the property is updated.
13983
+ *
13984
+ * @param prev - the previous size value
13985
+ * @param next - the current size value
13986
+ *
13987
+ * @internal
13988
+ */
13989
+
13990
+
13991
+ sizeChanged(prev, next) {
13992
+ const size = Math.max(0, parseInt(next.toFixed(), 10));
13993
+
13994
+ if (size !== next) {
13995
+ DOM.queueUpdate(() => {
13996
+ this.size = size;
13997
+ });
13998
+ }
13999
+ }
14000
+
14001
+ }
14002
+
14003
+ __decorate$1([attr({
14004
+ converter: nullableNumberConverter
14005
+ })], ListboxElement.prototype, "size", void 0);
14006
+
13862
14007
  /**
13863
14008
  * The template for the {@link @microsoft/fast-foundation#(Listbox:class)} component.
13864
14009
  * @public
13865
14010
  */
13866
14011
 
13867
14012
  const listboxTemplate = (context, definition) => html`<template aria-activedescendant="${x => x.ariaActiveDescendant}" class="listbox" role="${x => x.role}" tabindex="${x => !x.disabled ? "0" : null}" @click="${(x, c) => x.clickHandler(c.event)}" @focusin="${(x, c) => x.focusinHandler(c.event)}" @keydown="${(x, c) => x.keydownHandler(c.event)}" @mousedown="${(x, c) => x.mousedownHandler(c.event)}"><slot ${slotted({
13868
- filter: Listbox.slottedOptionFilter,
14013
+ filter: ListboxElement.slottedOptionFilter,
13869
14014
  flatten: true,
13870
14015
  property: "slottedOptions"
13871
14016
  })}></slot></template>`;
@@ -14049,7 +14194,6 @@ class MenuItem extends FoundationElement {
14049
14194
  switch (this.role) {
14050
14195
  case MenuItemRole.menuitemcheckbox:
14051
14196
  this.checked = !this.checked;
14052
- this.$emit("change");
14053
14197
  break;
14054
14198
 
14055
14199
  case MenuItemRole.menuitem:
@@ -14786,62 +14930,108 @@ class NumberField$1 extends FormAssociatedNumberField {
14786
14930
  */
14787
14931
 
14788
14932
  this.step = 1;
14933
+ /**
14934
+ * Flag to indicate that the value change is from the user input
14935
+ * @internal
14936
+ */
14937
+
14938
+ this.isUserInput = false;
14789
14939
  }
14940
+ /**
14941
+ * Ensures that the max is greater than the min and that the value
14942
+ * is less than the max
14943
+ * @param previous - the previous max value
14944
+ * @param next - updated max value
14945
+ *
14946
+ * @internal
14947
+ */
14790
14948
 
14791
- maxChanged(previousValue, nextValue) {
14949
+
14950
+ maxChanged(previous, next) {
14792
14951
  var _a;
14793
14952
 
14794
- this.max = Math.max(nextValue, (_a = this.min) !== null && _a !== void 0 ? _a : nextValue);
14953
+ this.max = Math.max(next, (_a = this.min) !== null && _a !== void 0 ? _a : next);
14795
14954
  const min = Math.min(this.min, this.max);
14796
14955
 
14797
14956
  if (this.min !== undefined && this.min !== min) {
14798
14957
  this.min = min;
14799
14958
  }
14800
14959
 
14801
- this.valueChanged(this.value, this.value);
14960
+ this.value = this.getValidValue(this.value);
14802
14961
  }
14962
+ /**
14963
+ * Ensures that the min is less than the max and that the value
14964
+ * is greater than the min
14965
+ * @param previous - previous min value
14966
+ * @param next - updated min value
14967
+ *
14968
+ * @internal
14969
+ */
14970
+
14803
14971
 
14804
- minChanged(previousValue, nextValue) {
14972
+ minChanged(previous, next) {
14805
14973
  var _a;
14806
14974
 
14807
- this.min = Math.min(nextValue, (_a = this.max) !== null && _a !== void 0 ? _a : nextValue);
14975
+ this.min = Math.min(next, (_a = this.max) !== null && _a !== void 0 ? _a : next);
14808
14976
  const max = Math.max(this.min, this.max);
14809
14977
 
14810
14978
  if (this.max !== undefined && this.max !== max) {
14811
14979
  this.max = max;
14812
14980
  }
14813
14981
 
14814
- this.valueChanged(this.value, this.value);
14982
+ this.value = this.getValidValue(this.value);
14815
14983
  }
14816
14984
  /**
14817
- *
14818
- * @param previousValue - previous stored value
14819
- * @param nextValue - value being updated
14985
+ * Validates that the value is a number between the min and max
14986
+ * @param previous - previous stored value
14987
+ * @param next - value being updated
14988
+ * @param updateControl - should the text field be updated with value, defaults to true
14989
+ * @internal
14820
14990
  */
14821
14991
 
14822
14992
 
14823
- valueChanged(previousValue, nextValue) {
14824
- var _a, _b;
14825
-
14826
- let value = parseFloat(nextValue);
14993
+ valueChanged(previous, next) {
14994
+ this.value = this.getValidValue(next);
14827
14995
 
14828
- if (isNaN(value)) {
14829
- value = "";
14830
- } else {
14831
- value = Math.min(value, (_a = this.max) !== null && _a !== void 0 ? _a : value);
14832
- value = Math.max(value, (_b = this.min) !== null && _b !== void 0 ? _b : value);
14996
+ if (next !== this.value) {
14997
+ return;
14833
14998
  }
14834
14999
 
14835
- this.value = value.toString();
14836
-
14837
- if (this.proxy instanceof HTMLInputElement) {
14838
- this.proxy.value = this.value;
15000
+ if (this.control && !this.isUserInput) {
15001
+ this.control.value = this.value;
14839
15002
  }
14840
15003
 
14841
- if (previousValue !== undefined) {
15004
+ super.valueChanged(previous, this.value);
15005
+
15006
+ if (previous !== undefined && !this.isUserInput) {
14842
15007
  this.$emit("input");
14843
15008
  this.$emit("change");
14844
15009
  }
15010
+
15011
+ this.isUserInput = false;
15012
+ }
15013
+ /**
15014
+ * Sets the internal value to a valid number between the min and max properties
15015
+ * @param value - user input
15016
+ * @param updateControl - should the text field update to the valid value
15017
+ *
15018
+ * @internal
15019
+ */
15020
+
15021
+
15022
+ getValidValue(value) {
15023
+ var _a, _b;
15024
+
15025
+ let validValue = parseFloat(parseFloat(value).toPrecision(12));
15026
+
15027
+ if (isNaN(validValue)) {
15028
+ validValue = "";
15029
+ } else {
15030
+ validValue = Math.min(validValue, (_a = this.max) !== null && _a !== void 0 ? _a : validValue);
15031
+ validValue = Math.max(validValue, (_b = this.min) !== null && _b !== void 0 ? _b : validValue).toString();
15032
+ }
15033
+
15034
+ return validValue;
14845
15035
  }
14846
15036
  /**
14847
15037
  * Increments the value using the step value
@@ -14854,7 +15044,6 @@ class NumberField$1 extends FormAssociatedNumberField {
14854
15044
  const value = parseFloat(this.value);
14855
15045
  const stepUpValue = !isNaN(value) ? value + this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? this.step : 0;
14856
15046
  this.value = stepUpValue.toString();
14857
- this.control.value = this.value;
14858
15047
  }
14859
15048
  /**
14860
15049
  * Decrements the value using the step value
@@ -14867,9 +15056,9 @@ class NumberField$1 extends FormAssociatedNumberField {
14867
15056
  const value = parseFloat(this.value);
14868
15057
  const stepDownValue = !isNaN(value) ? value - this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? 0 - this.step : 0;
14869
15058
  this.value = stepDownValue.toString();
14870
- this.control.value = this.value;
14871
15059
  }
14872
15060
  /**
15061
+ * Sets up the initial state of the number field
14873
15062
  * @internal
14874
15063
  */
14875
15064
 
@@ -14894,6 +15083,7 @@ class NumberField$1 extends FormAssociatedNumberField {
14894
15083
 
14895
15084
  handleTextInput() {
14896
15085
  this.control.value = this.control.value.replace(/[^0-9\-+e.]/g, "");
15086
+ this.isUserInput = true;
14897
15087
  this.value = this.control.value;
14898
15088
  }
14899
15089
  /**
@@ -15763,7 +15953,7 @@ class HorizontalScroll$1 extends FoundationElement {
15763
15953
 
15764
15954
  scrollItemsChanged(previous, next) {
15765
15955
  if (next && !this.updatingItems) {
15766
- this.setStops();
15956
+ DOM.queueUpdate(() => this.setStops());
15767
15957
  }
15768
15958
  }
15769
15959
  /**
@@ -16048,7 +16238,184 @@ const horizontalScrollTemplate = (context, definition) => {
16048
16238
  })}></slot></div></div>${when(x => x.view !== "mobile", html`<div class="scroll scroll-prev" part="scroll-prev" ${ref("previousFlipperContainer")}><div class="scroll-action" part="scroll-action-previous"><slot name="previous-flipper">${definition.previousFlipper instanceof Function ? definition.previousFlipper(context, definition) : (_a = definition.previousFlipper) !== null && _a !== void 0 ? _a : ""}</slot></div></div><div class="scroll scroll-next" part="scroll-next" ${ref("nextFlipperContainer")}><div class="scroll-action" part="scroll-action-next"><slot name="next-flipper">${definition.nextFlipper instanceof Function ? definition.nextFlipper(context, definition) : (_b = definition.nextFlipper) !== null && _b !== void 0 ? _b : ""}</slot></div></div>`)}</div>${endSlotTemplate(context, definition)}</template>`;
16049
16239
  };
16050
16240
 
16051
- class _Select extends Listbox {}
16241
+ class _Search extends FoundationElement {}
16242
+ /**
16243
+ * A form-associated base class for the {@link @microsoft/fast-foundation#(Search:class)} component.
16244
+ *
16245
+ * @internal
16246
+ */
16247
+
16248
+
16249
+ class FormAssociatedSearch extends FormAssociated(_Search) {
16250
+ constructor() {
16251
+ super(...arguments);
16252
+ this.proxy = document.createElement("input");
16253
+ }
16254
+
16255
+ }
16256
+
16257
+ /**
16258
+ * A Search Custom HTML Element.
16259
+ * Based largely on the {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/search | <input type="search" /> element }.
16260
+ *
16261
+ * @public
16262
+ */
16263
+
16264
+ class Search$1 extends FormAssociatedSearch {
16265
+ readOnlyChanged() {
16266
+ if (this.proxy instanceof HTMLInputElement) {
16267
+ this.proxy.readOnly = this.readOnly;
16268
+ this.validate();
16269
+ }
16270
+ }
16271
+
16272
+ autofocusChanged() {
16273
+ if (this.proxy instanceof HTMLInputElement) {
16274
+ this.proxy.autofocus = this.autofocus;
16275
+ this.validate();
16276
+ }
16277
+ }
16278
+
16279
+ placeholderChanged() {
16280
+ if (this.proxy instanceof HTMLInputElement) {
16281
+ this.proxy.placeholder = this.placeholder;
16282
+ }
16283
+ }
16284
+
16285
+ listChanged() {
16286
+ if (this.proxy instanceof HTMLInputElement) {
16287
+ this.proxy.setAttribute("list", this.list);
16288
+ this.validate();
16289
+ }
16290
+ }
16291
+
16292
+ maxlengthChanged() {
16293
+ if (this.proxy instanceof HTMLInputElement) {
16294
+ this.proxy.maxLength = this.maxlength;
16295
+ this.validate();
16296
+ }
16297
+ }
16298
+
16299
+ minlengthChanged() {
16300
+ if (this.proxy instanceof HTMLInputElement) {
16301
+ this.proxy.minLength = this.minlength;
16302
+ this.validate();
16303
+ }
16304
+ }
16305
+
16306
+ patternChanged() {
16307
+ if (this.proxy instanceof HTMLInputElement) {
16308
+ this.proxy.pattern = this.pattern;
16309
+ this.validate();
16310
+ }
16311
+ }
16312
+
16313
+ sizeChanged() {
16314
+ if (this.proxy instanceof HTMLInputElement) {
16315
+ this.proxy.size = this.size;
16316
+ }
16317
+ }
16318
+
16319
+ spellcheckChanged() {
16320
+ if (this.proxy instanceof HTMLInputElement) {
16321
+ this.proxy.spellcheck = this.spellcheck;
16322
+ }
16323
+ }
16324
+ /**
16325
+ * @internal
16326
+ */
16327
+
16328
+
16329
+ connectedCallback() {
16330
+ super.connectedCallback();
16331
+ this.validate();
16332
+
16333
+ if (this.autofocus) {
16334
+ DOM.queueUpdate(() => {
16335
+ this.focus();
16336
+ });
16337
+ }
16338
+ }
16339
+ /**
16340
+ * Handles the internal control's `input` event
16341
+ * @internal
16342
+ */
16343
+
16344
+
16345
+ handleTextInput() {
16346
+ this.value = this.control.value;
16347
+ }
16348
+ /**
16349
+ * Handles the control's clear value event
16350
+ * @public
16351
+ */
16352
+
16353
+
16354
+ handleClearInput() {
16355
+ this.value = "";
16356
+ this.control.focus();
16357
+ }
16358
+ /**
16359
+ * Change event handler for inner control.
16360
+ * @remarks
16361
+ * "Change" events are not `composable` so they will not
16362
+ * permeate the shadow DOM boundary. This fn effectively proxies
16363
+ * the change event, emitting a `change` event whenever the internal
16364
+ * control emits a `change` event
16365
+ * @internal
16366
+ */
16367
+
16368
+
16369
+ handleChange() {
16370
+ this.$emit("change");
16371
+ }
16372
+
16373
+ }
16374
+
16375
+ __decorate$1([attr({
16376
+ attribute: "readonly",
16377
+ mode: "boolean"
16378
+ })], Search$1.prototype, "readOnly", void 0);
16379
+
16380
+ __decorate$1([attr({
16381
+ mode: "boolean"
16382
+ })], Search$1.prototype, "autofocus", void 0);
16383
+
16384
+ __decorate$1([attr], Search$1.prototype, "placeholder", void 0);
16385
+
16386
+ __decorate$1([attr], Search$1.prototype, "list", void 0);
16387
+
16388
+ __decorate$1([attr({
16389
+ converter: nullableNumberConverter
16390
+ })], Search$1.prototype, "maxlength", void 0);
16391
+
16392
+ __decorate$1([attr({
16393
+ converter: nullableNumberConverter
16394
+ })], Search$1.prototype, "minlength", void 0);
16395
+
16396
+ __decorate$1([attr], Search$1.prototype, "pattern", void 0);
16397
+
16398
+ __decorate$1([attr({
16399
+ converter: nullableNumberConverter
16400
+ })], Search$1.prototype, "size", void 0);
16401
+
16402
+ __decorate$1([attr({
16403
+ mode: "boolean"
16404
+ })], Search$1.prototype, "spellcheck", void 0);
16405
+
16406
+ __decorate$1([observable], Search$1.prototype, "defaultSlottedNodes", void 0);
16407
+ /**
16408
+ * Includes ARIA states and properties relating to the ARIA textbox role
16409
+ *
16410
+ * @public
16411
+ */
16412
+
16413
+
16414
+ class DelegatesARIASearch {}
16415
+ applyMixins(DelegatesARIASearch, ARIAGlobalStatesAndProperties);
16416
+ applyMixins(Search$1, StartEnd, DelegatesARIASearch);
16417
+
16418
+ class _Select extends Listbox$1 {}
16052
16419
  /**
16053
16420
  * A form-associated base class for the {@link @microsoft/fast-foundation#(Select:class)} component.
16054
16421
  *
@@ -16357,7 +16724,7 @@ class Select$1 extends FormAssociatedSelect {
16357
16724
  switch (key) {
16358
16725
  case " ":
16359
16726
  {
16360
- if (this.typeAheadExpired) {
16727
+ if (this.typeaheadExpired) {
16361
16728
  e.preventDefault();
16362
16729
  this.open = !this.open;
16363
16730
  }
@@ -16447,7 +16814,7 @@ applyMixins(Select$1, StartEnd, DelegatesARIASelect);
16447
16814
  */
16448
16815
 
16449
16816
  const selectTemplate = (context, definition) => html`<template class="${x => x.open ? "open" : ""} ${x => x.disabled ? "disabled" : ""} ${x => x.position}" role="${x => x.role}" tabindex="${x => !x.disabled ? "0" : null}" aria-disabled="${x => x.ariaDisabled}" aria-expanded="${x => x.ariaExpanded}" @click="${(x, c) => x.clickHandler(c.event)}" @focusout="${(x, c) => x.focusoutHandler(c.event)}" @keydown="${(x, c) => x.keydownHandler(c.event)}"><div aria-activedescendant="${x => x.open ? x.ariaActiveDescendant : null}" aria-controls="listbox" aria-expanded="${x => x.ariaExpanded}" aria-haspopup="listbox" class="control" part="control" role="button" ?disabled="${x => x.disabled}">${startSlotTemplate(context, definition)}<slot name="button-container"><div class="selected-value" part="selected-value"><slot name="selected-value">${x => x.displayValue}</slot></div><div class="indicator" part="indicator"><slot name="indicator">${definition.indicator || ""}</slot></div></slot>${endSlotTemplate(context, definition)}</div><div aria-disabled="${x => x.disabled}" class="listbox" id="listbox" part="listbox" role="listbox" ?disabled="${x => x.disabled}" ?hidden="${x => !x.open}" ${ref("listbox")}><slot ${slotted({
16450
- filter: Listbox.slottedOptionFilter,
16817
+ filter: Listbox$1.slottedOptionFilter,
16451
16818
  flatten: true,
16452
16819
  property: "slottedOptions"
16453
16820
  })}></slot></div></template>`;
@@ -16576,7 +16943,7 @@ class SliderLabel extends FoundationElement {
16576
16943
  let rightNum = Math.round((1 - pct) * 100);
16577
16944
  let leftNum = Math.round(pct * 100);
16578
16945
 
16579
- if (leftNum === Number.NaN && rightNum === Number.NaN) {
16946
+ if (Number.isNaN(leftNum) && Number.isNaN(rightNum)) {
16580
16947
  rightNum = 50;
16581
16948
  leftNum = 50;
16582
16949
  }
@@ -18759,7 +19126,15 @@ class TreeItem extends FoundationElement {
18759
19126
  }
18760
19127
 
18761
19128
  handleSelected(e) {
18762
- this.$emit("selected-change", e);
19129
+ if (e === null || e === void 0 ? void 0 : e.defaultPrevented) {
19130
+ return;
19131
+ }
19132
+
19133
+ e === null || e === void 0 ? void 0 : e.preventDefault();
19134
+
19135
+ if (!this.disabled) {
19136
+ this.$emit("selected-change", e);
19137
+ }
18763
19138
  }
18764
19139
 
18765
19140
  setExpanded(expanded) {
@@ -23103,6 +23478,7 @@ const horizontalScrollStyles = horizontalScrollStyles$1;
23103
23478
  const listboxStyles$1 = (context, definition) => css`
23104
23479
  ${display('inline-flex')} :host{border:calc(${strokeWidth} * 1px) solid ${neutralStrokeRest};border-radius:calc(${controlCornerRadius} * 1px);box-sizing:border-box;flex-direction:column;padding:calc(${designUnit} * 1px) 0;outline:none}::slotted(${context.tagFor(ListboxOption)}){margin:0 calc(${designUnit} * 1px)}:host(:focus-within:not([disabled])){border-color:${focusStrokeOuter};box-shadow:0 0 0 1px ${focusStrokeOuter} inset}`;
23105
23480
 
23481
+ class Listbox extends Listbox$1 {}
23106
23482
  /**
23107
23483
  * The Fluent listbox Custom Element. Implements, {@link @microsoft/fast-foundation#Listbox}
23108
23484
  * {@link @microsoft/fast-foundation#listboxTemplate}
@@ -23464,6 +23840,90 @@ const fluentRadioGroup = RadioGroup.compose({
23464
23840
 
23465
23841
  const radioGroupStyles = radioGroupStyles$1;
23466
23842
 
23843
+ /**
23844
+ * @public
23845
+ */
23846
+
23847
+ const searchTemplate = (context, definition) => html`<template class=" ${x => x.readOnly ? 'readonly' : ''} "><label part="label" for="control" class="${x => x.defaultSlottedNodes && x.defaultSlottedNodes.length ? 'label' : 'label label__hidden'}"><slot ${slotted({
23848
+ property: 'defaultSlottedNodes',
23849
+ filter: whitespaceFilter
23850
+ })}></slot></label><div class="root" part="root" ${ref('root')}>${startSlotTemplate(context, definition)}<div class="input-wrapper" part="input-wrapper"><input class="control" part="control" id="control" @input="${x => x.handleTextInput()}" @change="${x => x.handleChange()}" ?autofocus="${x => x.autofocus}" ?disabled="${x => x.disabled}" list="${x => x.list}" maxlength="${x => x.maxlength}" minlength="${x => x.minlength}" pattern="${x => x.pattern}" placeholder="${x => x.placeholder}" ?readonly="${x => x.readOnly}" ?required="${x => x.required}" size="${x => x.size}" ?spellcheck="${x => x.spellcheck}" :value="${x => x.value}" type="search" aria-atomic="${x => x.ariaAtomic}" aria-busy="${x => x.ariaBusy}" aria-controls="${x => x.ariaControls}" aria-current="${x => x.ariaCurrent}" aria-describedby="${x => x.ariaDescribedby}" aria-details="${x => x.ariaDetails}" aria-disabled="${x => x.ariaDisabled}" aria-errormessage="${x => x.ariaErrormessage}" aria-flowto="${x => x.ariaFlowto}" aria-haspopup="${x => x.ariaHaspopup}" aria-hidden="${x => x.ariaHidden}" aria-invalid="${x => x.ariaInvalid}" aria-keyshortcuts="${x => x.ariaKeyshortcuts}" aria-label="${x => x.ariaLabel}" aria-labelledby="${x => x.ariaLabelledby}" aria-live="${x => x.ariaLive}" aria-owns="${x => x.ariaOwns}" aria-relevant="${x => x.ariaRelevant}" aria-roledescription="${x => x.ariaRoledescription}" ${ref('control')} /><slot name="clear-button"><button class="clear-button ${x => x.value ? '' : 'clear-button__hidden'}" part="clear-button" tabindex="-1" @click=${x => x.handleClearInput()}><slot name="clear-glyph"><svg width="12" height="12" viewBox="0 0 12 12" xmlns="http://www.w3.org/2000/svg"><path d="m2.09 2.22.06-.07a.5.5 0 0 1 .63-.06l.07.06L6 5.29l3.15-3.14a.5.5 0 1 1 .7.7L6.71 6l3.14 3.15c.18.17.2.44.06.63l-.06.07a.5.5 0 0 1-.63.06l-.07-.06L6 6.71 2.85 9.85a.5.5 0 0 1-.7-.7L5.29 6 2.15 2.85a.5.5 0 0 1-.06-.63l.06-.07-.06.07Z" /></svg></slot></button></slot></div>${endSlotTemplate(context, definition)}</div></template>`;
23851
+
23852
+ const clearButtonHover = DesignToken.create("clear-button-hover").withDefault(target => {
23853
+ const buttonRecipe = neutralFillStealthRecipe.getValueFor(target);
23854
+ const inputRecipe = neutralFillInputRecipe.getValueFor(target);
23855
+ return buttonRecipe.evaluate(target, inputRecipe.evaluate(target).focus).hover;
23856
+ });
23857
+ const clearButtonActive = DesignToken.create("clear-button-active").withDefault(target => {
23858
+ const buttonRecipe = neutralFillStealthRecipe.getValueFor(target);
23859
+ const inputRecipe = neutralFillInputRecipe.getValueFor(target);
23860
+ return buttonRecipe.evaluate(target, inputRecipe.evaluate(target).focus).active;
23861
+ });
23862
+ const searchFilledStyles = (context, definition) => css`
23863
+ ${inputFilledStyles(context, definition, '.root')}
23864
+ `.withBehaviors(forcedColorsStylesheetBehavior(css`
23865
+ ${inputFilledForcedColorStyles(context, definition, '.root')}
23866
+ `));
23867
+ const searchStyles$1 = (context, definition) => css`
23868
+ ${display('inline-block')}
23869
+ ${inputStyles(context, definition, '.root')}
23870
+ ${inputStateStyles()}
23871
+ .root{display:flex;flex-direction:row}.control{-webkit-appearance:none;color:inherit;background:transparent;border:0;height:calc(100% - 4px);margin-top:auto;margin-bottom:auto;padding:0 calc(${designUnit} * 2px + 1px);font-family:inherit;font-size:inherit;line-height:inherit}.clear-button{display:inline-flex;align-items:center;margin:1px;height:calc(100% - 2px);opacity:0;background:transparent;color:${neutralForegroundRest};fill:currentcolor;border:none;border-radius:calc(${controlCornerRadius} * 1px);min-width:calc(${heightNumber} * 1px);font-size:${typeRampBaseFontSize};line-height:${typeRampBaseLineHeight};outline:none;font-family:${bodyFont};padding:0 calc((10 + (${designUnit} * 2 * ${density})) * 1px)}.clear-button:hover{background:${clearButtonHover}}.clear-button:active{background:${clearButtonActive}}:host(:hover:not([disabled],[readOnly])) .clear-button,:host(:active:not([disabled],[readOnly])) .clear-button,:host(:focus-within:not([disabled],[readOnly])) .clear-button{opacity:1}:host(:hover:not([disabled],[readOnly])) .clear-button__hidden,:host(:active:not([disabled],[readOnly])) .clear-button__hidden,:host(:focus-within:not([disabled],[readOnly])) .clear-button__hidden{opacity:0}.control::-webkit-search-cancel-button{-webkit-appearance:none}.input-wrapper{display:flex;position:relative;width:100%}.start,.end{display:flex;margin:1px;align-items:center}.start{display:flex;margin-inline-start:11px}::slotted([slot="end"]){height:100%}.clear-button__hidden{opacity:0}.end{margin-inline-end:11px}::slotted(${context.tagFor(Button$1)}){margin-inline-end:1px}`.withBehaviors(appearanceBehavior('filled', searchFilledStyles(context, definition)), forcedColorsStylesheetBehavior(css`
23872
+ ${inputForcedColorStyles(context, definition, '.root')}
23873
+ `));
23874
+
23875
+ /**
23876
+ * The Fluent search class
23877
+ * @internal
23878
+ */
23879
+
23880
+ class Search extends Search$1 {
23881
+ constructor() {
23882
+ super(...arguments);
23883
+ /**
23884
+ * The appearance of the element.
23885
+ *
23886
+ * @public
23887
+ * @remarks
23888
+ * HTML Attribute: appearance
23889
+ */
23890
+
23891
+ this.appearance = 'outline';
23892
+ }
23893
+
23894
+ }
23895
+
23896
+ __decorate([attr], Search.prototype, "appearance", void 0);
23897
+ /**
23898
+ * The Fluent Search Custom Element. Implements {@link @microsoft/fast-foundation#Search},
23899
+ * {@link @microsoft/fast-foundation#searchTemplate}
23900
+ *
23901
+ *
23902
+ * @public
23903
+ * @remarks
23904
+ * HTML Element: \<fluent-search\>
23905
+ *
23906
+ * {@link https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot/delegatesFocus | delegatesFocus}
23907
+ */
23908
+
23909
+
23910
+ const fluentSearch = Search.compose({
23911
+ baseName: 'search',
23912
+ baseClass: Search$1,
23913
+ template: searchTemplate,
23914
+ styles: searchStyles$1,
23915
+ start: `<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg%22%3E"><path d="M8.5 3a5.5 5.5 0 0 1 4.23 9.02l4.12 4.13a.5.5 0 0 1-.63.76l-.07-.06-4.13-4.12A5.5 5.5 0 1 1 8.5 3Zm0 1a4.5 4.5 0 1 0 0 9 4.5 4.5 0 0 0 0-9Z"/></svg>`,
23916
+ shadowOptions: {
23917
+ delegatesFocus: true
23918
+ }
23919
+ });
23920
+ /**
23921
+ * Styles for Search
23922
+ * @public
23923
+ */
23924
+
23925
+ const searchStyles = searchStyles$1;
23926
+
23467
23927
  /**
23468
23928
  * The Fluent select class
23469
23929
  * @internal
@@ -24067,6 +24527,7 @@ const allComponents = {
24067
24527
  fluentProgressRing,
24068
24528
  fluentRadio,
24069
24529
  fluentRadioGroup,
24530
+ fluentSearch,
24070
24531
  fluentSelect,
24071
24532
  fluentSkeleton,
24072
24533
  fluentSlider,
@@ -24122,4 +24583,4 @@ function provideFluentDesignSystem(element) {
24122
24583
 
24123
24584
  const FluentDesignSystem = provideFluentDesignSystem().register(allComponents);
24124
24585
 
24125
- export { AccentButtonStyles, Accordion, AccordionItem, Anchor, AnchoredRegion, Badge, Breadcrumb, BreadcrumbItem, Button, Card, Combobox, DataGrid, DataGridCell, DataGridRow, DesignSystemProvider, Dialog, DirectionalStyleSheetBehavior, Divider, Flipper, FluentDesignSystem, HorizontalScroll, HypertextStyles, LightweightButtonStyles, Listbox, Menu, MenuItem, NumberField, OptionStyles, OutlineButtonStyles, PaletteRGB, Progress, ProgressRing, Radio, RadioGroup, RadioStyles, Select, Skeleton, Slider, SliderLabel, StandardLuminance, StealthButtonStyles, SwatchRGB, Switch, Tab, TabPanel, Tabs, TextArea, TextField, Toolbar, Tooltip, TreeItem, TreeView, accentBaseColor, accentFillActive, accentFillActiveDelta, accentFillFocus, accentFillFocusDelta, accentFillHover, accentFillHoverDelta, accentFillRecipe, accentFillRest, accentFillRestDelta, accentForegroundActive, accentForegroundActiveDelta, accentForegroundCut, accentForegroundCutLarge, accentForegroundFocus, accentForegroundFocusDelta, accentForegroundHover, accentForegroundHoverDelta, accentForegroundRecipe, accentForegroundRest, accentForegroundRestDelta, accentPalette, accentStrokeControlActive, accentStrokeControlFocus, accentStrokeControlHover, accentStrokeControlRecipe, accentStrokeControlRest, accordionItemStyles, accordionStyles, allComponents, ambientShadow, anchorStyles, anchoredRegionStyles, badgeStyles, baseButtonStyles, baseHeightMultiplier, baseHorizontalSpacingMultiplier, baseLayerLuminance, bodyFont, breadcrumbItemStyles, breadcrumbStyles, buttonStyles, cardStyles, checkboxStyles, comboboxStyles, controlCornerRadius, cornerRadius, dataGridCellStyles, dataGridRowStyles, dataGridStyles, density, designUnit, dialogStyles, direction, directionalShadow, disabledOpacity, dividerStyles, elevatedCornerRadius, elevation, elevationShadowCardActive, elevationShadowCardActiveSize, elevationShadowCardFocus, elevationShadowCardFocusSize, elevationShadowCardHover, elevationShadowCardHoverSize, elevationShadowCardRest, elevationShadowCardRestSize, elevationShadowDialog, elevationShadowDialogSize, elevationShadowFlyout, elevationShadowFlyoutSize, elevationShadowRecipe, elevationShadowTooltip, elevationShadowTooltipSize, fillColor, flipperStyles, fluentAccordion, fluentAccordionItem, fluentAnchor, fluentAnchoredRegion, fluentBadge, fluentBreadcrumb, fluentBreadcrumbItem, fluentButton, fluentCalendar, fluentCard, fluentCheckbox, fluentCombobox, fluentDataGrid, fluentDataGridCell, fluentDataGridRow, fluentDesignSystemProvider, fluentDialog, fluentDivider, fluentFlipper, fluentHorizontalScroll, fluentListbox, fluentMenu, fluentMenuItem, fluentNumberField, fluentOption, fluentProgress, fluentProgressRing, fluentRadio, fluentRadioGroup, fluentSelect, fluentSkeleton, fluentSlider, fluentSliderLabel, fluentSwitch, fluentTab, fluentTabPanel, fluentTabs, fluentTextArea, fluentTextField, fluentToolbar, fluentTooltip, fluentTreeItem, fluentTreeView, focusOutlineWidth, focusStrokeInner, focusStrokeInnerRecipe, focusStrokeOuter, focusStrokeOuterRecipe, focusStrokeWidth, foregroundOnAccentActive, foregroundOnAccentActiveLarge, foregroundOnAccentFocus, foregroundOnAccentFocusLarge, foregroundOnAccentHover, foregroundOnAccentHoverLarge, foregroundOnAccentLargeRecipe, foregroundOnAccentRecipe, foregroundOnAccentRest, foregroundOnAccentRestLarge, heightNumber, horizontalScrollStyles, inputFilledForcedColorStyles, inputFilledStyles, inputForcedColorStyles, inputStateStyles, inputStyles, isDark, layerCornerRadius, listboxStyles, menuItemStyles, menuStyles, neutralBaseColor, neutralContrastFillActive, neutralContrastFillActiveDelta, neutralContrastFillFocus, neutralContrastFillFocusDelta, neutralContrastFillHover, neutralContrastFillHoverDelta, neutralContrastFillRest, neutralContrastFillRestDelta, neutralDivider, neutralDividerRestDelta, neutralFillActive, neutralFillActiveDelta, neutralFillCard, neutralFillCardDelta, neutralFillFocus, neutralFillFocusDelta, neutralFillHover, neutralFillHoverDelta, neutralFillInputActive, neutralFillInputActiveDelta, neutralFillInputAltActive, neutralFillInputAltActiveDelta, neutralFillInputAltFocus, neutralFillInputAltFocusDelta, neutralFillInputAltHover, neutralFillInputAltHoverDelta, neutralFillInputAltRecipe, neutralFillInputAltRest, neutralFillInputAltRestDelta, neutralFillInputFocus, neutralFillInputFocusDelta, neutralFillInputHover, neutralFillInputHoverDelta, neutralFillInputRecipe, neutralFillInputRest, neutralFillInputRestDelta, neutralFillInverseActive, neutralFillInverseActiveDelta, neutralFillInverseFocus, neutralFillInverseFocusDelta, neutralFillInverseHover, neutralFillInverseHoverDelta, neutralFillInverseRecipe, neutralFillInverseRest, neutralFillInverseRestDelta, neutralFillLayerActive, neutralFillLayerActiveDelta, neutralFillLayerAltRecipe, neutralFillLayerAltRest, neutralFillLayerAltRestDelta, neutralFillLayerHover, neutralFillLayerHoverDelta, neutralFillLayerRecipe, neutralFillLayerRest, neutralFillLayerRestDelta, neutralFillRecipe, neutralFillRest, neutralFillRestDelta, neutralFillSecondaryActive, neutralFillSecondaryActiveDelta, neutralFillSecondaryFocus, neutralFillSecondaryFocusDelta, neutralFillSecondaryHover, neutralFillSecondaryHoverDelta, neutralFillSecondaryRecipe, neutralFillSecondaryRest, neutralFillSecondaryRestDelta, neutralFillStealthActive, neutralFillStealthActiveDelta, neutralFillStealthFocus, neutralFillStealthFocusDelta, neutralFillStealthHover, neutralFillStealthHoverDelta, neutralFillStealthRecipe, neutralFillStealthRest, neutralFillStealthRestDelta, neutralFillStrongActive, neutralFillStrongActiveDelta, neutralFillStrongFocus, neutralFillStrongFocusDelta, neutralFillStrongHover, neutralFillStrongHoverDelta, neutralFillStrongRecipe, neutralFillStrongRest, neutralFillStrongRestDelta, neutralFillToggleActive, neutralFillToggleActiveDelta, neutralFillToggleFocus, neutralFillToggleFocusDelta, neutralFillToggleHover, neutralFillToggleHoverDelta, neutralFillToggleRest, neutralFillToggleRestDelta, neutralFocus, neutralFocusInnerAccent, neutralForegroundActive, neutralForegroundFocus, neutralForegroundHint, neutralForegroundHintRecipe, neutralForegroundHover, neutralForegroundRecipe, neutralForegroundRest, neutralLayer1, neutralLayer1Recipe, neutralLayer2, neutralLayer2Recipe, neutralLayer3, neutralLayer3Recipe, neutralLayer4, neutralLayer4Recipe, neutralLayerCardContainer, neutralLayerCardContainerRecipe, neutralLayerFloating, neutralLayerFloatingRecipe, neutralLayerL1, neutralLayerL2, neutralLayerL3, neutralLayerL4, neutralOutlineActive, neutralOutlineFocus, neutralOutlineHover, neutralOutlineRest, neutralPalette, neutralStrokeActive, neutralStrokeActiveDelta, neutralStrokeControlActive, neutralStrokeControlActiveDelta, neutralStrokeControlFocus, neutralStrokeControlFocusDelta, neutralStrokeControlHover, neutralStrokeControlHoverDelta, neutralStrokeControlRecipe, neutralStrokeControlRest, neutralStrokeControlRestDelta, neutralStrokeDividerRecipe, neutralStrokeDividerRest, neutralStrokeDividerRestDelta, neutralStrokeFocus, neutralStrokeFocusDelta, neutralStrokeHover, neutralStrokeHoverDelta, neutralStrokeInputActive, neutralStrokeInputFocus, neutralStrokeInputHover, neutralStrokeInputRecipe, neutralStrokeInputRest, neutralStrokeLayerActive, neutralStrokeLayerActiveDelta, neutralStrokeLayerHover, neutralStrokeLayerHoverDelta, neutralStrokeLayerRecipe, neutralStrokeLayerRest, neutralStrokeLayerRestDelta, neutralStrokeRecipe, neutralStrokeRest, neutralStrokeRestDelta, neutralStrokeStrongActive, neutralStrokeStrongActiveDelta, neutralStrokeStrongFocus, neutralStrokeStrongFocusDelta, neutralStrokeStrongHover, neutralStrokeStrongHoverDelta, neutralStrokeStrongRecipe, neutralStrokeStrongRest, numberFieldStyles, outlineWidth, progressRingStyles, progressStyles, provideFluentDesignSystem, radioGroupStyles, selectStyles, skeletonStyles, sliderLabelStyles, sliderStyles, strokeWidth, switchStyles, tabPanelStyles, tabStyles, tabsStyles, textAreaStyles, textFieldStyles, treeItemStyles, treeViewStyles, typeRampBaseFontSize, typeRampBaseLineHeight, typeRampMinus1FontSize, typeRampMinus1LineHeight, typeRampMinus2FontSize, typeRampMinus2LineHeight, typeRampPlus1FontSize, typeRampPlus1LineHeight, typeRampPlus2FontSize, typeRampPlus2LineHeight, typeRampPlus3FontSize, typeRampPlus3LineHeight, typeRampPlus4FontSize, typeRampPlus4LineHeight, typeRampPlus5FontSize, typeRampPlus5LineHeight, typeRampPlus6FontSize, typeRampPlus6LineHeight };
24586
+ export { AccentButtonStyles, Accordion, AccordionItem, Anchor, AnchoredRegion, Badge, Breadcrumb, BreadcrumbItem, Button, Card, Combobox, DataGrid, DataGridCell, DataGridRow, DesignSystemProvider, Dialog, DirectionalStyleSheetBehavior, Divider, Flipper, FluentDesignSystem, HorizontalScroll, HypertextStyles, LightweightButtonStyles, Listbox, Menu, MenuItem, NumberField, OptionStyles, OutlineButtonStyles, PaletteRGB, Progress, ProgressRing, Radio, RadioGroup, RadioStyles, Search, Select, Skeleton, Slider, SliderLabel, StandardLuminance, StealthButtonStyles, SwatchRGB, Switch, Tab, TabPanel, Tabs, TextArea, TextField, Toolbar, Tooltip, TreeItem, TreeView, accentBaseColor, accentFillActive, accentFillActiveDelta, accentFillFocus, accentFillFocusDelta, accentFillHover, accentFillHoverDelta, accentFillRecipe, accentFillRest, accentFillRestDelta, accentForegroundActive, accentForegroundActiveDelta, accentForegroundCut, accentForegroundCutLarge, accentForegroundFocus, accentForegroundFocusDelta, accentForegroundHover, accentForegroundHoverDelta, accentForegroundRecipe, accentForegroundRest, accentForegroundRestDelta, accentPalette, accentStrokeControlActive, accentStrokeControlFocus, accentStrokeControlHover, accentStrokeControlRecipe, accentStrokeControlRest, accordionItemStyles, accordionStyles, allComponents, ambientShadow, anchorStyles, anchoredRegionStyles, badgeStyles, baseButtonStyles, baseHeightMultiplier, baseHorizontalSpacingMultiplier, baseLayerLuminance, bodyFont, breadcrumbItemStyles, breadcrumbStyles, buttonStyles, cardStyles, checkboxStyles, comboboxStyles, controlCornerRadius, cornerRadius, dataGridCellStyles, dataGridRowStyles, dataGridStyles, density, designUnit, dialogStyles, direction, directionalShadow, disabledOpacity, dividerStyles, elevatedCornerRadius, elevation, elevationShadowCardActive, elevationShadowCardActiveSize, elevationShadowCardFocus, elevationShadowCardFocusSize, elevationShadowCardHover, elevationShadowCardHoverSize, elevationShadowCardRest, elevationShadowCardRestSize, elevationShadowDialog, elevationShadowDialogSize, elevationShadowFlyout, elevationShadowFlyoutSize, elevationShadowRecipe, elevationShadowTooltip, elevationShadowTooltipSize, fillColor, flipperStyles, fluentAccordion, fluentAccordionItem, fluentAnchor, fluentAnchoredRegion, fluentBadge, fluentBreadcrumb, fluentBreadcrumbItem, fluentButton, fluentCalendar, fluentCard, fluentCheckbox, fluentCombobox, fluentDataGrid, fluentDataGridCell, fluentDataGridRow, fluentDesignSystemProvider, fluentDialog, fluentDivider, fluentFlipper, fluentHorizontalScroll, fluentListbox, fluentMenu, fluentMenuItem, fluentNumberField, fluentOption, fluentProgress, fluentProgressRing, fluentRadio, fluentRadioGroup, fluentSearch, fluentSelect, fluentSkeleton, fluentSlider, fluentSliderLabel, fluentSwitch, fluentTab, fluentTabPanel, fluentTabs, fluentTextArea, fluentTextField, fluentToolbar, fluentTooltip, fluentTreeItem, fluentTreeView, focusOutlineWidth, focusStrokeInner, focusStrokeInnerRecipe, focusStrokeOuter, focusStrokeOuterRecipe, focusStrokeWidth, foregroundOnAccentActive, foregroundOnAccentActiveLarge, foregroundOnAccentFocus, foregroundOnAccentFocusLarge, foregroundOnAccentHover, foregroundOnAccentHoverLarge, foregroundOnAccentLargeRecipe, foregroundOnAccentRecipe, foregroundOnAccentRest, foregroundOnAccentRestLarge, heightNumber, horizontalScrollStyles, inputFilledForcedColorStyles, inputFilledStyles, inputForcedColorStyles, inputStateStyles, inputStyles, isDark, layerCornerRadius, listboxStyles, menuItemStyles, menuStyles, neutralBaseColor, neutralContrastFillActive, neutralContrastFillActiveDelta, neutralContrastFillFocus, neutralContrastFillFocusDelta, neutralContrastFillHover, neutralContrastFillHoverDelta, neutralContrastFillRest, neutralContrastFillRestDelta, neutralDivider, neutralDividerRestDelta, neutralFillActive, neutralFillActiveDelta, neutralFillCard, neutralFillCardDelta, neutralFillFocus, neutralFillFocusDelta, neutralFillHover, neutralFillHoverDelta, neutralFillInputActive, neutralFillInputActiveDelta, neutralFillInputAltActive, neutralFillInputAltActiveDelta, neutralFillInputAltFocus, neutralFillInputAltFocusDelta, neutralFillInputAltHover, neutralFillInputAltHoverDelta, neutralFillInputAltRecipe, neutralFillInputAltRest, neutralFillInputAltRestDelta, neutralFillInputFocus, neutralFillInputFocusDelta, neutralFillInputHover, neutralFillInputHoverDelta, neutralFillInputRecipe, neutralFillInputRest, neutralFillInputRestDelta, neutralFillInverseActive, neutralFillInverseActiveDelta, neutralFillInverseFocus, neutralFillInverseFocusDelta, neutralFillInverseHover, neutralFillInverseHoverDelta, neutralFillInverseRecipe, neutralFillInverseRest, neutralFillInverseRestDelta, neutralFillLayerActive, neutralFillLayerActiveDelta, neutralFillLayerAltRecipe, neutralFillLayerAltRest, neutralFillLayerAltRestDelta, neutralFillLayerHover, neutralFillLayerHoverDelta, neutralFillLayerRecipe, neutralFillLayerRest, neutralFillLayerRestDelta, neutralFillRecipe, neutralFillRest, neutralFillRestDelta, neutralFillSecondaryActive, neutralFillSecondaryActiveDelta, neutralFillSecondaryFocus, neutralFillSecondaryFocusDelta, neutralFillSecondaryHover, neutralFillSecondaryHoverDelta, neutralFillSecondaryRecipe, neutralFillSecondaryRest, neutralFillSecondaryRestDelta, neutralFillStealthActive, neutralFillStealthActiveDelta, neutralFillStealthFocus, neutralFillStealthFocusDelta, neutralFillStealthHover, neutralFillStealthHoverDelta, neutralFillStealthRecipe, neutralFillStealthRest, neutralFillStealthRestDelta, neutralFillStrongActive, neutralFillStrongActiveDelta, neutralFillStrongFocus, neutralFillStrongFocusDelta, neutralFillStrongHover, neutralFillStrongHoverDelta, neutralFillStrongRecipe, neutralFillStrongRest, neutralFillStrongRestDelta, neutralFillToggleActive, neutralFillToggleActiveDelta, neutralFillToggleFocus, neutralFillToggleFocusDelta, neutralFillToggleHover, neutralFillToggleHoverDelta, neutralFillToggleRest, neutralFillToggleRestDelta, neutralFocus, neutralFocusInnerAccent, neutralForegroundActive, neutralForegroundFocus, neutralForegroundHint, neutralForegroundHintRecipe, neutralForegroundHover, neutralForegroundRecipe, neutralForegroundRest, neutralLayer1, neutralLayer1Recipe, neutralLayer2, neutralLayer2Recipe, neutralLayer3, neutralLayer3Recipe, neutralLayer4, neutralLayer4Recipe, neutralLayerCardContainer, neutralLayerCardContainerRecipe, neutralLayerFloating, neutralLayerFloatingRecipe, neutralLayerL1, neutralLayerL2, neutralLayerL3, neutralLayerL4, neutralOutlineActive, neutralOutlineFocus, neutralOutlineHover, neutralOutlineRest, neutralPalette, neutralStrokeActive, neutralStrokeActiveDelta, neutralStrokeControlActive, neutralStrokeControlActiveDelta, neutralStrokeControlFocus, neutralStrokeControlFocusDelta, neutralStrokeControlHover, neutralStrokeControlHoverDelta, neutralStrokeControlRecipe, neutralStrokeControlRest, neutralStrokeControlRestDelta, neutralStrokeDividerRecipe, neutralStrokeDividerRest, neutralStrokeDividerRestDelta, neutralStrokeFocus, neutralStrokeFocusDelta, neutralStrokeHover, neutralStrokeHoverDelta, neutralStrokeInputActive, neutralStrokeInputFocus, neutralStrokeInputHover, neutralStrokeInputRecipe, neutralStrokeInputRest, neutralStrokeLayerActive, neutralStrokeLayerActiveDelta, neutralStrokeLayerHover, neutralStrokeLayerHoverDelta, neutralStrokeLayerRecipe, neutralStrokeLayerRest, neutralStrokeLayerRestDelta, neutralStrokeRecipe, neutralStrokeRest, neutralStrokeRestDelta, neutralStrokeStrongActive, neutralStrokeStrongActiveDelta, neutralStrokeStrongFocus, neutralStrokeStrongFocusDelta, neutralStrokeStrongHover, neutralStrokeStrongHoverDelta, neutralStrokeStrongRecipe, neutralStrokeStrongRest, numberFieldStyles, outlineWidth, progressRingStyles, progressStyles, provideFluentDesignSystem, radioGroupStyles, searchStyles, searchTemplate, selectStyles, skeletonStyles, sliderLabelStyles, sliderStyles, strokeWidth, switchStyles, tabPanelStyles, tabStyles, tabsStyles, textAreaStyles, textFieldStyles, treeItemStyles, treeViewStyles, typeRampBaseFontSize, typeRampBaseLineHeight, typeRampMinus1FontSize, typeRampMinus1LineHeight, typeRampMinus2FontSize, typeRampMinus2LineHeight, typeRampPlus1FontSize, typeRampPlus1LineHeight, typeRampPlus2FontSize, typeRampPlus2LineHeight, typeRampPlus3FontSize, typeRampPlus3LineHeight, typeRampPlus4FontSize, typeRampPlus4LineHeight, typeRampPlus5FontSize, typeRampPlus5LineHeight, typeRampPlus6FontSize, typeRampPlus6LineHeight };