@fluentui/web-components 2.1.0 → 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.
Files changed (37) hide show
  1. package/CHANGELOG.json +69 -1
  2. package/CHANGELOG.md +38 -2
  3. package/dist/dts/anchor/anchor.stories.d.ts +1 -1
  4. package/dist/dts/badge/badge.stories.d.ts +1 -1
  5. package/dist/dts/button/button.stories.d.ts +1 -1
  6. package/dist/dts/component-definitions.d.ts +2 -1
  7. package/dist/dts/custom-elements.d.ts +14 -12
  8. package/dist/dts/index.d.ts +1 -0
  9. package/dist/dts/listbox/index.d.ts +3 -6
  10. package/dist/dts/listbox/listbox.stories.d.ts +1 -1
  11. package/dist/dts/menu/menu.stories.d.ts +1 -1
  12. package/dist/dts/search/index.d.ts +38 -0
  13. package/dist/dts/search/search.stories.d.ts +75 -0
  14. package/dist/dts/search/search.styles.d.ts +4 -0
  15. package/dist/dts/search/search.template.d.ts +6 -0
  16. package/dist/dts/text-area/text-area.stories.d.ts +1 -1
  17. package/dist/dts/text-field/text-field.stories.d.ts +1 -1
  18. package/dist/dts/tooltip/tooltip.stories.d.ts +1 -1
  19. package/dist/esm/accordion/accordion-item/accordion-item.styles.js +6 -5
  20. package/dist/esm/component-definitions.js +2 -0
  21. package/dist/esm/custom-elements.js +3 -1
  22. package/dist/esm/flipper/flipper.styles.js +1 -0
  23. package/dist/esm/index.js +1 -0
  24. package/dist/esm/listbox/index.js +3 -6
  25. package/dist/esm/search/index.js +52 -0
  26. package/dist/esm/search/search.stories.js +83 -0
  27. package/dist/esm/search/search.styles.js +108 -0
  28. package/dist/esm/search/search.template.js +82 -0
  29. package/dist/esm/search/search.vscode.definition.json +145 -0
  30. package/dist/esm/tabs/tabs.stories.js +56 -2
  31. package/dist/esm/tabs/tabs.styles.js +1 -0
  32. package/dist/fluent-web-components.api.json +280 -15
  33. package/dist/web-components.d.ts +51 -2
  34. package/dist/web-components.js +711 -245
  35. package/dist/web-components.min.js +142 -132
  36. package/docs/api-report.md +34 -9
  37. package/package.json +2 -3
@@ -1475,7 +1475,10 @@ function compileTemplate(template, directives) {
1475
1475
  // because something like a when, repeat, etc. could add nodes before the marker.
1476
1476
  // To mitigate this, we insert a stable first node. However, if we insert a node,
1477
1477
  // that will alter the result of the TreeWalker. So, we also need to offset the target index.
1478
- DOM.isMarker(fragment.firstChild) || fragment.childNodes.length === 1 && directives.length) {
1478
+ DOM.isMarker(fragment.firstChild) || // Or if there is only one node and a directive, it means the template's content
1479
+ // is *only* the directive. In that case, HTMLView.dispose() misses any nodes inserted by
1480
+ // the directive. Inserting a new node ensures proper disposal of nodes added by the directive.
1481
+ fragment.childNodes.length === 1 && directives.length) {
1479
1482
  fragment.insertBefore(document.createComment(""), fragment.firstChild);
1480
1483
  targetOffset = -1;
1481
1484
  }
