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

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 (665) 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 +45 -22
  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} +11 -176
  126. package/dist/{form/fileUtils.js → files/validation.js} +10 -135
  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/SelectedOption.js +2 -1
  158. package/dist/form/SelectedOption.js.map +1 -1
  159. package/dist/form/Slider.d.ts +4 -4
  160. package/dist/form/Slider.js +6 -2
  161. package/dist/form/Slider.js.map +1 -1
  162. package/dist/form/SliderThumb.d.ts +3 -3
  163. package/dist/form/SliderThumb.js.map +1 -1
  164. package/dist/form/SliderValueMarks.d.ts +2 -2
  165. package/dist/form/SliderValueMarks.js.map +1 -1
  166. package/dist/form/SliderValueTooltip.js.map +1 -1
  167. package/dist/form/TextArea.js +1 -2
  168. package/dist/form/TextArea.js.map +1 -1
  169. package/dist/form/TextField.js +1 -2
  170. package/dist/form/TextField.js.map +1 -1
  171. package/dist/form/TextFieldContainer.js +1 -2
  172. package/dist/form/TextFieldContainer.js.map +1 -1
  173. package/dist/form/_form.scss +193 -124
  174. package/dist/form/formMessageContainerStyles.d.ts +10 -0
  175. package/dist/form/formMessageContainerStyles.js +11 -0
  176. package/dist/form/formMessageContainerStyles.js.map +1 -0
  177. package/dist/form/inputToggleStyles.js.map +1 -1
  178. package/dist/form/optionStyles.d.ts +1 -0
  179. package/dist/form/optionStyles.js +2 -2
  180. package/dist/form/optionStyles.js.map +1 -1
  181. package/dist/form/selectUtils.js.map +1 -1
  182. package/dist/form/sliderUtils.d.ts +1 -1
  183. package/dist/form/sliderUtils.js.map +1 -1
  184. package/dist/form/textFieldContainerStyles.d.ts +0 -2
  185. package/dist/form/textFieldContainerStyles.js +1 -2
  186. package/dist/form/textFieldContainerStyles.js.map +1 -1
  187. package/dist/form/types.d.ts +3 -10
  188. package/dist/form/types.js.map +1 -1
  189. package/dist/form/useCheckboxGroup.d.ts +17 -17
  190. package/dist/form/useCheckboxGroup.js +9 -17
  191. package/dist/form/useCheckboxGroup.js.map +1 -1
  192. package/dist/form/useCombobox.d.ts +56 -21
  193. package/dist/form/useCombobox.js +19 -4
  194. package/dist/form/useCombobox.js.map +1 -1
  195. package/dist/form/useEditableCombobox.d.ts +24 -4
  196. package/dist/form/useEditableCombobox.js +5 -0
  197. package/dist/form/useEditableCombobox.js.map +1 -1
  198. package/dist/form/useNumberField.js.map +1 -1
  199. package/dist/form/useRadioGroup.d.ts +6 -6
  200. package/dist/form/useRadioGroup.js.map +1 -1
  201. package/dist/form/useResizingTextArea.js.map +1 -1
  202. package/dist/form/useSelectCombobox.d.ts +3 -4
  203. package/dist/form/useSelectCombobox.js.map +1 -1
  204. package/dist/form/useTextField.d.ts +1 -1
  205. package/dist/form/useTextField.js.map +1 -1
  206. package/dist/form/useTextFieldContainerAddons.js.map +1 -1
  207. package/dist/hoverMode/useHoverMode.d.ts +3 -3
  208. package/dist/hoverMode/useHoverMode.js.map +1 -1
  209. package/dist/hoverMode/useHoverModeProvider.d.ts +4 -4
  210. package/dist/hoverMode/useHoverModeProvider.js.map +1 -1
  211. package/dist/icon/FontIcon.d.ts +4 -2
  212. package/dist/icon/FontIcon.js.map +1 -1
  213. package/dist/icon/TextIconSpacing.d.ts +3 -1
  214. package/dist/icon/TextIconSpacing.js.map +1 -1
  215. package/dist/icon/_icon.scss +151 -2
  216. package/dist/icon/iconConfig.d.ts +10 -0
  217. package/dist/icon/iconConfig.js +7 -0
  218. package/dist/icon/iconConfig.js.map +1 -1
  219. package/dist/icon/materialConfig.js.map +1 -1
  220. package/dist/icon/styles.js.map +1 -1
  221. package/dist/interaction/UserInteractionModeProvider.d.ts +5 -5
  222. package/dist/interaction/UserInteractionModeProvider.js +12 -8
  223. package/dist/interaction/UserInteractionModeProvider.js.map +1 -1
  224. package/dist/interaction/types.d.ts +20 -2
  225. package/dist/interaction/types.js.map +1 -1
  226. package/dist/interaction/useElementInteraction.d.ts +7 -1
  227. package/dist/interaction/useElementInteraction.js +1 -2
  228. package/dist/interaction/useElementInteraction.js.map +1 -1
  229. package/dist/interaction/utils.d.ts +2 -2
  230. package/dist/interaction/utils.js +2 -2
  231. package/dist/interaction/utils.js.map +1 -1
  232. package/dist/layout/LayoutWindowSplitter.js.map +1 -1
  233. package/dist/layout/_layout.scss +23 -10
  234. package/dist/layout/useExpandableLayout.d.ts +3 -3
  235. package/dist/layout/useExpandableLayout.js.map +1 -1
  236. package/dist/layout/useLayoutAppBarHeight.d.ts +2 -3
  237. package/dist/layout/useLayoutAppBarHeight.js.map +1 -1
  238. package/dist/layout/useTemporaryLayout.d.ts +2 -2
  239. package/dist/layout/useTemporaryLayout.js.map +1 -1
  240. package/dist/link/SkipToMainContent.js.map +1 -1
  241. package/dist/list/ListItem.d.ts +2 -1
  242. package/dist/list/ListItem.js +2 -1
  243. package/dist/list/ListItem.js.map +1 -1
  244. package/dist/list/ListItemChildren.js.map +1 -1
  245. package/dist/list/ListItemLink.d.ts +2 -1
  246. package/dist/list/ListItemLink.js +2 -1
  247. package/dist/list/ListItemLink.js.map +1 -1
  248. package/dist/list/_list.scss +6 -5
  249. package/dist/media-queries/_media-queries.scss +12 -0
  250. package/dist/media-queries/appSize.js.map +1 -1
  251. package/dist/media-queries/useMediaQuery.js +3 -1
  252. package/dist/media-queries/useMediaQuery.js.map +1 -1
  253. package/dist/menu/DropdownMenu.js.map +1 -1
  254. package/dist/menu/Menu.d.ts +8 -3
  255. package/dist/menu/Menu.js +2 -1
  256. package/dist/menu/Menu.js.map +1 -1
  257. package/dist/menu/MenuItemButton.js +6 -2
  258. package/dist/menu/MenuItemButton.js.map +1 -1
  259. package/dist/menu/useContextMenu.d.ts +3 -3
  260. package/dist/menu/useContextMenu.js.map +1 -1
  261. package/dist/movement/types.d.ts +5 -5
  262. package/dist/movement/types.js.map +1 -1
  263. package/dist/navigation/CollapsibleNavGroup.d.ts +5 -3
  264. package/dist/navigation/CollapsibleNavGroup.js +3 -4
  265. package/dist/navigation/CollapsibleNavGroup.js.map +1 -1
  266. package/dist/navigation/DefaultNavigationRenderer.d.ts +1 -2
  267. package/dist/navigation/DefaultNavigationRenderer.js +6 -2
  268. package/dist/navigation/DefaultNavigationRenderer.js.map +1 -1
  269. package/dist/navigation/NavItemButton.d.ts +1 -1
  270. package/dist/navigation/NavItemButton.js +1 -0
  271. package/dist/navigation/NavItemButton.js.map +1 -1
  272. package/dist/navigation/NavItemLink.d.ts +3 -2
  273. package/dist/navigation/NavItemLink.js +6 -2
  274. package/dist/navigation/NavItemLink.js.map +1 -1
  275. package/dist/navigation/NavSubheader.d.ts +2 -3
  276. package/dist/navigation/NavSubheader.js.map +1 -1
  277. package/dist/navigation/Navigation.d.ts +1 -1
  278. package/dist/navigation/Navigation.js.map +1 -1
  279. package/dist/navigation/_navigation.scss +6 -5
  280. package/dist/navigation/types.d.ts +54 -6
  281. package/dist/navigation/types.js.map +1 -1
  282. package/dist/navigation/useActiveHeadingId.d.ts +1 -1
  283. package/dist/navigation/useActiveHeadingId.js.map +1 -1
  284. package/dist/navigation/useNavigationExpansion.d.ts +104 -0
  285. package/dist/navigation/useNavigationExpansion.js +77 -0
  286. package/dist/navigation/useNavigationExpansion.js.map +1 -0
  287. package/dist/navigation/utils.d.ts +13 -0
  288. package/dist/navigation/utils.js +36 -0
  289. package/dist/navigation/utils.js.map +1 -0
  290. package/dist/objectFit.d.ts +69 -0
  291. package/dist/objectFit.js +52 -0
  292. package/dist/objectFit.js.map +1 -0
  293. package/dist/overlay/_overlay.scss +2 -1
  294. package/dist/positioning/useFixedPositioning.d.ts +17 -4
  295. package/dist/positioning/useFixedPositioning.js +10 -5
  296. package/dist/positioning/useFixedPositioning.js.map +1 -1
  297. package/dist/positioning/utils.js.map +1 -1
  298. package/dist/progress/LinearProgress.js.map +1 -1
  299. package/dist/progress/_progress.scss +20 -14
  300. package/dist/responsive-item/ResponsiveItem.d.ts +64 -0
  301. package/dist/responsive-item/ResponsiveItem.js +68 -0
  302. package/dist/responsive-item/ResponsiveItem.js.map +1 -0
  303. package/dist/responsive-item/ResponsiveItemOverlay.d.ts +1 -19
  304. package/dist/responsive-item/ResponsiveItemOverlay.js +1 -12
  305. package/dist/responsive-item/ResponsiveItemOverlay.js.map +1 -1
  306. package/dist/responsive-item/_responsive-item.scss +110 -133
  307. package/dist/responsive-item/responsiveItemOverlayStyles.d.ts +19 -0
  308. package/dist/responsive-item/responsiveItemOverlayStyles.js +14 -0
  309. package/dist/responsive-item/responsiveItemOverlayStyles.js.map +1 -0
  310. package/dist/responsive-item/responsiveItemStyles.d.ts +52 -0
  311. package/dist/responsive-item/responsiveItemStyles.js +15 -0
  312. package/dist/responsive-item/responsiveItemStyles.js.map +1 -0
  313. package/dist/scroll/useScrollLock.d.ts +5 -0
  314. package/dist/scroll/useScrollLock.js.map +1 -1
  315. package/dist/searching/utils.d.ts +2 -2
  316. package/dist/searching/utils.js.map +1 -1
  317. package/dist/segmented-button/SegmentedButton.d.ts +2 -1
  318. package/dist/segmented-button/SegmentedButton.js +2 -1
  319. package/dist/segmented-button/SegmentedButton.js.map +1 -1
  320. package/dist/segmented-button/_segmented-button.scss +6 -6
  321. package/dist/sheet/_sheet.scss +18 -6
  322. package/dist/snackbar/ToastManager.js +15 -5
  323. package/dist/snackbar/ToastManager.js.map +1 -1
  324. package/dist/snackbar/_snackbar.scss +30 -17
  325. package/dist/snackbar/useCurrentToastActions.d.ts +5 -5
  326. package/dist/snackbar/useCurrentToastActions.js.map +1 -1
  327. package/dist/table/_table.scss +15 -3
  328. package/dist/table/tableCellStyles.d.ts +7 -3
  329. package/dist/table/tableCellStyles.js +2 -2
  330. package/dist/table/tableCellStyles.js.map +1 -1
  331. package/dist/tabs/Tab.d.ts +2 -1
  332. package/dist/tabs/Tab.js +2 -1
  333. package/dist/tabs/Tab.js.map +1 -1
  334. package/dist/tabs/TabList.d.ts +2 -2
  335. package/dist/tabs/TabList.js.map +1 -1
  336. package/dist/tabs/TabListScrollButton.d.ts +1 -1
  337. package/dist/tabs/TabListScrollButton.js +1 -1
  338. package/dist/tabs/TabListScrollButton.js.map +1 -1
  339. package/dist/tabs/_tabs.scss +30 -9
  340. package/dist/tabs/getTabListScrollToOptions.d.ts +18 -0
  341. package/dist/tabs/getTabListScrollToOptions.js +19 -0
  342. package/dist/tabs/getTabListScrollToOptions.js.map +1 -0
  343. package/dist/tabs/tabStyles.d.ts +3 -0
  344. package/dist/tabs/tabStyles.js.map +1 -1
  345. package/dist/tabs/useTabList.d.ts +1 -8
  346. package/dist/tabs/useTabList.js +1 -0
  347. package/dist/tabs/useTabList.js.map +1 -1
  348. package/dist/tabs/useTabs.d.ts +6 -6
  349. package/dist/tabs/useTabs.js.map +1 -1
  350. package/dist/tabs/utils.d.ts +0 -18
  351. package/dist/tabs/utils.js +0 -15
  352. package/dist/tabs/utils.js.map +1 -1
  353. package/dist/test-utils/ResizeObserver.d.ts +11 -12
  354. package/dist/test-utils/ResizeObserver.js +11 -12
  355. package/dist/test-utils/ResizeObserver.js.map +1 -1
  356. package/dist/test-utils/matchMedia.d.ts +3 -3
  357. package/dist/test-utils/matchMedia.js +6 -6
  358. package/dist/test-utils/matchMedia.js.map +1 -1
  359. package/dist/test-utils/polyfills/TextDecoder.js +0 -1
  360. package/dist/test-utils/polyfills/TextDecoder.js.map +1 -1
  361. package/dist/test-utils/timers.d.ts +9 -5
  362. package/dist/test-utils/timers.js +5 -5
  363. package/dist/test-utils/timers.js.map +1 -1
  364. package/dist/theme/LocalStorageColorSchemeProvider.d.ts +1 -1
  365. package/dist/theme/LocalStorageColorSchemeProvider.js +2 -1
  366. package/dist/theme/LocalStorageColorSchemeProvider.js.map +1 -1
  367. package/dist/theme/ThemeProvider.js +3 -1
  368. package/dist/theme/ThemeProvider.js.map +1 -1
  369. package/dist/theme/_a11y.scss +86 -13
  370. package/dist/theme/_colors.scss +279 -277
  371. package/dist/theme/_theme.scss +308 -37
  372. package/dist/theme/isColorScheme.d.ts +16 -0
  373. package/dist/theme/isColorScheme.js +19 -0
  374. package/dist/theme/isColorScheme.js.map +1 -0
  375. package/dist/theme/types.d.ts +53 -1
  376. package/dist/theme/types.js +1 -23
  377. package/dist/theme/types.js.map +1 -1
  378. package/dist/theme/useCSSVariables.d.ts +2 -19
  379. package/dist/theme/useCSSVariables.js.map +1 -1
  380. package/dist/theme/useColorScheme.d.ts +1 -35
  381. package/dist/theme/useColorScheme.js.map +1 -1
  382. package/dist/theme/useColorSchemeMetaTag.d.ts +1 -1
  383. package/dist/theme/useColorSchemeMetaTag.js.map +1 -1
  384. package/dist/theme/useColorSchemeProvider.d.ts +1 -1
  385. package/dist/theme/useColorSchemeProvider.js +1 -1
  386. package/dist/theme/useColorSchemeProvider.js.map +1 -1
  387. package/dist/theme/{usePrefersColorScheme.js → usePrefersDarkScheme.js} +1 -1
  388. package/dist/theme/usePrefersDarkScheme.js.map +1 -0
  389. package/dist/theme/utils.js.map +1 -1
  390. package/dist/tooltip/useTooltip.d.ts +14 -9
  391. package/dist/tooltip/useTooltip.js +2 -1
  392. package/dist/tooltip/useTooltip.js.map +1 -1
  393. package/dist/transition/_transition.scss +16 -9
  394. package/dist/transition/skeletonPlaceholderUtils.js.map +1 -1
  395. package/dist/transition/types.d.ts +1 -1
  396. package/dist/transition/types.js.map +1 -1
  397. package/dist/transition/useCarousel.d.ts +3 -3
  398. package/dist/transition/useCarousel.js.map +1 -1
  399. package/dist/transition/useCollapseTransition.js.map +1 -1
  400. package/dist/transition/useTransition.js +1 -0
  401. package/dist/transition/useTransition.js.map +1 -1
  402. package/dist/transition/utils.js.map +1 -1
  403. package/dist/tree/TreeItem.d.ts +2 -1
  404. package/dist/tree/TreeItem.js +4 -3
  405. package/dist/tree/TreeItem.js.map +1 -1
  406. package/dist/tree/TreeItemExpander.js.map +1 -1
  407. package/dist/tree/_tree.scss +8 -6
  408. package/dist/tree/useTreeExpansion.d.ts +1 -1
  409. package/dist/tree/useTreeExpansion.js +6 -18
  410. package/dist/tree/useTreeExpansion.js.map +1 -1
  411. package/dist/tree/useTreeSelection.d.ts +1 -1
  412. package/dist/tree/useTreeSelection.js +7 -25
  413. package/dist/tree/useTreeSelection.js.map +1 -1
  414. package/dist/tree/utils.d.ts +1 -1
  415. package/dist/tree/utils.js.map +1 -1
  416. package/dist/types.d.ts +12 -4
  417. package/dist/types.js.map +1 -1
  418. package/dist/typography/WritingDirectionProvider.d.ts +1 -1
  419. package/dist/typography/WritingDirectionProvider.js.map +1 -1
  420. package/dist/typography/_typography.scss +94 -37
  421. package/dist/typography/typographyStyles.js.map +1 -1
  422. package/dist/useDebouncedFunction.d.ts +1 -5
  423. package/dist/useDebouncedFunction.js +3 -1
  424. package/dist/useDebouncedFunction.js.map +1 -1
  425. package/dist/useDropzone.d.ts +4 -4
  426. package/dist/useDropzone.js.map +1 -1
  427. package/dist/useEnsuredId.js.map +1 -1
  428. package/dist/useIntersectionObserver.d.ts +5 -5
  429. package/dist/useIntersectionObserver.js.map +1 -1
  430. package/dist/useLocalStorage.d.ts +3 -3
  431. package/dist/useLocalStorage.js +1 -1
  432. package/dist/useLocalStorage.js.map +1 -1
  433. package/dist/useMutationObserver.d.ts +1 -1
  434. package/dist/useMutationObserver.js.map +1 -1
  435. package/dist/useOrientation.js +3 -1
  436. package/dist/useOrientation.js.map +1 -1
  437. package/dist/usePageInactive.d.ts +2 -2
  438. package/dist/usePageInactive.js.map +1 -1
  439. package/dist/useReadonlySet.d.ts +76 -0
  440. package/dist/useReadonlySet.js +72 -0
  441. package/dist/useReadonlySet.js.map +1 -0
  442. package/dist/useResizeListener.d.ts +1 -1
  443. package/dist/useResizeListener.js.map +1 -1
  444. package/dist/useResizeObserver.d.ts +19 -0
  445. package/dist/useResizeObserver.js +19 -0
  446. package/dist/useResizeObserver.js.map +1 -1
  447. package/dist/useThrottledFunction.d.ts +1 -5
  448. package/dist/useThrottledFunction.js +3 -1
  449. package/dist/useThrottledFunction.js.map +1 -1
  450. package/dist/useToggle.d.ts +3 -3
  451. package/dist/useToggle.js.map +1 -1
  452. package/dist/utils/RenderRecursively.d.ts +2 -2
  453. package/dist/utils/RenderRecursively.js.map +1 -1
  454. package/dist/utils/alphaNumericSort.d.ts +5 -5
  455. package/dist/utils/alphaNumericSort.js.map +1 -1
  456. package/dist/utils/bem.d.ts +1 -1
  457. package/dist/utils/bem.js +1 -1
  458. package/dist/utils/bem.js.map +1 -1
  459. package/dist/utils/debounce.d.ts +5 -0
  460. package/dist/utils/debounce.js +17 -0
  461. package/dist/utils/debounce.js.map +1 -0
  462. package/dist/utils/nearest.js.map +1 -1
  463. package/dist/utils/parseCssLengthUnit.js.map +1 -1
  464. package/dist/utils/throttle.d.ts +5 -0
  465. package/dist/utils/throttle.js +30 -0
  466. package/dist/utils/throttle.js.map +1 -0
  467. package/dist/utils/wait.js +3 -1
  468. package/dist/utils/wait.js.map +1 -1
  469. package/dist/window-splitter/WindowSplitter.d.ts +37 -15
  470. package/dist/window-splitter/WindowSplitter.js +38 -17
  471. package/dist/window-splitter/WindowSplitter.js.map +1 -1
  472. package/dist/window-splitter/_window-splitter.scss +32 -14
  473. package/dist/window-splitter/styles.d.ts +14 -0
  474. package/dist/window-splitter/styles.js +18 -0
  475. package/dist/window-splitter/styles.js.map +1 -0
  476. package/package.json +25 -24
  477. package/src/app-bar/AppBar.tsx +1 -170
  478. package/src/app-bar/AppBarTitle.tsx +1 -44
  479. package/src/app-bar/styles.ts +206 -0
  480. package/src/autocomplete/Autocomplete.tsx +194 -211
  481. package/src/autocomplete/AutocompleteChip.tsx +48 -0
  482. package/src/autocomplete/AutocompleteCircularProgress.tsx +6 -17
  483. package/src/autocomplete/AutocompleteClearButton.tsx +44 -0
  484. package/src/autocomplete/AutocompleteDropdownButton.tsx +16 -37
  485. package/src/autocomplete/AutocompleteListboxChildren.tsx +68 -0
  486. package/src/autocomplete/autocompleteStyles.ts +48 -9
  487. package/src/autocomplete/defaults.ts +26 -17
  488. package/src/autocomplete/types.ts +744 -61
  489. package/src/autocomplete/useAutocomplete.ts +428 -0
  490. package/src/autocomplete/utils.ts +211 -0
  491. package/src/badge/Badge.tsx +1 -39
  492. package/src/badge/styles.ts +45 -0
  493. package/src/box/Box.tsx +11 -9
  494. package/src/box/styles.ts +14 -5
  495. package/src/button/AsyncButton.tsx +1 -1
  496. package/src/button/Button.tsx +5 -1
  497. package/src/card/Card.tsx +35 -4
  498. package/src/card/ClickableCard.tsx +9 -2
  499. package/src/card/styles.ts +1 -10
  500. package/src/chip/Chip.tsx +6 -1
  501. package/src/chip/styles.ts +12 -10
  502. package/src/delegateEvent.ts +5 -5
  503. package/src/dialog/Dialog.tsx +48 -61
  504. package/src/dialog/FixedDialog.tsx +1 -11
  505. package/src/dialog/styles.ts +97 -0
  506. package/src/divider/Divider.tsx +0 -12
  507. package/src/divider/styles.ts +12 -0
  508. package/src/draggable/useDraggable.ts +17 -10
  509. package/src/draggable/utils.ts +3 -3
  510. package/src/expansion-panel/ExpansionPanel.tsx +1 -1
  511. package/src/expansion-panel/useExpansionPanels.ts +18 -27
  512. package/src/{form → files}/FileInput.tsx +7 -15
  513. package/src/files/styles.ts +10 -0
  514. package/src/{form → files}/useFileUpload.ts +30 -34
  515. package/src/files/utils.ts +234 -0
  516. package/src/{form/fileUtils.ts → files/validation.ts} +15 -244
  517. package/src/focus/useFocusContainer.ts +16 -8
  518. package/src/form/FormMessageContainer.tsx +2 -2
  519. package/src/form/InputToggle.tsx +5 -1
  520. package/src/form/Label.tsx +18 -18
  521. package/src/form/Listbox.tsx +87 -0
  522. package/src/form/ListboxProvider.ts +37 -0
  523. package/src/form/MenuItemTextField.tsx +1 -2
  524. package/src/form/NativeSelect.tsx +14 -10
  525. package/src/form/Option.tsx +74 -22
  526. package/src/form/Select.tsx +89 -85
  527. package/src/form/SelectedOption.tsx +2 -0
  528. package/src/form/Slider.tsx +14 -11
  529. package/src/form/SliderThumb.tsx +4 -4
  530. package/src/form/SliderValueMarks.tsx +4 -4
  531. package/src/form/TextArea.tsx +6 -8
  532. package/src/form/TextField.tsx +0 -2
  533. package/src/form/TextFieldContainer.tsx +9 -11
  534. package/src/form/formMessageContainerStyles.ts +22 -0
  535. package/src/form/optionStyles.ts +7 -2
  536. package/src/form/sliderUtils.ts +1 -1
  537. package/src/form/textFieldContainerStyles.ts +9 -14
  538. package/src/form/types.ts +3 -11
  539. package/src/form/useCheckboxGroup.ts +28 -36
  540. package/src/form/useCombobox.ts +86 -38
  541. package/src/form/useEditableCombobox.ts +43 -8
  542. package/src/form/useRadioGroup.ts +6 -6
  543. package/src/form/useSelectCombobox.ts +4 -4
  544. package/src/form/useTextField.ts +1 -1
  545. package/src/hoverMode/useHoverMode.ts +3 -3
  546. package/src/hoverMode/useHoverModeProvider.ts +4 -4
  547. package/src/icon/FontIcon.tsx +4 -2
  548. package/src/icon/TextIconSpacing.tsx +1 -1
  549. package/src/icon/iconConfig.tsx +12 -0
  550. package/src/interaction/UserInteractionModeProvider.tsx +12 -8
  551. package/src/interaction/types.ts +21 -2
  552. package/src/interaction/useElementInteraction.tsx +9 -2
  553. package/src/interaction/utils.ts +7 -7
  554. package/src/layout/useExpandableLayout.ts +3 -3
  555. package/src/layout/useLayoutAppBarHeight.ts +3 -4
  556. package/src/layout/useTemporaryLayout.ts +2 -2
  557. package/src/list/ListItem.tsx +5 -1
  558. package/src/list/ListItemLink.tsx +5 -1
  559. package/src/media-queries/useMediaQuery.ts +2 -1
  560. package/src/menu/Menu.tsx +11 -3
  561. package/src/menu/MenuItemButton.tsx +7 -1
  562. package/src/menu/useContextMenu.ts +3 -3
  563. package/src/movement/types.ts +5 -5
  564. package/src/navigation/CollapsibleNavGroup.tsx +16 -8
  565. package/src/navigation/DefaultNavigationRenderer.tsx +8 -6
  566. package/src/navigation/NavItemButton.tsx +2 -1
  567. package/src/navigation/NavItemLink.tsx +11 -3
  568. package/src/navigation/NavSubheader.tsx +1 -1
  569. package/src/navigation/Navigation.tsx +1 -1
  570. package/src/navigation/types.ts +60 -10
  571. package/src/navigation/useActiveHeadingId.ts +1 -1
  572. package/src/navigation/useNavigationExpansion.ts +170 -0
  573. package/src/navigation/utils.ts +47 -0
  574. package/src/objectFit.ts +88 -0
  575. package/src/positioning/useFixedPositioning.ts +34 -11
  576. package/src/responsive-item/ResponsiveItem.tsx +96 -0
  577. package/src/responsive-item/ResponsiveItemOverlay.tsx +6 -46
  578. package/src/responsive-item/responsiveItemOverlayStyles.ts +46 -0
  579. package/src/responsive-item/responsiveItemStyles.ts +81 -0
  580. package/src/scroll/useScrollLock.ts +6 -0
  581. package/src/searching/utils.ts +3 -3
  582. package/src/segmented-button/SegmentedButton.tsx +5 -1
  583. package/src/snackbar/ToastManager.tsx +16 -5
  584. package/src/snackbar/useCurrentToastActions.ts +5 -5
  585. package/src/table/tableCellStyles.ts +10 -6
  586. package/src/tabs/Tab.tsx +4 -1
  587. package/src/tabs/TabList.tsx +2 -2
  588. package/src/tabs/TabListScrollButton.tsx +4 -4
  589. package/src/tabs/getTabListScrollToOptions.ts +37 -0
  590. package/src/tabs/tabStyles.ts +4 -0
  591. package/src/tabs/useTabList.ts +2 -9
  592. package/src/tabs/useTabs.ts +6 -6
  593. package/src/tabs/utils.ts +0 -38
  594. package/src/test-utils/ResizeObserver.ts +11 -12
  595. package/src/test-utils/matchMedia.ts +7 -7
  596. package/src/test-utils/polyfills/TextDecoder.ts +0 -1
  597. package/src/test-utils/timers.ts +10 -7
  598. package/src/theme/LocalStorageColorSchemeProvider.tsx +4 -4
  599. package/src/theme/ThemeProvider.tsx +3 -3
  600. package/src/theme/isColorScheme.ts +22 -0
  601. package/src/theme/types.ts +67 -1
  602. package/src/theme/useCSSVariables.ts +7 -30
  603. package/src/theme/useColorScheme.ts +1 -40
  604. package/src/theme/useColorSchemeMetaTag.ts +1 -1
  605. package/src/theme/useColorSchemeProvider.ts +2 -2
  606. package/src/tooltip/useTooltip.ts +17 -9
  607. package/src/transition/types.ts +1 -1
  608. package/src/transition/useCarousel.ts +3 -3
  609. package/src/transition/useTransition.ts +1 -0
  610. package/src/tree/TreeItem.tsx +7 -1
  611. package/src/tree/TreeItemExpander.tsx +1 -1
  612. package/src/tree/useTreeExpansion.ts +7 -25
  613. package/src/tree/useTreeSelection.ts +8 -32
  614. package/src/tree/utils.ts +6 -2
  615. package/src/types.ts +20 -4
  616. package/src/typography/WritingDirectionProvider.tsx +1 -1
  617. package/src/useDebouncedFunction.ts +4 -9
  618. package/src/useDropzone.ts +4 -4
  619. package/src/useIntersectionObserver.ts +5 -5
  620. package/src/useLocalStorage.ts +6 -6
  621. package/src/useMutationObserver.ts +1 -1
  622. package/src/useOrientation.ts +3 -1
  623. package/src/usePageInactive.ts +2 -2
  624. package/src/useReadonlySet.ts +122 -0
  625. package/src/useResizeListener.ts +1 -1
  626. package/src/useResizeObserver.ts +19 -0
  627. package/src/useThrottledFunction.ts +6 -9
  628. package/src/useToggle.ts +3 -3
  629. package/src/utils/RenderRecursively.tsx +2 -2
  630. package/src/utils/alphaNumericSort.ts +5 -5
  631. package/src/utils/bem.ts +1 -1
  632. package/src/utils/debounce.ts +22 -0
  633. package/src/utils/throttle.ts +38 -0
  634. package/src/utils/wait.ts +5 -1
  635. package/src/window-splitter/WindowSplitter.tsx +38 -43
  636. package/src/window-splitter/styles.ts +42 -0
  637. package/dist/autocomplete/FilterAutocompleteOptions.d.ts +0 -8
  638. package/dist/autocomplete/FilterAutocompleteOptions.js +0 -57
  639. package/dist/autocomplete/FilterAutocompleteOptions.js.map +0 -1
  640. package/dist/dialog/DialogContainer.d.ts +0 -14
  641. package/dist/dialog/DialogContainer.js +0 -20
  642. package/dist/dialog/DialogContainer.js.map +0 -1
  643. package/dist/form/FileInput.js.map +0 -1
  644. package/dist/form/fileUtils.js.map +0 -1
  645. package/dist/form/useFileUpload.js.map +0 -1
  646. package/dist/form/useListboxProvider.d.ts +0 -31
  647. package/dist/form/useListboxProvider.js.map +0 -1
  648. package/dist/navigation/getHrefFromParents.d.ts +0 -5
  649. package/dist/navigation/getHrefFromParents.js +0 -13
  650. package/dist/navigation/getHrefFromParents.js.map +0 -1
  651. package/dist/responsive-item/ResponsiveItemContainer.d.ts +0 -115
  652. package/dist/responsive-item/ResponsiveItemContainer.js +0 -80
  653. package/dist/responsive-item/ResponsiveItemContainer.js.map +0 -1
  654. package/dist/responsive-item/styles.d.ts +0 -34
  655. package/dist/responsive-item/styles.js +0 -17
  656. package/dist/responsive-item/styles.js.map +0 -1
  657. package/dist/theme/usePrefersColorScheme.js.map +0 -1
  658. package/src/autocomplete/FilterAutocompleteOptions.tsx +0 -86
  659. package/src/dialog/DialogContainer.tsx +0 -28
  660. package/src/form/useListboxProvider.ts +0 -45
  661. package/src/navigation/getHrefFromParents.ts +0 -15
  662. package/src/responsive-item/ResponsiveItemContainer.tsx +0 -174
  663. package/src/responsive-item/styles.ts +0 -58
  664. /package/dist/theme/{usePrefersColorScheme.d.ts → usePrefersDarkScheme.d.ts} +0 -0
  665. /package/src/theme/{usePrefersColorScheme.ts → usePrefersDarkScheme.ts} +0 -0
