@react-md/core 1.0.0-next.7 → 1.0.0-next.9

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 (713) hide show
  1. package/.stylelintrc.json +14 -0
  2. package/.turbo/turbo-build.log +6 -6
  3. package/.turbo/turbo-lint.log +13 -12
  4. package/CHANGELOG.md +15 -0
  5. package/README.md +39 -24
  6. package/coverage/clover.xml +1013 -529
  7. package/coverage/coverage-final.json +9 -3
  8. package/coverage/lcov-report/AutoComplete.tsx.html +283 -0
  9. package/coverage/lcov-report/MenuItemCheckbox.tsx.html +223 -0
  10. package/coverage/lcov-report/MenuItemInputToggle.tsx.html +178 -232
  11. package/coverage/lcov-report/MenuItemRadio.tsx.html +436 -0
  12. package/coverage/lcov-report/RootHtml.tsx.html +370 -0
  13. package/coverage/lcov-report/Select.tsx.html +1411 -0
  14. package/coverage/lcov-report/SrOnly.tsx.html +328 -0
  15. package/coverage/lcov-report/Typography.tsx.html +1027 -0
  16. package/coverage/lcov-report/autocomplete/AutoComplete.tsx.html +283 -0
  17. package/coverage/lcov-report/autocomplete/Autocomplete.tsx.html +283 -0
  18. package/coverage/lcov-report/autocomplete/index.html +161 -0
  19. package/coverage/lcov-report/autocomplete/useAutoComplete.ts.html +775 -0
  20. package/coverage/lcov-report/autocomplete/useAutocomplete.ts.html +775 -0
  21. package/coverage/lcov-report/autocomplete/useInlineAutoComplete.ts.html +340 -0
  22. package/coverage/lcov-report/autocomplete/useInlineAutocomplete.ts.html +346 -0
  23. package/coverage/lcov-report/autocomplete/utils.ts.html +106 -0
  24. package/coverage/lcov-report/avatar/Avatar.tsx.html +162 -99
  25. package/coverage/lcov-report/avatar/index.html +19 -34
  26. package/coverage/lcov-report/avatar/styles.ts.html +1 -1
  27. package/coverage/lcov-report/button/Button.tsx.html +85 -85
  28. package/coverage/lcov-report/button/index.html +12 -12
  29. package/coverage/lcov-report/dialog/DialogFooter.tsx.html +36 -36
  30. package/coverage/lcov-report/dialog/DialogHeader.tsx.html +26 -26
  31. package/coverage/lcov-report/dialog/index.html +34 -19
  32. package/coverage/lcov-report/form/AutoComplete.tsx.html +283 -0
  33. package/coverage/lcov-report/form/Form.tsx.html +22 -22
  34. package/coverage/lcov-report/form/OptGroup.tsx.html +169 -166
  35. package/coverage/lcov-report/form/Option.tsx.html +727 -0
  36. package/coverage/lcov-report/form/Select.tsx.html +962 -1112
  37. package/coverage/lcov-report/form/SelectOriginal.tsx.html +1630 -0
  38. package/coverage/lcov-report/form/SelectV2.tsx.html +1024 -0
  39. package/coverage/lcov-report/form/SelectedOption.tsx.html +250 -0
  40. package/coverage/lcov-report/form/index.html +57 -12
  41. package/coverage/lcov-report/form/selectUtils.ts.html +188 -221
  42. package/coverage/lcov-report/form/useAutoComplete.ts.html +787 -0
  43. package/coverage/lcov-report/form/useCombobox.ts.html +454 -460
  44. package/coverage/lcov-report/form/useComboboxList.ts.html +108 -93
  45. package/coverage/lcov-report/form/useFormReset.ts.html +229 -0
  46. package/coverage/lcov-report/form/useInlineAutoComplete.ts.html +379 -0
  47. package/coverage/lcov-report/form/useSelectCombobox.ts.html +499 -0
  48. package/coverage/lcov-report/form/utils.ts.html +209 -170
  49. package/coverage/lcov-report/icon/FontIcon.tsx.html +28 -28
  50. package/coverage/lcov-report/icon/MaterialIcon.tsx.html +235 -0
  51. package/coverage/lcov-report/icon/index.html +1 -1
  52. package/coverage/lcov-report/index.html +32 -32
  53. package/coverage/lcov-report/media-queries/appSize.ts.html +1 -1
  54. package/coverage/lcov-report/media-queries/index.html +1 -1
  55. package/coverage/lcov-report/menu/DropdownMenu.tsx.html +188 -188
  56. package/coverage/lcov-report/menu/Menu.tsx.html +271 -265
  57. package/coverage/lcov-report/menu/MenuItem.tsx.html +292 -0
  58. package/coverage/lcov-report/menu/MenuVisibilityProvider.tsx.html +48 -33
  59. package/coverage/lcov-report/menu/index.html +45 -15
  60. package/coverage/lcov-report/menu/useContextMenu.ts.html +490 -0
  61. package/coverage/lcov-report/menuItemInputToggleStyles.ts.html +319 -0
  62. package/coverage/lcov-report/movement/index.html +19 -19
  63. package/coverage/lcov-report/movement/useKeyboardMovementProvider.ts.html +422 -383
  64. package/coverage/lcov-report/positioning/constants.ts.html +463 -0
  65. package/coverage/lcov-report/positioning/index.html +30 -30
  66. package/coverage/lcov-report/positioning/useFixedPositioning.ts.html +1321 -0
  67. package/coverage/lcov-report/progress/CircularProgress.tsx.html +184 -184
  68. package/coverage/lcov-report/progress/index.html +19 -34
  69. package/coverage/lcov-report/searching/caseInsensitive.ts.html +685 -0
  70. package/coverage/lcov-report/searching/fuzzy.ts.html +610 -0
  71. package/coverage/lcov-report/searching/index.html +161 -0
  72. package/coverage/lcov-report/searching/toSearchQuery.ts.html +139 -0
  73. package/coverage/lcov-report/searching/utils.ts.html +247 -0
  74. package/coverage/lcov-report/src/CoreProviders.tsx.html +20 -20
  75. package/coverage/lcov-report/src/NoSsr.tsx.html +1 -1
  76. package/coverage/lcov-report/src/RootHtml.tsx.html +370 -0
  77. package/coverage/lcov-report/src/SsrProvider.tsx.html +10 -10
  78. package/coverage/lcov-report/src/app-bar/AppBar.tsx.html +1 -1
  79. package/coverage/lcov-report/src/app-bar/AppBarTitle.tsx.html +1 -1
  80. package/coverage/lcov-report/src/app-bar/index.html +1 -1
  81. package/coverage/lcov-report/src/avatar/Avatar.tsx.html +1 -1
  82. package/coverage/lcov-report/src/avatar/index.html +1 -1
  83. package/coverage/lcov-report/src/avatar/styles.ts.html +1 -1
  84. package/coverage/lcov-report/src/badge/Badge.tsx.html +1 -1
  85. package/coverage/lcov-report/src/badge/index.html +1 -1
  86. package/coverage/lcov-report/src/box/Box.tsx.html +1 -1
  87. package/coverage/lcov-report/src/box/index.html +1 -1
  88. package/coverage/lcov-report/src/box/styles.ts.html +1 -1
  89. package/coverage/lcov-report/src/button/AsyncButton.tsx.html +1 -1
  90. package/coverage/lcov-report/src/button/Button.tsx.html +1 -1
  91. package/coverage/lcov-report/src/button/ButtonUnstyled.tsx.html +1 -1
  92. package/coverage/lcov-report/src/button/FloatingActionButton.tsx.html +1 -1
  93. package/coverage/lcov-report/src/button/TooltippedButton.tsx.html +1 -1
  94. package/coverage/lcov-report/src/button/buttonStyles.ts.html +1 -1
  95. package/coverage/lcov-report/src/button/buttonUnstyledStyles.ts.html +1 -1
  96. package/coverage/lcov-report/src/button/index.html +1 -1
  97. package/coverage/lcov-report/src/card/Card.tsx.html +1 -1
  98. package/coverage/lcov-report/src/card/CardContent.tsx.html +1 -1
  99. package/coverage/lcov-report/src/card/CardFooter.tsx.html +1 -1
  100. package/coverage/lcov-report/src/card/CardHeader.tsx.html +1 -1
  101. package/coverage/lcov-report/src/card/CardSubtitle.tsx.html +1 -1
  102. package/coverage/lcov-report/src/card/CardTitle.tsx.html +1 -1
  103. package/coverage/lcov-report/src/card/ClickableCard.tsx.html +1 -1
  104. package/coverage/lcov-report/src/card/index.html +1 -1
  105. package/coverage/lcov-report/src/card/styles.ts.html +1 -1
  106. package/coverage/lcov-report/src/chip/Chip.tsx.html +1 -1
  107. package/coverage/lcov-report/src/chip/index.html +1 -1
  108. package/coverage/lcov-report/src/chip/styles.ts.html +1 -1
  109. package/coverage/lcov-report/src/cssUtils.ts.html +53 -53
  110. package/coverage/lcov-report/src/delegateEvent.ts.html +1 -1
  111. package/coverage/lcov-report/src/dialog/Dialog.tsx.html +1 -1
  112. package/coverage/lcov-report/src/dialog/DialogContainer.tsx.html +1 -1
  113. package/coverage/lcov-report/src/dialog/DialogContent.tsx.html +1 -1
  114. package/coverage/lcov-report/src/dialog/DialogFooter.tsx.html +1 -1
  115. package/coverage/lcov-report/src/dialog/DialogHeader.tsx.html +1 -1
  116. package/coverage/lcov-report/src/dialog/DialogTitle.tsx.html +1 -1
  117. package/coverage/lcov-report/src/dialog/FixedDialog.tsx.html +1 -1
  118. package/coverage/lcov-report/src/dialog/NestedDialogProvider.ts.html +1 -1
  119. package/coverage/lcov-report/src/dialog/index.html +1 -1
  120. package/coverage/lcov-report/src/dialog/styles.ts.html +1 -1
  121. package/coverage/lcov-report/src/divider/Divider.tsx.html +1 -1
  122. package/coverage/lcov-report/src/divider/index.html +1 -1
  123. package/coverage/lcov-report/src/divider/styles.ts.html +1 -1
  124. package/coverage/lcov-report/src/draggable/index.html +1 -1
  125. package/coverage/lcov-report/src/draggable/useDraggable.ts.html +1 -1
  126. package/coverage/lcov-report/src/draggable/utils.ts.html +1 -1
  127. package/coverage/lcov-report/src/expansion-panel/ExpansionList.tsx.html +1 -1
  128. package/coverage/lcov-report/src/expansion-panel/ExpansionPanel.tsx.html +1 -1
  129. package/coverage/lcov-report/src/expansion-panel/ExpansionPanelHeader.tsx.html +1 -1
  130. package/coverage/lcov-report/src/expansion-panel/index.html +1 -1
  131. package/coverage/lcov-report/src/expansion-panel/useExpansionList.ts.html +1 -1
  132. package/coverage/lcov-report/src/expansion-panel/useExpansionPanels.ts.html +1 -1
  133. package/coverage/lcov-report/src/focus/index.html +1 -1
  134. package/coverage/lcov-report/src/focus/useFocusContainer.ts.html +1 -1
  135. package/coverage/lcov-report/src/focus/utils.ts.html +1 -1
  136. package/coverage/lcov-report/src/form/AutoComplete.tsx.html +283 -0
  137. package/coverage/lcov-report/src/form/Checkbox.tsx.html +1 -1
  138. package/coverage/lcov-report/src/form/Fieldset.tsx.html +1 -1
  139. package/coverage/lcov-report/src/form/FileInput.tsx.html +1 -1
  140. package/coverage/lcov-report/src/form/Form.tsx.html +11 -8
  141. package/coverage/lcov-report/src/form/FormMessage.tsx.html +1 -1
  142. package/coverage/lcov-report/src/form/FormMessageContainer.tsx.html +1 -1
  143. package/coverage/lcov-report/src/form/FormMessageCounter.tsx.html +1 -1
  144. package/coverage/lcov-report/src/form/InputToggle.tsx.html +1 -1
  145. package/coverage/lcov-report/src/form/InputToggleIcon.tsx.html +56 -56
  146. package/coverage/lcov-report/src/form/Label.tsx.html +1 -1
  147. package/coverage/lcov-report/src/form/Legend.tsx.html +1 -1
  148. package/coverage/lcov-report/src/form/MenuItemCheckbox.tsx.html +3 -3
  149. package/coverage/lcov-report/src/form/MenuItemFileInput.tsx.html +1 -1
  150. package/coverage/lcov-report/src/form/MenuItemInputToggle.tsx.html +178 -232
  151. package/coverage/lcov-report/src/form/MenuItemRadio.tsx.html +3 -3
  152. package/coverage/lcov-report/src/form/MenuItemSwitch.tsx.html +1 -1
  153. package/coverage/lcov-report/src/form/MenuItemTextField.tsx.html +1 -1
  154. package/coverage/lcov-report/src/form/NativeSelect.tsx.html +1 -1
  155. package/coverage/lcov-report/src/form/OptGroup.tsx.html +1 -1
  156. package/coverage/lcov-report/src/form/Option.tsx.html +1 -1
  157. package/coverage/lcov-report/src/form/Password.tsx.html +1 -1
  158. package/coverage/lcov-report/src/form/Radio.tsx.html +1 -1
  159. package/coverage/lcov-report/src/form/Select.tsx.html +894 -1146
  160. package/coverage/lcov-report/src/form/SelectValue.tsx.html +1 -1
  161. package/coverage/lcov-report/src/form/Slider.tsx.html +1 -1
  162. package/coverage/lcov-report/src/form/SliderContainer.tsx.html +1 -1
  163. package/coverage/lcov-report/src/form/SliderMark.tsx.html +1 -1
  164. package/coverage/lcov-report/src/form/SliderMarkLabel.tsx.html +1 -1
  165. package/coverage/lcov-report/src/form/SliderThumb.tsx.html +1 -1
  166. package/coverage/lcov-report/src/form/SliderTrack.tsx.html +1 -1
  167. package/coverage/lcov-report/src/form/SliderValueMarks.tsx.html +1 -1
  168. package/coverage/lcov-report/src/form/SliderValueTooltip.tsx.html +1 -1
  169. package/coverage/lcov-report/src/form/Switch.tsx.html +1 -1
  170. package/coverage/lcov-report/src/form/SwitchTrack.tsx.html +1 -1
  171. package/coverage/lcov-report/src/form/TextArea.tsx.html +1 -1
  172. package/coverage/lcov-report/src/form/TextField.tsx.html +1 -1
  173. package/coverage/lcov-report/src/form/TextFieldAddon.tsx.html +1 -1
  174. package/coverage/lcov-report/src/form/TextFieldContainer.tsx.html +1 -1
  175. package/coverage/lcov-report/src/form/TextFieldContainerStyles.ts.html +1 -1
  176. package/coverage/lcov-report/src/form/fileUtils.ts.html +1 -1
  177. package/coverage/lcov-report/src/form/formConfig.ts.html +1 -1
  178. package/coverage/lcov-report/src/form/formMessageStyles.ts.html +1 -1
  179. package/coverage/lcov-report/src/form/index.html +30 -900
  180. package/coverage/lcov-report/src/form/inputToggleStyles.ts.html +30 -30
  181. package/coverage/lcov-report/src/form/menuItemInputToggleStyles.ts.html +319 -0
  182. package/coverage/lcov-report/src/form/nativeSelectStyles.ts.html +1 -1
  183. package/coverage/lcov-report/src/form/optionStyles.ts.html +1 -1
  184. package/coverage/lcov-report/src/form/passwordStyles.ts.html +1 -1
  185. package/coverage/lcov-report/src/form/selectStyles.ts.html +1 -1
  186. package/coverage/lcov-report/src/form/selectUtils.ts.html +1 -1
  187. package/coverage/lcov-report/src/form/sliderUtils.ts.html +1 -1
  188. package/coverage/lcov-report/src/form/switchStyles.ts.html +1 -1
  189. package/coverage/lcov-report/src/form/textAreaStyles.ts.html +1 -1
  190. package/coverage/lcov-report/src/form/textFieldStyles.ts.html +1 -1
  191. package/coverage/lcov-report/src/form/useAutoComplete.ts.html +787 -0
  192. package/coverage/lcov-report/src/form/useCheckboxGroup.ts.html +1 -1
  193. package/coverage/lcov-report/src/form/useCombobox.ts.html +943 -457
  194. package/coverage/lcov-report/src/form/useEditableCombobox.ts.html +502 -0
  195. package/coverage/lcov-report/src/form/useFileUpload.ts.html +1 -1
  196. package/coverage/lcov-report/src/form/useInlineAutoComplete.ts.html +109 -0
  197. package/coverage/lcov-report/src/form/useListboxProvider.ts.html +1 -1
  198. package/coverage/lcov-report/src/form/useNumberField.ts.html +1 -1
  199. package/coverage/lcov-report/src/form/useRadioGroup.ts.html +1 -1
  200. package/coverage/lcov-report/src/form/useRangeSlider.ts.html +1 -1
  201. package/coverage/lcov-report/src/form/useResizingTextArea.ts.html +1 -1
  202. package/coverage/lcov-report/src/form/useSelectCombobox.ts.html +295 -0
  203. package/coverage/lcov-report/src/form/useSlider.ts.html +1 -1
  204. package/coverage/lcov-report/src/form/useTextField.ts.html +1 -1
  205. package/coverage/lcov-report/src/form/utils.ts.html +200 -170
  206. package/coverage/lcov-report/src/form/validation.ts.html +1 -1
  207. package/coverage/lcov-report/src/hoverMode/index.html +1 -1
  208. package/coverage/lcov-report/src/hoverMode/useHoverMode.ts.html +1 -1
  209. package/coverage/lcov-report/src/hoverMode/useHoverModeProvider.ts.html +1 -1
  210. package/coverage/lcov-report/src/icon/FontIcon.tsx.html +28 -28
  211. package/coverage/lcov-report/src/icon/IconRotator.tsx.html +1 -1
  212. package/coverage/lcov-report/src/icon/MaterialIcon.tsx.html +1 -1
  213. package/coverage/lcov-report/src/icon/MaterialSymbol.tsx.html +1 -1
  214. package/coverage/lcov-report/src/icon/SVGIcon.tsx.html +1 -1
  215. package/coverage/lcov-report/src/icon/TextIconSpacing.tsx.html +51 -51
  216. package/coverage/lcov-report/src/icon/iconConfig.tsx.html +10 -10
  217. package/coverage/lcov-report/src/icon/index.html +1 -1
  218. package/coverage/lcov-report/src/icon/material.ts.html +1 -1
  219. package/coverage/lcov-report/src/icon/materialConfig.ts.html +1 -1
  220. package/coverage/lcov-report/src/icon/styles.ts.html +38 -38
  221. package/coverage/lcov-report/src/index.html +9 -354
  222. package/coverage/lcov-report/src/interaction/Ripple.tsx.html +1 -1
  223. package/coverage/lcov-report/src/interaction/RippleContainer.tsx.html +1 -1
  224. package/coverage/lcov-report/src/interaction/UserInteractionModeProvider.tsx.html +87 -87
  225. package/coverage/lcov-report/src/interaction/config.ts.html +7 -7
  226. package/coverage/lcov-report/src/interaction/index.html +1 -1
  227. package/coverage/lcov-report/src/interaction/useElementInteraction.tsx.html +83 -83
  228. package/coverage/lcov-report/src/interaction/useHigherContrastChildren.tsx.html +7 -7
  229. package/coverage/lcov-report/src/interaction/utils.ts.html +1 -1
  230. package/coverage/lcov-report/src/layout/LayoutAppBar.tsx.html +1 -1
  231. package/coverage/lcov-report/src/layout/LayoutNav.tsx.html +1 -1
  232. package/coverage/lcov-report/src/layout/LayoutWindowSplitter.tsx.html +1 -1
  233. package/coverage/lcov-report/src/layout/Main.tsx.html +1 -1
  234. package/coverage/lcov-report/src/layout/index.html +1 -1
  235. package/coverage/lcov-report/src/layout/layoutNavStyles.ts.html +1 -1
  236. package/coverage/lcov-report/src/layout/layoutWindowSplitterStyles.ts.html +1 -1
  237. package/coverage/lcov-report/src/layout/mainStyles.ts.html +1 -1
  238. package/coverage/lcov-report/src/layout/useExpandableLayout.ts.html +1 -1
  239. package/coverage/lcov-report/src/layout/useHorizontalLayoutTransition.ts.html +1 -1
  240. package/coverage/lcov-report/src/layout/useLayoutAppBarHeight.ts.html +1 -1
  241. package/coverage/lcov-report/src/layout/useLayoutTree.ts.html +1 -1
  242. package/coverage/lcov-report/src/layout/useLayoutWindowSplitter.ts.html +1 -1
  243. package/coverage/lcov-report/src/layout/useMainTabIndex.ts.html +1 -1
  244. package/coverage/lcov-report/src/layout/useResizableLayout.ts.html +1 -1
  245. package/coverage/lcov-report/src/layout/useTemporaryLayout.ts.html +1 -1
  246. package/coverage/lcov-report/src/link/Link.tsx.html +1 -1
  247. package/coverage/lcov-report/src/link/SkipToMainContent.tsx.html +1 -1
  248. package/coverage/lcov-report/src/link/index.html +1 -1
  249. package/coverage/lcov-report/src/link/styles.ts.html +1 -1
  250. package/coverage/lcov-report/src/list/List.tsx.html +30 -30
  251. package/coverage/lcov-report/src/list/ListItem.tsx.html +124 -124
  252. package/coverage/lcov-report/src/list/ListItemAddon.tsx.html +35 -35
  253. package/coverage/lcov-report/src/list/ListItemChildren.tsx.html +79 -79
  254. package/coverage/lcov-report/src/list/ListItemLink.tsx.html +2 -2
  255. package/coverage/lcov-report/src/list/ListItemText.tsx.html +35 -35
  256. package/coverage/lcov-report/src/list/ListSubheader.tsx.html +1 -1
  257. package/coverage/lcov-report/src/list/getListItemHeight.ts.html +44 -47
  258. package/coverage/lcov-report/src/list/index.html +5 -5
  259. package/coverage/lcov-report/src/list/listItemStyles.ts.html +65 -65
  260. package/coverage/lcov-report/src/media-queries/AppSizeProvider.tsx.html +49 -49
  261. package/coverage/lcov-report/src/media-queries/appSize.ts.html +1 -1
  262. package/coverage/lcov-report/src/media-queries/index.html +1 -1
  263. package/coverage/lcov-report/src/media-queries/useMediaQuery.ts.html +24 -24
  264. package/coverage/lcov-report/src/menu/DropdownMenu.tsx.html +1 -1
  265. package/coverage/lcov-report/src/menu/Menu.tsx.html +3 -3
  266. package/coverage/lcov-report/src/menu/MenuBar.tsx.html +1 -1
  267. package/coverage/lcov-report/src/menu/MenuButton.tsx.html +1 -1
  268. package/coverage/lcov-report/src/menu/MenuConfigurationProvider.tsx.html +1 -1
  269. package/coverage/lcov-report/src/menu/MenuItem.tsx.html +1 -1
  270. package/coverage/lcov-report/src/menu/MenuItemButton.tsx.html +1 -1
  271. package/coverage/lcov-report/src/menu/MenuItemGroup.tsx.html +1 -1
  272. package/coverage/lcov-report/src/menu/MenuItemSeparator.tsx.html +1 -1
  273. package/coverage/lcov-report/src/menu/MenuSheet.tsx.html +1 -1
  274. package/coverage/lcov-report/src/menu/MenuVisibilityProvider.tsx.html +1 -1
  275. package/coverage/lcov-report/src/menu/MenuWidget.tsx.html +1 -1
  276. package/coverage/lcov-report/src/menu/MenuWidgetKeyboardProvider.tsx.html +1 -1
  277. package/coverage/lcov-report/src/menu/index.html +1 -1
  278. package/coverage/lcov-report/src/menu/useContextMenu.ts.html +1 -1
  279. package/coverage/lcov-report/src/menu/useMenuBarProvider.ts.html +1 -1
  280. package/coverage/lcov-report/src/menu/utils.ts.html +1 -1
  281. package/coverage/lcov-report/src/movement/constants.ts.html +1 -1
  282. package/coverage/lcov-report/src/movement/findMatchIndex.ts.html +1 -1
  283. package/coverage/lcov-report/src/movement/index.html +17 -62
  284. package/coverage/lcov-report/src/movement/useKeyboardMovementProvider.ts.html +1 -1
  285. package/coverage/lcov-report/src/movement/utils.ts.html +143 -119
  286. package/coverage/lcov-report/src/overlay/Overlay.tsx.html +1 -1
  287. package/coverage/lcov-report/src/overlay/index.html +1 -1
  288. package/coverage/lcov-report/src/overlay/overlayStyles.ts.html +1 -1
  289. package/coverage/lcov-report/src/portal/Portal.tsx.html +1 -1
  290. package/coverage/lcov-report/src/portal/PortalContainerProvider.tsx.html +36 -36
  291. package/coverage/lcov-report/src/portal/index.html +1 -1
  292. package/coverage/lcov-report/src/positioning/constants.ts.html +1 -1
  293. package/coverage/lcov-report/src/positioning/createHorizontalPosition.ts.html +1 -1
  294. package/coverage/lcov-report/src/positioning/createVerticalPosition.ts.html +1 -1
  295. package/coverage/lcov-report/src/positioning/getFixedPosition.ts.html +1 -1
  296. package/coverage/lcov-report/src/positioning/index.html +1 -1
  297. package/coverage/lcov-report/src/positioning/useFixedPositioning.ts.html +1 -1
  298. package/coverage/lcov-report/src/positioning/utils.ts.html +1 -1
  299. package/coverage/lcov-report/src/progress/CircularProgress.tsx.html +81 -81
  300. package/coverage/lcov-report/src/progress/LinearProgress.tsx.html +1 -1
  301. package/coverage/lcov-report/src/progress/getProgressA11y.ts.html +1 -1
  302. package/coverage/lcov-report/src/progress/index.html +1 -1
  303. package/coverage/lcov-report/src/responsive-item/ResponsiveItemContainer.tsx.html +1 -1
  304. package/coverage/lcov-report/src/responsive-item/ResponsiveItemOverlay.tsx.html +1 -1
  305. package/coverage/lcov-report/src/responsive-item/index.html +1 -1
  306. package/coverage/lcov-report/src/responsive-item/styles.ts.html +1 -1
  307. package/coverage/lcov-report/src/scroll/ScrollLock.tsx.html +1 -1
  308. package/coverage/lcov-report/src/scroll/getScrollbarWidth.ts.html +1 -1
  309. package/coverage/lcov-report/src/scroll/index.html +1 -1
  310. package/coverage/lcov-report/src/scroll/useScrollLock.ts.html +1 -1
  311. package/coverage/lcov-report/src/segmented-button/SegmentedButton.tsx.html +1 -1
  312. package/coverage/lcov-report/src/segmented-button/SegmentedButtonContainer.tsx.html +1 -1
  313. package/coverage/lcov-report/src/segmented-button/index.html +1 -1
  314. package/coverage/lcov-report/src/segmented-button/segmentedButtonContainerStyles.ts.html +1 -1
  315. package/coverage/lcov-report/src/segmented-button/segmentedButtonStyles.ts.html +1 -1
  316. package/coverage/lcov-report/src/sheet/Sheet.tsx.html +1 -1
  317. package/coverage/lcov-report/src/sheet/index.html +1 -1
  318. package/coverage/lcov-report/src/sheet/styles.ts.html +1 -1
  319. package/coverage/lcov-report/src/snackbar/DefaultToastRenderer.tsx.html +1 -1
  320. package/coverage/lcov-report/src/snackbar/Snackbar.tsx.html +1 -1
  321. package/coverage/lcov-report/src/snackbar/Toast.tsx.html +1 -1
  322. package/coverage/lcov-report/src/snackbar/ToastActionButton.tsx.html +1 -1
  323. package/coverage/lcov-report/src/snackbar/ToastCloseButton.tsx.html +1 -1
  324. package/coverage/lcov-report/src/snackbar/ToastContent.tsx.html +1 -1
  325. package/coverage/lcov-report/src/snackbar/ToastManager.tsx.html +1 -1
  326. package/coverage/lcov-report/src/snackbar/ToastManagerProvider.tsx.html +1 -1
  327. package/coverage/lcov-report/src/snackbar/index.html +1 -1
  328. package/coverage/lcov-report/src/snackbar/snackbarStyles.ts.html +1 -1
  329. package/coverage/lcov-report/src/snackbar/toastContentStyles.ts.html +1 -1
  330. package/coverage/lcov-report/src/snackbar/toastStyles.ts.html +1 -1
  331. package/coverage/lcov-report/src/snackbar/useCurrentToastActions.ts.html +1 -1
  332. package/coverage/lcov-report/src/suspense/CircularProgressSuspense.tsx.html +142 -142
  333. package/coverage/lcov-report/src/suspense/NullSuspense.tsx.html +88 -88
  334. package/coverage/lcov-report/src/suspense/index.html +32 -32
  335. package/coverage/lcov-report/src/table/Table.tsx.html +1 -1
  336. package/coverage/lcov-report/src/table/TableBody.tsx.html +1 -1
  337. package/coverage/lcov-report/src/table/TableCell.tsx.html +1 -1
  338. package/coverage/lcov-report/src/table/TableCellContent.tsx.html +1 -1
  339. package/coverage/lcov-report/src/table/TableCheckbox.tsx.html +1 -1
  340. package/coverage/lcov-report/src/table/TableConfigurationProvider.tsx.html +1 -1
  341. package/coverage/lcov-report/src/table/TableContainer.tsx.html +1 -1
  342. package/coverage/lcov-report/src/table/TableContainerProvider.tsx.html +1 -1
  343. package/coverage/lcov-report/src/table/TableFooter.tsx.html +1 -1
  344. package/coverage/lcov-report/src/table/TableHeader.tsx.html +1 -1
  345. package/coverage/lcov-report/src/table/TableRadio.tsx.html +1 -1
  346. package/coverage/lcov-report/src/table/TableRow.tsx.html +1 -1
  347. package/coverage/lcov-report/src/table/index.html +1 -1
  348. package/coverage/lcov-report/src/table/tableCellStyles.ts.html +1 -1
  349. package/coverage/lcov-report/src/table/tableContainerStyles.ts.html +1 -1
  350. package/coverage/lcov-report/src/table/tableFooterStyles.ts.html +1 -1
  351. package/coverage/lcov-report/src/table/tableHeaderStyles.ts.html +1 -1
  352. package/coverage/lcov-report/src/table/tableRowStyles.ts.html +1 -1
  353. package/coverage/lcov-report/src/table/tableStyles.ts.html +1 -1
  354. package/coverage/lcov-report/src/tabs/Tab.tsx.html +1 -1
  355. package/coverage/lcov-report/src/tabs/TabList.tsx.html +1 -1
  356. package/coverage/lcov-report/src/tabs/TabListScrollButton.tsx.html +1 -1
  357. package/coverage/lcov-report/src/tabs/index.html +1 -1
  358. package/coverage/lcov-report/src/tabs/tabIndicatorStyles.ts.html +1 -1
  359. package/coverage/lcov-report/src/tabs/tabListScrollButtonStyles.ts.html +1 -1
  360. package/coverage/lcov-report/src/tabs/tabListStyles.ts.html +1 -1
  361. package/coverage/lcov-report/src/tabs/tabStyles.ts.html +1 -1
  362. package/coverage/lcov-report/src/tabs/useTabList.ts.html +1 -1
  363. package/coverage/lcov-report/src/tabs/useTabs.ts.html +1 -1
  364. package/coverage/lcov-report/src/tabs/utils.ts.html +1 -1
  365. package/coverage/lcov-report/src/test-utils/IntersectionObserver.ts.html +1 -1
  366. package/coverage/lcov-report/src/test-utils/ResizeObserver.ts.html +1 -1
  367. package/coverage/lcov-report/src/test-utils/data-testid.ts.html +18 -6
  368. package/coverage/lcov-report/src/test-utils/drag.ts.html +1 -1
  369. package/coverage/lcov-report/src/test-utils/index.html +7 -7
  370. package/coverage/lcov-report/src/test-utils/jest-setup.ts.html +9 -9
  371. package/coverage/lcov-report/src/test-utils/matchMedia.ts.html +4 -4
  372. package/coverage/lcov-report/src/test-utils/polyfills/IntersectionObserver.ts.html +4 -4
  373. package/coverage/lcov-report/src/test-utils/polyfills/ResizeObserver.ts.html +3 -3
  374. package/coverage/lcov-report/src/test-utils/polyfills/TextDecoder.ts.html +106 -0
  375. package/coverage/lcov-report/src/test-utils/polyfills/TextEncoder.ts.html +100 -0
  376. package/coverage/lcov-report/src/test-utils/polyfills/index.html +1 -1
  377. package/coverage/lcov-report/src/test-utils/polyfills/matchMedia.ts.html +6 -6
  378. package/coverage/lcov-report/src/test-utils/polyfills/offsetParent.ts.html +14 -14
  379. package/coverage/lcov-report/src/test-utils/polyfills/scrollIntoView.ts.html +5 -5
  380. package/coverage/lcov-report/src/test-utils/render.tsx.html +21 -21
  381. package/coverage/lcov-report/src/test-utils/root-html-environment.ts.html +85 -0
  382. package/coverage/lcov-report/src/test-utils/timers.ts.html +1 -1
  383. package/coverage/lcov-report/src/theme/LocalStorageColorSchemeProvider.tsx.html +1 -1
  384. package/coverage/lcov-report/src/theme/ThemeProvider.tsx.html +1 -1
  385. package/coverage/lcov-report/src/theme/colors.ts.html +1 -1
  386. package/coverage/lcov-report/src/theme/cssVars.ts.html +1 -1
  387. package/coverage/lcov-report/src/theme/index.html +1 -1
  388. package/coverage/lcov-report/src/theme/useCSSVariables.ts.html +1 -1
  389. package/coverage/lcov-report/src/theme/useColorScheme.ts.html +1 -1
  390. package/coverage/lcov-report/src/theme/useColorSchemeMetaTag.ts.html +1 -1
  391. package/coverage/lcov-report/src/theme/useColorSchemeProvider.ts.html +1 -1
  392. package/coverage/lcov-report/src/theme/usePrefersColorScheme.ts.html +1 -1
  393. package/coverage/lcov-report/src/theme/utils.ts.html +1 -1
  394. package/coverage/lcov-report/src/tooltip/Tooltip.tsx.html +1 -1
  395. package/coverage/lcov-report/src/tooltip/TooltipHoverModeProvider.tsx.html +1 -1
  396. package/coverage/lcov-report/src/tooltip/constants.ts.html +1 -1
  397. package/coverage/lcov-report/src/tooltip/index.html +1 -1
  398. package/coverage/lcov-report/src/tooltip/tooltipStyles.ts.html +1 -1
  399. package/coverage/lcov-report/src/tooltip/useTooltip.ts.html +1 -1
  400. package/coverage/lcov-report/src/tooltip/useTooltipPosition.ts.html +1 -1
  401. package/coverage/lcov-report/src/tooltip/utils.ts.html +1 -1
  402. package/coverage/lcov-report/src/transition/CSSTransition.tsx.html +1 -1
  403. package/coverage/lcov-report/src/transition/Collapse.tsx.html +1 -1
  404. package/coverage/lcov-report/src/transition/CrossFade.tsx.html +1 -1
  405. package/coverage/lcov-report/src/transition/ScaleTransition.tsx.html +1 -1
  406. package/coverage/lcov-report/src/transition/SkeletonPlaceholder.tsx.html +1 -1
  407. package/coverage/lcov-report/src/transition/Slide.tsx.html +1 -1
  408. package/coverage/lcov-report/src/transition/SlideContainer.tsx.html +1 -1
  409. package/coverage/lcov-report/src/transition/collapseStyles.ts.html +13 -13
  410. package/coverage/lcov-report/src/transition/config.ts.html +3 -3
  411. package/coverage/lcov-report/src/transition/index.html +7 -7
  412. package/coverage/lcov-report/src/transition/maxWidthTransition.ts.html +1 -1
  413. package/coverage/lcov-report/src/transition/skeletonPlaceholderUtils.ts.html +1 -1
  414. package/coverage/lcov-report/src/transition/useCSSTransition.ts.html +1 -1
  415. package/coverage/lcov-report/src/transition/useCarousel.ts.html +1 -1
  416. package/coverage/lcov-report/src/transition/useCollapseTransition.ts.html +96 -150
  417. package/coverage/lcov-report/src/transition/useCrossFadeTransition.ts.html +1 -1
  418. package/coverage/lcov-report/src/transition/useMaxWidthTransition.ts.html +1 -1
  419. package/coverage/lcov-report/src/transition/useScaleTransition.ts.html +1 -1
  420. package/coverage/lcov-report/src/transition/useSkeletonPlaceholder.ts.html +1 -1
  421. package/coverage/lcov-report/src/transition/useSlideTransition.ts.html +1 -1
  422. package/coverage/lcov-report/src/transition/useTransition.ts.html +152 -152
  423. package/coverage/lcov-report/src/transition/utils.ts.html +14 -14
  424. package/coverage/lcov-report/src/tree/DefaultTreeItemRenderer.tsx.html +1 -1
  425. package/coverage/lcov-report/src/tree/Tree.tsx.html +1 -1
  426. package/coverage/lcov-report/src/tree/TreeGroup.tsx.html +45 -45
  427. package/coverage/lcov-report/src/tree/TreeItem.tsx.html +1 -1
  428. package/coverage/lcov-report/src/tree/TreeItemExpander.tsx.html +1 -1
  429. package/coverage/lcov-report/src/tree/TreeProvider.tsx.html +8 -8
  430. package/coverage/lcov-report/src/tree/index.html +1 -1
  431. package/coverage/lcov-report/src/tree/styles.ts.html +5 -5
  432. package/coverage/lcov-report/src/tree/useTree.ts.html +1 -1
  433. package/coverage/lcov-report/src/tree/useTreeExpansion.ts.html +1 -1
  434. package/coverage/lcov-report/src/tree/useTreeItems.ts.html +1 -1
  435. package/coverage/lcov-report/src/tree/useTreeMovement.ts.html +1 -1
  436. package/coverage/lcov-report/src/tree/useTreeSelection.ts.html +1 -1
  437. package/coverage/lcov-report/src/tree/utils.ts.html +1 -1
  438. package/coverage/lcov-report/src/typography/SrOnly.tsx.html +12 -12
  439. package/coverage/lcov-report/src/typography/TextContainer.tsx.html +1 -1
  440. package/coverage/lcov-report/src/typography/Typography.tsx.html +94 -94
  441. package/coverage/lcov-report/src/typography/WritingDirectionProvider.tsx.html +1 -1
  442. package/coverage/lcov-report/src/typography/index.html +1 -1
  443. package/coverage/lcov-report/src/useAsyncAction.ts.html +1 -1
  444. package/coverage/lcov-report/src/useDebouncedFunction.ts.html +1 -1
  445. package/coverage/lcov-report/src/useDropzone.ts.html +1 -1
  446. package/coverage/lcov-report/src/useElementSize.ts.html +1 -1
  447. package/coverage/lcov-report/src/useEnsuredId.ts.html +8 -8
  448. package/coverage/lcov-report/src/useEnsuredRef.ts.html +11 -11
  449. package/coverage/lcov-report/src/useEnsuredState.ts.html +16 -16
  450. package/coverage/lcov-report/src/useHtmlClassName.ts.html +1 -1
  451. package/coverage/lcov-report/src/useIntersectionObserver.ts.html +1 -1
  452. package/coverage/lcov-report/src/useIsomorphicLayoutEffect.ts.html +1 -1
  453. package/coverage/lcov-report/src/useLocalStorage.ts.html +1 -1
  454. package/coverage/lcov-report/src/useOrientation.ts.html +32 -32
  455. package/coverage/lcov-report/src/usePageInactive.ts.html +1 -1
  456. package/coverage/lcov-report/src/useResizeListener.ts.html +1 -1
  457. package/coverage/lcov-report/src/useResizeObserver.ts.html +23 -23
  458. package/coverage/lcov-report/src/useThrottledFunction.ts.html +1 -1
  459. package/coverage/lcov-report/src/useToggle.ts.html +1 -1
  460. package/coverage/lcov-report/src/useUnmounted.ts.html +1 -1
  461. package/coverage/lcov-report/src/useWindowSize.ts.html +1 -1
  462. package/coverage/lcov-report/src/utils/RenderRecursively.tsx.html +1 -1
  463. package/coverage/lcov-report/src/utils/alphaNumericSort.ts.html +1 -1
  464. package/coverage/lcov-report/src/utils/applyRef.ts.html +1 -1
  465. package/coverage/lcov-report/src/utils/bem.ts.html +50 -50
  466. package/coverage/lcov-report/src/utils/filters.ts.html +357 -84
  467. package/coverage/lcov-report/src/utils/getClientPosition.ts.html +1 -1
  468. package/coverage/lcov-report/src/utils/getMiddleOfRange.ts.html +1 -1
  469. package/coverage/lcov-report/src/utils/getPercentage.ts.html +1 -1
  470. package/coverage/lcov-report/src/utils/getRangeDefaultValue.ts.html +1 -1
  471. package/coverage/lcov-report/src/utils/getRangeSteps.ts.html +1 -1
  472. package/coverage/lcov-report/src/utils/identity.ts.html +1 -1
  473. package/coverage/lcov-report/src/utils/index.html +13 -268
  474. package/coverage/lcov-report/src/utils/isElementVisible.ts.html +1 -1
  475. package/coverage/lcov-report/src/utils/loop.ts.html +1 -1
  476. package/coverage/lcov-report/src/utils/nearest.ts.html +1 -1
  477. package/coverage/lcov-report/src/utils/parseCssLengthUnit.ts.html +1 -1
  478. package/coverage/lcov-report/src/utils/randomInt.ts.html +1 -1
  479. package/coverage/lcov-report/src/utils/wait.ts.html +1 -1
  480. package/coverage/lcov-report/src/utils/withinRange.ts.html +1 -1
  481. package/coverage/lcov-report/src/window-splitter/WindowSplitter.tsx.html +1 -1
  482. package/coverage/lcov-report/src/window-splitter/index.html +1 -1
  483. package/coverage/lcov-report/src/window-splitter/useWindowSplitter.ts.html +1 -1
  484. package/coverage/lcov-report/transition/config.ts.html +5 -5
  485. package/coverage/lcov-report/transition/index.html +1 -1
  486. package/coverage/lcov-report/transition/useScaleTransition.ts.html +535 -0
  487. package/coverage/lcov-report/useAutoComplete.ts.html +787 -0
  488. package/coverage/lcov-report/useCollapseTransition.ts.html +166 -211
  489. package/coverage/lcov-report/useCombobox.ts.html +1513 -0
  490. package/coverage/lcov-report/useInlineAutoComplete.ts.html +379 -0
  491. package/coverage/lcov-report/useSelectCombobox.ts.html +295 -0
  492. package/coverage/lcov-report/utils/alphaNumericSort.ts.html +11 -50
  493. package/coverage/lcov-report/utils/filters.ts.html +1056 -201
  494. package/coverage/lcov-report/utils/index.html +10 -10
  495. package/coverage/lcov-report/utils/searching.ts.html +85 -0
  496. package/coverage/lcov-report/utils.ts.html +109 -277
  497. package/coverage/lcov.info +900 -363
  498. package/dist/RootHtml.d.ts +62 -0
  499. package/dist/RootHtml.js +49 -0
  500. package/dist/RootHtml.js.map +1 -0
  501. package/dist/_core.scss +49 -43
  502. package/dist/avatar/Avatar.d.ts +14 -0
  503. package/dist/avatar/Avatar.js +5 -2
  504. package/dist/avatar/Avatar.js.map +1 -1
  505. package/dist/badge/_badge.scss +23 -19
  506. package/dist/dialog/FixedDialog.d.ts +5 -4
  507. package/dist/dialog/FixedDialog.js +5 -4
  508. package/dist/dialog/FixedDialog.js.map +1 -1
  509. package/dist/form/MenuItemInputToggle.d.ts +2 -15
  510. package/dist/form/MenuItemInputToggle.js +26 -37
  511. package/dist/form/MenuItemInputToggle.js.map +1 -1
  512. package/dist/form/NativeSelect.d.ts +5 -2
  513. package/dist/form/NativeSelect.js.map +1 -1
  514. package/dist/form/Option.js +3 -2
  515. package/dist/form/Option.js.map +1 -1
  516. package/dist/form/Select.d.ts +105 -15
  517. package/dist/form/Select.js +160 -249
  518. package/dist/form/Select.js.map +1 -1
  519. package/dist/form/SelectedOption.d.ts +21 -0
  520. package/dist/form/SelectedOption.js +37 -0
  521. package/dist/form/SelectedOption.js.map +1 -0
  522. package/dist/form/TextField.d.ts +2 -2
  523. package/dist/form/TextField.js.map +1 -1
  524. package/dist/form/_form.scss +47 -29
  525. package/dist/form/menuItemInputToggleStyles.d.ts +39 -0
  526. package/dist/form/menuItemInputToggleStyles.js +31 -0
  527. package/dist/form/menuItemInputToggleStyles.js.map +1 -0
  528. package/dist/form/selectUtils.d.ts +1 -3
  529. package/dist/form/selectUtils.js +2 -10
  530. package/dist/form/selectUtils.js.map +1 -1
  531. package/dist/form/types.d.ts +6 -6
  532. package/dist/form/types.js.map +1 -1
  533. package/dist/form/useCombobox.d.ts +157 -0
  534. package/dist/form/useCombobox.js +206 -0
  535. package/dist/form/useCombobox.js.map +1 -0
  536. package/dist/form/useEditableCombobox.d.ts +15 -0
  537. package/dist/form/useEditableCombobox.js +101 -0
  538. package/dist/form/useEditableCombobox.js.map +1 -0
  539. package/dist/form/useFormReset.d.ts +16 -0
  540. package/dist/form/useFormReset.js +32 -0
  541. package/dist/form/useFormReset.js.map +1 -0
  542. package/dist/form/useListboxProvider.d.ts +1 -0
  543. package/dist/form/useListboxProvider.js +1 -0
  544. package/dist/form/useListboxProvider.js.map +1 -1
  545. package/dist/form/useSelectCombobox.d.ts +17 -0
  546. package/dist/form/useSelectCombobox.js +36 -0
  547. package/dist/form/useSelectCombobox.js.map +1 -0
  548. package/dist/form/utils.d.ts +11 -1
  549. package/dist/form/utils.js +6 -0
  550. package/dist/form/utils.js.map +1 -1
  551. package/dist/icon/_icon.scss +7 -5
  552. package/dist/index.d.ts +15 -1
  553. package/dist/index.js +15 -1
  554. package/dist/index.js.map +1 -1
  555. package/dist/interaction/_interaction.scss +56 -44
  556. package/dist/list/types.d.ts +10 -1
  557. package/dist/list/types.js.map +1 -1
  558. package/dist/menu/Menu.js +12 -1
  559. package/dist/menu/Menu.js.map +1 -1
  560. package/dist/menu/_menu.scss +1 -0
  561. package/dist/menu/useContextMenu.d.ts +3 -3
  562. package/dist/menu/useContextMenu.js +3 -3
  563. package/dist/menu/useContextMenu.js.map +1 -1
  564. package/dist/movement/types.d.ts +40 -21
  565. package/dist/movement/types.js.map +1 -1
  566. package/dist/movement/useKeyboardMovementProvider.js +15 -4
  567. package/dist/movement/useKeyboardMovementProvider.js.map +1 -1
  568. package/dist/movement/utils.d.ts +7 -2
  569. package/dist/movement/utils.js +10 -0
  570. package/dist/movement/utils.js.map +1 -1
  571. package/dist/positioning/useFixedPositioning.js +0 -8
  572. package/dist/positioning/useFixedPositioning.js.map +1 -1
  573. package/dist/searching/caseInsensitive.d.ts +150 -0
  574. package/dist/searching/caseInsensitive.js +30 -0
  575. package/dist/searching/caseInsensitive.js.map +1 -0
  576. package/dist/searching/fuzzy.d.ts +128 -0
  577. package/dist/searching/fuzzy.js +54 -0
  578. package/dist/searching/fuzzy.js.map +1 -0
  579. package/dist/searching/toSearchQuery.d.ts +5 -0
  580. package/dist/searching/toSearchQuery.js +13 -0
  581. package/dist/searching/toSearchQuery.js.map +1 -0
  582. package/dist/searching/types.d.ts +28 -0
  583. package/dist/searching/types.js +5 -0
  584. package/dist/searching/types.js.map +1 -0
  585. package/dist/searching/utils.d.ts +21 -0
  586. package/dist/searching/utils.js +28 -0
  587. package/dist/searching/utils.js.map +1 -0
  588. package/dist/test-utils/IntersectionObserver.d.ts +12 -0
  589. package/dist/test-utils/ResizeObserver.d.ts +172 -0
  590. package/dist/test-utils/data-testid.d.ts +7 -0
  591. package/dist/test-utils/data-testid.js +1 -0
  592. package/dist/test-utils/data-testid.js.map +1 -1
  593. package/dist/test-utils/drag.d.ts +26 -0
  594. package/dist/test-utils/index.d.ts +7 -0
  595. package/dist/test-utils/jest-setup.d.ts +1 -0
  596. package/dist/test-utils/matchMedia.d.ts +101 -0
  597. package/dist/test-utils/polyfills/IntersectionObserver.d.ts +1 -0
  598. package/dist/test-utils/polyfills/ResizeObserver.d.ts +1 -0
  599. package/dist/test-utils/polyfills/TextDecoder.d.ts +1 -0
  600. package/dist/test-utils/polyfills/TextDecoder.js +8 -0
  601. package/dist/test-utils/polyfills/TextDecoder.js.map +1 -0
  602. package/dist/test-utils/polyfills/TextEncoder.d.ts +1 -0
  603. package/dist/test-utils/polyfills/TextEncoder.js +6 -0
  604. package/dist/test-utils/polyfills/TextEncoder.js.map +1 -0
  605. package/dist/test-utils/polyfills/index.d.ts +7 -0
  606. package/dist/test-utils/polyfills/index.js +2 -0
  607. package/dist/test-utils/polyfills/index.js.map +1 -1
  608. package/dist/test-utils/polyfills/matchMedia.d.ts +1 -0
  609. package/dist/test-utils/polyfills/offsetParent.d.ts +1 -0
  610. package/dist/test-utils/polyfills/scrollIntoView.d.ts +1 -0
  611. package/dist/test-utils/render.d.ts +13 -0
  612. package/dist/test-utils/timers.d.ts +39 -0
  613. package/dist/theme/_theme.scss +192 -34
  614. package/dist/transition/useCollapseTransition.d.ts +3 -18
  615. package/dist/transition/useCollapseTransition.js +1 -10
  616. package/dist/transition/useCollapseTransition.js.map +1 -1
  617. package/dist/transition/utils.js +7 -2
  618. package/dist/transition/utils.js.map +1 -1
  619. package/dist/typography/SrOnly.d.ts +3 -3
  620. package/dist/typography/SrOnly.js +4 -4
  621. package/dist/typography/SrOnly.js.map +1 -1
  622. package/dist/typography/Typography.d.ts +19 -19
  623. package/dist/typography/Typography.js +19 -19
  624. package/dist/typography/Typography.js.map +1 -1
  625. package/dist/typography/_typography.scss +65 -25
  626. package/dist/useEnsuredState.d.ts +1 -1
  627. package/dist/useEnsuredState.js.map +1 -1
  628. package/dist/utils/alphaNumericSort.d.ts +1 -1
  629. package/dist/utils/alphaNumericSort.js +2 -10
  630. package/dist/utils/alphaNumericSort.js.map +1 -1
  631. package/jest.config.ts +4 -0
  632. package/package.json +21 -20
  633. package/src/RootHtml.tsx +95 -0
  634. package/src/__tests__/RootHtml.node.tsx +46 -0
  635. package/src/__tests__/__snapshots__/RootHtml.node.tsx.snap +19 -0
  636. package/src/_core.scss +49 -43
  637. package/src/avatar/Avatar.tsx +24 -3
  638. package/src/avatar/__tests__/Avatar.tsx +1 -1
  639. package/src/avatar/__tests__/__snapshots__/Avatar.tsx.snap +6 -6
  640. package/src/badge/_badge.scss +23 -19
  641. package/src/button/__tests__/__snapshots__/Button.tsx.snap +1 -1
  642. package/src/dialog/FixedDialog.tsx +5 -4
  643. package/src/form/MenuItemInputToggle.tsx +46 -64
  644. package/src/form/NativeSelect.tsx +6 -3
  645. package/src/form/Option.tsx +8 -2
  646. package/src/form/Select.tsx +251 -335
  647. package/src/form/SelectedOption.tsx +55 -0
  648. package/src/form/TextField.tsx +2 -2
  649. package/src/form/__tests__/MenuItemCheckbox.tsx +53 -0
  650. package/src/form/__tests__/MenuItemRadio.tsx +53 -0
  651. package/src/form/__tests__/Select.tsx +439 -0
  652. package/src/form/__tests__/__snapshots__/FileInput.tsx.snap +23 -23
  653. package/src/form/__tests__/__snapshots__/MenuItemCheckbox.tsx.snap +96 -0
  654. package/src/form/__tests__/__snapshots__/MenuItemRadio.tsx.snap +96 -0
  655. package/src/form/__tests__/__snapshots__/Select.tsx.snap +492 -0
  656. package/src/form/__tests__/useFormReset.tsx +195 -0
  657. package/src/form/_form.scss +47 -29
  658. package/src/form/menuItemInputToggleStyles.ts +78 -0
  659. package/src/form/selectUtils.ts +3 -14
  660. package/src/form/types.ts +6 -6
  661. package/src/form/useCombobox.ts +523 -0
  662. package/src/form/useEditableCombobox.ts +139 -0
  663. package/src/form/useFormReset.ts +48 -0
  664. package/src/form/useListboxProvider.ts +2 -0
  665. package/src/form/useSelectCombobox.ts +70 -0
  666. package/src/form/utils.ts +17 -4
  667. package/src/icon/_icon.scss +7 -5
  668. package/src/index.ts +15 -1
  669. package/src/interaction/_interaction.scss +56 -44
  670. package/src/list/types.ts +12 -1
  671. package/src/menu/Menu.tsx +9 -1
  672. package/src/menu/__tests__/__snapshots__/useContextMenu.tsx.snap +54 -0
  673. package/src/menu/__tests__/useContextMenu.tsx +41 -0
  674. package/src/menu/_menu.scss +1 -0
  675. package/src/menu/useContextMenu.ts +3 -3
  676. package/src/movement/types.ts +50 -25
  677. package/src/movement/useKeyboardMovementProvider.ts +21 -8
  678. package/src/movement/utils.ts +12 -2
  679. package/src/positioning/__tests__/__snapshots__/useFixedPositioning.tsx.snap +0 -32
  680. package/src/positioning/__tests__/useFixedPositioning.tsx +0 -14
  681. package/src/positioning/useFixedPositioning.ts +0 -6
  682. package/src/searching/__tests__/caseInsensitive.ts +165 -0
  683. package/src/searching/__tests__/fuzzy.ts +169 -0
  684. package/src/searching/__tests__/toSearchQuery.ts +21 -0
  685. package/src/searching/caseInsensitive.ts +200 -0
  686. package/src/searching/fuzzy.ts +175 -0
  687. package/src/searching/toSearchQuery.ts +18 -0
  688. package/src/searching/types.ts +34 -0
  689. package/src/searching/utils.ts +54 -0
  690. package/src/test-utils/data-testid.ts +5 -1
  691. package/src/test-utils/polyfills/TextDecoder.ts +7 -0
  692. package/src/test-utils/polyfills/TextEncoder.ts +5 -0
  693. package/src/test-utils/polyfills/index.ts +2 -0
  694. package/src/theme/_theme.scss +192 -34
  695. package/src/transition/__tests__/utils.ts +25 -0
  696. package/src/transition/useCollapseTransition.ts +6 -24
  697. package/src/transition/utils.ts +10 -5
  698. package/src/typography/SrOnly.tsx +9 -9
  699. package/src/typography/Typography.tsx +19 -19
  700. package/src/typography/__tests__/__snapshots__/SrOnly.tsx.snap +5 -5
  701. package/src/typography/_typography.scss +65 -25
  702. package/src/useEnsuredState.ts +1 -1
  703. package/src/utils/alphaNumericSort.ts +3 -16
  704. package/tsconfig.json +2 -2
  705. package/tsconfig.types.json +1 -1
  706. package/dist/form/SelectValue.d.ts +0 -17
  707. package/dist/form/SelectValue.js +0 -32
  708. package/dist/form/SelectValue.js.map +0 -1
  709. package/dist/utils/filters.d.ts +0 -196
  710. package/dist/utils/filters.js +0 -67
  711. package/dist/utils/filters.js.map +0 -1
  712. package/src/form/SelectValue.tsx +0 -39
  713. package/src/utils/filters.ts +0 -320