@@ -5559,7 +5562,9 @@ function isArrayIndex(value) {
5559
5562
  for (let i = 0; i < length; ++i) {
5560
5563
  ch = value.charCodeAt(i);
5561
5564
 
5562
- if (i === 0 && ch === 0x30 && length > 1 || ch < 0x30
5565
+ if (i === 0 && ch === 0x30 && length > 1
5566
+ /* must not start with 0 */
5567
+ || ch < 0x30
5563
5568
  /* 0 */
5564
5569
  || ch > 0x39
5565
5570
  /* 9 */
@@ -10536,49 +10541,32 @@ var ListboxRole;
10536
10541
  * @public
10537
10542
  */
10538
10543
 
10539
- class Listbox extends FoundationElement {
10544
+ class Listbox$1 extends FoundationElement {
10540
10545
  constructor() {
10541
10546
  super(...arguments);
10542
10547
  /**
10543
- * The index of the selected option
10544
- *
10545
- * @public
10546
- */
10547
-
10548
- this.selectedIndex = -1;
10549
- /**
10550
- * @internal
10551
- */
10552
-
10553
- this.typeaheadBuffer = "";
10554
- /**
10555
- * @internal
10556
- */
10557
-
10558
- this.typeaheadTimeout = -1;
10559
- /**
10560
- * Flag for the typeahead timeout expiration.
10548
+ * The internal unfiltered list of selectable options.
10561
10549
  *
10562
10550
  * @internal
10563
10551
  */
10564
10552
 
10565
- this.typeAheadExpired = true;
10553
+ this._options = [];
10566
10554
  /**
10567
10555
  * The role of the element.
10568
10556
  *
10569
10557
  * @public
10570
10558
  * @remarks
10571
- * HTML Attribute: role
10559
+ * HTML Attribute: `role`
10572
10560
  */
10573
10561
 
10574
10562
  this.role = ListboxRole.listbox;
10575
10563
  /**
10576
- * The internal unfiltered list of selectable options.
10564
+ * The index of the selected option.
10577
10565
  *
10578
- * @internal
10566
+ * @public
10579
10567
  */
10580
10568
 
10581
- this._options = [];
10569
+ this.selectedIndex = -1;
10582
10570
  /**
10583
10571
  * A collection of the selected options.
10584
10572
  *
@@ -10595,66 +10583,52 @@ class Listbox extends FoundationElement {
10595
10583
 
10596
10584
  this.shouldSkipFocus = false;
10597
10585
  /**
10598
- * Move focus to an option whose label matches characters typed by the user.
10599
- * Consecutive keystrokes are batched into a buffer of search text used
10600
- * to match against the set of options. If TYPE_AHEAD_TIMEOUT_MS passes
10601
- * between consecutive keystrokes, the search restarts.
10586
+ * The current typeahead buffer string.
10602
10587
  *
10603
- * @param key - the key to be evaluated
10588
+ * @internal
10604
10589
  */
10605
10590
 
10606
- this.handleTypeAhead = key => {
10607
- if (this.typeaheadTimeout) {
10608
- window.clearTimeout(this.typeaheadTimeout);
10609
- }
10610
-
10611
- this.typeaheadTimeout = window.setTimeout(() => this.typeAheadExpired = true, Listbox.TYPE_AHEAD_TIMEOUT_MS);
10612
-
10613
- if (key.length > 1) {
10614
- return;
10615
- }
10591
+ this.typeaheadBuffer = "";
10592
+ /**
10593
+ * Flag for the typeahead timeout expiration.
10594
+ *
10595
+ * @internal
10596
+ */
10616
10597
 
10617
- this.typeaheadBuffer = `${this.typeAheadExpired ? "" : this.typeaheadBuffer}${key}`;
10618
- };
10619
- }
10598
+ this.typeaheadExpired = true;
10599
+ /**
10600
+ * The timeout ID for the typeahead handler.
10601
+ *
10602
+ * @internal
10603
+ */
10620
10604
 
10621
- selectedIndexChanged(prev, next) {
10622
- this.setSelectedOptions();
10605
+ this.typeaheadTimeout = -1;
10623
10606
  }
10607
+ /**
10608
+ * The first selected option.
10609
+ *
10610
+ * @internal
10611
+ */
10624
10612
 
10625
- typeaheadBufferChanged(prev, next) {
10626
- if (this.$fastController.isConnected) {
10627
- const pattern = this.typeaheadBuffer.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&");
10628
- const re = new RegExp(`^${pattern}`, "gi");
10629
- const filteredOptions = this.options.filter(o => o.text.trim().match(re));
10630
-
10631
- if (filteredOptions.length) {
10632
- const selectedIndex = this.options.indexOf(filteredOptions[0]);
10633
10613
 
10634
- if (selectedIndex > -1) {
10635
- this.selectedIndex = selectedIndex;
10636
- }
10637
- }
10614
+ get firstSelectedOption() {
10615
+ var _a;
10638
10616
 
10639
- this.typeAheadExpired = false;
10640
- }
10617
+ return (_a = this.selectedOptions[0]) !== null && _a !== void 0 ? _a : null;
10641
10618
  }
10619
+ /**
10620
+ * The number of options.
10621
+ *
10622
+ * @public
10623
+ */
10642
10624
 
10643
- slottedOptionsChanged(prev, next) {
10644
- if (this.$fastController.isConnected) {
10645
- this.options = next.reduce((options, item) => {
10646
- if (isListboxOption(item)) {
10647
- options.push(item);
10648
- }
10649
10625
 
10650
- return options;
10651
- }, []);
10652
- this.options.forEach(o => {
10653
- o.id = o.id || uniqueId("option-");
10654
- });
10655
- this.setSelectedOptions();
10656
- this.setDefaultSelectedOption();
10626
+ get length() {
10627
+ if (this.options) {
10628
+ return this.options.length;
10657
10629
  }
10630
+
10631
+ return 0;
10658
10632
  }
10659
10633
  /**
10660
10634
  * The list of options.
@@ -10672,23 +10646,39 @@ class Listbox extends FoundationElement {
10672
10646
  this._options = value;
10673
10647
  Observable.notify(this, "options");
10674
10648
  }
10649
+ /**
10650
+ * Flag for the typeahead timeout expiration.
10651
+ *
10652
+ * @deprecated use `Listbox.typeaheadExpired`
10653
+ * @internal
10654
+ */
10675
10655
 
10676
- selectedOptionsChanged(prev, next) {
10677
- if (this.$fastController.isConnected) {
10678
- this.options.forEach(o => {
10679
- o.selected = next.includes(o);
10680
- });
10681
- }
10656
+
10657
+ get typeAheadExpired() {
10658
+ return this.typeaheadExpired;
10659
+ }
10660
+
10661
+ set typeAheadExpired(value) {
10662
+ this.typeaheadExpired = value;
10682
10663
  }
10683
10664
  /**
10665
+ * Handle click events for listbox options.
10666
+ *
10684
10667
  * @internal
10685
10668
  */
10686
10669
 
10687
10670
 
10688
- get firstSelectedOption() {
10689
- 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
+ }
10690
10678
  }
10691
10679
  /**
10680
+ * Focus the first selected option and scroll it into view.
10681
+ *
10692
10682
  * @internal
10693
10683
  */
10694
10684
 
@@ -10704,6 +10694,10 @@ class Listbox extends FoundationElement {
10704
10694
  }
10705
10695
  }
10706
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
+ *
10707
10701
  * @internal
10708
10702
  */
10709
10703
 
@@ -10716,6 +10710,116 @@ class Listbox extends FoundationElement {
10716
10710
 
10717
10711
  this.shouldSkipFocus = false;
10718
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
+ }
10719
10823
  /**
10720
10824
  * Prevents `focusin` events from firing before `click` events when the
10721
10825
  * element is unfocused.
@@ -10729,40 +10833,37 @@ class Listbox extends FoundationElement {
10729
10833
  return true;
10730
10834
  }
10731
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
+ *
10732
10841
  * @internal
10733
10842
  */
10734
10843
 
10735
10844
 
10736
- setDefaultSelectedOption() {
10737
- if (this.options && this.$fastController.isConnected) {
10738
- const selectedIndex = this.options.findIndex(el => el.getAttribute("selected") !== null);
10739
-
10740
- if (selectedIndex !== -1) {
10741
- this.selectedIndex = selectedIndex;
10742
- return;
10743
- }
10744
-
10745
- this.selectedIndex = 0;
10746
- }
10845
+ selectedIndexChanged(prev, next) {
10846
+ this.setSelectedOptions();
10747
10847
  }
10748
10848
  /**
10749
- * Sets an option as selected and gives it focus.
10849
+ * Updates the selectedness of each option when the list of selected options changes.
10750
10850
  *
10751
- * @param index - option index to select
10752
- * @public
10851
+ * @param prev - the previous list of selected options
10852
+ * @param next - the current list of selected options
10853
+ *
10854
+ * @internal
10753
10855
  */
10754
10856
 
10755
10857
 
10756
- setSelectedOptions() {
10757
- if (this.$fastController.isConnected && this.options) {
10758
- const selectedOption = this.options[this.selectedIndex] || null;
10759
- this.selectedOptions = this.options.filter(el => el.isSameNode(selectedOption));
10760
- this.ariaActiveDescendant = this.firstSelectedOption ? this.firstSelectedOption.id : "";
10761
- this.focusAndScrollOptionIntoView();
10858
+ selectedOptionsChanged(prev, next) {
10859
+ if (this.$fastController.isConnected) {
10860
+ this.options.forEach(o => {
10861
+ o.selected = next.includes(o);
10862
+ });
10762
10863
  }
10763
10864
  }
10764
10865
  /**
10765
- * Moves focus to the first selectable option
10866
+ * Moves focus to the first selectable option.
10766
10867
  *
10767
10868
  * @public
10768
10869
  */
@@ -10774,7 +10875,7 @@ class Listbox extends FoundationElement {
10774
10875
  }
10775
10876
  }
10776
10877
  /**
10777
- * Moves focus to the last selectable option
10878
+ * Moves focus to the last selectable option.
10778
10879
  *
10779
10880
  * @internal
10780
10881
  */
@@ -10786,7 +10887,7 @@ class Listbox extends FoundationElement {
10786
10887
  }
10787
10888
  }
10788
10889
  /**
10789
- * Moves focus to the next selectable option
10890
+ * Moves focus to the next selectable option.
10790
10891
  *
10791
10892
  * @internal
10792
10893
  */
@@ -10797,16 +10898,8 @@ class Listbox extends FoundationElement {
10797
10898
  this.selectedIndex += 1;
10798
10899
  }
10799
10900
  }
10800
-
10801
- get length() {
10802
- if (this.options) {
10803
- return this.options.length;
10804
- }
10805
-
10806
- return 0;
10807
- }
10808
10901
  /**
10809
- * Moves focus to the previous selectable option
10902
+ * Moves focus to the previous selectable option.
10810
10903
  *
10811
10904
  * @internal
10812
10905
  */
@@ -10818,138 +10911,126 @@ class Listbox extends FoundationElement {
10818
10911
  }
10819
10912
  }
10820
10913
  /**
10821
- * Handles click events for listbox options
10914
+ * Updates the selected index to match the first selected option.
10822
10915
  *
10823
10916
  * @internal
10824
10917
  */
10825
10918
 
10826
10919
 
10827
- clickHandler(e) {
10828
- 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);
10829
10923
 
10830
- if (captured && !captured.disabled) {
10831
- this.selectedIndex = this.options.indexOf(captured);
10832
- return true;
10924
+ if (selectedIndex !== -1) {
10925
+ this.selectedIndex = selectedIndex;
10926
+ return;
10927
+ }
10928
+
10929
+ this.selectedIndex = 0;
10833
10930
  }
10834
10931
  }
10835
10932
  /**
10836
- * Handles keydown actions for listbox navigation and typeahead
10933
+ * Sets the selected option and gives it focus.
10837
10934
  *
10838
- * @internal
10935
+ * @public
10839
10936
  */
10840
10937
 
10841
10938
 
10842
- keydownHandler(e) {
10843
- if (this.disabled) {
10844
- return true;
10845
- }
10846
-
10847
- this.shouldSkipFocus = false;
10848
- const key = e.key;
10849
-
10850
- switch (key) {
10851
- // Select the first available option
10852
- case "Home":
10853
- {
10854
- if (!e.shiftKey) {
10855
- e.preventDefault();
10856
- this.selectFirstOption();
10857
- }
10939
+ setSelectedOptions() {
10940
+ var _a, _b, _c;
10858
10941
 
10859
- break;
10860
- }
10861
- // 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
+ */
10862
10957
 
10863
- case "ArrowDown":
10864
- {
10865
- if (!e.shiftKey) {
10866
- e.preventDefault();
10867
- this.selectNextOption();
10868
- }
10869
10958
 
10870
- 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);
10871
10964
  }
10872
- // Select the previous selectable option
10873
10965
 
10874
- case "ArrowUp":
10875
- {
10876
- if (!e.shiftKey) {
10877
- e.preventDefault();
10878
- this.selectPreviousOption();
10879
- }
10880
-
10881
- break;
10882
- }
10883
- // 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
+ */
10884
10983
 
10885
- case "End":
10886
- {
10887
- e.preventDefault();
10888
- this.selectLastOption();
10889
- break;
10890
- }
10891
10984
 
10892
- case "Tab":
10893
- {
10894
- this.focusAndScrollOptionIntoView();
10895
- return true;
10896
- }
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));
10897
10990
 
10898
- case "Enter":
10899
- case "Escape":
10900
- {
10901
- return true;
10902
- }
10991
+ if (filteredOptions.length) {
10992
+ const selectedIndex = this.options.indexOf(filteredOptions[0]);
10903
10993
 
10904
- case " ":
10905
- {
10906
- if (this.typeAheadExpired) {
10907
- return true;
10908
- }
10994
+ if (selectedIndex > -1) {
10995
+ this.selectedIndex = selectedIndex;
10909
10996
  }
10910
- // Send key to Typeahead handler
10911
-
10912
- default:
10913
- {
10914
- if (key.length === 1) {
10915
- this.handleTypeAhead(`${key}`);
10916
- }
10997
+ }
10917
10998
 
10918
- return true;
10919
- }
10999
+ this.typeaheadExpired = false;
10920
11000
  }
10921
11001
  }
10922
11002
 
10923
11003
  }
10924
11004
  /**
10925
- * Typeahead timeout in milliseconds.
11005
+ * A static filter to include only selectable options.
10926
11006
  *
10927
- * @internal
11007
+ * @param n - element to filter
11008
+ * @public
10928
11009
  */
10929
11010
 
10930
- Listbox.TYPE_AHEAD_TIMEOUT_MS = 1000;
11011
+ Listbox$1.slottedOptionFilter = n => isListboxOption(n) && !n.disabled && !n.hidden;
10931
11012
  /**
10932
- * A static filter to include only enabled elements
11013
+ * Typeahead timeout in milliseconds.
10933
11014
  *
10934
- * @param n - element to filter
10935
- * @public
11015
+ * @internal
10936
11016
  */
10937
11017
 
10938
- Listbox.slottedOptionFilter = n => isListboxOption(n) && !n.disabled && !n.hidden;
10939
-
10940
- __decorate$1([observable], Listbox.prototype, "selectedIndex", void 0);
10941
11018
 
10942
- __decorate$1([observable], Listbox.prototype, "typeaheadBuffer", void 0);
10943
-
10944
- __decorate$1([attr], Listbox.prototype, "role", void 0);
11019
+ Listbox$1.TYPE_AHEAD_TIMEOUT_MS = 1000;
10945
11020
 
10946
11021
  __decorate$1([attr({
10947
11022
  mode: "boolean"
10948
- })], 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);
10949
11028
 
10950
- __decorate$1([observable], Listbox.prototype, "slottedOptions", void 0);
11029
+ __decorate$1([observable], Listbox$1.prototype, "selectedOptions", void 0);
10951
11030
 
10952
- __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);
10953
11034
  /**
10954
11035
  * Includes ARIA states and properties relating to the ARIA listbox role
10955
11036
  *
@@ -10977,9 +11058,9 @@ __decorate$1([observable], DelegatesARIAListbox.prototype, "ariaDisabled", void
10977
11058
  __decorate$1([observable], DelegatesARIAListbox.prototype, "ariaExpanded", void 0);
10978
11059
 
10979
11060
  applyMixins(DelegatesARIAListbox, ARIAGlobalStatesAndProperties);
10980
- applyMixins(Listbox, DelegatesARIAListbox);
11061
+ applyMixins(Listbox$1, DelegatesARIAListbox);
10981
11062
 
10982
- class _Combobox extends Listbox {}
11063
+ class _Combobox extends Listbox$1 {}
10983
11064
  /**
10984
11065
  * A form-associated base class for the {@link (Combobox:class)} component.
10985
11066
  *
@@ -11207,12 +11288,13 @@ class Combobox$1 extends FormAssociatedCombobox {
11207
11288
 
11208
11289
  this.selectedOptions = [captured];
11209
11290
  this.control.value = captured.text;
11291
+ this.updateValue(true);
11210
11292
  }
11211
11293
 
11212
11294
  this.open = !this.open;
11213
11295
 
11214
- if (!this.open) {
11215
- this.updateValue(true);
11296
+ if (this.open) {
11297
+ this.control.focus();
11216
11298
  }
11217
11299
 
11218
11300
  return true;
@@ -11268,6 +11350,28 @@ class Combobox$1 extends FormAssociatedCombobox {
11268
11350
  });
11269
11351
  }
11270
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
+ }
11271
11375
  /**
11272
11376
  * Handle focus state when the element or its children lose focus.
11273
11377
  *
@@ -11615,7 +11719,7 @@ applyMixins(Combobox$1, StartEnd, DelegatesARIACombobox);
11615
11719
  */
11616
11720
 
11617
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({
11618
- filter: Listbox.slottedOptionFilter,
11722
+ filter: Listbox$1.slottedOptionFilter,
11619
11723
  flatten: true,
11620
11724
  property: "slottedOptions"
11621
11725
  })}></slot></div></template>`;
@@ -13854,13 +13958,59 @@ __decorate$1([attr], Flipper.prototype, "direction", void 0);
13854
13958
 
13855
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>`;
13856
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
+
13857
14007
  /**
13858
14008
  * The template for the {@link @microsoft/fast-foundation#(Listbox:class)} component.
13859
14009
  * @public
13860
14010
  */
13861
14011
 
13862
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({
13863
- filter: Listbox.slottedOptionFilter,
14013
+ filter: ListboxElement.slottedOptionFilter,
13864
14014
  flatten: true,
13865
14015
  property: "slottedOptions"
13866
14016
  })}></slot></template>`;
@@ -14044,7 +14194,6 @@ class MenuItem extends FoundationElement {
14044
14194
  switch (this.role) {
14045
14195
  case MenuItemRole.menuitemcheckbox:
14046
14196
  this.checked = !this.checked;
14047
- this.$emit("change");
14048
14197
  break;
14049
14198
 
14050
14199
  case MenuItemRole.menuitem:
@@ -14781,62 +14930,108 @@ class NumberField$1 extends FormAssociatedNumberField {
14781
14930
  */
14782
14931
 
14783
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;
14784
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
+ */
14785
14948
 
14786
- maxChanged(previousValue, nextValue) {
14949
+
14950
+ maxChanged(previous, next) {
14787
14951
  var _a;
14788
14952
 
14789
- 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);
14790
14954
  const min = Math.min(this.min, this.max);
14791
14955
 
14792
14956
  if (this.min !== undefined && this.min !== min) {
14793
14957
  this.min = min;
14794
14958
  }
14795
14959
 
14796
- this.valueChanged(this.value, this.value);
14960
+ this.value = this.getValidValue(this.value);
14797
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
+
14798
14971
 
14799
- minChanged(previousValue, nextValue) {
14972
+ minChanged(previous, next) {
14800
14973
  var _a;
14801
14974
 
14802
- 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);
14803
14976
  const max = Math.max(this.min, this.max);
14804
14977
 
14805
14978
  if (this.max !== undefined && this.max !== max) {
14806
14979
  this.max = max;
14807
14980
  }
14808
14981
 
14809
- this.valueChanged(this.value, this.value);
14982
+ this.value = this.getValidValue(this.value);
14810
14983
  }
14811
14984
  /**
14812
- *
14813
- * @param previousValue - previous stored value
14814
- * @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
14815
14990
  */
14816
14991
 
14817
14992
 
14818
- valueChanged(previousValue, nextValue) {
14819
- var _a, _b;
14820
-
14821
- let value = parseFloat(nextValue);
14993
+ valueChanged(previous, next) {
14994
+ this.value = this.getValidValue(next);
14822
14995
 
14823
- if (isNaN(value)) {
14824
- value = "";
14825
- } else {
14826
- value = Math.min(value, (_a = this.max) !== null && _a !== void 0 ? _a : value);
14827
- value = Math.max(value, (_b = this.min) !== null && _b !== void 0 ? _b : value);
14996
+ if (next !== this.value) {
14997
+ return;
14828
14998
  }
14829
14999
 
14830
- this.value = value.toString();
14831
-
14832
- if (this.proxy instanceof HTMLInputElement) {
14833
- this.proxy.value = this.value;
15000
+ if (this.control && !this.isUserInput) {
15001
+ this.control.value = this.value;
14834
15002
  }
14835
15003
 
14836
- if (previousValue !== undefined) {
15004
+ super.valueChanged(previous, this.value);
15005
+
15006
+ if (previous !== undefined && !this.isUserInput) {
14837
15007
  this.$emit("input");
14838
15008
  this.$emit("change");
14839
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;
14840
15035
  }
14841
15036
  /**
14842
15037
  * Increments the value using the step value
@@ -14849,7 +15044,6 @@ class NumberField$1 extends FormAssociatedNumberField {
14849
15044
  const value = parseFloat(this.value);
14850
15045
  const stepUpValue = !isNaN(value) ? value + this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? this.step : 0;
14851
15046
  this.value = stepUpValue.toString();
14852
- this.control.value = this.value;
14853
15047
  }
14854
15048
  /**
14855
15049
  * Decrements the value using the step value
@@ -14862,9 +15056,9 @@ class NumberField$1 extends FormAssociatedNumberField {
14862
15056
  const value = parseFloat(this.value);
14863
15057
  const stepDownValue = !isNaN(value) ? value - this.step : this.min > 0 ? this.min : this.max < 0 ? this.max : !this.min ? 0 - this.step : 0;
14864
15058
  this.value = stepDownValue.toString();
14865
- this.control.value = this.value;
14866
15059
  }
14867
15060
  /**
15061
+ * Sets up the initial state of the number field
14868
15062
  * @internal
14869
15063
  */
14870
15064
 
@@ -14889,6 +15083,7 @@ class NumberField$1 extends FormAssociatedNumberField {
14889
15083
 
14890
15084
  handleTextInput() {
14891
15085
  this.control.value = this.control.value.replace(/[^0-9\-+e.]/g, "");
15086
+ this.isUserInput = true;
14892
15087
  this.value = this.control.value;
14893
15088
  }
14894
15089
  /**
@@ -15758,7 +15953,7 @@ class HorizontalScroll$1 extends FoundationElement {
15758
15953
 
15759
15954
  scrollItemsChanged(previous, next) {
15760
15955
  if (next && !this.updatingItems) {
15761
- this.setStops();
15956
+ DOM.queueUpdate(() => this.setStops());
15762
15957
  }
15763
15958
  }
15764
15959
  /**
@@ -16043,7 +16238,184 @@ const horizontalScrollTemplate = (context, definition) => {
16043
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>`;
16044
16239
  };
