@react-md/core 1.0.0-next.16 → 1.0.0-next.17

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 (645) hide show
  1. package/dist/_box-shadows.scss +76 -0
  2. package/dist/_colors.scss +279 -277
  3. package/dist/_core.scss +107 -16
  4. package/dist/_object-fit.scss +86 -0
  5. package/dist/_utils.scss +246 -72
  6. package/dist/app-bar/AppBar.d.ts +1 -90
  7. package/dist/app-bar/AppBar.js +1 -40
  8. package/dist/app-bar/AppBar.js.map +1 -1
  9. package/dist/app-bar/AppBarTitle.d.ts +1 -27
  10. package/dist/app-bar/AppBarTitle.js +1 -15
  11. package/dist/app-bar/AppBarTitle.js.map +1 -1
  12. package/dist/app-bar/_app-bar.scss +156 -25
  13. package/dist/app-bar/styles.d.ts +117 -0
  14. package/dist/app-bar/styles.js +55 -0
  15. package/dist/app-bar/styles.js.map +1 -0
  16. package/dist/autocomplete/Autocomplete.d.ts +8 -79
  17. package/dist/autocomplete/Autocomplete.js +112 -83
  18. package/dist/autocomplete/Autocomplete.js.map +1 -1
  19. package/dist/autocomplete/AutocompleteChip.d.ts +8 -0
  20. package/dist/autocomplete/AutocompleteChip.js +34 -0
  21. package/dist/autocomplete/AutocompleteChip.js.map +1 -0
  22. package/dist/autocomplete/AutocompleteCircularProgress.d.ts +5 -11
  23. package/dist/autocomplete/AutocompleteCircularProgress.js +4 -0
  24. package/dist/autocomplete/AutocompleteCircularProgress.js.map +1 -1
  25. package/dist/autocomplete/AutocompleteClearButton.d.ts +9 -0
  26. package/dist/autocomplete/AutocompleteClearButton.js +29 -0
  27. package/dist/autocomplete/AutocompleteClearButton.js.map +1 -0
  28. package/dist/autocomplete/AutocompleteDropdownButton.d.ts +4 -26
  29. package/dist/autocomplete/AutocompleteDropdownButton.js +5 -1
  30. package/dist/autocomplete/AutocompleteDropdownButton.js.map +1 -1
  31. package/dist/autocomplete/AutocompleteListboxChildren.d.ts +22 -0
  32. package/dist/autocomplete/AutocompleteListboxChildren.js +37 -0
  33. package/dist/autocomplete/AutocompleteListboxChildren.js.map +1 -0
  34. package/dist/autocomplete/_autocomplete.scss +362 -34
  35. package/dist/autocomplete/autocompleteStyles.d.ts +22 -0
  36. package/dist/autocomplete/autocompleteStyles.js +17 -8
  37. package/dist/autocomplete/autocompleteStyles.js.map +1 -1
  38. package/dist/autocomplete/defaults.d.ts +9 -9
  39. package/dist/autocomplete/defaults.js +13 -13
  40. package/dist/autocomplete/defaults.js.map +1 -1
  41. package/dist/autocomplete/types.d.ts +554 -56
  42. package/dist/autocomplete/types.js.map +1 -1
  43. package/dist/autocomplete/useAutocomplete.d.ts +22 -0
  44. package/dist/autocomplete/useAutocomplete.js +281 -0
  45. package/dist/autocomplete/useAutocomplete.js.map +1 -0
  46. package/dist/autocomplete/utils.d.ts +81 -0
  47. package/dist/autocomplete/utils.js +108 -0
  48. package/dist/autocomplete/utils.js.map +1 -0
  49. package/dist/avatar/_avatar.scss +93 -2
  50. package/dist/badge/Badge.d.ts +1 -20
  51. package/dist/badge/Badge.js +1 -14
  52. package/dist/badge/Badge.js.map +1 -1
  53. package/dist/badge/_badge.scss +90 -3
  54. package/dist/badge/styles.d.ts +26 -0
  55. package/dist/badge/styles.js +18 -0
  56. package/dist/badge/styles.js.map +1 -0
  57. package/dist/box/Box.js +2 -1
  58. package/dist/box/Box.js.map +1 -1
  59. package/dist/box/_box.scss +130 -17
  60. package/dist/box/styles.d.ts +6 -0
  61. package/dist/box/styles.js +2 -1
  62. package/dist/box/styles.js.map +1 -1
  63. package/dist/button/AsyncButton.d.ts +1 -1
  64. package/dist/button/AsyncButton.js.map +1 -1
  65. package/dist/button/Button.d.ts +2 -1
  66. package/dist/button/Button.js +2 -1
  67. package/dist/button/Button.js.map +1 -1
  68. package/dist/button/_button.scss +157 -25
  69. package/dist/card/Card.d.ts +16 -0
  70. package/dist/card/Card.js +11 -3
  71. package/dist/card/Card.js.map +1 -1
  72. package/dist/card/ClickableCard.d.ts +2 -1
  73. package/dist/card/ClickableCard.js +5 -2
  74. package/dist/card/ClickableCard.js.map +1 -1
  75. package/dist/card/_card.scss +90 -19
  76. package/dist/card/styles.d.ts +0 -7
  77. package/dist/card/styles.js +2 -3
  78. package/dist/card/styles.js.map +1 -1
  79. package/dist/chip/Chip.d.ts +2 -1
  80. package/dist/chip/Chip.js +2 -1
  81. package/dist/chip/Chip.js.map +1 -1
  82. package/dist/chip/_chip.scss +42 -20
  83. package/dist/chip/styles.d.ts +12 -10
  84. package/dist/chip/styles.js.map +1 -1
  85. package/dist/cssUtils.js.map +1 -1
  86. package/dist/delegateEvent.d.ts +2 -2
  87. package/dist/delegateEvent.js.map +1 -1
  88. package/dist/dialog/Dialog.d.ts +8 -21
  89. package/dist/dialog/Dialog.js +27 -27
  90. package/dist/dialog/Dialog.js.map +1 -1
  91. package/dist/dialog/FixedDialog.d.ts +1 -3
  92. package/dist/dialog/FixedDialog.js +0 -8
  93. package/dist/dialog/FixedDialog.js.map +1 -1
  94. package/dist/dialog/_dialog.scss +67 -13
  95. package/dist/dialog/styles.d.ts +56 -0
  96. package/dist/dialog/styles.js +29 -2
  97. package/dist/dialog/styles.js.map +1 -1
  98. package/dist/divider/Divider.d.ts +0 -11
  99. package/dist/divider/Divider.js.map +1 -1
  100. package/dist/divider/_divider.scss +7 -1
  101. package/dist/divider/styles.d.ts +11 -0
  102. package/dist/divider/styles.js.map +1 -1
  103. package/dist/draggable/useDraggable.d.ts +6 -6
  104. package/dist/draggable/useDraggable.js.map +1 -1
  105. package/dist/draggable/utils.d.ts +3 -3
  106. package/dist/draggable/utils.js.map +1 -1
  107. package/dist/expansion-panel/ExpansionPanel.d.ts +1 -1
  108. package/dist/expansion-panel/ExpansionPanel.js.map +1 -1
  109. package/dist/expansion-panel/_expansion-panel.scss +5 -1
  110. package/dist/expansion-panel/useExpansionPanels.js +12 -24
  111. package/dist/expansion-panel/useExpansionPanels.js.map +1 -1
  112. package/dist/{form → files}/FileInput.d.ts +3 -6
  113. package/dist/{form → files}/FileInput.js +3 -6
  114. package/dist/files/FileInput.js.map +1 -0
  115. package/dist/files/_files.scss +22 -0
  116. package/dist/files/styles.d.ts +5 -0
  117. package/dist/files/styles.js +7 -0
  118. package/dist/files/styles.js.map +1 -0
  119. package/dist/{form → files}/useFileUpload.d.ts +7 -9
  120. package/dist/{form → files}/useFileUpload.js +5 -7
  121. package/dist/files/useFileUpload.js.map +1 -0
  122. package/dist/files/utils.d.ts +169 -0
  123. package/dist/files/utils.js +114 -0
  124. package/dist/files/utils.js.map +1 -0
  125. package/dist/{form/fileUtils.d.ts → files/validation.d.ts} +9 -174
  126. package/dist/{form/fileUtils.js → files/validation.js} +9 -134
  127. package/dist/files/validation.js.map +1 -0
  128. package/dist/focus/useFocusContainer.d.ts +2 -2
  129. package/dist/focus/useFocusContainer.js.map +1 -1
  130. package/dist/focus/utils.js.map +1 -1
  131. package/dist/form/FormMessage.js.map +1 -1
  132. package/dist/form/FormMessageContainer.js +4 -2
  133. package/dist/form/FormMessageContainer.js.map +1 -1
  134. package/dist/form/InputToggle.d.ts +2 -1
  135. package/dist/form/InputToggle.js +2 -1
  136. package/dist/form/InputToggle.js.map +1 -1
  137. package/dist/form/InputToggleIcon.js.map +1 -1
  138. package/dist/form/Label.js +2 -2
  139. package/dist/form/Label.js.map +1 -1
  140. package/dist/form/Listbox.d.ts +24 -0
  141. package/dist/form/Listbox.js +46 -0
  142. package/dist/form/Listbox.js.map +1 -0
  143. package/dist/form/ListboxProvider.d.ts +21 -0
  144. package/dist/form/{useListboxProvider.js → ListboxProvider.js} +1 -1
  145. package/dist/form/ListboxProvider.js.map +1 -0
  146. package/dist/form/MenuItemTextField.js +1 -2
  147. package/dist/form/MenuItemTextField.js.map +1 -1
  148. package/dist/form/NativeSelect.js +7 -4
  149. package/dist/form/NativeSelect.js.map +1 -1
  150. package/dist/form/Option.d.ts +49 -10
  151. package/dist/form/Option.js +11 -9
  152. package/dist/form/Option.js.map +1 -1
  153. package/dist/form/Password.js.map +1 -1
  154. package/dist/form/Select.d.ts +2 -2
  155. package/dist/form/Select.js +81 -85
  156. package/dist/form/Select.js.map +1 -1
  157. package/dist/form/Slider.d.ts +4 -4
  158. package/dist/form/Slider.js +6 -2
  159. package/dist/form/Slider.js.map +1 -1
  160. package/dist/form/SliderThumb.d.ts +3 -3
  161. package/dist/form/SliderThumb.js.map +1 -1
  162. package/dist/form/SliderValueMarks.d.ts +2 -2
  163. package/dist/form/SliderValueMarks.js.map +1 -1
  164. package/dist/form/SliderValueTooltip.js.map +1 -1
  165. package/dist/form/TextArea.js +1 -2
  166. package/dist/form/TextArea.js.map +1 -1
  167. package/dist/form/TextField.js +1 -2
  168. package/dist/form/TextField.js.map +1 -1
  169. package/dist/form/TextFieldContainer.js +1 -2
  170. package/dist/form/TextFieldContainer.js.map +1 -1
  171. package/dist/form/_form.scss +186 -121
  172. package/dist/form/formMessageContainerStyles.d.ts +10 -0
  173. package/dist/form/formMessageContainerStyles.js +11 -0
  174. package/dist/form/formMessageContainerStyles.js.map +1 -0
  175. package/dist/form/inputToggleStyles.js.map +1 -1
  176. package/dist/form/optionStyles.d.ts +1 -0
  177. package/dist/form/optionStyles.js +2 -2
  178. package/dist/form/optionStyles.js.map +1 -1
  179. package/dist/form/selectUtils.js.map +1 -1
  180. package/dist/form/sliderUtils.d.ts +1 -1
  181. package/dist/form/sliderUtils.js.map +1 -1
  182. package/dist/form/textFieldContainerStyles.d.ts +0 -2
  183. package/dist/form/textFieldContainerStyles.js +1 -2
  184. package/dist/form/textFieldContainerStyles.js.map +1 -1
  185. package/dist/form/types.d.ts +3 -10
  186. package/dist/form/types.js.map +1 -1
  187. package/dist/form/useCheckboxGroup.d.ts +17 -17
  188. package/dist/form/useCheckboxGroup.js +9 -17
  189. package/dist/form/useCheckboxGroup.js.map +1 -1
  190. package/dist/form/useCombobox.d.ts +56 -21
  191. package/dist/form/useCombobox.js +19 -4
  192. package/dist/form/useCombobox.js.map +1 -1
  193. package/dist/form/useEditableCombobox.d.ts +24 -4
  194. package/dist/form/useEditableCombobox.js +5 -0
  195. package/dist/form/useEditableCombobox.js.map +1 -1
  196. package/dist/form/useNumberField.js.map +1 -1
  197. package/dist/form/useRadioGroup.d.ts +6 -6
  198. package/dist/form/useRadioGroup.js.map +1 -1
  199. package/dist/form/useResizingTextArea.js.map +1 -1
  200. package/dist/form/useSelectCombobox.d.ts +3 -4
  201. package/dist/form/useSelectCombobox.js.map +1 -1
  202. package/dist/form/useTextField.d.ts +1 -1
  203. package/dist/form/useTextField.js.map +1 -1
  204. package/dist/form/useTextFieldContainerAddons.js.map +1 -1
  205. package/dist/hoverMode/useHoverMode.d.ts +3 -3
  206. package/dist/hoverMode/useHoverMode.js.map +1 -1
  207. package/dist/hoverMode/useHoverModeProvider.d.ts +4 -4
  208. package/dist/hoverMode/useHoverModeProvider.js.map +1 -1
  209. package/dist/icon/_icon.scss +151 -2
  210. package/dist/icon/iconConfig.d.ts +10 -0
  211. package/dist/icon/iconConfig.js +7 -0
  212. package/dist/icon/iconConfig.js.map +1 -1
  213. package/dist/icon/materialConfig.js.map +1 -1
  214. package/dist/icon/styles.js.map +1 -1
  215. package/dist/interaction/UserInteractionModeProvider.d.ts +5 -5
  216. package/dist/interaction/UserInteractionModeProvider.js +12 -8
  217. package/dist/interaction/UserInteractionModeProvider.js.map +1 -1
  218. package/dist/interaction/types.d.ts +20 -2
  219. package/dist/interaction/types.js.map +1 -1
  220. package/dist/interaction/useElementInteraction.d.ts +7 -1
  221. package/dist/interaction/useElementInteraction.js +1 -2
  222. package/dist/interaction/useElementInteraction.js.map +1 -1
  223. package/dist/interaction/utils.d.ts +2 -2
  224. package/dist/interaction/utils.js +2 -2
  225. package/dist/interaction/utils.js.map +1 -1
  226. package/dist/layout/LayoutWindowSplitter.js.map +1 -1
  227. package/dist/layout/_layout.scss +23 -10
  228. package/dist/layout/useExpandableLayout.d.ts +3 -3
  229. package/dist/layout/useExpandableLayout.js.map +1 -1
  230. package/dist/layout/useLayoutAppBarHeight.d.ts +2 -3
  231. package/dist/layout/useLayoutAppBarHeight.js.map +1 -1
  232. package/dist/layout/useTemporaryLayout.d.ts +2 -2
  233. package/dist/layout/useTemporaryLayout.js.map +1 -1
  234. package/dist/link/SkipToMainContent.js.map +1 -1
  235. package/dist/list/ListItem.d.ts +2 -1
  236. package/dist/list/ListItem.js +2 -1
  237. package/dist/list/ListItem.js.map +1 -1
  238. package/dist/list/ListItemChildren.js.map +1 -1
  239. package/dist/list/ListItemLink.d.ts +2 -1
  240. package/dist/list/ListItemLink.js +2 -1
  241. package/dist/list/ListItemLink.js.map +1 -1
  242. package/dist/list/_list.scss +6 -5
  243. package/dist/media-queries/_media-queries.scss +12 -0
  244. package/dist/media-queries/appSize.js.map +1 -1
  245. package/dist/media-queries/useMediaQuery.js +3 -1
  246. package/dist/media-queries/useMediaQuery.js.map +1 -1
  247. package/dist/menu/DropdownMenu.js.map +1 -1
  248. package/dist/menu/Menu.d.ts +8 -3
  249. package/dist/menu/Menu.js +2 -1
  250. package/dist/menu/Menu.js.map +1 -1
  251. package/dist/menu/MenuItemButton.js +6 -2
  252. package/dist/menu/MenuItemButton.js.map +1 -1
  253. package/dist/menu/useContextMenu.d.ts +3 -3
  254. package/dist/menu/useContextMenu.js.map +1 -1
  255. package/dist/movement/types.d.ts +5 -5
  256. package/dist/movement/types.js.map +1 -1
  257. package/dist/navigation/CollapsibleNavGroup.d.ts +5 -3
  258. package/dist/navigation/CollapsibleNavGroup.js +3 -4
  259. package/dist/navigation/CollapsibleNavGroup.js.map +1 -1
  260. package/dist/navigation/DefaultNavigationRenderer.d.ts +1 -2
  261. package/dist/navigation/DefaultNavigationRenderer.js +6 -2
  262. package/dist/navigation/DefaultNavigationRenderer.js.map +1 -1
  263. package/dist/navigation/NavItemButton.d.ts +1 -1
  264. package/dist/navigation/NavItemButton.js +1 -0
  265. package/dist/navigation/NavItemButton.js.map +1 -1
  266. package/dist/navigation/NavItemLink.d.ts +3 -2
  267. package/dist/navigation/NavItemLink.js +6 -2
  268. package/dist/navigation/NavItemLink.js.map +1 -1
  269. package/dist/navigation/NavSubheader.d.ts +2 -3
  270. package/dist/navigation/NavSubheader.js.map +1 -1
  271. package/dist/navigation/Navigation.d.ts +1 -1
  272. package/dist/navigation/Navigation.js.map +1 -1
  273. package/dist/navigation/_navigation.scss +6 -5
  274. package/dist/navigation/types.d.ts +54 -6
  275. package/dist/navigation/types.js.map +1 -1
  276. package/dist/navigation/useActiveHeadingId.d.ts +1 -1
  277. package/dist/navigation/useActiveHeadingId.js.map +1 -1
  278. package/dist/navigation/useNavigationExpansion.d.ts +104 -0
  279. package/dist/navigation/useNavigationExpansion.js +77 -0
  280. package/dist/navigation/useNavigationExpansion.js.map +1 -0
  281. package/dist/navigation/utils.d.ts +13 -0
  282. package/dist/navigation/utils.js +36 -0
  283. package/dist/navigation/utils.js.map +1 -0
  284. package/dist/objectFit.d.ts +69 -0
  285. package/dist/objectFit.js +52 -0
  286. package/dist/objectFit.js.map +1 -0
  287. package/dist/overlay/_overlay.scss +2 -1
  288. package/dist/positioning/useFixedPositioning.d.ts +17 -4
  289. package/dist/positioning/useFixedPositioning.js +10 -5
  290. package/dist/positioning/useFixedPositioning.js.map +1 -1
  291. package/dist/positioning/utils.js.map +1 -1
  292. package/dist/progress/LinearProgress.js.map +1 -1
  293. package/dist/progress/_progress.scss +20 -14
  294. package/dist/responsive-item/ResponsiveItem.d.ts +64 -0
  295. package/dist/responsive-item/ResponsiveItem.js +68 -0
  296. package/dist/responsive-item/ResponsiveItem.js.map +1 -0
  297. package/dist/responsive-item/ResponsiveItemOverlay.d.ts +1 -19
  298. package/dist/responsive-item/ResponsiveItemOverlay.js +1 -12
  299. package/dist/responsive-item/ResponsiveItemOverlay.js.map +1 -1
  300. package/dist/responsive-item/_responsive-item.scss +110 -133
  301. package/dist/responsive-item/responsiveItemOverlayStyles.d.ts +19 -0
  302. package/dist/responsive-item/responsiveItemOverlayStyles.js +14 -0
  303. package/dist/responsive-item/responsiveItemOverlayStyles.js.map +1 -0
  304. package/dist/responsive-item/responsiveItemStyles.d.ts +52 -0
  305. package/dist/responsive-item/responsiveItemStyles.js +15 -0
  306. package/dist/responsive-item/responsiveItemStyles.js.map +1 -0
  307. package/dist/scroll/useScrollLock.d.ts +5 -0
  308. package/dist/scroll/useScrollLock.js.map +1 -1
  309. package/dist/searching/utils.d.ts +2 -2
  310. package/dist/searching/utils.js.map +1 -1
  311. package/dist/segmented-button/SegmentedButton.d.ts +2 -1
  312. package/dist/segmented-button/SegmentedButton.js +2 -1
  313. package/dist/segmented-button/SegmentedButton.js.map +1 -1
  314. package/dist/segmented-button/_segmented-button.scss +6 -6
  315. package/dist/sheet/_sheet.scss +18 -6
  316. package/dist/snackbar/ToastManager.js +15 -5
  317. package/dist/snackbar/ToastManager.js.map +1 -1
  318. package/dist/snackbar/_snackbar.scss +30 -17
  319. package/dist/snackbar/useCurrentToastActions.d.ts +5 -5
  320. package/dist/snackbar/useCurrentToastActions.js.map +1 -1
  321. package/dist/table/_table.scss +15 -3
  322. package/dist/table/tableCellStyles.d.ts +7 -3
  323. package/dist/table/tableCellStyles.js +2 -2
  324. package/dist/table/tableCellStyles.js.map +1 -1
  325. package/dist/tabs/Tab.d.ts +2 -1
  326. package/dist/tabs/Tab.js +2 -1
  327. package/dist/tabs/Tab.js.map +1 -1
  328. package/dist/tabs/TabList.d.ts +2 -2
  329. package/dist/tabs/TabList.js.map +1 -1
  330. package/dist/tabs/TabListScrollButton.d.ts +1 -1
  331. package/dist/tabs/TabListScrollButton.js +1 -1
  332. package/dist/tabs/TabListScrollButton.js.map +1 -1
  333. package/dist/tabs/_tabs.scss +30 -9
  334. package/dist/tabs/getTabListScrollToOptions.d.ts +18 -0
  335. package/dist/tabs/getTabListScrollToOptions.js +19 -0
  336. package/dist/tabs/getTabListScrollToOptions.js.map +1 -0
  337. package/dist/tabs/tabStyles.d.ts +3 -0
  338. package/dist/tabs/tabStyles.js.map +1 -1
  339. package/dist/tabs/useTabList.d.ts +1 -8
  340. package/dist/tabs/useTabList.js +1 -0
  341. package/dist/tabs/useTabList.js.map +1 -1
  342. package/dist/tabs/useTabs.d.ts +6 -6
  343. package/dist/tabs/useTabs.js.map +1 -1
  344. package/dist/tabs/utils.d.ts +0 -18
  345. package/dist/tabs/utils.js +0 -15
  346. package/dist/tabs/utils.js.map +1 -1
  347. package/dist/test-utils/matchMedia.d.ts +1 -1
  348. package/dist/test-utils/matchMedia.js +4 -4
  349. package/dist/test-utils/matchMedia.js.map +1 -1
  350. package/dist/test-utils/polyfills/TextDecoder.js +0 -1
  351. package/dist/test-utils/polyfills/TextDecoder.js.map +1 -1
  352. package/dist/test-utils/timers.d.ts +9 -5
  353. package/dist/test-utils/timers.js +5 -5
  354. package/dist/test-utils/timers.js.map +1 -1
  355. package/dist/theme/LocalStorageColorSchemeProvider.d.ts +1 -1
  356. package/dist/theme/LocalStorageColorSchemeProvider.js +2 -1
  357. package/dist/theme/LocalStorageColorSchemeProvider.js.map +1 -1
  358. package/dist/theme/ThemeProvider.js +3 -1
  359. package/dist/theme/ThemeProvider.js.map +1 -1
  360. package/dist/theme/_a11y.scss +77 -13
  361. package/dist/theme/_colors.scss +279 -277
  362. package/dist/theme/_theme.scss +308 -37
  363. package/dist/theme/isColorScheme.d.ts +16 -0
  364. package/dist/theme/isColorScheme.js +19 -0
  365. package/dist/theme/isColorScheme.js.map +1 -0
  366. package/dist/theme/types.d.ts +53 -1
  367. package/dist/theme/types.js +1 -23
  368. package/dist/theme/types.js.map +1 -1
  369. package/dist/theme/useCSSVariables.d.ts +2 -19
  370. package/dist/theme/useCSSVariables.js.map +1 -1
  371. package/dist/theme/useColorScheme.d.ts +1 -35
  372. package/dist/theme/useColorScheme.js.map +1 -1
  373. package/dist/theme/useColorSchemeMetaTag.d.ts +1 -1
  374. package/dist/theme/useColorSchemeMetaTag.js.map +1 -1
  375. package/dist/theme/useColorSchemeProvider.d.ts +1 -1
  376. package/dist/theme/useColorSchemeProvider.js +1 -1
  377. package/dist/theme/useColorSchemeProvider.js.map +1 -1
  378. package/dist/theme/{usePrefersColorScheme.js → usePrefersDarkScheme.js} +1 -1
  379. package/dist/theme/usePrefersDarkScheme.js.map +1 -0
  380. package/dist/theme/utils.js.map +1 -1
  381. package/dist/tooltip/useTooltip.d.ts +14 -9
  382. package/dist/tooltip/useTooltip.js +2 -1
  383. package/dist/tooltip/useTooltip.js.map +1 -1
  384. package/dist/transition/_transition.scss +16 -9
  385. package/dist/transition/skeletonPlaceholderUtils.js.map +1 -1
  386. package/dist/transition/types.d.ts +1 -1
  387. package/dist/transition/types.js.map +1 -1
  388. package/dist/transition/useCarousel.d.ts +3 -3
  389. package/dist/transition/useCarousel.js.map +1 -1
  390. package/dist/transition/useCollapseTransition.js.map +1 -1
  391. package/dist/transition/useTransition.js +1 -0
  392. package/dist/transition/useTransition.js.map +1 -1
  393. package/dist/transition/utils.js.map +1 -1
  394. package/dist/tree/TreeItem.d.ts +2 -1
  395. package/dist/tree/TreeItem.js +4 -3
  396. package/dist/tree/TreeItem.js.map +1 -1
  397. package/dist/tree/TreeItemExpander.js.map +1 -1
  398. package/dist/tree/_tree.scss +8 -6
  399. package/dist/tree/useTreeExpansion.d.ts +1 -1
  400. package/dist/tree/useTreeExpansion.js +6 -18
  401. package/dist/tree/useTreeExpansion.js.map +1 -1
  402. package/dist/tree/useTreeSelection.d.ts +1 -1
  403. package/dist/tree/useTreeSelection.js +7 -25
  404. package/dist/tree/useTreeSelection.js.map +1 -1
  405. package/dist/tree/utils.d.ts +1 -1
  406. package/dist/tree/utils.js.map +1 -1
  407. package/dist/types.d.ts +12 -4
  408. package/dist/types.js.map +1 -1
  409. package/dist/typography/WritingDirectionProvider.d.ts +1 -1
  410. package/dist/typography/WritingDirectionProvider.js.map +1 -1
  411. package/dist/typography/_typography.scss +94 -37
  412. package/dist/typography/typographyStyles.js.map +1 -1
  413. package/dist/useDebouncedFunction.d.ts +1 -5
  414. package/dist/useDebouncedFunction.js +3 -1
  415. package/dist/useDebouncedFunction.js.map +1 -1
  416. package/dist/useDropzone.d.ts +4 -4
  417. package/dist/useDropzone.js.map +1 -1
  418. package/dist/useEnsuredId.js.map +1 -1
  419. package/dist/useIntersectionObserver.d.ts +5 -5
  420. package/dist/useIntersectionObserver.js.map +1 -1
  421. package/dist/useLocalStorage.d.ts +3 -3
  422. package/dist/useLocalStorage.js +1 -1
  423. package/dist/useLocalStorage.js.map +1 -1
  424. package/dist/useMutationObserver.d.ts +1 -1
  425. package/dist/useMutationObserver.js.map +1 -1
  426. package/dist/useOrientation.js +3 -1
  427. package/dist/useOrientation.js.map +1 -1
  428. package/dist/usePageInactive.d.ts +2 -2
  429. package/dist/usePageInactive.js.map +1 -1
  430. package/dist/useReadonlySet.d.ts +76 -0
  431. package/dist/useReadonlySet.js +72 -0
  432. package/dist/useReadonlySet.js.map +1 -0
  433. package/dist/useResizeListener.d.ts +1 -1
  434. package/dist/useResizeListener.js.map +1 -1
  435. package/dist/useThrottledFunction.d.ts +1 -5
  436. package/dist/useThrottledFunction.js +3 -1
  437. package/dist/useThrottledFunction.js.map +1 -1
  438. package/dist/useToggle.d.ts +3 -3
  439. package/dist/useToggle.js.map +1 -1
  440. package/dist/utils/RenderRecursively.d.ts +1 -1
  441. package/dist/utils/RenderRecursively.js.map +1 -1
  442. package/dist/utils/alphaNumericSort.d.ts +1 -1
  443. package/dist/utils/alphaNumericSort.js.map +1 -1
  444. package/dist/utils/bem.js.map +1 -1
  445. package/dist/utils/debounce.d.ts +5 -0
  446. package/dist/utils/debounce.js +17 -0
  447. package/dist/utils/debounce.js.map +1 -0
  448. package/dist/utils/nearest.js.map +1 -1
  449. package/dist/utils/parseCssLengthUnit.js.map +1 -1
  450. package/dist/utils/throttle.d.ts +5 -0
  451. package/dist/utils/throttle.js +30 -0
  452. package/dist/utils/throttle.js.map +1 -0
  453. package/dist/utils/wait.js +3 -1
  454. package/dist/utils/wait.js.map +1 -1
  455. package/dist/window-splitter/WindowSplitter.d.ts +37 -15
  456. package/dist/window-splitter/WindowSplitter.js +38 -17
  457. package/dist/window-splitter/WindowSplitter.js.map +1 -1
  458. package/dist/window-splitter/_window-splitter.scss +32 -14
  459. package/dist/window-splitter/styles.d.ts +14 -0
  460. package/dist/window-splitter/styles.js +18 -0
  461. package/dist/window-splitter/styles.js.map +1 -0
  462. package/package.json +24 -23
  463. package/src/app-bar/AppBar.tsx +1 -170
  464. package/src/app-bar/AppBarTitle.tsx +1 -44
  465. package/src/app-bar/styles.ts +206 -0
  466. package/src/autocomplete/Autocomplete.tsx +194 -211
  467. package/src/autocomplete/AutocompleteChip.tsx +48 -0
  468. package/src/autocomplete/AutocompleteCircularProgress.tsx +6 -17
  469. package/src/autocomplete/AutocompleteClearButton.tsx +44 -0
  470. package/src/autocomplete/AutocompleteDropdownButton.tsx +16 -37
  471. package/src/autocomplete/AutocompleteListboxChildren.tsx +68 -0
  472. package/src/autocomplete/autocompleteStyles.ts +48 -9
  473. package/src/autocomplete/defaults.ts +26 -17
  474. package/src/autocomplete/types.ts +744 -61
  475. package/src/autocomplete/useAutocomplete.ts +428 -0
  476. package/src/autocomplete/utils.ts +211 -0
  477. package/src/badge/Badge.tsx +1 -39
  478. package/src/badge/styles.ts +45 -0
  479. package/src/box/Box.tsx +11 -9
  480. package/src/box/styles.ts +14 -5
  481. package/src/button/AsyncButton.tsx +1 -1
  482. package/src/button/Button.tsx +5 -1
  483. package/src/card/Card.tsx +35 -4
  484. package/src/card/ClickableCard.tsx +9 -2
  485. package/src/card/styles.ts +1 -10
  486. package/src/chip/Chip.tsx +6 -1
  487. package/src/chip/styles.ts +12 -10
  488. package/src/delegateEvent.ts +5 -5
  489. package/src/dialog/Dialog.tsx +48 -61
  490. package/src/dialog/FixedDialog.tsx +1 -11
  491. package/src/dialog/styles.ts +97 -0
  492. package/src/divider/Divider.tsx +0 -12
  493. package/src/divider/styles.ts +12 -0
  494. package/src/draggable/useDraggable.ts +17 -10
  495. package/src/draggable/utils.ts +3 -3
  496. package/src/expansion-panel/ExpansionPanel.tsx +1 -1
  497. package/src/expansion-panel/useExpansionPanels.ts +18 -27
  498. package/src/{form → files}/FileInput.tsx +7 -15
  499. package/src/files/styles.ts +10 -0
  500. package/src/{form → files}/useFileUpload.ts +30 -34
  501. package/src/files/utils.ts +234 -0
  502. package/src/{form/fileUtils.ts → files/validation.ts} +13 -242
  503. package/src/focus/useFocusContainer.ts +16 -8
  504. package/src/form/FormMessageContainer.tsx +2 -2
  505. package/src/form/InputToggle.tsx +5 -1
  506. package/src/form/Label.tsx +18 -18
  507. package/src/form/Listbox.tsx +87 -0
  508. package/src/form/ListboxProvider.ts +37 -0
  509. package/src/form/MenuItemTextField.tsx +1 -2
  510. package/src/form/NativeSelect.tsx +14 -10
  511. package/src/form/Option.tsx +74 -22
  512. package/src/form/Select.tsx +89 -85
  513. package/src/form/Slider.tsx +14 -11
  514. package/src/form/SliderThumb.tsx +4 -4
  515. package/src/form/SliderValueMarks.tsx +4 -4
  516. package/src/form/TextArea.tsx +6 -8
  517. package/src/form/TextField.tsx +0 -2
  518. package/src/form/TextFieldContainer.tsx +9 -11
  519. package/src/form/formMessageContainerStyles.ts +22 -0
  520. package/src/form/optionStyles.ts +7 -2
  521. package/src/form/sliderUtils.ts +1 -1
  522. package/src/form/textFieldContainerStyles.ts +9 -14
  523. package/src/form/types.ts +3 -11
  524. package/src/form/useCheckboxGroup.ts +28 -36
  525. package/src/form/useCombobox.ts +86 -38
  526. package/src/form/useEditableCombobox.ts +43 -8
  527. package/src/form/useRadioGroup.ts +6 -6
  528. package/src/form/useSelectCombobox.ts +4 -4
  529. package/src/form/useTextField.ts +1 -1
  530. package/src/hoverMode/useHoverMode.ts +3 -3
  531. package/src/hoverMode/useHoverModeProvider.ts +4 -4
  532. package/src/icon/iconConfig.tsx +12 -0
  533. package/src/interaction/UserInteractionModeProvider.tsx +12 -8
  534. package/src/interaction/types.ts +21 -2
  535. package/src/interaction/useElementInteraction.tsx +9 -2
  536. package/src/interaction/utils.ts +7 -7
  537. package/src/layout/useExpandableLayout.ts +3 -3
  538. package/src/layout/useLayoutAppBarHeight.ts +3 -4
  539. package/src/layout/useTemporaryLayout.ts +2 -2
  540. package/src/list/ListItem.tsx +5 -1
  541. package/src/list/ListItemLink.tsx +5 -1
  542. package/src/media-queries/useMediaQuery.ts +2 -1
  543. package/src/menu/Menu.tsx +11 -3
  544. package/src/menu/MenuItemButton.tsx +7 -1
  545. package/src/menu/useContextMenu.ts +3 -3
  546. package/src/movement/types.ts +5 -5
  547. package/src/navigation/CollapsibleNavGroup.tsx +16 -8
  548. package/src/navigation/DefaultNavigationRenderer.tsx +8 -6
  549. package/src/navigation/NavItemButton.tsx +2 -1
  550. package/src/navigation/NavItemLink.tsx +11 -3
  551. package/src/navigation/NavSubheader.tsx +1 -1
  552. package/src/navigation/Navigation.tsx +1 -1
  553. package/src/navigation/types.ts +60 -10
  554. package/src/navigation/useActiveHeadingId.ts +1 -1
  555. package/src/navigation/useNavigationExpansion.ts +170 -0
  556. package/src/navigation/utils.ts +47 -0
  557. package/src/objectFit.ts +88 -0
  558. package/src/positioning/useFixedPositioning.ts +34 -11
  559. package/src/responsive-item/ResponsiveItem.tsx +96 -0
  560. package/src/responsive-item/ResponsiveItemOverlay.tsx +6 -46
  561. package/src/responsive-item/responsiveItemOverlayStyles.ts +46 -0
  562. package/src/responsive-item/responsiveItemStyles.ts +81 -0
  563. package/src/scroll/useScrollLock.ts +6 -0
  564. package/src/searching/utils.ts +3 -3
  565. package/src/segmented-button/SegmentedButton.tsx +5 -1
  566. package/src/snackbar/ToastManager.tsx +16 -5
  567. package/src/snackbar/useCurrentToastActions.ts +5 -5
  568. package/src/table/tableCellStyles.ts +10 -6
  569. package/src/tabs/Tab.tsx +4 -1
  570. package/src/tabs/TabList.tsx +2 -2
  571. package/src/tabs/TabListScrollButton.tsx +4 -4
  572. package/src/tabs/getTabListScrollToOptions.ts +37 -0
  573. package/src/tabs/tabStyles.ts +4 -0
  574. package/src/tabs/useTabList.ts +2 -9
  575. package/src/tabs/useTabs.ts +6 -6
  576. package/src/tabs/utils.ts +0 -38
  577. package/src/test-utils/matchMedia.ts +5 -5
  578. package/src/test-utils/polyfills/TextDecoder.ts +0 -1
  579. package/src/test-utils/timers.ts +10 -7
  580. package/src/theme/LocalStorageColorSchemeProvider.tsx +4 -4
  581. package/src/theme/ThemeProvider.tsx +3 -3
  582. package/src/theme/isColorScheme.ts +22 -0
  583. package/src/theme/types.ts +67 -1
  584. package/src/theme/useCSSVariables.ts +7 -30
  585. package/src/theme/useColorScheme.ts +1 -40
  586. package/src/theme/useColorSchemeMetaTag.ts +1 -1
  587. package/src/theme/useColorSchemeProvider.ts +2 -2
  588. package/src/tooltip/useTooltip.ts +17 -9
  589. package/src/transition/types.ts +1 -1
  590. package/src/transition/useCarousel.ts +3 -3
  591. package/src/transition/useTransition.ts +1 -0
  592. package/src/tree/TreeItem.tsx +7 -1
  593. package/src/tree/TreeItemExpander.tsx +1 -1
  594. package/src/tree/useTreeExpansion.ts +7 -25
  595. package/src/tree/useTreeSelection.ts +8 -32
  596. package/src/tree/utils.ts +6 -2
  597. package/src/types.ts +20 -4
  598. package/src/typography/WritingDirectionProvider.tsx +1 -1
  599. package/src/useDebouncedFunction.ts +4 -9
  600. package/src/useDropzone.ts +4 -4
  601. package/src/useIntersectionObserver.ts +5 -5
  602. package/src/useLocalStorage.ts +6 -6
  603. package/src/useMutationObserver.ts +1 -1
  604. package/src/useOrientation.ts +3 -1
  605. package/src/usePageInactive.ts +2 -2
  606. package/src/useReadonlySet.ts +122 -0
  607. package/src/useResizeListener.ts +1 -1
  608. package/src/useThrottledFunction.ts +6 -9
  609. package/src/useToggle.ts +3 -3
  610. package/src/utils/RenderRecursively.tsx +1 -1
  611. package/src/utils/alphaNumericSort.ts +1 -1
  612. package/src/utils/debounce.ts +22 -0
  613. package/src/utils/throttle.ts +38 -0
  614. package/src/utils/wait.ts +5 -1
  615. package/src/window-splitter/WindowSplitter.tsx +38 -43
  616. package/src/window-splitter/styles.ts +42 -0
  617. package/dist/autocomplete/FilterAutocompleteOptions.d.ts +0 -8
  618. package/dist/autocomplete/FilterAutocompleteOptions.js +0 -57
  619. package/dist/autocomplete/FilterAutocompleteOptions.js.map +0 -1
  620. package/dist/dialog/DialogContainer.d.ts +0 -14
  621. package/dist/dialog/DialogContainer.js +0 -20
  622. package/dist/dialog/DialogContainer.js.map +0 -1
  623. package/dist/form/FileInput.js.map +0 -1
  624. package/dist/form/fileUtils.js.map +0 -1
  625. package/dist/form/useFileUpload.js.map +0 -1
  626. package/dist/form/useListboxProvider.d.ts +0 -31
  627. package/dist/form/useListboxProvider.js.map +0 -1
  628. package/dist/navigation/getHrefFromParents.d.ts +0 -5
  629. package/dist/navigation/getHrefFromParents.js +0 -13
  630. package/dist/navigation/getHrefFromParents.js.map +0 -1
  631. package/dist/responsive-item/ResponsiveItemContainer.d.ts +0 -115
  632. package/dist/responsive-item/ResponsiveItemContainer.js +0 -80
  633. package/dist/responsive-item/ResponsiveItemContainer.js.map +0 -1
  634. package/dist/responsive-item/styles.d.ts +0 -34
  635. package/dist/responsive-item/styles.js +0 -17
  636. package/dist/responsive-item/styles.js.map +0 -1
  637. package/dist/theme/usePrefersColorScheme.js.map +0 -1
  638. package/src/autocomplete/FilterAutocompleteOptions.tsx +0 -86
  639. package/src/dialog/DialogContainer.tsx +0 -28
  640. package/src/form/useListboxProvider.ts +0 -45
  641. package/src/navigation/getHrefFromParents.ts +0 -15
  642. package/src/responsive-item/ResponsiveItemContainer.tsx +0 -174
  643. package/src/responsive-item/styles.ts +0 -58
  644. /package/dist/theme/{usePrefersColorScheme.d.ts → usePrefersDarkScheme.d.ts} +0 -0
  645. /package/src/theme/{usePrefersColorScheme.ts → usePrefersDarkScheme.ts} +0 -0
