@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,6 +1,6 @@
1
1
  "use client";
2
- import { useCallback, useState } from "react";
3
2
  import { type UseStateSetter } from "../types.js";
3
+ import { useReadonlySet } from "../useReadonlySet.js";
4
4
  import { type TreeDefaultIds, type TreeItemIdSet } from "./types.js";
5
5
 
6
6
  /**
@@ -11,7 +11,7 @@ import { type TreeDefaultIds, type TreeItemIdSet } from "./types.js";
11
11
  */
12
12
  export interface TreeExpansion {
13
13
  expandedIds: TreeItemIdSet;
14
- toggleTreeItemExpansion(itemId: string): void;
14
+ toggleTreeItemExpansion: (itemId: string) => void;
15
15
  expandMultipleTreeItems: UseStateSetter<TreeItemIdSet>;
16
16
  }
17
17
 
@@ -22,31 +22,13 @@ export interface TreeExpansion {
22
22
  export function useTreeExpansion(
23
23
  defaultExpandedIds?: TreeDefaultIds
24
24
  ): TreeExpansion {
25
- const [expandedIds, setExpandedIds] = useState<TreeItemIdSet>(() => {
26
- const defaultIds =
27
- typeof defaultExpandedIds === "function"
28
- ? defaultExpandedIds()
29
- : defaultExpandedIds;
30
-
31
- return new Set(defaultIds);
25
+ const { value, setValue, toggleValue } = useReadonlySet({
26
+ defaultValue: defaultExpandedIds,
32
27
  });
33
28
 
34
- const toggleTreeItemExpansion = useCallback((itemId: string) => {
35
- setExpandedIds((prevExpandedIds) => {
36
- const expandedIds = new Set(prevExpandedIds);
37
- if (expandedIds.has(itemId)) {
38
- expandedIds.delete(itemId);
39
- } else {
40
- expandedIds.add(itemId);
41
- }
42
-
43
- return expandedIds;
44
- });
45
- }, []);
46
-
47
29
  return {
48
- expandedIds,
49
- toggleTreeItemExpansion,
50
- expandMultipleTreeItems: setExpandedIds,
30
+ expandedIds: value,
31
+ toggleTreeItemExpansion: toggleValue,
32
+ expandMultipleTreeItems: setValue,
51
33
  };
52
34
  }
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { useCallback, useState } from "react";
3
2
  import { type UseStateSetter } from "../types.js";
3
+ import { useReadonlySet } from "../useReadonlySet.js";
4
4
  import { type TreeDefaultIds, type TreeItemIdSet } from "./types.js";
5
5
 
6
6
  /**
@@ -13,7 +13,7 @@ export interface TreeSelection {
13
13
  /** @defaultValue `false` */
14
14
  multiSelect?: boolean;
15
15
  selectedIds: ReadonlySet<string>;
16
- toggleTreeItemSelection(itemId: string): void;
16
+ toggleTreeItemSelection: (itemId: string) => void;
17
17
  selectMultipleTreeItems: UseStateSetter<TreeItemIdSet>;
18
18
  }
19
19
 
@@ -25,39 +25,15 @@ export function useTreeSelection(
25
25
  defaultSelectedIds?: TreeDefaultIds,
26
26
  multiSelect = false
27
27
  ): Required<TreeSelection> {
28
- const [selectedIds, setSelectedIds] = useState<TreeItemIdSet>(() => {
29
- const defaultIds =
30
- typeof defaultSelectedIds === "function"
31
- ? defaultSelectedIds()
32
- : defaultSelectedIds;
33
-
34
- return new Set(defaultIds);
28
+ const { value, setValue, toggleValue } = useReadonlySet({
29
+ toggleType: multiSelect ? "multiple" : "single-select",
30
+ defaultValue: defaultSelectedIds,
35
31
  });
36
32
 
37
- const toggleTreeItemSelection = useCallback(
38
- (itemId: string) => {
39
- setSelectedIds((selectedIds) => {
40
- if (!multiSelect) {
41
- return selectedIds.has(itemId) ? selectedIds : new Set([itemId]);
42
- }
43
-
44
- const nextSelectedIds = new Set(selectedIds);
45
- if (selectedIds.has(itemId)) {
46
- nextSelectedIds.delete(itemId);
47
- } else {
48
- nextSelectedIds.add(itemId);
49
- }
50
-
51
- return nextSelectedIds;
52
- });
53
- },
54
- [multiSelect]
55
- );
56
-
57
33
  return {
58
- selectedIds,
59
34
  multiSelect,
60
- toggleTreeItemSelection,
61
- selectMultipleTreeItems: setSelectedIds,
35
+ selectedIds: value,
36
+ toggleTreeItemSelection: toggleValue,
37
+ selectMultipleTreeItems: setValue,
62
38
  };
63
39
  }
package/src/tree/utils.ts CHANGED
@@ -1,4 +1,8 @@
1
- import type { TreeItemNode, TreeData, DefaultTreeItemNode } from "./types.js";
1
+ import {
2
+ type DefaultTreeItemNode,
3
+ type TreeData,
4
+ type TreeItemNode,
5
+ } from "./types.js";
2
6
 
3
7
  /**
4
8
  * This will get all the items from the provided itemId up to the root of the
@@ -48,7 +52,7 @@ export function getChildTreeItems<T extends TreeItemNode = DefaultTreeItemNode>(
48
52
  parentId: string | null,
49
53
  recursive = false
50
54
  ): readonly T[] {
51
- const items = Array.isArray(data) ? data : Object.values(data);
55
+ const items: readonly T[] = Array.isArray(data) ? data : Object.values(data);
52
56
 
53
57
  return items.reduce<T[]>((list, item) => {
54
58
  if (parentId !== item.parentId) {
package/src/types.ts CHANGED
@@ -5,7 +5,7 @@ import type { Dispatch, ReactElement, Ref, SetStateAction } from "react";
5
5
  * object even though a `ref` isn't a real prop.
6
6
  */
7
7
  export type PropsWithRef<
8
- Props extends {},
8
+ Props extends object,
9
9
  Element extends HTMLElement,
10
10
  > = Props & {
11
11
  /**
@@ -18,7 +18,7 @@ export type PropsWithRef<
18
18
  * A simple type that can be used for different components that clone a
19
19
  * `className` into a child component.
20
20
  */
21
- export type ClassNameCloneableChild<T = {}> = ReactElement<
21
+ export type ClassNameCloneableChild<T = object> = ReactElement<
22
22
  T & { className?: string }
23
23
  >;
24
24
 
@@ -171,12 +171,28 @@ export type CssPosition = "fixed" | "sticky" | "static";
171
171
  * @since 6.0.0
172
172
  */
173
173
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
174
- export type AnyFunction = (...args: any[]) => any | void;
174
+ export type AnyFunction = (...args: any[]) => any;
175
175
 
176
176
  /**
177
177
  * @since 6.0.0
178
178
  */
179
- export type CancelableFunction<F extends AnyFunction> = F & { cancel(): void };
179
+ export type CancelableFunction<F extends AnyFunction> = F & {
180
+ cancel: () => void;
181
+ };
182
+
183
+ /**
184
+ * @since 6.0.0
185
+ */
186
+ export type DebouncedFunction<F extends AnyFunction> = CancelableFunction<
187
+ (...args: Parameters<F>) => void
188
+ >;
189
+
190
+ /**
191
+ * @since 6.0.0
192
+ */
193
+ export type ThrottledFunction<F extends AnyFunction> = CancelableFunction<
194
+ (...args: Parameters<F>) => ReturnType<F>
195
+ >;
180
196
 
181
197
  /**
182
198
  * @since 6.0.0
@@ -34,7 +34,7 @@ export interface WritingDirectionContext {
34
34
  /**
35
35
  * Toggles the current writing direction for the first parent `Dir` component.
36
36
  */
37
- toggleDir(): void;
37
+ toggleDir: () => void;
38
38
  }
39
39
 
40
40
  /** @internal */
@@ -1,15 +1,8 @@
1
1
  "use client";
2
2
  import { useEffect, useMemo, useRef } from "react";
3
- import { type CancelableFunction, type AnyFunction } from "./types.js";
3
+ import { type AnyFunction, type DebouncedFunction } from "./types.js";
4
4
  import { useIsomorphicLayoutEffect } from "./useIsomorphicLayoutEffect.js";
5
5
 
6
- /**
7
- * @since 6.0.0
8
- */
9
- export type DebouncedFunction<F extends AnyFunction> = CancelableFunction<
10
- (...args: Parameters<F>) => void
11
- >;
12
-
13
6
  /**
14
7
  * Creates a function that will only be called if it has not been called again
15
8
  * for X milliseconds.
@@ -109,7 +102,9 @@ export function useDebouncedFunction<F extends AnyFunction>(
109
102
  funcRef.current(...args);
110
103
  }, wait);
111
104
  };
112
- debounced.cancel = () => window.clearTimeout(timeout.current);
105
+ debounced.cancel = () => {
106
+ window.clearTimeout(timeout.current);
107
+ };
113
108
 
114
109
  return debounced;
115
110
  }, [wait]);
@@ -12,10 +12,10 @@ const noop = (): void => {
12
12
  * instead of the `DropzoneHandlers` type.
13
13
  */
14
14
  export interface DropzoneHandlers {
15
- onDrop<E extends HTMLElement>(event: DragEvent<E>): void;
16
- onDragEnter?<E extends HTMLElement>(event: DragEvent<E>): void;
17
- onDragOver?<E extends HTMLElement>(event: DragEvent<E>): void;
18
- onDragLeave?<E extends HTMLElement>(event: DragEvent<E>): void;
15
+ onDrop: <E extends HTMLElement>(event: DragEvent<E>) => void;
16
+ onDragEnter?: <E extends HTMLElement>(event: DragEvent<E>) => void;
17
+ onDragOver?: <E extends HTMLElement>(event: DragEvent<E>) => void;
18
+ onDragLeave?: <E extends HTMLElement>(event: DragEvent<E>) => void;
19
19
  }
20
20
 
21
21
  /**
@@ -89,7 +89,7 @@ export interface BaseIntersectionObserverHookOptions {
89
89
  * // pretend some expensive computation
90
90
  * return [0, 0.25, 0.5, 0.75, 1];
91
91
  * }, []),
92
- * OnUpdate: useCallback(() => {
92
+ * onUpdate: useCallback(() => {
93
93
  * // do something
94
94
  * }, []),
95
95
  * });
@@ -97,7 +97,7 @@ export interface BaseIntersectionObserverHookOptions {
97
97
  *
98
98
  * If this option is provided, {@link threshold}'s value will be ignored.
99
99
  */
100
- getThreshold?(): IntersectionObserverThreshold;
100
+ getThreshold?: () => IntersectionObserverThreshold;
101
101
 
102
102
  /**
103
103
  * **Must be wrapped in `useCallback` to prevent re-creating the
@@ -121,7 +121,7 @@ export interface BaseIntersectionObserverHookOptions {
121
121
  *
122
122
  * Note: If this option is provided, {@link rootMargin} will be ignored.
123
123
  */
124
- getRootMargin?(): IntersectionObserverRootMargin;
124
+ getRootMargin?: () => IntersectionObserverRootMargin;
125
125
  }
126
126
 
127
127
  /**
@@ -156,7 +156,7 @@ export interface IntersectionObserverHookOptions<E extends HTMLElement>
156
156
  * }
157
157
  * ```
158
158
  */
159
- onUpdate(entries: readonly IntersectionObserverEntry[]): void;
159
+ onUpdate: (entries: readonly IntersectionObserverEntry[]) => void;
160
160
 
161
161
  /**
162
162
  * **Must be wrapped in `useCallback` to prevent re-creating the
@@ -185,7 +185,7 @@ export interface IntersectionObserverHookOptions<E extends HTMLElement>
185
185
  * }
186
186
  * ```
187
187
  */
188
- getTargets?(): readonly Element[];
188
+ getTargets?: () => readonly Element[];
189
189
  }
190
190
 
191
191
  /**
@@ -69,7 +69,7 @@ export interface LocalStorageHookOptions<T> {
69
69
  /**
70
70
  * @since 6.0.0
71
71
  */
72
- export const defaultLocalStorageSerializer = <T>(value: T): string =>
72
+ export const defaultLocalStorageSerializer = (value: unknown): string =>
73
73
  typeof value === "string" ? value : `${value}`;
74
74
 
75
75
  /** @since 6.0.0 */
@@ -135,7 +135,7 @@ export const getItemFromStorage = <T>(
135
135
  key,
136
136
  fallback,
137
137
  storage = localStorage,
138
- deserializer = JSON.parse,
138
+ deserializer = JSON.parse as LocalStorageDeserializer<T>,
139
139
  } = options;
140
140
  if (!key) {
141
141
  return fallback;
@@ -144,7 +144,7 @@ export const getItemFromStorage = <T>(
144
144
  try {
145
145
  const value = storage.getItem(key);
146
146
  return !value ? fallback : deserializer(value);
147
- } catch (e) {
147
+ } catch {
148
148
  return fallback;
149
149
  }
150
150
  };
@@ -255,7 +255,7 @@ export interface LocalStorageHookReturnValue<T> {
255
255
  /**
256
256
  * Remove the item from local storage.
257
257
  */
258
- remove(): void;
258
+ remove: () => void;
259
259
 
260
260
  /**
261
261
  * Manually persist the current {@link value} into local storage. This is only
@@ -291,7 +291,7 @@ export interface LocalStorageHookReturnValue<T> {
291
291
  * }
292
292
  * ```
293
293
  */
294
- persist(): void;
294
+ persist: () => void;
295
295
  }
296
296
 
297
297
  /**
@@ -456,7 +456,7 @@ export function useLocalStorage<T>(
456
456
  const serializer =
457
457
  options.serializer ??
458
458
  (raw ? defaultLocalStorageSerializer : JSON.stringify);
459
- const deserializer =
459
+ const deserializer: LocalStorageDeserializer<T> =
460
460
  options.deserializer ??
461
461
  (raw && typeof initialValue === "string" ? identity : JSON.parse);
462
462
 
@@ -14,7 +14,7 @@ export interface MutationObserverHookOptions<E extends HTMLElement>
14
14
  */
15
15
  disabled?: boolean;
16
16
 
17
- onObserved(mutation: MutationRecord): void;
17
+ onObserved: (mutation: MutationRecord) => void;
18
18
  }
19
19
 
20
20
  /**
@@ -40,7 +40,9 @@ export const getOrientationType = (): OrientationType => {
40
40
  export function useOrientation(): OrientationType {
41
41
  const [orientation, setOrientation] = useState(getOrientationType);
42
42
  useEffect(() => {
43
- const handler = (): void => setOrientation(getOrientationType());
43
+ const handler = (): void => {
44
+ setOrientation(getOrientationType());
45
+ };
44
46
 
45
47
  const { orientation } = window.screen;
46
48
  if (orientation) {
@@ -36,7 +36,7 @@ export interface PageInactiveOptions {
36
36
  * This will be called whenever the page activity changes based on the
37
37
  * {@link PageInactiveType}.
38
38
  */
39
- onChange(active: boolean): void;
39
+ onChange: (active: boolean) => void;
40
40
 
41
41
  /**
42
42
  * This will be fired whenever the {@link disabled} state is `true` which can
@@ -47,7 +47,7 @@ export interface PageInactiveOptions {
47
47
  *
48
48
  * @defaultValue `() => {}`
49
49
  */
50
- onDisabledCleanup?(): void;
50
+ onDisabledCleanup?: () => void;
51
51
  }
52
52
 
53
53
  /**
@@ -0,0 +1,122 @@
1
+ "use client";
2
+ import { useCallback, useState } from "react";
3
+ import { type UseStateSetter, type UseStateInitializer } from "./types.js";
4
+
5
+ /**
6
+ * @since 6.0.0
7
+ */
8
+ export interface ReadonlySetOptions<T> {
9
+ /**
10
+ * Sets the behavior for when the
11
+ * {@link ReadonlySetImplementation.toggleValue} is triggered and mostly for
12
+ * internal usage. The default behavior (`"multiple"`) is to work how most
13
+ * would expect:
14
+ * - If the item does not exist in the set, add it.
15
+ * - If the item exists in the set, remove it.
16
+ *
17
+ * Setting this to `"single"` makes it so that only a single item can be in
18
+ * the set at once and will toggle like normal:
19
+ * - If the item does not exist in the set, return a new set only including
20
+ * the item.
21
+ * - If the item exists in the set, return an empty set.
22
+ * An example usage is the `useExpansionPanels` to allow only a single panel
23
+ * to be expanded at a time.
24
+ *
25
+ * Setting this to `"single-select"` makes it so that only a single item can
26
+ * be in the set at once but will not toggle:
27
+ * - If the item does not exist in the set, return a new set only including
28
+ * the item.
29
+ * - If the item exists in the set, do nothing
30
+ * An example usage is the `useTreeSelection` to always require at least one
31
+ * tree item to be selected. It is impossible to deselect an item.
32
+ *
33
+ * @defaultValue `"multiple"`
34
+ */
35
+ toggleType?: "single" | "multiple" | "single-select";
36
+ defaultValue?: UseStateInitializer<ReadonlySet<T> | readonly T[]>;
37
+ }
38
+
39
+ /**
40
+ * @since 6.0.0
41
+ */
42
+ export interface ReadonlySetImplementation<T> {
43
+ value: ReadonlySet<T>;
44
+ setValue: UseStateSetter<ReadonlySet<T>>;
45
+ toggleValue: (item: T) => void;
46
+ }
47
+
48
+ /**
49
+ * This is most likely an internal only hook to manage state for a
50
+ * `ReadonlySet`. You most likely want to use one of the other hooks that
51
+ * leverage this instead:
52
+ *
53
+ * - `useCheckboxGroup`
54
+ * - `useExpansionPanels`
55
+ * - `useTreeSelection`
56
+ * - `useTreeExpansion`
57
+ * - etc
58
+ *
59
+ * @example Simple Example
60
+ * ```tsx
61
+ * import { cnb } from "cnbuilder";
62
+ * import { useReadonlySet } from "@react-md/core/useReadonlySet";
63
+ *
64
+ * function Example() {
65
+ * const { value, toggleValue } = useReadonlySet();
66
+ *
67
+ * return (
68
+ * <>
69
+ * {someList.map((item) => (
70
+ * <div key={item.id} className={cnb(value.has(item.id) && styles.selected)}>
71
+ * {item.name}
72
+ * <Button onClick={() => toggleValue(item.id)}>Button</Button>
73
+ * </div>
74
+ * ))}
75
+ * </>
76
+ * );
77
+ * }
78
+ * ```
79
+ * @since 6.0.0
80
+ */
81
+ export function useReadonlySet<T>(
82
+ options: ReadonlySetOptions<T> = {}
83
+ ): ReadonlySetImplementation<T> {
84
+ const { defaultValue, toggleType = "multiple" } = options;
85
+ const [value, setValue] = useState<ReadonlySet<T>>(() => {
86
+ const initial =
87
+ defaultValue instanceof Function ? defaultValue() : (defaultValue ?? []);
88
+
89
+ return new Set(initial);
90
+ });
91
+
92
+ const toggleValue = useCallback(
93
+ (item: T) => {
94
+ setValue((prevValue) => {
95
+ const exists = prevValue.has(item);
96
+ if (toggleType === "single") {
97
+ return new Set(exists ? [] : [item]);
98
+ }
99
+
100
+ if (toggleType === "single-select") {
101
+ return exists ? prevValue : new Set([item]);
102
+ }
103
+
104
+ const nextValue = new Set(prevValue);
105
+ if (exists) {
106
+ nextValue.delete(item);
107
+ } else {
108
+ nextValue.add(item);
109
+ }
110
+
111
+ return nextValue;
112
+ });
113
+ },
114
+ [toggleType]
115
+ );
116
+
117
+ return {
118
+ value,
119
+ setValue,
120
+ toggleValue,
121
+ };
122
+ }
@@ -33,7 +33,7 @@ export interface ResizeListenerOptions extends AddEventListenerOptions {
33
33
  * This function will be called whenever the resize event is fired on the
34
34
  * `window`. This should be wrapped in `useCallback`.
35
35
  */
36
- onUpdate(event: Event): void;
36
+ onUpdate: (event: Event) => void;
37
37
  }
38
38
 
39
39
  /**
@@ -1,15 +1,8 @@
1
1
  "use client";
2
2
  import { useEffect, useMemo, useRef } from "react";
3
- import { type AnyFunction, type CancelableFunction } from "./types.js";
3
+ import { type AnyFunction, type ThrottledFunction } from "./types.js";
4
4
  import { useIsomorphicLayoutEffect } from "./useIsomorphicLayoutEffect.js";
5
5
 
6
- /**
7
- * @since 6.0.0
8
- */
9
- export type ThrottledFunction<F extends AnyFunction> = CancelableFunction<
10
- (...args: Parameters<F>) => ReturnType<F>
11
- >;
12
-
13
6
  /**
14
7
  * Creates a function that will only be called once every X milliseconds.
15
8
  *
@@ -113,19 +106,23 @@ export function useThrottledFunction<F extends AnyFunction>(
113
106
  const remaining = wait - (now - lastCalledTime.current);
114
107
  if (remaining <= 0 || remaining > wait) {
115
108
  lastCalledTime.current = now;
109
+
116
110
  result.current = funcRef.current(...args.current);
117
111
  } else if (!timeout.current) {
118
112
  timeout.current = window.setTimeout(() => {
119
113
  lastCalledTime.current = Date.now();
120
114
  timeout.current = undefined;
121
115
  // should exist by this time
116
+
122
117
  result.current = funcRef.current(...(args.current as Parameters<F>));
123
118
  }, remaining);
124
119
  }
125
120
 
126
121
  return result.current as ReturnType<F>;
127
122
  };
128
- throttled.cancel = () => window.clearTimeout(timeout.current);
123
+ throttled.cancel = () => {
124
+ window.clearTimeout(timeout.current);
125
+ };
129
126
 
130
127
  return throttled;
131
128
  }, [wait]);
package/src/useToggle.ts CHANGED
@@ -8,9 +8,9 @@ import { type UseStateInitializer, type UseStateSetter } from "./types.js";
8
8
  export interface ToggleImplementation {
9
9
  toggled: boolean;
10
10
  setToggled: UseStateSetter<boolean>;
11
- toggle(): void;
12
- enable(): void;
13
- disable(): void;
11
+ toggle: () => void;
12
+ enable: () => void;
13
+ disable: () => void;
14
14
  }
15
15
 
16
16
  /**
@@ -97,7 +97,7 @@ export interface RenderRecursivelyProps<
97
97
  * @see {@link getRecursiveItemKey}
98
98
  * @defaultValue `({ index, depth }) => ${depth}-${index}`.
99
99
  */
100
- getItemKey?(options: RecursiveItemKeyOptions<Item>): string;
100
+ getItemKey?: (options: RecursiveItemKeyOptions<Item>) => string;
101
101
  }