16045
16240
 
16046
- 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 {}
16047
16419
  /**
16048
16420
  * A form-associated base class for the {@link @microsoft/fast-foundation#(Select:class)} component.
16049
16421
  *
@@ -16352,7 +16724,7 @@ class Select$1 extends FormAssociatedSelect {
16352
16724
  switch (key) {
16353
16725
  case " ":
16354
16726
  {
16355
- if (this.typeAheadExpired) {
16727
+ if (this.typeaheadExpired) {
16356
16728
  e.preventDefault();
16357
16729
  this.open = !this.open;
16358
16730
  }
@@ -16442,7 +16814,7 @@ applyMixins(Select$1, StartEnd, DelegatesARIASelect);
16442
16814
  */
16443
16815
 
16444
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({
16445
- filter: Listbox.slottedOptionFilter,
16817
+ filter: Listbox$1.slottedOptionFilter,
16446
16818
  flatten: true,
16447
16819
  property: "slottedOptions"
16448
16820
  })}></slot></div></template>`;
@@ -16571,7 +16943,7 @@ class SliderLabel extends FoundationElement {
16571
16943
  let rightNum = Math.round((1 - pct) * 100);
16572
16944
  let leftNum = Math.round(pct * 100);
16573
16945
 
16574
- if (leftNum === Number.NaN && rightNum === Number.NaN) {
16946
+ if (Number.isNaN(leftNum) && Number.isNaN(rightNum)) {
16575
16947
  rightNum = 50;
16576
16948
  leftNum = 50;
16577
16949
  }
@@ -18754,7 +19126,15 @@ class TreeItem extends FoundationElement {
18754
19126
  }
18755
19127
 
18756
19128
  handleSelected(e) {
18757
- 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
+ }
18758
19138
  }
18759
19139
 
18760
19140
  setExpanded(expanded) {
@@ -21544,7 +21924,7 @@ const neutralFillStealthActiveOnNeutralFillLayerRest = DesignToken.create('neutr
21544
21924
  return buttonRecipe.evaluate(target, baseRecipe.evaluate(target).rest).active;
21545
21925
  });
21546
21926
  const accordionItemStyles$1 = (context, definition) => css`