@@ -0,0 +1,87 @@
1
+ import {
2
+ type Dispatch,
3
+ type ReactElement,
4
+ type ReactNode,
5
+ type Ref,
6
+ useMemo,
7
+ } from "react";
8
+ import { Menu, type MenuProps } from "../menu/Menu.js";
9
+ import { type LabelRequiredForA11y } from "../types.js";
10
+ import { ListboxProvider } from "./ListboxProvider.js";
11
+ import { type OptionSelectedIconProps } from "./Option.js";
12
+
13
+ /**
14
+ * @since 6.0.0
15
+ * @internal
16
+ */
17
+ export type ListboxValue = string | number | null | Record<string, unknown>;
18
+
19
+ /**
20
+ * @since 6.0.0
21
+ * @internal
22
+ */
23
+ export interface ListboxProps<Value extends ListboxValue>
24
+ extends MenuProps,
25
+ OptionSelectedIconProps {
26
+ nodeRef?: Ref<HTMLDivElement>;
27
+
28
+ value: Value | readonly NonNullable<ListboxValue>[];
29
+ setValue: Dispatch<NonNullable<Value>>;
30
+ children: ReactNode;
31
+ }
32
+
33
+ /**
34
+ * @since 6.0.0
35
+ * @internal
36
+ */
37
+ export function Listbox<T extends ListboxValue>(
38
+ props: LabelRequiredForA11y<ListboxProps<T>>
39
+ ): ReactElement {
40
+ const {
41
+ value,
42
+ setValue,
43
+ children,
44
+ nodeRef,
45
+ selectedIconAfter,
46
+ selectedIcon,
47
+ unselectedIcon,
48
+ disableSelectedIcon,
49
+ ...remaining
50
+ } = props;
51
+ const values = useMemo(() => {
52
+ if (Array.isArray(value)) {
53
+ return new Set(value);
54
+ }
55
+
56
+ return new Set([value]);
57
+ }, [value]);
58
+
59
+ return (
60
+ <ListboxProvider
61
+ value={useMemo(
62
+ () => ({
63
+ selectOption: setValue,
64
+ isOptionSelected(option) {
65
+ return values.has(option);
66
+ },
67
+ selectedIcon,
68
+ unselectedIcon,
69
+ selectedIconAfter,
70
+ disableSelectedIcon,
71
+ }),
72
+ [
73
+ disableSelectedIcon,
74
+ selectedIcon,
75
+ selectedIconAfter,
76
+ setValue,
77
+ unselectedIcon,
78
+ values,
79
+ ]
80
+ )}
81
+ >
82
+ <Menu {...remaining} ref={nodeRef}>
83
+ {children}
84
+ </Menu>
85
+ </ListboxProvider>
86
+ );
87
+ }
@@ -0,0 +1,37 @@
1
+ "use client";
2
+ import { createContext, useContext } from "react";
3
+ import { type OptionSelectedIconProps } from "./Option.js";
4
+
5
+ /**
6
+ * @internal
7
+ * @since 6.0.0
8
+ */
9
+ export interface ListboxContext extends OptionSelectedIconProps {
10
+ // NOTE: These are not converted to arrow functions so the option can be
11
+ // inferred correctly
12
+ selectOption(option: unknown): void;
13
+ isOptionSelected(option: unknown): boolean;
14
+ }
15
+
16
+ const context = createContext<ListboxContext | null>(null);
17
+
18
+ /**
19
+ * **Client Component**
20
+ *
21
+ * @internal
22
+ * @since 6.0.0
23
+ */
24
+ export const { Provider: ListboxProvider } = context;
25
+
26
+ /**
27
+ * @internal
28
+ * @since 6.0.0
29
+ */
30
+ export function useListboxContext(): ListboxContext {
31
+ const value = useContext(context);
32
+ if (!value) {
33
+ throw new Error("The `ListboxProvider` must be a parent component");
34
+ }
35
+
36
+ return value;
37
+ }
@@ -33,7 +33,7 @@ export const MenuItemTextField = forwardRef<
33
33
  HTMLInputElement,
