@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
@@ -1,9 +1,11 @@
1
1
  "use client";
2
2
  import { forwardRef, type LiHTMLAttributes, type ReactNode } from "react";
3
3
  import { type ButtonProps } from "../button/Button.js";
4
- import { useCollapseTransition } from "../transition/useCollapseTransition.js";
5
- import { type PropsWithRef, type UseStateInitializer } from "../types.js";
6
- import { useToggle } from "../useToggle.js";
4
+ import {
5
+ type CollapseTransitionHookOptions,
6
+ useCollapseTransition,
7
+ } from "../transition/useCollapseTransition.js";
8
+ import { type PropsWithRef } from "../types.js";
7
9
  import { NavGroup, type NavGroupProps } from "./NavGroup.js";
8
10
  import { NavItem } from "./NavItem.js";
9
11
  import {
@@ -23,6 +25,10 @@ export interface CollapsibleNavGroupProps
23
25
  NavItemButtonRotatorProps {
24
26
  liProps?: PropsWithRef<LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>;
25
27
  buttonProps?: PropsWithRef<ButtonProps, HTMLButtonElement>;
28
+ collapseOptions?: Omit<
29
+ CollapseTransitionHookOptions<HTMLUListElement>,
30
+ "nodeRef" | "className" | "transitionIn"
31
+ >;
26
32
 
27
33
  /**
28
34
  * The children to render in the {@link NavItemButton} that toggles the
@@ -35,8 +41,8 @@ export interface CollapsibleNavGroupProps
35
41
  */
36
42
  children: ReactNode;
37
43
 
38
- /** @defaultValue `false` */
39
- defaultCollapsed?: UseStateInitializer<boolean>;
44
+ collapsed: boolean;
45
+ toggleCollapsed: () => void;
40
46
  }
41
47
 
42
48
  /**
@@ -57,12 +63,14 @@ export const CollapsibleNavGroup = forwardRef<
57
63
  disableIconRotator,
58
64
  className,
59
65
  children,
60
- defaultCollapsed,
66
+ collapsed,
67
+ toggleCollapsed,
68
+ collapseOptions,
61
69
  ...remaining
62
70
  } = props;
63
71
 
64
- const { toggled: collapsed, toggle } = useToggle(defaultCollapsed);
65
72
  const { rendered, elementProps } = useCollapseTransition({
73
+ ...collapseOptions,
66
74
  nodeRef: ref,
67
75
  className,
68
76
  transitionIn: !collapsed,
@@ -75,7 +83,7 @@ export const CollapsibleNavGroup = forwardRef<
75
83
  {...buttonProps}
76
84
  onClick={(event) => {
77
85
  onButtonClick(event);
78
- toggle();
86
+ toggleCollapsed();
79
87
  }}
80
88
  collapsed={collapsed}
81
89
  icon={icon}
@@ -4,16 +4,16 @@ import { type RenderRecursiveItemsProps } from "../utils/RenderRecursively.js";
4
4
  import { CollapsibleNavGroup } from "./CollapsibleNavGroup.js";
5
5
  import { NavItemLink } from "./NavItemLink.js";
6
6
  import { NavSubheader } from "./NavSubheader.js";
7
- import { getHrefFromParents } from "./getHrefFromParents.js";
8
7
  import { type NavigationItem, type NavigationRenderData } from "./types.js";
8
+ import { getHrefFromParents, getNavigationGroupId } from "./utils.js";
9
9
 
10
10
  /**
11
11
  * @since 6.0.0
12
12
  */
13
- export interface DefaultNavigationRendererProps<
13
+ export type DefaultNavigationRendererProps<
14
14
  Item extends NavigationItem = NavigationItem,
15
15
  Data extends NavigationRenderData = NavigationRenderData,
16
- > extends RenderRecursiveItemsProps<Item, Data> {}
16
+ > = RenderRecursiveItemsProps<Item, Data>;
17
17
 
18
18
  /**
19
19
  * **Client Component**
@@ -46,13 +46,15 @@ export function DefaultNavigationRenderer<
46
46
 
47
47
  if (item.items) {
48
48
  const nextParents = [item, ...parents];
49
+ const id = getNavigationGroupId(item, nextParents);
49
50
  return (
50
51
  <CollapsibleNavGroup
51
52
  depth={nextParents.length}
52
- defaultCollapsed={() =>
53
- !data?.pathname.includes(getHrefFromParents(nextParents))
54
- }
53
+ collapsed={!data?.expandedItems.has(id)}
55
54
  buttonChildren={item.children}
55
+ toggleCollapsed={() => {
56
+ data?.toggleExpandedItem(id);
57
+ }}
56
58
  >
57
59
  {children}
58
60
  </CollapsibleNavGroup>
@@ -15,7 +15,7 @@ import { type NavItemContentProps } from "./types.js";
15
15
  export interface NavItemButtonRotatorProps {
16
16
  /** @defaultValue `getIcon("dropdown")` */
17
17
  icon?: ReactNode;
18
- iconRotatorProps?: IconRotatorBaseProps;
18
+ iconRotatorProps?: Omit<IconRotatorBaseProps, "rotated">;
19
19
  disableIconRotator?: boolean;
20
20
  }