21547
- ${display('flex')} :host{box-sizing:border-box;font-family:${bodyFont};flex-direction:column;font-size:${typeRampBaseFontSize};line-height:${typeRampBaseLineHeight};background:${neutralFillLayerRest};color:${neutralForegroundRest};border:calc(${strokeWidth} * 1px) solid ${neutralStrokeLayerRest};border-radius:calc(${layerCornerRadius} * 1px)}.region{display:none;padding:calc(${designUnit} * 2 * 1px);background:${neutralFillLayerAltRest}}.heading{display:grid;position:relative;grid-template-columns:auto 1fr auto auto;align-items:center;z-index:2}.button{appearance:none;border:none;background:none;grid-column:2;grid-row:1;outline:none;margin:calc(${designUnit} * 3 * 1px) 0;padding:0 calc(${designUnit} * 2 * 1px);text-align:left;color:inherit;cursor:pointer;font-family:inherit}.button::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;z-index:1;cursor:pointer}.button:${focusVisible}::before{outline:none;border:calc(${strokeWidth} * 1px) solid ${focusStrokeOuter};border-radius:calc(${layerCornerRadius} * 1px);box-shadow:0 0 0 calc((${focusStrokeWidth} - ${strokeWidth}) * 1px) ${focusStrokeOuter}}:host(.expanded) .button:${focusVisible}::before{border-bottom-left-radius:0;border-bottom-right-radius:0}:host(.expanded) .region{display:block;border-top:calc(${strokeWidth} * 1px) solid ${neutralStrokeLayerRest};border-bottom-left-radius:calc((${layerCornerRadius} - ${strokeWidth}) * 1px);border-bottom-right-radius:calc((${layerCornerRadius} - ${strokeWidth}) * 1px)}.icon{display:flex;align-items:center;justify-content:center;grid-column:4;z-index:2;pointer-events:none;background:${neutralFillStealthRestOnNeutralFillLayerRest};border-radius:calc(${controlCornerRadius} * 1px);fill:currentcolor;width:calc(${heightNumber} * 1px);height:calc(${heightNumber} * 1px);margin:calc(${designUnit} * 2 * 1px)}.heading:hover .icon{background:${neutralFillStealthHoverOnNeutralFillLayerRest}}.heading:active .icon{background:${neutralFillStealthActiveOnNeutralFillLayerRest}}slot[name='collapsed-icon']{display:flex}:host(.expanded) slot[name='collapsed-icon']{display:none}slot[name='expanded-icon']{display:none}:host(.expanded) slot[name='expanded-icon']{display:flex}.start{display:flex;align-items:center;padding-inline-start:calc(${designUnit} * 2 * 1px);justify-content:center;grid-column:1;z-index:2}.end{display:flex;align-items:center;justify-content:center;grid-column:3;z-index:2}`.withBehaviors(forcedColorsStylesheetBehavior(css`
21927
+ ${display('flex')} :host{box-sizing:border-box;font-family:${bodyFont};flex-direction:column;font-size:${typeRampBaseFontSize};line-height:${typeRampBaseLineHeight};background:${neutralFillLayerRest};color:${neutralForegroundRest};border:calc(${strokeWidth} * 1px) solid ${neutralStrokeLayerRest};border-radius:calc(${layerCornerRadius} * 1px)}.region{display:none;padding:calc(${designUnit} * 2 * 1px);background:${neutralFillLayerAltRest}}.heading{display:grid;position:relative;grid-template-columns:auto 1fr auto auto;align-items:center}.button{appearance:none;border:none;background:none;grid-column:2;grid-row:1;outline:none;margin:calc(${designUnit} * 3 * 1px) 0;padding:0 calc(${designUnit} * 2 * 1px);text-align:left;color:inherit;cursor:pointer;font-family:inherit}.button::before{content:'';position:absolute;top:0;left:0;right:0;bottom:0;cursor:pointer}.button:${focusVisible}::before{outline:none;border:calc(${strokeWidth} * 1px) solid ${focusStrokeOuter};border-radius:calc(${layerCornerRadius} * 1px);box-shadow:0 0 0 calc((${focusStrokeWidth} - ${strokeWidth}) * 1px) ${focusStrokeOuter}}:host(.expanded) .button:${focusVisible}::before{border-bottom-left-radius:0;border-bottom-right-radius:0}:host(.expanded) .region{display:block;border-top:calc(${strokeWidth} * 1px) solid ${neutralStrokeLayerRest};border-bottom-left-radius:calc((${layerCornerRadius} - ${strokeWidth}) * 1px);border-bottom-right-radius:calc((${layerCornerRadius} - ${strokeWidth}) * 1px)}.icon{display:flex;align-items:center;justify-content:center;grid-column:4;pointer-events:none;background:${neutralFillStealthRestOnNeutralFillLayerRest};border-radius:calc(${controlCornerRadius} * 1px);fill:currentcolor;width:calc(${heightNumber} * 1px);height:calc(${heightNumber} * 1px);margin:calc(${designUnit} * 2 * 1px)}.heading:hover .icon{background:${neutralFillStealthHoverOnNeutralFillLayerRest}}.heading:active .icon{background:${neutralFillStealthActiveOnNeutralFillLayerRest}}slot[name='collapsed-icon']{display:flex}:host(.expanded) slot[name='collapsed-icon']{display:none}slot[name='expanded-icon']{display:none}:host(.expanded) slot[name='expanded-icon']{display:flex}.start{display:flex;align-items:center;padding-inline-start:calc(${designUnit} * 2 * 1px);justify-content:center;grid-column:1}.end{display:flex;align-items:center;justify-content:center;grid-column:3}.icon,.start,.end{position:relative}`.withBehaviors(forcedColorsStylesheetBehavior(css`
21548
21928
  .button:${focusVisible}::before{border-color:${SystemColors.Highlight};box-shadow:0 0 0 calc((${focusStrokeWidth} - ${strokeWidth}) * 1px) ${SystemColors.Highlight}}.icon{fill:${SystemColors.ButtonText}}`));
21549
21929
 
21550
21930
  /**
@@ -22999,7 +23379,7 @@ const fluentDivider = Divider.compose({
22999
23379
  const dividerStyles = dividerStyles$1;
23000
23380
 
23001
23381
  const flipperStyles$1 = (context, definition) => css`