34
34
  MenuItemTextFieldProps
35
35
  >(function MenuItemTextField(props, ref) {
36
- const { liProps, onKeyDown, stretch = true, ...remaining } = props;
36
+ const { liProps, onKeyDown, ...remaining } = props;
37
37
  return (
38
38
  <li
39
39
  role="none"
@@ -47,7 +47,6 @@ export const MenuItemTextField = forwardRef<
47
47
  <TextField
48
48
  {...remaining}
49
49
  ref={ref}
50
- stretch={stretch}
51
50
  onKeyDown={(event) => {
52
51
  onKeyDown?.(event);
53
52
  switch (event.key) {
@@ -123,17 +123,16 @@ export const NativeSelect = forwardRef<HTMLSelectElement, NativeSelectProps>(
123
123
  autoCompleteValue,
124
124
  autoComplete = autoCompleteValue,
125
125
  name = autoCompleteValue,
126
- dense = false,
127
- error = false,
128
- active = false,
129
- inline = false,
130
- stretch = false,
126
+ dense,
127
+ error,
128
+ active,
129
+ inline,
131
130
  leftAddon,
132
131
  rightAddon: propRightAddon,
133
132
  leftAddonProps,
134
133
  rightAddonProps,
135
- disableLeftAddonStyles = false,
136
- disableRightAddonStyles = false,
134
+ disableLeftAddonStyles,
135
+ disableRightAddonStyles,
137
136
  theme: propTheme,
138
137
  underlineDirection: propUnderlineDirection,
139
138
  messageProps,
@@ -142,7 +141,7 @@ export const NativeSelect = forwardRef<HTMLSelectElement, NativeSelectProps>(
142
141
  children,
143
142
  ...remaining
144
143
  } = props;
145
- const { disabled = false, readOnly = false, multiple = false } = props;
144
+ const { disabled, readOnly, multiple } = props;
146
145
  const id = useEnsuredId(propId, "select");
147
146
  const theme = getFormConfig("theme", propTheme);
148
147
  const underlineDirection = getFormConfig(
@@ -160,7 +159,13 @@ export const NativeSelect = forwardRef<HTMLSelectElement, NativeSelectProps>(
160
159
  return (
161
160
  <FormMessageContainer
162
161
  {...messageContainerProps}
163
- messageProps={messageProps}
162
+ messageProps={
163
+ messageProps && {
164
+ error,
165
+ theme,
166
+ ...messageProps,
167
+ }
168
+ }
164
169
  >
165
170
  <TextFieldContainer
166
171
  {...containerProps}
@@ -177,7 +182,6 @@ export const NativeSelect = forwardRef<HTMLSelectElement, NativeSelectProps>(
177
182
  dense={dense}
178
183
  inline={inline}
179
184
  active={active}
180
- stretch={stretch}
181
185
  readOnly={readOnly}
182
186
  disabled={disabled}
183
187
  leftAddon={leftAddon}
@@ -11,9 +11,8 @@ import { getListItemHeight } from "../list/getListItemHeight.js";
11
11
  import { ListItemText } from "../list/ListItemText.js";
12
12
  import { MenuItem, type MenuItemProps } from "../menu/MenuItem.js";
13
13
  import { useEnsuredId } from "../useEnsuredId.js";
14
+ import { useListboxContext } from "./ListboxProvider.js";
14
15
  import { option } from "./optionStyles.js";
15
- import { useListboxContext } from "./useListboxProvider.js";
16
- import { triggerManualChangeEvent } from "./utils.js";
17
16
 
18
17
  const noop = (): void => {
19
18
  // do nothing
@@ -24,24 +23,16 @@ const noop = (): void => {
24
23
  * unselected options have the same alignment.
25
24
  *
26
25
  * @since 6.0.0
26
+ * @defaultValue `<span className="rmd-icon rmd-icon--svg />`
27
27
  */
28
28
  export const DEFAULT_OPTION_UNSELECTED_ICON = (
29
29
  <span className={icon({ type: "svg" })} />
30
30
  );
31
31
 
32
32
  /**
33
- * @since 6.0.0 removed the `selected` and `focused` props.
34
- * @since 6.0.0 Added the `value`, `selectedIcon`, `unselectedIcon`,
35
- * `selectedIconAfter`, and `iconSpacingProps` props.
33
+ * @since 6.0.0
36
34
  */
37
- export interface OptionProps extends MenuItemProps {
38
- /**
39
- * @defaultValue `"option"`
40
- */
41
- role?: string;
42
-
43
- value: string | number;
44
-
35
+ export interface OptionSelectedIconProps {
45
36
  /**
46
37
  * @defaultValue `getIcon("selected")`
47
38
  */
@@ -61,6 +52,54 @@ export interface OptionProps extends MenuItemProps {
61
52
  */
62
53
  selectedIconAfter?: boolean;
63
54
 
55
+ /**
56
+ * Set this to `true` to remove selected icon behavior from the `Option`.
57
+ *
58
+ * @defaultValue `false`
59
+ */
60
+ disableSelectedIcon?: boolean;
61
+ }
62
+
63
+ /**
64
+ * @since 6.0.0 removed the `selected` and `focused` props.
65
+ * @since 6.0.0 Added the `value`, `selectedIcon`, `unselectedIcon`,
66
+ * `selectedIconAfter`, and `iconSpacingProps` props.
67
+ */
68
+ export interface OptionProps extends MenuItemProps, OptionSelectedIconProps {
69
+ /**
70
+ * @defaultValue `"option"`
71
+ */
72
+ role?: string;
73
+ value: string | number | Record<string, unknown>;
74
+
75
+ /**
76
+ * An optional className to apply only while the current option is selected to
77
+ * override any global default selected styles. It is recommended to update
78
+ * the `react-md.$form-option-selected-styles` map first to change selected
79
+ * style globally and then any one-off customizations through this prop.
80
+ *
81
+ * @example Global Change
82
+ * ```scss
83
+ * @use "@react-md/core" with (
84
+ * // these are the defaults
85
+ * $form-option-selected-styles: (
86
+ * --rmd-icon-color: currentcolor,
87
+ * background-color: colors.$blue-900,
88
+ * color: colors.$white,
89
+ * ),
90
+ *
91
+ * // so if you wanted to remove the styles globally
92
+ * $form-option-selected-styles: (),
93
+ * );
94
+ * ```
95
+ *
96
+ * This really results in something like:
97
+ * ```ts
98
+ * className="rmd-list-item ... rmd-menu-item ... rmd-option rmd-option--selected ${selectedClassName}"
99
+ * ```
100
+ */
101
+ selectedClassName?: string;
102
+
64
103
  /**
65
104
  * Since the `selectedIcon`/`unselectedIcon` are rendered as
66
105
  * `leftAddon`/`rightAddon`, the provided `leftAddon`/`rightAddon` will be
@@ -93,7 +132,7 @@ export interface OptionProps extends MenuItemProps {
93
132
  *
94
133
  * @since 6.0.0 removed the `selected` and `focused` props.
95
134
  * @since 6.0.0 Added the `value`, `selectedIcon`, `unselectedIcon`,
96
- * `selectedIconAfter`, and `iconSpacingProps` props.
135
+ * `selectedIconAfter`, `iconSpacingProps`, and `selectedClassName` props.
97
136
  */
98
137
  export const Option = forwardRef<HTMLLIElement, OptionProps>(
99
138
  function Option(props, ref) {
@@ -104,9 +143,11 @@ export const Option = forwardRef<HTMLLIElement, OptionProps>(
104
143
  children: propChildren,
105
144
  onClick = noop,
106
145
  className,
146
+ selectedClassName,
107
147
  selectedIcon: propSelectedIcon,
108
148
  unselectedIcon: propUnselectedIcon,
109
149
  selectedIconAfter: propSelectedIconAfter,
150
+ disableSelectedIcon: propDisableSelectedIcon,
110
151
  textIconSpacingProps,
111
152
  leftAddon: propLeftAddon,
112
153
  leftAddonType,
@@ -122,20 +163,26 @@ export const Option = forwardRef<HTMLLIElement, OptionProps>(
122
163
 
123
164
  const id = useEnsuredId(propId, "option");
124
165
  const {
125
- inputRef,
126
- currentValue,
127
- disableSelectedIcon,
166
+ selectOption,
167
+ isOptionSelected,
168
+ disableSelectedIcon: contextDisableSelectedIcon,
169
+ selectedIcon: contextSelectedIcon,
170
+ unselectedIcon: contextUnselectedIcon,
128
171
  selectedIconAfter: contextSelectedIconAfter,
129
172
  } = useListboxContext();
130
173
  const selectedIconAfter = propSelectedIconAfter ?? contextSelectedIconAfter;
131
- const selected = value === currentValue;
174
+ const disableSelectedIcon =
175
+ propDisableSelectedIcon ?? contextDisableSelectedIcon;
176
+ const selected = isOptionSelected(value);
132
177
  const selectedIcon = getIcon(
133
178
  "selected",
134
- disableSelectedIcon ? null : propSelectedIcon
179
+ disableSelectedIcon ? null : (propSelectedIcon ?? contextSelectedIcon)
135
180
  );
136
181
  const unselectedIcon = disableSelectedIcon
137
182
  ? null
138
- : (propUnselectedIcon ?? DEFAULT_OPTION_UNSELECTED_ICON);
183
+ : (propUnselectedIcon ??
184
+ contextUnselectedIcon ??
185
+ DEFAULT_OPTION_UNSELECTED_ICON);
139
186
  const icon = selected ? selectedIcon : unselectedIcon;
140
187
 
141
188
  let leftAddon = propLeftAddon;
@@ -186,9 +233,14 @@ export const Option = forwardRef<HTMLLIElement, OptionProps>(
186
233
  role={role}
187
234
  onClick={(event) => {
188
235
  onClick(event);
189
- triggerManualChangeEvent(inputRef.current, value);
236
+ selectOption(value);
190
237
  }}
191
- className={option({ icon: !!icon, selected, className })}
238
+ className={option({
239
+ icon: !!icon,
240
+ selected,
241
+ selectedClassName,
242
+ className,
243
+ })}
192
244
  secondaryText={secondaryText}
193
245
  height={height}
194
246
  leftAddon={leftAddon}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { cnb } from "cnbuilder";
3
3
  import {
4
- useMemo,
4
+ useCallback,
5
5
  useRef,
6
6
  useState,
7
7
  type ChangeEvent,
@@ -14,7 +14,7 @@ import {
14
14
  import { type BoxProps } from "../box/Box.js";
15
15
  import { IconRotator } from "../icon/IconRotator.js";
16
16
  import { getIcon } from "../icon/iconConfig.js";
17
- import { Menu, type MenuProps } from "../menu/Menu.js";
17
+ import { type MenuProps } from "../menu/Menu.js";
18
18
  import { KeyboardMovementProvider } from "../movement/useKeyboardMovementProvider.js";
19
19
  import {
20
20
  type LabelA11y,
@@ -24,6 +24,7 @@ import {
24
24
  import { useEnsuredId } from "../useEnsuredId.js";
25
25
  import { useEnsuredRef } from "../useEnsuredRef.js";
26
26
  import { label as labelStyles } from "./Label.js";
27
+ import { Listbox } from "./Listbox.js";
27
28
  import { SelectedOption } from "./SelectedOption.js";
28
29
  import {
29
30
  TextFieldContainer,
@@ -35,8 +36,8 @@ import { extractOptionsFromChildren } from "./selectUtils.js";
35
36
  import { textField } from "./textFieldStyles.js";
36
37
  import { type UserAgentAutocompleteProps } from "./types.js";
37
38
  import { useFormReset } from "./useFormReset.js";
38
- import { ListboxProvider, type ListboxContext } from "./useListboxProvider.js";
39
39
  import { useSelectCombobox } from "./useSelectCombobox.js";
40
+ import { triggerManualChangeEvent } from "./utils.js";
40
41
 
41
42
  const EMPTY_STRING = "" as const;
42
43
  const noop = (): void => {
@@ -128,7 +129,7 @@ export interface SelectProps<Value extends string>
128
129
  defaultValue?: Value;
129
130
 
130
131
  /** @see {@link SelectChangeEvent} */
131
- onChange?(event: SelectChangeEvent<Value>): void;
132
+ onChange?: (event: SelectChangeEvent<Value>) => void;
132
133
 
133
134
  /**
134
135
  * An optional floating label to display like other form fields.
@@ -166,7 +167,10 @@ export interface SelectProps<Value extends string>
166
167
  * - `anchor={BELOW_CENTER_ANCHOR}`
167
168
  * - `width="min"`
168
169
  */
169
- menuProps?: Omit<MenuProps, "visible" | "onRequestClose" | "fixedTo">;
170
+ menuProps?: PropsWithRef<
171
+ Omit<MenuProps, "visible" | "onRequestClose" | "fixedTo">,
172
+ HTMLDivElement
173
+ >;
170
174
 
171
175
  /**
172
176
  * Any additional props to pass to the div that contains the current visible
@@ -328,7 +332,7 @@ export function Select<Value extends string>(
328
332
  onKeyDown,
329
333
  disabled,
330
334
  popupId: menuProps.id,
331
- popupRef: menuProps.nodeRef,
335
+ popupRef: menuProps.ref,
332
336
  comboboxId,
333
337
  comboboxRef: containerRef,
334
338
  });
@@ -339,15 +343,6 @@ export function Select<Value extends string>(
339
343
  elementRef: inputRef,
340
344
  defaultValue: initialValue.current,
341
345
  });
342
- const listboxContext = useMemo<ListboxContext>(
343
- () => ({
344
- inputRef,
345
- currentValue,
346
- selectedIconAfter,
347
- disableSelectedIcon,
348
- }),
349
- [currentValue, disableSelectedIcon, inputRef, selectedIconAfter]
350
- );
351
346
 
352
347
  const icon = getIcon("dropdown", propIcon);
353
348
  const theme = getFormConfig("theme", propTheme);
@@ -356,6 +351,7 @@ export function Select<Value extends string>(
356
351
  rightAddon = <IconRotator rotated={visible}>{icon}</IconRotator>;
357
352
  }
358
353
 
354
+ const { ref: listboxRef, ...listboxProps } = getMenuProps(menuProps);
359
355
  let listboxLabelledBy = menuProps["aria-labelledby"];
360
356
  const listboxLabel = menuProps["aria-label"];
361
357
  if (!listboxLabel && !listboxLabelledBy) {
@@ -363,77 +359,85 @@ export function Select<Value extends string>(
363
359
  }
364
360
 
365
361
  return (
366
- <ListboxProvider value={listboxContext}>
367
- <KeyboardMovementProvider value={movementContext}>
368
- <TextFieldContainer
369
- aria-labelledby={labelId}
370
- {...remaining}
371
- {...comboboxProps}
372
- label={!!label}
373
- theme={theme}
374
- active={active || visible}
375
- className={cnb("rmd-select-container", className)}
376
- rightAddon={rightAddon}
377
- >
378
- <SelectedOption
379
- option={currentOption}
380
- placeholder={placeholder}
381
- disableAddon={disableOptionAddon}
382
- {...selectedOptionProps}
383
- />
384
- <input
385
- aria-hidden
386
- id={inputId}
387
- ref={inputRefCallback}
388
- type="text"
389
- autoComplete={autoComplete}
390
- name={name}
391
- tabIndex={-1}
392
- disabled={disabled}
393
- required={required}
394
- placeholder=" "
395
- {...inputProps}
396
- value={value}
397
- defaultValue={defaultValue}
398
- className={cnb(select({ theme }), textField())}
399
- onChange={(event) => {
400
- onChange(event as SelectChangeEvent<Value>);
401
- if (typeof value !== "undefined") {
402
- return;
403
- }
362
+ <KeyboardMovementProvider value={movementContext}>
363
+ <TextFieldContainer
364
+ aria-labelledby={labelId}
365
+ {...remaining}
366
+ {...comboboxProps}
367
+ label={!!label}
368
+ theme={theme}
369
+ active={active || visible}
370
+ className={cnb("rmd-select-container", className)}
371
+ rightAddon={rightAddon}
372
+ >
373
+ <SelectedOption
374
+ option={currentOption}
375
+ placeholder={placeholder}
376
+ disableAddon={disableOptionAddon}
377
+ {...selectedOptionProps}
378
+ />
379
+ <input
380
+ aria-hidden
381
+ id={inputId}
382
+ ref={inputRefCallback}
383
+ type="text"
384
+ autoComplete={autoComplete}
385
+ name={name}
386
+ tabIndex={-1}
387
+ disabled={disabled}
388
+ required={required}
389
+ placeholder=" "
390
+ {...inputProps}
391
+ value={value}
392
+ defaultValue={defaultValue}
393
+ className={cnb(select({ theme }), textField())}
394
+ onChange={(event) => {
395
+ onChange(event as SelectChangeEvent<Value>);
396
+ if (typeof value !== "undefined") {
397
+ return;
398
+ }
404
399
 
405
- const nextValue = event.currentTarget.value;
406
- const nextOption = options.find((option) => option === nextValue);
400
+ const nextValue = event.currentTarget.value;
401
+ const nextOption = options.find((option) => option === nextValue);
407
402
 
408
- setLocalValue(nextOption ?? initialValue.current);
409
- }}
410
- />
411
- {label && (
412
- <span
413
- {...labelProps}
414
- id={labelId}
415
- className={labelStyles({
416
- dense,
417
- error,
418
- disabled,
419
- active: active || visible,
420
- floating: true,
421
- floatingActive: !!placeholder || !!currentOption,
422
- className: labelProps.className,
423
- })}
424
- >
425
- {label}
426
- </span>
427
- )}
428
- </TextFieldContainer>
429
- <Menu
430
- {...getMenuProps(menuProps)}
431
- aria-label={listboxLabel}
432
- aria-labelledby={listboxLabelledBy as string}
433
- >
434
- {children}
435
- </Menu>
436
- </KeyboardMovementProvider>
437
- </ListboxProvider>
403
+ setLocalValue(nextOption ?? initialValue.current);
404
+ }}
405
+ />
406
+ {label && (
407
+ <span
408
+ {...labelProps}
409
+ id={labelId}
410
+ className={labelStyles({
411
+ dense,
412
+ error,
413
+ disabled,
414
+ active: active || visible,
415
+ floating: true,
416
+ floatingActive: !!placeholder || !!currentOption,
417
+ className: labelProps.className,
418
+ })}
419
+ >
420
+ {label}
421
+ </span>
422
+ )}
423
+ </TextFieldContainer>
424
+ <Listbox
425
+ {...listboxProps}
426
+ aria-label={listboxLabel}
427
+ aria-labelledby={listboxLabelledBy as string}
428
+ nodeRef={listboxRef}
429
+ value={currentValue}
430
+ setValue={useCallback(
431
+ (option: "" | Value) => {
432
+ triggerManualChangeEvent(inputRef.current, option);
433
+ },
434
+ [inputRef]
435
+ )}
436
+ selectedIconAfter={selectedIconAfter}
437
+ disableSelectedIcon={disableSelectedIcon}
438
+ >
439
+ {children}
440
+ </Listbox>
441
+ </KeyboardMovementProvider>
438
442
  );
439
443
  }
@@ -50,7 +50,7 @@ declare module "react" {
50
50
  }
51
51
 
52
52
  const emptyString = (): string => "";
53
- const noop = (): void => {
53
+ const noop = (): undefined => {
54
54
  // do nothing
55
55
  };
56
56
 
@@ -133,7 +133,7 @@ export interface SliderProps extends BaseSliderProps, SliderState {
133
133
  * />
134
134
  * ```
135
135
  */
136
- getTooltipProps?(value: number): Partial<TooltipProps>;
136
+ getTooltipProps?: (value: number) => Partial<TooltipProps> | undefined;
137
137
 
138
138
  /**
139
139
  * This can be used to update the discrete slider's value tooltip.
@@ -155,7 +155,7 @@ export interface SliderProps extends BaseSliderProps, SliderState {
155
155
  *
156
156
  * @defaultValue `(value) => value`
157
157
  */
158
- getTooltipChildren?(value: number): ReactNode;
158
+ getTooltipChildren?: (value: number) => ReactNode;
159
159
  }
160
160
 
161
161
  /**
@@ -232,7 +232,10 @@ export interface RangeSliderProps extends BaseSliderProps, RangeSliderState {
232
232
  * />
233
233
  * ```
234
234
  */
235
- getTooltipProps?(value: number, isFirstThumb: boolean): Partial<TooltipProps>;
235
+ getTooltipProps?: (
236
+ value: number,
237
+ isFirstThumb: boolean
238
+ ) => Partial<TooltipProps>;
236
239
 
237
240
  /**
238
241
  * This can be used to update the discrete slider's value tooltip.
@@ -257,7 +260,7 @@ export interface RangeSliderProps extends BaseSliderProps, RangeSliderState {
257
260
  *
258
261
  * @defaultValue `(value) => value`
259
262
  */
260
- getTooltipChildren?(value: number, isFirstThumb: boolean): ReactNode;
263
+ getTooltipChildren?: (value: number, isFirstThumb: boolean) => ReactNode;
261
264
  }
262
265
 
263
266
  /**
@@ -587,9 +590,9 @@ export function Slider(
587
590
  value={thumb1Value}
588
591
  index={1}
589
592
  active={thumb1Dragging}
590
- onChange={(event) =>
591
- setThumb1Value(event.currentTarget.valueAsNumber)
592
- }
593
+ onChange={(event) => {
594
+ setThumb1Value(event.currentTarget.valueAsNumber);
595
+ }}
593
596
  onKeyDown={thumb1OnKeyDown}
594
597
  />
595
598
  {isRangeSlider && (
@@ -605,9 +608,9 @@ export function Slider(
605
608
  value={thumb2Value}
606
609
  index={2}
607
610
  active={thumb2Dragging}
608
- onChange={(event) =>
609
- setThumb2Value(event.currentTarget.valueAsNumber)
610
- }
611
+ onChange={(event) => {
612
+ setThumb2Value(event.currentTarget.valueAsNumber);
613
+ }}
611
614
  onKeyDown={thumb2OnKeyDown}
612
615
  />
613
616
  )}