102
102
 
103
103
  /**
@@ -58,7 +58,7 @@ export interface AlphaNumericSortOptions<T> {
58
58
  * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Collator/Collator
59
59
  * @defaultValue `new Intl.Collator("en-US", { numeric: true, caseFirst: "upper" }).compare`
60
60
  */
61
- compare?(a: string, b: string): number;
61
+ compare?: (a: string, b: string) => number;
62
62
 
63
63
  /**
64
64
  * Setting this to `true` will return the list in descending order instead of
@@ -0,0 +1,22 @@
1
+ import { type AnyFunction, type DebouncedFunction } from "../types.js";
2
+
3
+ /**
4
+ * @since 6.0.0
5
+ */
6
+ export function debounce<F extends AnyFunction>(
7
+ fn: F,
8
+ duration: number
9
+ ): DebouncedFunction<F> {
10
+ let timeout: NodeJS.Timeout | undefined;
11
+ const debounced: DebouncedFunction<F> = (...args) => {
12
+ clearTimeout(timeout);
13
+ timeout = setTimeout(() => {
14
+ fn(...args);
15
+ }, duration);
16
+ };
17
+ debounced.cancel = () => {
18
+ clearTimeout(timeout);
19
+ };
20
+
21
+ return debounced;
22
+ }
@@ -0,0 +1,38 @@
1
+ import { type AnyFunction, type ThrottledFunction } from "../types.js";
2
+
3
+ /**
4
+ * @since 6.0.0
5
+ */
6
+ export function throttle<F extends AnyFunction>(
7
+ fn: F,
8
+ wait: number
9
+ ): ThrottledFunction<F> {
10
+ let args: Parameters<F>;
11
+ let result: ReturnType<F>;
12
+ let timeout: NodeJS.Timeout | undefined;
13
+ let lastCalledTime = 0;
14
+
15
+ const throttled: ThrottledFunction<F> = (...nextArgs) => {
16
+ args = nextArgs;
17
+
18
+ const now = Date.now();
19
+ const remaining = wait - (now - lastCalledTime);
20
+ if (remaining <= 0 || remaining > wait) {
21
+ lastCalledTime = now;
22
+ result = fn(...args);
23
+ } else if (!timeout) {
24
+ timeout = setTimeout(() => {
25
+ lastCalledTime = Date.now();
26
+ timeout = undefined;
27
+ result = fn(...args);
28
+ }, remaining);
29
+ }
30
+
31
+ return result;
32
+ };
33
+ throttled.cancel = () => {
34
+ clearTimeout(timeout);
35
+ };
36
+
37
+ return throttled;
38
+ }
package/src/utils/wait.ts CHANGED
@@ -14,4 +14,8 @@
14
14
  * @since 6.0.0
15
15
  */
16
16
  export const wait = (ms: number): Promise<void> =>
17
- new Promise((resolve) => setTimeout(() => resolve(), ms));
17
+ new Promise((resolve) =>
18
+ setTimeout(() => {
19
+ resolve();
20
+ }, ms)
21
+ );