23002
- ${display('inline-flex')} :host{height:calc((${heightNumber} + ${designUnit}) * 1px);justify-content:center;align-items:center;fill:currentcolor;color:${neutralFillStrongRest};background:padding-box linear-gradient(${neutralFillRest},${neutralFillRest}),border-box ${neutralStrokeControlRest};box-sizing:border-box;border:calc(${focusStrokeWidth} * 1px) solid transparent;border-radius:calc(${controlCornerRadius} * 1px);outline:none;padding:0}:host(.disabled){opacity:${disabledOpacity};cursor:${disabledCursor}}.next,.previous{display:flex}:host(:not(.disabled):hover){cursor:pointer}:host(:not(.disabled):hover){color:${neutralFillStrongHover}}:host(:not(.disabled):active){color:${neutralFillStrongActive}}:host(:${focusVisible}){border-color:${focusStrokeOuter}}:host::-moz-focus-inner{border:0}`.withBehaviors(forcedColorsStylesheetBehavior(css`
23382
+ ${display('inline-flex')} :host{height:calc((${heightNumber} + ${designUnit}) * 1px);justify-content:center;align-items:center;fill:currentcolor;color:${neutralFillStrongRest};background:padding-box linear-gradient(${neutralFillRest},${neutralFillRest}),border-box ${neutralStrokeControlRest};box-sizing:border-box;border:calc(${focusStrokeWidth} * 1px) solid transparent;border-radius:calc(${controlCornerRadius} * 1px);outline:none;padding:0}:host(.disabled){opacity:${disabledOpacity};cursor:${disabledCursor};pointer-events:none}.next,.previous{display:flex}:host(:not(.disabled):hover){cursor:pointer}:host(:not(.disabled):hover){color:${neutralFillStrongHover}}:host(:not(.disabled):active){color:${neutralFillStrongActive}}:host(:${focusVisible}){border-color:${focusStrokeOuter}}:host::-moz-focus-inner{border:0}`.withBehaviors(forcedColorsStylesheetBehavior(css`
23003
23383
  :host{background:${SystemColors.ButtonFace};border-color:${SystemColors.ButtonText}}:host .next,:host .previous{color:${SystemColors.ButtonText};fill:currentcolor}:host(:not(.disabled):hover){background:${SystemColors.Highlight}}:host(:not(.disabled):hover) .next,:host(:not(.disabled):hover) .previous{color:${SystemColors.HighlightText};fill:currentcolor}:host(.disabled){opacity:1}:host(.disabled),:host(.disabled) .next,:host(.disabled) .previous{border-color:${SystemColors.GrayText};color:${SystemColors.GrayText};fill:currentcolor}:host(:${focusVisible}){forced-color-adjust:none;border-color:${SystemColors.Highlight};box-shadow:0 0 0 2px ${SystemColors.ButtonFace},0 0 0 4px ${SystemColors.ButtonText}}`));
23004
23384
 
23005
23385
  /**
@@ -23098,6 +23478,7 @@ const horizontalScrollStyles = horizontalScrollStyles$1;
23098
23478
  const listboxStyles$1 = (context, definition) => css`