@@ -1,58 +1,48 @@
1
1
  "use client";
2
2
  import { cnb } from "cnbuilder";
3
3
  import {
4
- useEffect,
5
4
  useMemo,
6
5
  useRef,
7
6
  useState,
8
7
  type ChangeEvent,
8
+ type HTMLAttributes,
9
+ type InputHTMLAttributes,
9
10
  type ReactElement,
10
11
  type ReactNode,
11
12
  type Ref,
12
13
  } from "react";
14
+ import { type BoxProps } from "../box/Box.js";
13
15
  import { IconRotator } from "../icon/IconRotator.js";
14
16
  import { getIcon } from "../icon/iconConfig.js";
15
17
  import { Menu, type MenuProps } from "../menu/Menu.js";
16
- import { findMatchIndex } from "../movement/findMatchIndex.js";
18
+ import { KeyboardMovementProvider } from "../movement/useKeyboardMovementProvider.js";
17
19
  import {
18
- KeyboardMovementProvider,
19
- useKeyboardMovementProvider,
20
- } from "../movement/useKeyboardMovementProvider.js";
21
- import { isSearchableEvent } from "../movement/utils.js";
22
- import { BELOW_CENTER_ANCHOR } from "../positioning/constants.js";
23
- import {
24
- type TransitionEnterHandler,
25
- type TransitionExitHandler,
26
- } from "../transition/types.js";
20
+ type LabelA11y,
21
+ type PropsWithRef,
22
+ type RequireAtLeastOne,
23
+ } from "../types.js";
27
24
  import { useEnsuredId } from "../useEnsuredId.js";