@@ -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
+ }
@@ -15,7 +15,11 @@ import { useEnsuredRef } from "../useEnsuredRef.js";
15
15
  import { useIsomorphicLayoutEffect } from "../useIsomorphicLayoutEffect.js";
16
16
  import { BELOW_CENTER_ANCHOR } from "./constants.js";
17
17
  import { getFixedPosition } from "./getFixedPosition.js";
18
- import { type CalculateFixedPositionOptions } from "./types.js";
18
+ import {
19
+ type CalculateFixedPositionOptions,
20
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
21
+ type FixedPositionStyle,
22
+ } from "./types.js";
19
23
  import { isWithinViewport } from "./utils.js";
20
24
 
21
25
  const noop = (): undefined => undefined;
@@ -109,7 +113,7 @@ export interface FixedPositioningOptions<
109
113
  * some options require the element to be in the DOM for specific
110
114
  * calculations.
111
115
  */
112
- getFixedPositionOptions?(): CalculateFixedPositionOptions;
116
+ getFixedPositionOptions?: () => CalculateFixedPositionOptions;
113
117
 
114
118
  /**
115
119
  * An optional function to call if the page resizes while the `FixedElement`
@@ -118,6 +122,17 @@ export interface FixedPositioningOptions<
118
122
  onResize?: EventListener;
119
123
  /** @see {@link TransitionScrollCallback} */