23099
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}`;
23100
23480
 
23481
+ class Listbox extends Listbox$1 {}
23101
23482
  /**
23102
23483
  * The Fluent listbox Custom Element. Implements, {@link @microsoft/fast-foundation#Listbox}
23103
23484
  * {@link @microsoft/fast-foundation#listboxTemplate}
@@ -23459,6 +23840,90 @@ const fluentRadioGroup = RadioGroup.compose({
23459
23840
 
23460
23841
  const radioGroupStyles = radioGroupStyles$1;
23461
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
+
23462
23927
  /**
23463
23928
  * The Fluent select class
23464
23929
  * @internal
@@ -23648,7 +24113,7 @@ const fluentSwitch = Switch.compose({
23648
24113
  const switchStyles = switchStyles$1;
23649
24114
 
23650
24115
  const tabsStyles$1 = (context, definition) => css`
23651
- ${display('grid')} :host{box-sizing:border-box;font-family:${bodyFont};font-size:${typeRampBaseFontSize};line-height:${typeRampBaseLineHeight};color:${neutralForegroundRest};grid-template-columns:auto 1fr auto;grid-template-rows:auto 1fr}.tablist{display:grid;grid-template-rows:calc(${heightNumber} * 1px);auto;grid-template-columns:auto;position:relative;width:max-content;align-self:end}.start,.end{align-self:center}.activeIndicator{grid-row:2;grid-column:1;width:20px;height:3px;border-radius:calc(${controlCornerRadius} * 1px);justify-self:center;background:${accentFillRest}}.activeIndicatorTransition{transition:transform 0.2s ease-in-out}.tabpanel{grid-row:2;grid-column-start:1;grid-column-end:4;position:relative}:host(.vertical){grid-template-rows:auto 1fr auto;grid-template-columns:auto 1fr}:host(.vertical) .tablist{grid-row-start:2;grid-row-end:2;display:grid;grid-template-rows:auto;grid-template-columns:auto 1fr;position:relative;width:max-content;justify-self:end;width:100%}:host(.vertical) .tabpanel{grid-column:2;grid-row-start:1;grid-row-end:4}:host(.vertical) .end{grid-row:3}:host(.vertical) .activeIndicator{grid-column:1;grid-row:1;width:3px;height:20px;margin-inline-start:calc(${focusStrokeWidth} * 1px);border-radius:calc(${controlCornerRadius} * 1px);align-self:center;background:${accentFillRest}}:host(.vertical) .activeIndicatorTransition{transition:transform 0.2s linear}`.withBehaviors(forcedColorsStylesheetBehavior(css`
24116
+ ${display('grid')} :host{box-sizing:border-box;font-family:${bodyFont};font-size:${typeRampBaseFontSize};line-height:${typeRampBaseLineHeight};color:${neutralForegroundRest};grid-template-columns:auto 1fr auto;grid-template-rows:auto 1fr}.tablist{display:grid;grid-template-rows:calc(${heightNumber} * 1px);auto;grid-template-columns:auto;position:relative;width:max-content;align-self:end}.start,.end{align-self:center}.activeIndicator{grid-row:2;grid-column:1;width:20px;height:3px;border-radius:calc(${controlCornerRadius} * 1px);justify-self:center;background:${accentFillRest}}.activeIndicatorTransition{transition:transform 0.2s ease-in-out}.tabpanel{grid-row:2;grid-column-start:1;grid-column-end:4;position:relative}:host(.vertical){grid-template-rows:auto 1fr auto;grid-template-columns:auto 1fr}:host(.vertical) .tablist{grid-row-start:2;grid-row-end:2;display:grid;grid-template-rows:auto;grid-template-columns:auto 1fr;position:relative;width:max-content;justify-self:end;align-self:flex-start;width:100%}:host(.vertical) .tabpanel{grid-column:2;grid-row-start:1;grid-row-end:4}:host(.vertical) .end{grid-row:3}:host(.vertical) .activeIndicator{grid-column:1;grid-row:1;width:3px;height:20px;margin-inline-start:calc(${focusStrokeWidth} * 1px);border-radius:calc(${controlCornerRadius} * 1px);align-self:center;background:${accentFillRest}}:host(.vertical) .activeIndicatorTransition{transition:transform 0.2s linear}`.withBehaviors(forcedColorsStylesheetBehavior(css`
23652
24117
  .activeIndicator,:host(.vertical) .activeIndicator{background:${SystemColors.Highlight}}`));
23653
24118
 
23654
24119
  const tabStyles$1 = (context, definition) => css`
@@ -24062,6 +24527,7 @@ const allComponents = {
24062
24527
  fluentProgressRing,
24063
24528
  fluentRadio,
24064
24529
  fluentRadioGroup,
24530
+ fluentSearch,
24065
24531
  fluentSelect,
24066
24532
  fluentSkeleton,
24067
24533
  fluentSlider,
@@ -24117,4 +24583,4 @@ function provideFluentDesignSystem(element) {
24117
24583
 
24118
24584
  const FluentDesignSystem = provideFluentDesignSystem().register(allComponents);
24119
24585
 
24120
- 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 };