28
25
  import { useEnsuredRef } from "../useEnsuredRef.js";
29
- import { useToggle } from "../useToggle.js";
30
- import { loop } from "../utils/loop.js";
31
- import { SelectValue } from "./SelectValue.js";
32
- import { TextField, type TextFieldProps } from "./TextField.js";
26
+ import { label as labelStyles } from "./Label.js";
27
+ import { SelectedOption } from "./SelectedOption.js";
28
+ import {
29
+ TextFieldContainer,
30
+ type TextFieldContainerProps,
31
+ } from "./TextFieldContainer.js";
33
32
  import { getFormConfig } from "./formConfig.js";
34
33
  import { select } from "./selectStyles.js";
35
34
  import { extractOptionsFromChildren } from "./selectUtils.js";
36
- import {
37
- type FormFieldOptions,
38
- type UserAgentAutoCompleteProps,
39
- } from "./types.js";
40
- import { ListboxProvider } from "./useListboxProvider.js";
41
- import { triggerManualChangeEvent, tryToSubmitRelatedForm } from "./utils.js";
35
+ import { textField } from "./textFieldStyles.js";
36
+ import { type UserAgentAutocompleteProps } from "./types.js";
37
+ import { useFormReset } from "./useFormReset.js";
38
+ import { ListboxProvider, type ListboxContext } from "./useListboxProvider.js";
39
+ import { useSelectCombobox } from "./useSelectCombobox.js";
42
40
 