120
124
  onScroll?: TransitionScrollCallback<FixedToElement, FixedElement>;
125
+
126
+ /**
127
+ * Set this to `true` to disable the fixed positioning behavior so it can be
128
+ * customized within CSS or manually instead. This was added mostly to just
129
+ * support rendering menus inline with other content (like autocompletes
130
+ * within a dialog).
131
+ *
132
+ * @defaultValue `false`
133
+ * @since 6.0.0
134
+ */
135
+ disabled?: boolean;
121
136
  }
122
137
 
123
138
  /**
@@ -135,9 +150,12 @@ export interface FixedPositioningHookReturnValue<E extends HTMLElement> {
135
150
  ref: RefCallback<E>;
136
151
 
137
152
  /**
138
- * @see {@link FixedPositionStyle}
153
+ * This is the {@link FixedPositionStyle} merged with the
154
+ * {@link FixedPositioningOptions.style}. This will only return `undefined`
155
+ * when {@link FixedPositioningOptions.disabled} is `true` and no `style` was
156
+ * provided.
139
157
  */
140
- style: CSSProperties;
158
+ style: CSSProperties | undefined;
141
159
 
142
160
  /**
143
161
  * This should really only be used if the {@link transitionOptions} is not
@@ -148,7 +166,7 @@ export interface FixedPositioningHookReturnValue<E extends HTMLElement> {
148
166
  /**
149
167
  * A function that can be called to update the style for the fixed element.
150
168
  */