21
21
 
@@ -74,6 +74,7 @@ export const NavItemButton = forwardRef<HTMLButtonElement, NavItemButtonProps>(
74
74
  return (
75
75
  <>
76
76
  <Button
77
+ aria-expanded={!collapsed}
77
78
  {...remaining}
78
79
  {...elementProps}
79
80
  ref={ref}
@@ -6,6 +6,7 @@ import {
6
6
  type LiHTMLAttributes,
7
7
  } from "react";
8
8
  import { cssUtils } from "../cssUtils.js";
9
+ import { type ComponentWithRippleProps } from "../interaction/types.js";
9
10
  import { useElementInteraction } from "../interaction/useElementInteraction.js";
10
11
  import { Tooltip } from "../tooltip/Tooltip.js";
11
12
  import { useTooltip } from "../tooltip/useTooltip.js";
@@ -23,7 +24,8 @@ import {
23
24
  */
24
25
  export interface NavItemLinkProps
25
26
  extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, "children">,
26
- NavItemContentProps {
27
+ NavItemContentProps,
28
+ ComponentWithRippleProps {
27
29
  /** @defaultValue `"a"` */
28
30
  as?: NavigationLinkComponent;
29
31
  href: string;
@@ -48,7 +50,7 @@ export interface NavItemLinkProps
48
50
 
49
51
  /**
50
52
  * Set this to `true` to prevent this item from scrolling into view when it
51
- * becomes active. It is generally recommended to keep this `true` unless a
53
+ * becomes active. It is generally recommended to keep this `false` unless a
52
54
  * custom implementation has been added so that when the temporary navigation
53
55
  * will show the active route.
54
56
  *
@@ -88,12 +90,14 @@ export const NavItemLink = forwardRef<HTMLAnchorElement, NavItemLinkProps>(
88
90
  onTouchEnd,
89
91
  onTouchStart,
90
92
  tooltipOptions,
93
+ disableRipple,
91
94
  disableScrollIntoView,
92
95
  ...remaining
93
96
  } = props;
94
97
 
95
98
  const [linkRef, linkRefCallback] = useEnsuredRef(propRef);
96
99
  const { handlers, ripples } = useElementInteraction({
100
+ mode: disableRipple ? "none" : undefined,
97
101
  disabled,
98
102
  onClick,
99
103
  onBlur,
@@ -120,7 +124,10 @@ export const NavItemLink = forwardRef<HTMLAnchorElement, NavItemLinkProps>(
120
124
  !active ||
121
125
  !link ||
122
126
  disableScrollIntoView ||
123
- document.activeElement === link
127
+ document.activeElement === link ||
128
+ // do not scroll into view if the collapse transition is occurring since
129
+ // it makes it animate weirdly
130
+ link.closest(".rmd-collapse--enter")
124
131
  ) {
125
132
  return;
126
133
  }
@@ -131,6 +138,7 @@ export const NavItemLink = forwardRef<HTMLAnchorElement, NavItemLinkProps>(
131
138
  return (
132
139
  <NavItem {...liProps}>
133
140
  <Component
141
+ aria-current={active ? "page" : undefined}
134
142
  {...remaining}
135
143
  {...handlers}
136
144
  {...elementProps}
@@ -8,7 +8,7 @@ import { navItem } from "./navItemStyles.js";
8
8
  /**
9
9
  * @since 6.0.0
10
10
  */
11
- export interface NavSubheaderProps extends ListSubheaderProps {}
11
+ export type NavSubheaderProps = ListSubheaderProps;
12
12
 
13
13
  /**
14
14
  * A simple wrapper around the {@Link ListSubheader} that updates the padding
@@ -58,7 +58,7 @@ export interface NavigationProps<
58
58
  render?: ComponentType<RenderRecursiveItemsProps<Item, Data>>;
59
59
 
60
60
  /** @see {@link getRecursiveNavItemKey} */
61
- getItemKey?(options: RecursiveItemKeyOptions<Item>): string;
61
+ getItemKey?: (options: RecursiveItemKeyOptions<Item>) => string;
62
62
  }
63
63
 
64
64
  /**
@@ -47,13 +47,15 @@ export interface NavigationItemSubheader extends ListSubheaderProps {
47
47
  * @example Route Group Output
48
48
  * ```tsx
49
49
  * const nextParents = [item, ...parents];
50
+ * const id = getNavigationGroupId(item, nextParents);
50
51
  * return (
51
52
  * <CollapsibleNavGroup
52
- * depth={nextParents.length})
53
- * defaultCollapsed={() =>
54
- * !data.pathname.includes(getHrefFromParents(nextParents))
55
- * }
53
+ * depth={nextParents.length}
54
+ * collapsed={!data?.expandedItems.has(id)}
56
55
  * buttonChildren={item.children}
56
+ * toggleCollapsed={() => {
57
+ * data?.toggleExpandedItem(id);
58
+ * }}
57
59
  * >
58
60
  * {children}
59
61
  * </CollapsibleNavGroup>
@@ -66,6 +68,43 @@ export interface NavigationItemSubheader extends ListSubheaderProps {
66
68
  */
67
69
  export interface NavigationItemGroup {
68
70
  type: "group";
71
+
72
+ /**
73
+ * An optional unique id to identify the group used for handling the expanded
74
+ * state when the `href` can't be used.
75
+ */
76
+ id?: string;
77
+
78
+ /**
79
+ * An optional href to prefix all child routes with and can be used instead of
80
+ * the {@link id} for handling the expanded state.
81
+ *
82
+ * @example
83
+ * ```ts
84
+ * {
85
+ * type: "group",
86
+ * href: "/some-path",
87
+ * children: "Some Name",
88
+ * items: [
89
+ * {
90
+ * type: "route",
91
+ * href: "/page-1",
92
+ * children: "Page 1",
93
+ * },
94
+ * {
95
+ * type: "route",
96
+ * href: "/page-2",
97
+ * children: "Page 2",
98
+ * },
99
+ * ],
100
+ * }
101
+ * ```
102
+ *
103
+ * Would result in:
104
+ *
105
+ * - Page 1 - `/some-path/page-1`
106
+ * - Page 2 - `/some-path/page-2`
107
+ */
69
108
  href?: string;
70
109
  children: ReactNode;
71
110
  items: readonly NavigationItem[];
@@ -95,16 +134,27 @@ export type NavigationItem =
95
134
  /**
96
135
  * @since 6.0.0
97
136
  */
98
- export type NavigationLinkComponent =
99
- | "a"
100
- | ForwardRefExoticComponent<
101
- AnchorHTMLAttributes<HTMLAnchorElement> & { href: string }
102
- >;
137
+ export type CustomNavigationLinkComponent = ForwardRefExoticComponent<
138
+ AnchorHTMLAttributes<HTMLAnchorElement> & { href: string }
139
+ >;
140
+
141
+ /**
142
+ * @since 6.0.0
143
+ */
144
+ export type NavigationLinkComponent = "a" | CustomNavigationLinkComponent;
145
+
146
+ /**
147
+ * @since 6.0.0
148
+ */
149
+ export interface NavigationExpansion {
150
+ expandedItems: ReadonlySet<string>;
151
+ toggleExpandedItem: (id: string) => void;
152
+ }
103
153
 
104
154
  /**
105
155
  * @since 6.0.0
106
156
  */
107
- export interface NavigationRenderData {
157
+ export interface NavigationRenderData extends NavigationExpansion {
108
158
  /**
109
159
  * This is used to set the `active` state on a `NavItemLink`
110
160
  */
@@ -112,7 +112,7 @@ export interface ActiveHeadingIdOptions {
112
112
  threshold?: IntersectionObserverThreshold;
113
113
 
114
114
  /** @see {@link DEFAULT_ACTIVE_HEADING_GET_ROOT_MARGIN} */
115
- getRootMargin?(): IntersectionObserverRootMargin;
115
+ getRootMargin?: () => IntersectionObserverRootMargin;
116
116
 
117
117
  /** @defaultValue `headings[0]?.id ?? ""` */
118
118
  defaultActiveId?: UseStateInitializer<string>;
@@ -0,0 +1,170 @@
1
+ "use client";
2
+ import { useEffect, useMemo, useRef } from "react";
3
+ import { type UseStateInitializer, type UseStateSetter } from "../types.js";
4
+ import { useReadonlySet } from "../useReadonlySet.js";
5
+ import {
6
+ type NavigationExpansion,
7
+ type NavigationLinkComponent,
8
+ type NavigationRenderData,
9
+ } from "./types.js";
10
+ import { getPartsFromPathname } from "./utils.js";
11
+
12
+ /**
13
+ * @since 6.0.0
14
+ */
15
+ export interface NavigationExpansionOptions {
16
+ pathname: string;
17
+ linkComponent: NavigationLinkComponent;
18
+
19
+ /**
20
+ * An optional list or set of items that should be expanded before the user
21
+ * interacts with the navigation items.
22
+ *
23
+ * The default implementation works well with the `DefaultNavigationRenderer`
24
+ * by allowing all "folders" (or groups) of items to be expanded by the
25
+ * `pathname`.
26
+ *
27
+ * ```ts
28
+ * const navItems: readonly NavigationItem[] = [
29
+ * {
30
+ * type: "route",
31
+ * href: "/",
32
+ * children: "Home",
33
+ * },
34
+ * {
35
+ * type: "group",
36
+ * href: "/group-1",
37
+ * children: "Group 1",
38
+ * items: [
39
+ * {
40
+ * type: "group",
41
+ * href: "/subgroup-1",
42
+ * children: "Subgroup 1",
43
+ * items: [
44
+ * {
45
+ * type: "route",
46
+ * href: "/route",
47
+ * children: "Group 1 > Subgroup 1 > Route"
48
+ * },
49
+ * ],
50
+ * },
51
+ * {
52
+ * type: "route",
53
+ * href: "/route",
54
+ * children: "Group 1 > Route",
55
+ * },
56
+ * ],
57
+ * },
58
+ * ];
59
+ * ```
60
+ *
61
+ * - `pathname === "/"` - No groups expanded
62
+ * - Resolves as `new Set(["/"])`
63
+ * - `pathname === "/group-1/subgroup-1/route"` - "Group 1" and "Subgroup 1"
64
+ * are expanded
65
+ * - Resolves as `new Set(["/", "/group-1", "/group-1/route"])`
66
+ */
67
+ defaultExpandedItems?: UseStateInitializer<
68
+ ReadonlySet<string> | readonly string[]
69
+ >;
70
+
71
+ /**
72
+ * The default behavior is to update the `expandedItems` set as the `pathname`
73
+ * updates to capture anytime the user might navigate to outer routes outside
74
+ * of the `Navigation` component. i.e. Click a link within the page.
75
+ *
76
+ * Set this to `true` to disable this behavior.
77
+ *
78
+ * @defaultValue `false`
79
+ */
80
+ disableFollowingPathname?: boolean;
81
+ }
82
+
83
+ /**
84
+ * @since 6.0.0
85
+ */
86
+ export interface NavigationExpansionImplementation extends NavigationExpansion {
87
+ data: NavigationRenderData;
88
+ setExpandedItems: UseStateSetter<ReadonlySet<string>>;
89
+ }
90
+
91
+ /**
92
+ * Used to create the `data` prop for the `Navigation` component and handling
93
+ * the expansion of items.
94
+ *
95
+ * @example Main Usage
96
+ * ```tsx
97
+ * "use client";
98
+ * import { Navigation } from "@react-md/core/navigation/Navigation";
99
+ * import { useNavigationExpansion } from "@react-md/core/navigation/useNavigationExpansion";
100
+ * import Link from "next/link";
101
+ * import { usePathname } from "next/navigation.js";
102
+ * import { type ReactElement } from "react";
103
+ *
104
+ * import { navItems } from "./navItems.js";
105
+ *
106
+ * export function Example(): ReactElement {
107
+ * const pathname = usePathname();
108
+ * const { data } = useNavigationExpansion({
109
+ * pathname,
110
+ * linkComponent: Link,
111
+ * });
112
+ *
113
+ * return <Navigation data={data} items={navItems} />;
114
+ * }
115
+ * ```
116
+ *
117
+ * @since 6.0.0
118
+ */
119
+ export function useNavigationExpansion(
120
+ options: NavigationExpansionOptions
121
+ ): NavigationExpansionImplementation {
122
+ const {
123
+ pathname,
124
+ linkComponent,
125
+ defaultExpandedItems,
126
+ disableFollowingPathname,
127
+ } = options;
128
+ const {
129
+ value: expandedItems,
130
+ setValue: setExpandedItems,
131
+ toggleValue: toggleExpandedItem,
132
+ } = useReadonlySet({
133
+ defaultValue:
134
+ defaultExpandedItems ?? (() => new Set(getPartsFromPathname(pathname))),
135
+ });
136
+
137
+ const prevPathname = useRef(pathname);
138
+ useEffect(() => {
139
+ if (disableFollowingPathname || pathname === prevPathname.current) {
140
+ return;
141
+ }
142
+
143
+ prevPathname.current = pathname;
144
+ setExpandedItems((prev) => {
145
+ const next = new Set([...prev, ...getPartsFromPathname(pathname)]);
146
+ if (next.size === prev.size) {
147
+ return prev;
148
+ }
149
+
150
+ return next;
151
+ });
152
+ }, [disableFollowingPathname, pathname, setExpandedItems]);
153
+
154
+ const data = useMemo<NavigationRenderData>(
155
+ () => ({
156
+ pathname,
157
+ linkComponent,
158
+ expandedItems,
159
+ toggleExpandedItem,
160
+ }),
161
+ [expandedItems, linkComponent, pathname, toggleExpandedItem]
162
+ );
163
+
164
+ return {
165
+ data,
166
+ expandedItems,
167
+ setExpandedItems,
168
+ toggleExpandedItem,
169
+ };
170
+ }
@@ -0,0 +1,47 @@
1
+ import { type NavigationItem } from "./types.js";
2
+
3
+ /**
4
+ * @since 6.0.0
5
+ */
6
+ export function getHrefFromParents(parents: readonly NavigationItem[]): string {
7
+ return parents.reduce<string>((result, parent) => {
8
+ if ("href" in parent && parent.href) {
9
+ const { href } = parent;
10
+ return result + href;
11
+ }
12
+
13
+ return result;
14
+ }, "");
15
+ }
16
+
17
+ /**
18
+ * @since 6.0.0
19
+ */
20
+ export function getNavigationGroupId(
21
+ group: NavigationItem,
22
+ parents: readonly NavigationItem[]
23
+ ): string {
24
+ if ("id" in group && typeof group.id === "string" && group.id) {
25
+ return group.id;
26
+ }
27
+
28
+ return getHrefFromParents(parents);
29
+ }
30
+
31
+ /**
32
+ * @since 6.0.0
33
+ */
34
+ export function getPartsFromPathname(pathname: string): ReadonlySet<string> {
35
+ // remove trailing slashes just in case there aren't rewrites in place
36
+ const href = pathname.replace(/\/{2,}/g, "/").replace(/\/+$/, "");
37
+ const parts = href.split("/");
38
+ const set = new Set<string>();
39
+ let prefix = "";
40
+ for (const part of parts) {
41
+ const slashed = `/${part}`;
42
+ prefix = prefix === "/" ? slashed : prefix + slashed;
43
+ set.add(prefix);
44
+ }
45
+
46
+ return set;
47
+ }
@@ -0,0 +1,88 @@
1
+ import { cnb } from "cnbuilder";
2
+ import { bem } from "./utils/bem.js";
3
+
4
+ const styles = bem("rmd-object-fit");
5
+
6
+ /**
7
+ * @since 6.0.0
8
+ */
9
+ export interface ObjectFitOptions {
10
+ className?: string;
11
+
12
+ /**
13
+ * @see {@link https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit}
14
+ * @defaultValue `aspectRatio ? "fill" : "contain"`
15
+ */
16
+ fit?: "contain" | "cover" | "fill" | "none" | "scale-down";
17
+
18
+ /**
19
+ * Set this to a custom aspect ratio to use.
20
+ *
21
+ * @example Valid Aspect Ratios
22
+ * ```tsx
23
+ * aspectRatio: "16-9",
24
+ * aspectRatio: "9-16",
25
+ * aspectRatio: "3-4",
26
+ * aspectRatio: "4-3",
27
+ * aspectRatio: "1-1",
28
+ * ```
29
+ *
30
+ * These values are based on the `$object-fit-aspect-ratios` map.
31
+ *
32
+ * @defaultValue `""`
33
+ */
34
+ aspectRatio?: `${number}-${number}`;
35
+ }
36
+
37
+ /**
38
+ * This is a utility className helper function that should be applied to
39
+ * `<img>` and `<video>` elements to make them responsive to their content box
40
+ * container.
41
+ *
42
+ * @example Simple Example
43
+ * ```tsx
44
+ * import { objectFit } from "@react-md/core/objectFit";
45
+ *
46
+ * export function Example() {
47
+ * return (
48
+ * <img
49
+ * alt=""
50
+ * src="https://example.com/example.png"
51
+ * className={objectFit()}
52
+ * />
53
+ * );
54
+ * }
55
+ * ```
56
+ *
57
+ * @example Setting Aspect Ratio
58
+ * ```tsx
59
+ * import { objectFit } from "@react-md/core/objectFit";
60
+ *
61
+ * export function Example() {
62
+ * return (
63
+ * <img
64
+ * alt=""
65
+ * src="https://example.com/example.png"
66
+ * className={objectFit({
67
+ * aspectRatio: "16-9",
68
+ * })}
69
+ * />
70
+ * );
71
+ * }
72
+ *
73
+ * ```
74
+ *
75
+ * @since 6.0.0
76
+ */
77
+ export function objectFit(options: ObjectFitOptions = {}): string {
78
+ const { className, fit: propFit, aspectRatio = "" } = options;
79
+ const fit = propFit ?? (aspectRatio ? "fill" : "contain");
80
+
81
+ return cnb(
82
+ styles({
83
+ [fit]: fit !== "contain",
84
+ [aspectRatio]: !!aspectRatio,
85
+ }),
86
+ className
87
+ );
88
+ }