43
41
  const EMPTY_STRING = "" as const;
44
42
  const noop = (): void => {
45
43
  // do nothing
46
44
  };
47
45
 
48
- const getNonDisabledOptions = (
49
- container: HTMLElement
50
- ): readonly HTMLElement[] => [
51
- ...container.querySelectorAll<HTMLLIElement>(
52
- '[role="option"]:not([aria-disabled])'
53
- ),
54
- ];
55
-
56
46
  /**
57
47
  * This is a convenience type for casting the `event.currentTarget.value` of a
58
48
  * `Select`'s change event to be union of available values.
@@ -103,16 +93,19 @@ export type SelectChangeEvent<Value extends string> =
103
93
  * @remarks \@since 6.0.0 Rewritten with a new API.
104
94
  */
105
95
  export interface SelectProps<Value extends string>
106
- extends Omit<TextFieldProps, "placeholder" | "type" | "onChange">,
107
- UserAgentAutoCompleteProps,
108
- FormFieldOptions {
96
+ extends Omit<TextFieldContainerProps, "label">,
97
+ Pick<InputHTMLAttributes<HTMLInputElement>, "form" | "required">,
98
+ UserAgentAutocompleteProps {
109
99
  /**
110
- * An optional ref to pass to the hidden `<input type="text" />` element that
111
- * stores the current value. This is really only useful if you'd like to keep
112
- * this component uncontrolled and access the value through
113
- * `inputRef.current.value`.
100
+ * @defaultValue `"select-" + useId()`
114
101
  */
115
- inputRef?: Ref<HTMLInputElement>;
102
+ id?: string;
103
+
104
+ /**
105
+ * Optional placeholder text or element to render while no options have been
106
+ * selected.
107
+ */
108
+ placeholder?: ReactNode;
116
109
 
117
110
  /**
118
111
  * Set this to a custom dropdown icon or `null` to not render a dropdown icon.
@@ -138,6 +131,30 @@ export interface SelectProps<Value extends string>
138
131
  /** @see {@link SelectChangeEvent} */
139
132
  onChange?(event: SelectChangeEvent<Value>): void;
140
133
 
134
+ /**
135
+ * An optional floating label to display like other form fields.
136
+ */
137
+ label?: ReactNode;
138
+
139
+ /**
140
+ * Optional props to pass to the `<span>` that surrounds the {@link label}
141
+ */
142
+ labelProps?: PropsWithRef<HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>;
143
+
144
+ /**
145
+ * An optional ref to pass to the hidden `<input type="text" />` element that
146
+ * stores the current value. This is really only useful if you'd like to keep
147
+ * this component uncontrolled and access the value through
148
+ * `inputRef.current.value`.
149
+ */
150
+ inputRef?: Ref<HTMLInputElement>;
151
+ inputProps?: InputHTMLAttributes<HTMLInputElement>;
152
+
153
+ /**
154
+ * A ref for the container `<div>` element.
155
+ */
156
+ containerRef?: Ref<HTMLDivElement>;
157
+
141
158
  /**
142
159
  * Any additional props to provide to the `Menu` component that renders all
143
160
  * the `Option`s.
@@ -145,19 +162,28 @@ export interface SelectProps<Value extends string>
145
162
  * The menu will always have these default values unless explicity
146
163
  * overwritten by this prop:
147
164
  *
148
- * - `aria-labelledby={containerId}`
165
+ * - `aria-labelledby={label ? labelId : id}` -- this will be undefined if
166
+ * `aria-label` is provided
149
167
  * - `anchor={BELOW_CENTER_ANCHOR}`
150
168
  * - `width="min"`
151
169
  */
152
170
  menuProps?: Omit<MenuProps, "visible" | "onRequestClose" | "fixedTo">;
153
171
 
154
172
  /**
155
- * Set this to `true` to update all the `Option` components to no longer
156
- * render an icon while selected.
173
+ * Any additional props to pass to the div that contains the current visible
174
+ * option.
175
+ */
176
+ selectedOptionProps?: BoxProps;
177
+
178
+ /**
179
+ * Set this to `true` if all the `Option` components should display the
180
+ * selected icon after the children instead of before.
181
+ *
182
+ * @see {@link disableSelectedIcon} to remove the selected icon instead.
157
183
  *
158
184
  * @defaultValue `false`
159
185
  */
160
- disableSelectedIcon?: boolean;
186
+ selectedIconAfter?: boolean;
161
187
 
162
188
  /**
163
189
  * Set this to `true` to prevent the current option from rendering the
@@ -165,7 +191,15 @@ export interface SelectProps<Value extends string>
165
191
  *
166
192
  * @defaultValue `false`
167
193
  */
168
- disableValueAddon?: boolean;
194
+ disableOptionAddon?: boolean;
195
+
196
+ /**
197
+ * Set this to `true` to update all the `Option` components to no longer
198
+ * render an icon while selected.
199
+ *
200
+ * @defaultValue `false`
201
+ */
202
+ disableSelectedIcon?: boolean;
169
203
 
170
204
  /**
171
205
  * This should be the available `Option`s for the select to choose from. It
@@ -178,345 +212,227 @@ export interface SelectProps<Value extends string>
178
212
  /**
179
213
  * **Client Component**
180
214
  *
215
+ * @example
216
+ * Simple Example
217
+ * ```tsx
218
+ * import { Select, Option } from "react-md";
219
+ * import { useState, type ReactElement } from "react";
220
+ *
221
+ * function Example(): ReactElement {
222
+ * const [value, setValue] = useState("");
223
+ *
224
+ * return (
225
+ * <Select
226
+ * label="Select"
227
+ * value={value}
228
+ * onChange={(event) => setValue(event.currentTarget.value)}
229
+ * placeholder="Select a value"
230
+ * >
231
+ * <Option value="a">Option 1</Option>
232
+ * <Option value="b">Option 2</Option>
233
+ * <Option value="c">Option 3</Option>
234
+ * <Option value="d">Option 4</Option>
235
+ * </Select>
236
+ * );
237
+ * }
238
+ * ```
239
+ *
240
+ * @example
241
+ * Testing
242
+ * ```tsx
243
+ * rmdRender(
244
+ * <Select label="Select" selectedOptionProps={{ "data-testid": "selected" }}>
245
+ * <Option value="a">Option 1</Option>
246
+ * <Option value="b">Option 2</Option>
247
+ * <Option value="c">Option 3</Option>
248
+ * <Option value="d">Option 4</Option>
249
+ * </Select>
250
+ * );
251
+ *
252
+ * const user = userEvent.setup();
253
+ * const select = screen.getByRole("combobox", { name: "Select" });
254
+ * const selected = screen.getByTestId("selected")
255
+ * const selectInput = screen.getByRole("textbox", { hidden: true });
256
+ * expect(selected).toHaveTextContent("");
257
+ * expect(selectInput).toHaveValue("");
258
+ *
259
+ * await user.click(select);
260
+ * await user.click(screen.getByRole("option"), { name: "Option 2" });
261
+ *
262
+ * expect(selected).toHaveTextContent("Option 2");
263
+ * expect(selectInput).toHaveValue("b");
264
+ * ```
265
+ *
181
266
  * @remarks \@since 6.0.0 Rewritten with a new API.
182
267
  */
183
268
  export function Select<Value extends string>(
184
- props: SelectProps<Value>
269
+ props: RequireAtLeastOne<SelectProps<Value>, "label" | keyof LabelA11y>
185
270
  ): ReactElement {
186
271
  const {
187
- id: propId,
272
+ id,
273
+ form,
274
+ autoCompleteValue,
275
+ autoComplete = autoCompleteValue,
276
+ name = autoCompleteValue,
188
277
  className,
189
- active = false,
278
+ onClick,
279
+ onFocus,
280
+ onKeyDown,
190
281
  inputRef: propInputRef,
191
- inputClassName,
282
+ inputProps,
283
+ containerRef,
284
+ placeholder,
192
285
  menuProps = {},
193
- containerProps: propContainerProps = {},
286
+ label,
287
+ labelProps = {},
288
+ selectedOptionProps,
194
289
  icon: propIcon,
195
290
  value,
196
291
  defaultValue,
197
292
  theme: propTheme,
198
293
  onChange = noop,
199
- leftAddon,
200
294
  rightAddon: propRightAddon,
201
- disableValueAddon = false,
295
+ active = false,
296
+ required,
297
+ selectedIconAfter = false,
298
+ disableOptionAddon = false,
202
299
  disableSelectedIcon = false,
203
300
  children,
204
301
  ...remaining
205
302
  } = props;
206
- const { disabled = false, form } = props;
303
+ const { dense, error, disabled } = props;
207
304
 
208
- const id = useEnsuredId(propId, "select");
209
- const containerId = useEnsuredId(propContainerProps.id, "select-container");
210
- const icon = getIcon("dropdown", propIcon);
211
- const theme = getFormConfig("theme", propTheme);
305
+ const comboboxId = useEnsuredId(id, "select");
306
+ const inputId = useEnsuredId(inputProps?.id, "select-value");
307
+ const selectLabelId = useEnsuredId(labelProps.id, "select-label");
308
+ const labelId = label ? selectLabelId : undefined;
212
309
 
213
- const { toggled: visible, enable: show, disable: hide } = useToggle();
214
- const [inputRef, inputRefCallback] = useEnsuredRef(propInputRef);
215
- const [containerRef, containerRefCallback] = useEnsuredRef(
216
- propContainerProps.ref
217
- );
218
- const [menuRef, menuRefCallback] = useEnsuredRef(menuProps.nodeRef);
219
- const [currentValue, setCurrentValue] = useState(() => {
310
+ const [localValue, setLocalValue] = useState(() => {
220
311
  if (typeof defaultValue !== "undefined") {
221
312
  return defaultValue;
222
313
  }
223
314
 
224
315
  return typeof value !== "undefined" ? value : EMPTY_STRING;
225
316
  });
317
+ const currentValue = typeof value === "undefined" ? localValue : value;
226
318
  const initialValue = useRef(currentValue);
319
+ const { options, currentOption } = extractOptionsFromChildren(
320
+ children,
321
+ currentValue
322
+ );
227
323
 
228
- useEffect(() => {
229
- const select = inputRef.current;
230
- if (!select) {
231
- return;
232
- }
233
-
234
- const formElement =
235
- select.closest<HTMLFormElement>("form") ||
236
- (form && document.getElementById(form)) ||
237
- null;
238
-
239
- if (!formElement) {
240
- return;
241
- }
242
-
243
- const handleReset = (): void => {
244
- triggerManualChangeEvent(select, initialValue.current);
245
- };
246
-
247
- formElement.addEventListener("reset", handleReset);
248
- return () => {
249
- formElement.removeEventListener("reset", handleReset);
250
- };
251
- }, [form, inputRef]);
252
-
253
- const { options, searchValues, currentOption, currentIndex } =
254
- extractOptionsFromChildren(
255
- children,
256
- typeof value === "undefined" ? currentValue : value
257
- );
258
- const totalOptions = options.length - 1;
259
-
260
- let rightAddon = propRightAddon;
261
- if (typeof rightAddon === "undefined" && icon) {
262
- rightAddon = <IconRotator rotated={visible}>{icon}</IconRotator>;
263
- }
324
+ const { visible, comboboxProps, movementContext, getMenuProps } =
325
+ useSelectCombobox({
326
+ form,
327
+ value: currentValue,
328
+ values: options,
329
+ onClick,
330
+ onFocus,
331
+ onKeyDown,
332
+ disabled,
333
+ popupId: menuProps.id,
334
+ popupRef: menuProps.nodeRef,
335
+ comboboxId,
336
+ comboboxRef: containerRef,
337
+ });
264
338
 
265
- const listboxContext = useMemo(
339
+ const [inputRef, inputRefCallback] = useEnsuredRef(propInputRef);
340
+ useFormReset({
341
+ form,
342
+ elementRef: inputRef,
343
+ defaultValue: initialValue.current,
344
+ });
345
+ const listboxContext = useMemo<ListboxContext>(
266
346
  () => ({
267
347
  inputRef,
268
- currentValue: typeof value === "undefined" ? currentValue : value,
348
+ currentValue,
349
+ selectedIconAfter,
269
350
  disableSelectedIcon,
270
351
  }),
271
- [currentValue, disableSelectedIcon, inputRef, value]
352
+ [currentValue, disableSelectedIcon, inputRef, selectedIconAfter]
272
353
  );
273
354
 
274
- // TODO: Need to update this to support editable listboxes where these props
275
- // would go to the input element instead of the container
276
- const a11yProps = {
277
- "aria-haspopup": "listbox",
278
- "aria-expanded": visible,
279
- role: "combobox",
280
- tabIndex: disabled ? -1 : 0,
281
- } as const;
282
- const {
283
- movementProps,
284
- movementContext,
285
- currentFocusIndex,
286
- setActiveDescendantId,
287
- } = useKeyboardMovementProvider<HTMLDivElement>({
288
- onFocus: propContainerProps.onFocus,
289
- onClick(event) {
290
- propContainerProps.onClick?.(event);
291
- if (disabled) {
292
- return;
293
- }
294
-
295
- show();
296
- },
297
- onKeyDown(event) {
298
- propContainerProps.onKeyDown?.(event);
299
- if (disabled) {
300
- return;
301
- }
302
-
303
- if (visible) {
304
- if (event.key === "Escape" || event.key === "Tab") {
305
- event.stopPropagation();
306
- hide();
307
- }
308
-
309
- return;
310
- }
311
-
312
- if (isSearchableEvent(event)) {
313
- event.stopPropagation();
314
-
315
- const nextIndex = findMatchIndex({
316
- value: event.key,
317
- values: searchValues,
318
- startIndex: event.shiftKey ? -1 : currentIndex,
319
- });
320
-
321
- if (nextIndex !== -1) {
322
- triggerManualChangeEvent(inputRef.current, options[nextIndex].value);
323
- }
324
- return;
325
- }
326
-
327
- switch (event.key) {
328
- case " ":
329
- event.preventDefault();
330
- event.stopPropagation();
331
- show();
332
- break;
333
- case "Enter":
334
- tryToSubmitRelatedForm(event, form);
335
- break;
336
- case "Home":
337
- event.preventDefault();
338
- event.stopPropagation();
339
- if (currentIndex !== 0) {
340
- triggerManualChangeEvent(inputRef.current, options[0].value);
341
- }
342
- break;
343
- case "End":
344
- event.preventDefault();
345
- event.stopPropagation();
346
- if (currentIndex !== totalOptions) {
347
- triggerManualChangeEvent(
348
- inputRef.current,
349
- options[totalOptions].value
350
- );
351
- }
352
- break;
353
- case "ArrowDown":
354
- case "ArrowUp": {
355
- event.preventDefault();
356
- event.stopPropagation();
357
-
358
- const increment = event.key === "ArrowDown";
359
- if (currentIndex === -1 && !increment) {
360
- // this matches the native select behavior where it will do
361
- // nothing if there is no current value
362
- return;
363
- }
364
-
365
- const nextIndex = loop({
366
- max: totalOptions,
367
- value: currentIndex,
368
- minmax: true,
369
- increment,
370
- });
371
-
372
- triggerManualChangeEvent(inputRef.current, options[nextIndex].value);
373
- break;
374
- }
375
- }
376
- },
377
- loopable: false,
378
- searchable: true,
379
- programmatic: true,
380
- includeDisabled: false,
381
- tabIndexBehavior: "virtual",
382
- getDefaultFocusedIndex(focusOptions) {
383
- if (typeof menuProps.getDefaultFocusedIndex === "function") {
384
- return menuProps.getDefaultFocusedIndex(focusOptions);
385
- }
386
-
387
- const val = typeof value === "undefined" ? currentValue : value;
388
- return options.findIndex((option) => option.value === val);
389
- },
390
- getFocusableElements() {
391
- const menu = menuRef.current;
392
- if (!menu) {
393
- return [];
394
- }
395
-
396
- return [
397
- ...menu.querySelectorAll<HTMLLIElement>(
398
- '[role="option"]:not([aria-disabled])'
399
- ),
400
- ];
401
- },
402
- });
403
-
404
- const containerProps: Required<SelectProps<Value>>["containerProps"] = {
405
- ...propContainerProps,
406
- ...movementProps,
407
- ...a11yProps,
408
- ref: containerRefCallback,
409
- };
410
-
411
- const { onEntering, onEntered, onExiting, onExited, disableTransition } =
412
- menuProps;
413
- const handleMounting =
414
- (callback: TransitionEnterHandler | undefined = noop, skipped: boolean) =>
415
- (appearing: boolean) => {
416
- callback(appearing);
417
-
418
- const menu = menuRef.current;
419
- if (!menu || skipped) {
420
- return;
421
- }
422
-
423
- // Since the keyboard movement behavior is tied to the
424
- // `TextFieldContainer` or `input` element instead of the menu for this
425
- // widget, the focus index and active descendant must manually be updated
426
- // whenever the menu becomes visible. Without this, no items will be
427
- // focused until the first keyboard event that would move focus
428
- const val = typeof value === "undefined" ? currentValue : value;
429
- const focusables = getNonDisabledOptions(menu);
430
- const index = Math.max(
431
- 0,
432
- options.findIndex((option) => option.value === val)
433
- );
434
- focusables[index].scrollIntoView({ block: "nearest" });
435
- currentFocusIndex.current = index;
436
- setActiveDescendantId(focusables[index]?.id || "");
437
- };
438
-
439
- const handleUnmounting =
440
- (callback: TransitionExitHandler | undefined = noop, skipped = false) =>
441
- (): void => {
442
- callback();
355
+ const icon = getIcon("dropdown", propIcon);
356
+ const theme = getFormConfig("theme", propTheme);
357
+ let rightAddon = propRightAddon;
358
+ if (typeof rightAddon === "undefined" && icon) {
359
+ rightAddon = <IconRotator rotated={visible}>{icon}</IconRotator>;
360
+ }
443
361
 
444
- if (!skipped) {
445
- // since the menu is unmounted or set to hidden while not visible, need
446
- // to clear the aria-activedescendant and current focus index when
447
- // hiding
448
- currentFocusIndex.current = -1;
449
- setActiveDescendantId("");
450
- }
451
- };
362
+ let listboxLabelledBy = menuProps["aria-labelledby"];
363
+ const listboxLabel = menuProps["aria-label"];
364
+ if (!listboxLabel && !listboxLabelledBy) {
365
+ listboxLabelledBy = labelId || comboboxId;
366
+ }
452
367
 
453
368
  return (
454
369
  <ListboxProvider value={listboxContext}>
455
370
  <KeyboardMovementProvider value={movementContext}>
456
- <TextField
371
+ <TextFieldContainer
372
+ aria-labelledby={labelId}
457
373
  {...remaining}
458
- aria-hidden
459
- id={id}
460
- ref={inputRefCallback}
461
- containerProps={containerProps}
462
- type="text"
463
- tabIndex={-1}
374
+ {...comboboxProps}
375
+ label={!!label}
464
376
  theme={theme}
465
- value={value}
466
- defaultValue={defaultValue}
467
377
  active={active || visible}
468
- leftAddon={leftAddon}
469
- rightAddon={rightAddon}
470
378
  className={cnb("rmd-select-container", className)}
471
- inputClassName={select({
472
- theme,
473
- className: inputClassName,
474
- })}
475
- onChange={(event) => {
476
- onChange(event as SelectChangeEvent<Value>);
477
- if (typeof value !== "undefined") {
478
- return;
479
- }
480
-
481
- const nextValue = event.currentTarget.value;
482
- const valueAsNumber = parseFloat(nextValue);
483
- const nextOption = options.find(
484
- (option) =>
485
- // need to compare both here since
486
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
487
- // @ts-expect-error
488
- option.value === nextValue || option.value === valueAsNumber
489
- );
490
-
491
- setCurrentValue(
492
- nextOption ? nextOption.value : initialValue.current
493
- );
494
- }}
379
+ rightAddon={rightAddon}
495
380
  >
496
- <SelectValue disableAddon={disableValueAddon} {...currentOption} />
497
- </TextField>
381
+ <SelectedOption
382
+ option={currentOption}
383
+ placeholder={placeholder}
384
+ disableAddon={disableOptionAddon}
385
+ {...selectedOptionProps}
386
+ />
387
+ <input
388
+ aria-hidden
389
+ id={inputId}
390
+ ref={inputRefCallback}
391
+ type="text"
392
+ autoComplete={autoComplete}
393
+ name={name}
394
+ tabIndex={-1}
395
+ disabled={disabled}
396
+ required={required}
397
+ placeholder=" "
398
+ {...inputProps}
399
+ value={value}
400
+ defaultValue={defaultValue}
401
+ className={cnb(select({ theme }), textField())}
402
+ onChange={(event) => {
403
+ onChange(event as SelectChangeEvent<Value>);
404
+ if (typeof value !== "undefined") {
405
+ return;
406
+ }
407
+
408
+ const nextValue = event.currentTarget.value;
409
+ const nextOption = options.find((option) => option === nextValue);
410
+
411
+ setLocalValue(nextOption ?? initialValue.current);
412
+ }}
413
+ />
414
+ {label && (
415
+ <span
416
+ {...labelProps}
417
+ id={labelId}
418
+ className={labelStyles({
419
+ dense,
420
+ error,
421
+ disabled,
422
+ active: active || visible,
423
+ floating: true,
424
+ floatingActive: !!placeholder || !!currentOption,
425
+ className: labelProps.className,
426
+ })}
427
+ >
428
+ {label}
429
+ </span>
430
+ )}
431
+ </TextFieldContainer>
498
432
  <Menu
499
- aria-labelledby={containerId}
500
- anchor={BELOW_CENTER_ANCHOR}
501
- role="listbox"
502
- width="min"
503
- {...menuProps}
504
- ref={menuRefCallback}
505
- visible={visible}
506
- fixedTo={containerRef}
507
- onRequestClose={hide}
508
- onEntering={handleMounting(onEntering, false)}
509
- onEntered={handleMounting(onEntered, !disableTransition)}
510
- onExiting={handleUnmounting(onExiting, false)}
511
- onExited={handleUnmounting(onExited, !disableTransition)}
512
- sheetProps={{
513
- ...menuProps.sheetProps,
514
- onEntering: handleMounting(menuProps.sheetProps?.onEntering, false),
515
- onEntered: handleMounting(
516
- menuProps.sheetProps?.onEntered,
517
- !disableTransition
518
- ),
519
- }}
433
+ {...getMenuProps(menuProps)}
434
+ aria-label={listboxLabel}
435
+ aria-labelledby={listboxLabelledBy as string}
520
436
  >
521
437
  {children}
522
438
  </Menu>