151
- updateStyle(): void;
169
+ updateStyle: () => void;
152
170
 
153
171
  /** {@inheritDoc FixedPositioningTransitionOptions} */
154
172
  transitionOptions: Readonly<Required<FixedPositioningTransitionOptions<E>>>;
@@ -219,6 +237,7 @@ export function useFixedPositioning<
219
237
  style: propStyle,
220
238
  nodeRef,
221
239
  fixedTo,
240
+ disabled,
222
241
  onEnter = noop,
223
242
  onEntering = noop,
224
243
  onEntered = noop,
@@ -310,6 +329,10 @@ export function useFixedPositioning<
310
329
  );
311
330
 
312
331
  const updateStyle = useCallback(() => {
332
+ if (disabled) {
333
+ return;
334
+ }
335
+
313
336
  const {
314
337
  ref,
315
338
  fixedTo,
@@ -348,12 +371,12 @@ export function useFixedPositioning<
348
371
  setStyle(style);
349
372
  setActive(!!element && !element.hidden);
350
373
 
351
- // Only changing the initialX and initialY should cause the useEffect below
352
- // to trigger, which is why everything else is set in a ref.
353
- }, [initialX, initialY]);
374
+ // Only changing the initialX, initialY, or disabled should cause the
375
+ // useEffect below to trigger, which is why everything else is set in a ref.
376
+ }, [disabled, initialX, initialY]);
354
377
 
355
378
  useEffect(() => {
356
- if (!active) {
379
+ if (!active || disabled) {
357
380
  return;
358
381
  }
359
382
 
@@ -385,7 +408,7 @@ export function useFixedPositioning<
385
408
  resizeHandler.remove(resizeCallback);
386
409
  scrollHandler.remove(scrollCallback);
387
410
  };
388
- }, [active, fixedTo, onResize, onScroll, ref, updateStyle]);
411
+ }, [active, disabled, fixedTo, onResize, onScroll, ref, updateStyle]);
389
412
 
390
413
  const callbacks: Required<FixedPositioningTransitionCallbacks> = {
391
414
  onEnter(appearing) {
@@ -408,7 +431,7 @@ export function useFixedPositioning<
408
431
 
409
432
  return {
410
433
  ref: refHandler,
411
- style: { ...style, ...propStyle },
434
+ style: disabled ? propStyle : { ...style, ...propStyle },
412
435
  callbacks,
413
436
  updateStyle,
414
437
  transitionOptions: {
@@ -0,0 +1,96 @@
1
+ import { forwardRef, type HTMLAttributes } from "react";
2
+ import {
3
+ responsiveItem,
4
+ type ResponsiveItemClassNameOptions,
5
+ } from "./responsiveItemStyles.js";
6
+
7
+ /**
8
+ * @since 6.0.0 Renamed from `MediaContainerProps` to
9
+ * `ResponsiveItemProps`
10
+ * @since 6.0.0 The `height` and `width` props were removed in favor of the
11
+ * `aspectRatio` props since the latest typescript string interpolation supports
12
+ * enforcing the correct format.
13
+ * @since 6.0.0 The `auto` prop was removed in favor of the new
14
+ * {@link ResponsiveItemProps.responsive} prop.
15
+ */
16
+ export interface ResponsiveItemProps
17
+ extends HTMLAttributes<HTMLSpanElement>,
18
+ ResponsiveItemClassNameOptions {}
19
+
20
+ /**
21
+ * @example Image Example
22
+ * ```tsx
23
+ * import { ResponsiveItem } from "@react-md/core";
24
+ * import type { ReactElement } from "react";
25
+ *
26
+ * function Example(): ReactElement {
27
+ * return (
28
+ * <ResponsiveItem>
29
+ * <img alt="" src="/some-image.png" />
30
+ * </ResponsiveItem>
31
+ * );
32
+ * }
33
+ * ```
34
+ *
35
+ * @example Iframe Example
36
+ * ```tsx
37
+ * import { ResponsiveItem } from "@react-md/core";
38
+ * import type { ReactElement } from "react";
39
+ *
40
+ * function Example(): ReactElement {
41
+ * return (
42
+ * <ResponsiveItem>
43
+ * <iframe
44
+ * src="https://youtube.com/some-video-url"
45
+ * title="Some YouTube video"
46
+ * allowFullScreen
47
+ * />
48
+ * </ResponsiveItem>
49
+ * );
50
+ * }
51
+ * ```
52
+ *
53
+ * @example Forced Aspect Ratio
54
+ * ```tsx
55
+ * import { ResponsiveItem } from "@react-md/core";
56
+ * import type { ReactElement } from "react";
57
+ *
58
+ * function Example(): ReactElement {
59
+ * return (
60
+ * <ResponsiveItem aspectRatio="16-9">
61
+ * <img alt="" src="/some-image.png" />
62
+ * </ResponsiveItem>
63
+ * );
64
+ * }
65
+ * ```
66
+ *
67
+ * @since 6.0.0 Renamed from `MediaContainer` to
68
+ * `ResponsiveItem` and renders a `<span>` instead of a `<div>`.
69
+ */
70
+ export const ResponsiveItem = forwardRef<HTMLSpanElement, ResponsiveItemProps>(
71
+ function ResponsiveItem(props, ref) {
72
+ const {
73
+ className,
74
+ fullWidth = false,
75
+ aspectRatio,
76
+ responsive = "auto",
77
+ children,
78
+ ...remaining
79
+ } = props;
80
+
81
+ return (
82
+ <span
83
+ {...remaining}
84
+ ref={ref}
85
+ className={responsiveItem({
86
+ className,
87
+ fullWidth,
88
+ aspectRatio,
89
+ responsive,
90
+ })}
91
+ >
92
+ {children}
93
+ </span>
94
+ );
95
+ }
96
+ );
@@ -1,50 +1,10 @@
1
- import { cnb } from "cnbuilder";
2
1
  import { forwardRef, type HTMLAttributes } from "react";
3
- import { bem } from "../utils/bem.js";
4
-
5
- const styles = bem("rmd-responsive-item-overlay");
6
-
7
- /**
8
- * The overlay positions relative to the `MediaContainer` component. Most of
9
- * the sizes are self-explanatory, but the `middle` position will be centered
10
- * vertically while `center` will be centered `horizontally`.
11
- *
12
- * @since 6.0.0 Renamed from `MediaOverlayPosition` to
13
- * `ResponsiveItemOverlayProps`.
14
- */
15
- export type ResponsiveItemOverlayPosition =
16
- | "top"
17
- | "right"
18
- | "bottom"
19
- | "left"
20
- | "middle"
21
- | "center"
22
- | "absolute-center";
23
-
24
- /** @since 6.0.0 */
25
- export interface ResponsiveItemOverlayClassNameOptions {
26
- className?: string;
27
- /** @defaultValue `"bottom"` */
28
- position?: ResponsiveItemOverlayPosition;
29
- }
30
-
31
- /**
32
- * @since 6.0.0
33
- */
34
- export function responsiveItemOverlay(
35
- options: ResponsiveItemOverlayClassNameOptions = {}
36
- ): string {
37
- const { className, position = "bottom" } = options;
38
-
39
- return cnb(
40
- styles({
41
- [position]: true,
42
- horizontal:
43
- position !== "top" && position !== "bottom" && position !== "middle",
44
- }),
45
- className
46
- );
47
- }
2
+ import {
3
+ responsiveItemOverlay,
4
+ type ResponsiveItemOverlayClassNameOptions,
5
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
6
+ type ResponsiveItemOverlayPosition,
7
+ } from "./responsiveItemOverlayStyles.js";
48
8
 
49
9
  /**
50
10
  * @since 6.0.0 Renamed from `MediaOverlayProps` to
@@ -0,0 +1,46 @@
1
+ import { cnb } from "cnbuilder";
2
+ import { bem } from "../utils/bem.js";
3
+
4
+ const styles = bem("rmd-responsive-item-overlay");
5
+
6
+ /**
7
+ * The overlay positions relative to the `MediaContainer` component. Most of
8
+ * the sizes are self-explanatory, but the `middle` position will be centered
9
+ * vertically while `center` will be centered `horizontally`.
10
+ *
11
+ * @since 6.0.0 Renamed from `MediaOverlayPosition` to
12
+ * `ResponsiveItemOverlayProps`.
13
+ */
14
+ export type ResponsiveItemOverlayPosition =
15
+ | "top"
16
+ | "right"
17
+ | "bottom"
18
+ | "left"
19
+ | "middle"
20
+ | "center"
21
+ | "absolute-center";
22
+
23
+ /** @since 6.0.0 */
24
+ export interface ResponsiveItemOverlayClassNameOptions {
25
+ className?: string;
26
+ /** @defaultValue `"bottom"` */
27
+ position?: ResponsiveItemOverlayPosition;
28
+ }
29
+
30
+ /**
31
+ * @since 6.0.0
32
+ */
33
+ export function responsiveItemOverlay(
34
+ options: ResponsiveItemOverlayClassNameOptions = {}
35
+ ): string {
36
+ const { className, position = "bottom" } = options;
37
+
38
+ return cnb(
39
+ styles({
40
+ [position]: true,
41
+ horizontal:
42
+ position !== "top" && position !== "bottom" && position !== "middle",
43
+ }),
44
+ className
45
+ );
46
+ }
@@ -0,0 +1,81 @@
1
+ import { cnb } from "cnbuilder";
2
+ import { bem } from "../utils/bem.js";
3
+
4
+ const styles = bem("rmd-responsive-item");
5
+
6
+ /** @since 6.0.0 */
7
+ export interface ResponsiveItemClassNameOptions {
8
+ className?: string;
9
+
10
+ /**
11
+ * Set this to `true` if the container should gain the following styles:
12
+ *
13
+ * ```scss
14
+ * display: block;
15
+ * width: 100%;
16
+ * ```
17
+ *
18
+ * @defaultValue `false`
19
+ */
20
+ fullWidth?: boolean;
21
+
22
+ /**
23
+ * Set this to a custom aspect ratio to use.
24
+ *
25
+ * @example Valid Aspect Ratios
26
+ * ```tsx
27
+ * aspectRatio="16-9"
28
+ * aspectRatio="9-16"
29
+ * aspectRatio="3-4"
30
+ * aspectRatio="4-3"
31
+ * aspectRatio="1-1"
32
+ * ```
33
+ *
34
+ * These values are based on the `core.$responsive-item-aspect-ratios` map.
35
+ *
36
+ * @defaultValue `""`
37
+ */
38
+ aspectRatio?: `${number}-${number}`;
39
+
40
+ /**
41
+ * Set this to `"manual"` if you want to manually specify which elements are
42
+ * responsive items using custom class names. You probably don't really want
43
+ * to use this.
44
+ *
45
+ * Set this to `"auto"` to automatically update all visual media that appear
46
+ * as a child in this component to a responsive item.
47
+ *
48
+ * Set this to `"container"` to automatically update all visual media that
49
+ * appear as a child in this component to be a responsive item that scales to
50
+ * the container's dimensions.
51
+ *
52
+ * Note: The `"auto"` and `"container"` values use the
53
+ * `core.$responsive-item-selectors` value for their behavior.
54
+ *
55
+ * @defaultValue `"auto"`
56
+ */
57
+ responsive?: "auto" | "manual" | "container";
58
+ }
59
+
60
+ /** @since 6.0.0 */
61
+ export function responsiveItem(
62
+ options: ResponsiveItemClassNameOptions = {}
63
+ ): string {
64
+ const {
65
+ className,
66
+ fullWidth = false,
67
+ aspectRatio = "",
68
+ responsive = "auto",
69
+ } = options;
70
+
71
+ return cnb(
72
+ styles({
73
+ auto: responsive !== "manual",
74
+ "auto-scale": responsive === "container",
75
+ "aspect-ratio": aspectRatio,
76
+ [aspectRatio]: aspectRatio,
77
+ "full-width": fullWidth,
78
+ }),
79
+ className
80
+ );
81
+ }