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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (645) hide show
  1. package/dist/_box-shadows.scss +76 -0
  2. package/dist/_colors.scss +279 -277
  3. package/dist/_core.scss +107 -16
  4. package/dist/_object-fit.scss +86 -0
  5. package/dist/_utils.scss +246 -72
  6. package/dist/app-bar/AppBar.d.ts +1 -90
  7. package/dist/app-bar/AppBar.js +1 -40
  8. package/dist/app-bar/AppBar.js.map +1 -1
  9. package/dist/app-bar/AppBarTitle.d.ts +1 -27
  10. package/dist/app-bar/AppBarTitle.js +1 -15
  11. package/dist/app-bar/AppBarTitle.js.map +1 -1
  12. package/dist/app-bar/_app-bar.scss +156 -25
  13. package/dist/app-bar/styles.d.ts +117 -0
  14. package/dist/app-bar/styles.js +55 -0
  15. package/dist/app-bar/styles.js.map +1 -0
  16. package/dist/autocomplete/Autocomplete.d.ts +8 -79
  17. package/dist/autocomplete/Autocomplete.js +112 -83
  18. package/dist/autocomplete/Autocomplete.js.map +1 -1
  19. package/dist/autocomplete/AutocompleteChip.d.ts +8 -0
  20. package/dist/autocomplete/AutocompleteChip.js +34 -0
  21. package/dist/autocomplete/AutocompleteChip.js.map +1 -0
  22. package/dist/autocomplete/AutocompleteCircularProgress.d.ts +5 -11
  23. package/dist/autocomplete/AutocompleteCircularProgress.js +4 -0
  24. package/dist/autocomplete/AutocompleteCircularProgress.js.map +1 -1
  25. package/dist/autocomplete/AutocompleteClearButton.d.ts +9 -0
  26. package/dist/autocomplete/AutocompleteClearButton.js +29 -0
  27. package/dist/autocomplete/AutocompleteClearButton.js.map +1 -0
  28. package/dist/autocomplete/AutocompleteDropdownButton.d.ts +4 -26
  29. package/dist/autocomplete/AutocompleteDropdownButton.js +5 -1
  30. package/dist/autocomplete/AutocompleteDropdownButton.js.map +1 -1
  31. package/dist/autocomplete/AutocompleteListboxChildren.d.ts +22 -0
  32. package/dist/autocomplete/AutocompleteListboxChildren.js +37 -0
  33. package/dist/autocomplete/AutocompleteListboxChildren.js.map +1 -0
  34. package/dist/autocomplete/_autocomplete.scss +362 -34
  35. package/dist/autocomplete/autocompleteStyles.d.ts +22 -0
  36. package/dist/autocomplete/autocompleteStyles.js +17 -8
  37. package/dist/autocomplete/autocompleteStyles.js.map +1 -1
  38. package/dist/autocomplete/defaults.d.ts +9 -9
  39. package/dist/autocomplete/defaults.js +13 -13
  40. package/dist/autocomplete/defaults.js.map +1 -1
  41. package/dist/autocomplete/types.d.ts +554 -56
  42. package/dist/autocomplete/types.js.map +1 -1
  43. package/dist/autocomplete/useAutocomplete.d.ts +22 -0
  44. package/dist/autocomplete/useAutocomplete.js +281 -0
  45. package/dist/autocomplete/useAutocomplete.js.map +1 -0
  46. package/dist/autocomplete/utils.d.ts +81 -0
  47. package/dist/autocomplete/utils.js +108 -0
  48. package/dist/autocomplete/utils.js.map +1 -0
  49. package/dist/avatar/_avatar.scss +93 -2
  50. package/dist/badge/Badge.d.ts +1 -20
  51. package/dist/badge/Badge.js +1 -14
  52. package/dist/badge/Badge.js.map +1 -1
  53. package/dist/badge/_badge.scss +90 -3
  54. package/dist/badge/styles.d.ts +26 -0
  55. package/dist/badge/styles.js +18 -0
  56. package/dist/badge/styles.js.map +1 -0
  57. package/dist/box/Box.js +2 -1
  58. package/dist/box/Box.js.map +1 -1
  59. package/dist/box/_box.scss +130 -17
  60. package/dist/box/styles.d.ts +6 -0
  61. package/dist/box/styles.js +2 -1
  62. package/dist/box/styles.js.map +1 -1
  63. package/dist/button/AsyncButton.d.ts +1 -1
  64. package/dist/button/AsyncButton.js.map +1 -1
  65. package/dist/button/Button.d.ts +2 -1
  66. package/dist/button/Button.js +2 -1
  67. package/dist/button/Button.js.map +1 -1
  68. package/dist/button/_button.scss +157 -25
  69. package/dist/card/Card.d.ts +16 -0
  70. package/dist/card/Card.js +11 -3
  71. package/dist/card/Card.js.map +1 -1
  72. package/dist/card/ClickableCard.d.ts +2 -1
  73. package/dist/card/ClickableCard.js +5 -2
  74. package/dist/card/ClickableCard.js.map +1 -1
  75. package/dist/card/_card.scss +90 -19
  76. package/dist/card/styles.d.ts +0 -7
  77. package/dist/card/styles.js +2 -3
  78. package/dist/card/styles.js.map +1 -1
  79. package/dist/chip/Chip.d.ts +2 -1
  80. package/dist/chip/Chip.js +2 -1
  81. package/dist/chip/Chip.js.map +1 -1
  82. package/dist/chip/_chip.scss +42 -20
  83. package/dist/chip/styles.d.ts +12 -10
  84. package/dist/chip/styles.js.map +1 -1
  85. package/dist/cssUtils.js.map +1 -1
  86. package/dist/delegateEvent.d.ts +2 -2
  87. package/dist/delegateEvent.js.map +1 -1
  88. package/dist/dialog/Dialog.d.ts +8 -21
  89. package/dist/dialog/Dialog.js +27 -27
  90. package/dist/dialog/Dialog.js.map +1 -1
  91. package/dist/dialog/FixedDialog.d.ts +1 -3
  92. package/dist/dialog/FixedDialog.js +0 -8
  93. package/dist/dialog/FixedDialog.js.map +1 -1
  94. package/dist/dialog/_dialog.scss +67 -13
  95. package/dist/dialog/styles.d.ts +56 -0
  96. package/dist/dialog/styles.js +29 -2
  97. package/dist/dialog/styles.js.map +1 -1
  98. package/dist/divider/Divider.d.ts +0 -11
  99. package/dist/divider/Divider.js.map +1 -1
  100. package/dist/divider/_divider.scss +7 -1
  101. package/dist/divider/styles.d.ts +11 -0
  102. package/dist/divider/styles.js.map +1 -1
  103. package/dist/draggable/useDraggable.d.ts +6 -6
  104. package/dist/draggable/useDraggable.js.map +1 -1
  105. package/dist/draggable/utils.d.ts +3 -3
  106. package/dist/draggable/utils.js.map +1 -1
  107. package/dist/expansion-panel/ExpansionPanel.d.ts +1 -1
  108. package/dist/expansion-panel/ExpansionPanel.js.map +1 -1
  109. package/dist/expansion-panel/_expansion-panel.scss +5 -1
  110. package/dist/expansion-panel/useExpansionPanels.js +12 -24
  111. package/dist/expansion-panel/useExpansionPanels.js.map +1 -1
  112. package/dist/{form → files}/FileInput.d.ts +3 -6
  113. package/dist/{form → files}/FileInput.js +3 -6
  114. package/dist/files/FileInput.js.map +1 -0
  115. package/dist/files/_files.scss +22 -0
  116. package/dist/files/styles.d.ts +5 -0
  117. package/dist/files/styles.js +7 -0
  118. package/dist/files/styles.js.map +1 -0
  119. package/dist/{form → files}/useFileUpload.d.ts +7 -9
  120. package/dist/{form → files}/useFileUpload.js +5 -7
  121. package/dist/files/useFileUpload.js.map +1 -0
  122. package/dist/files/utils.d.ts +169 -0
  123. package/dist/files/utils.js +114 -0
  124. package/dist/files/utils.js.map +1 -0
  125. package/dist/{form/fileUtils.d.ts → files/validation.d.ts} +9 -174
  126. package/dist/{form/fileUtils.js → files/validation.js} +9 -134
  127. package/dist/files/validation.js.map +1 -0
  128. package/dist/focus/useFocusContainer.d.ts +2 -2
  129. package/dist/focus/useFocusContainer.js.map +1 -1
  130. package/dist/focus/utils.js.map +1 -1
  131. package/dist/form/FormMessage.js.map +1 -1
  132. package/dist/form/FormMessageContainer.js +4 -2
  133. package/dist/form/FormMessageContainer.js.map +1 -1
  134. package/dist/form/InputToggle.d.ts +2 -1
  135. package/dist/form/InputToggle.js +2 -1
  136. package/dist/form/InputToggle.js.map +1 -1
  137. package/dist/form/InputToggleIcon.js.map +1 -1
  138. package/dist/form/Label.js +2 -2
  139. package/dist/form/Label.js.map +1 -1
  140. package/dist/form/Listbox.d.ts +24 -0
  141. package/dist/form/Listbox.js +46 -0
  142. package/dist/form/Listbox.js.map +1 -0
  143. package/dist/form/ListboxProvider.d.ts +21 -0
  144. package/dist/form/{useListboxProvider.js → ListboxProvider.js} +1 -1
  145. package/dist/form/ListboxProvider.js.map +1 -0
  146. package/dist/form/MenuItemTextField.js +1 -2
  147. package/dist/form/MenuItemTextField.js.map +1 -1
  148. package/dist/form/NativeSelect.js +7 -4
  149. package/dist/form/NativeSelect.js.map +1 -1
  150. package/dist/form/Option.d.ts +49 -10
  151. package/dist/form/Option.js +11 -9
  152. package/dist/form/Option.js.map +1 -1
  153. package/dist/form/Password.js.map +1 -1
  154. package/dist/form/Select.d.ts +2 -2
  155. package/dist/form/Select.js +81 -85
  156. package/dist/form/Select.js.map +1 -1
  157. package/dist/form/Slider.d.ts +4 -4
  158. package/dist/form/Slider.js +6 -2
  159. package/dist/form/Slider.js.map +1 -1
  160. package/dist/form/SliderThumb.d.ts +3 -3
  161. package/dist/form/SliderThumb.js.map +1 -1
  162. package/dist/form/SliderValueMarks.d.ts +2 -2
  163. package/dist/form/SliderValueMarks.js.map +1 -1
  164. package/dist/form/SliderValueTooltip.js.map +1 -1
  165. package/dist/form/TextArea.js +1 -2
  166. package/dist/form/TextArea.js.map +1 -1
  167. package/dist/form/TextField.js +1 -2
  168. package/dist/form/TextField.js.map +1 -1
  169. package/dist/form/TextFieldContainer.js +1 -2
  170. package/dist/form/TextFieldContainer.js.map +1 -1
  171. package/dist/form/_form.scss +186 -121
  172. package/dist/form/formMessageContainerStyles.d.ts +10 -0
  173. package/dist/form/formMessageContainerStyles.js +11 -0
  174. package/dist/form/formMessageContainerStyles.js.map +1 -0
  175. package/dist/form/inputToggleStyles.js.map +1 -1
  176. package/dist/form/optionStyles.d.ts +1 -0
  177. package/dist/form/optionStyles.js +2 -2
  178. package/dist/form/optionStyles.js.map +1 -1
  179. package/dist/form/selectUtils.js.map +1 -1
  180. package/dist/form/sliderUtils.d.ts +1 -1
  181. package/dist/form/sliderUtils.js.map +1 -1
  182. package/dist/form/textFieldContainerStyles.d.ts +0 -2
  183. package/dist/form/textFieldContainerStyles.js +1 -2
  184. package/dist/form/textFieldContainerStyles.js.map +1 -1
  185. package/dist/form/types.d.ts +3 -10
  186. package/dist/form/types.js.map +1 -1
  187. package/dist/form/useCheckboxGroup.d.ts +17 -17
  188. package/dist/form/useCheckboxGroup.js +9 -17
  189. package/dist/form/useCheckboxGroup.js.map +1 -1
  190. package/dist/form/useCombobox.d.ts +56 -21
  191. package/dist/form/useCombobox.js +19 -4
  192. package/dist/form/useCombobox.js.map +1 -1
  193. package/dist/form/useEditableCombobox.d.ts +24 -4
  194. package/dist/form/useEditableCombobox.js +5 -0
  195. package/dist/form/useEditableCombobox.js.map +1 -1
  196. package/dist/form/useNumberField.js.map +1 -1
  197. package/dist/form/useRadioGroup.d.ts +6 -6
  198. package/dist/form/useRadioGroup.js.map +1 -1
  199. package/dist/form/useResizingTextArea.js.map +1 -1
  200. package/dist/form/useSelectCombobox.d.ts +3 -4
  201. package/dist/form/useSelectCombobox.js.map +1 -1
  202. package/dist/form/useTextField.d.ts +1 -1
  203. package/dist/form/useTextField.js.map +1 -1
  204. package/dist/form/useTextFieldContainerAddons.js.map +1 -1
  205. package/dist/hoverMode/useHoverMode.d.ts +3 -3
  206. package/dist/hoverMode/useHoverMode.js.map +1 -1
  207. package/dist/hoverMode/useHoverModeProvider.d.ts +4 -4
  208. package/dist/hoverMode/useHoverModeProvider.js.map +1 -1
  209. package/dist/icon/_icon.scss +151 -2
  210. package/dist/icon/iconConfig.d.ts +10 -0
  211. package/dist/icon/iconConfig.js +7 -0
  212. package/dist/icon/iconConfig.js.map +1 -1
  213. package/dist/icon/materialConfig.js.map +1 -1
  214. package/dist/icon/styles.js.map +1 -1
  215. package/dist/interaction/UserInteractionModeProvider.d.ts +5 -5
  216. package/dist/interaction/UserInteractionModeProvider.js +12 -8
  217. package/dist/interaction/UserInteractionModeProvider.js.map +1 -1
  218. package/dist/interaction/types.d.ts +20 -2
  219. package/dist/interaction/types.js.map +1 -1
  220. package/dist/interaction/useElementInteraction.d.ts +7 -1
  221. package/dist/interaction/useElementInteraction.js +1 -2
  222. package/dist/interaction/useElementInteraction.js.map +1 -1
  223. package/dist/interaction/utils.d.ts +2 -2
  224. package/dist/interaction/utils.js +2 -2
  225. package/dist/interaction/utils.js.map +1 -1
  226. package/dist/layout/LayoutWindowSplitter.js.map +1 -1
  227. package/dist/layout/_layout.scss +23 -10
  228. package/dist/layout/useExpandableLayout.d.ts +3 -3
  229. package/dist/layout/useExpandableLayout.js.map +1 -1
  230. package/dist/layout/useLayoutAppBarHeight.d.ts +2 -3
  231. package/dist/layout/useLayoutAppBarHeight.js.map +1 -1
  232. package/dist/layout/useTemporaryLayout.d.ts +2 -2
  233. package/dist/layout/useTemporaryLayout.js.map +1 -1
  234. package/dist/link/SkipToMainContent.js.map +1 -1
  235. package/dist/list/ListItem.d.ts +2 -1
  236. package/dist/list/ListItem.js +2 -1
  237. package/dist/list/ListItem.js.map +1 -1
  238. package/dist/list/ListItemChildren.js.map +1 -1
  239. package/dist/list/ListItemLink.d.ts +2 -1
  240. package/dist/list/ListItemLink.js +2 -1
  241. package/dist/list/ListItemLink.js.map +1 -1
  242. package/dist/list/_list.scss +6 -5
  243. package/dist/media-queries/_media-queries.scss +12 -0
  244. package/dist/media-queries/appSize.js.map +1 -1
  245. package/dist/media-queries/useMediaQuery.js +3 -1
  246. package/dist/media-queries/useMediaQuery.js.map +1 -1
  247. package/dist/menu/DropdownMenu.js.map +1 -1
  248. package/dist/menu/Menu.d.ts +8 -3
  249. package/dist/menu/Menu.js +2 -1
  250. package/dist/menu/Menu.js.map +1 -1
  251. package/dist/menu/MenuItemButton.js +6 -2
  252. package/dist/menu/MenuItemButton.js.map +1 -1
  253. package/dist/menu/useContextMenu.d.ts +3 -3
  254. package/dist/menu/useContextMenu.js.map +1 -1
  255. package/dist/movement/types.d.ts +5 -5
  256. package/dist/movement/types.js.map +1 -1
  257. package/dist/navigation/CollapsibleNavGroup.d.ts +5 -3
  258. package/dist/navigation/CollapsibleNavGroup.js +3 -4
  259. package/dist/navigation/CollapsibleNavGroup.js.map +1 -1
  260. package/dist/navigation/DefaultNavigationRenderer.d.ts +1 -2
  261. package/dist/navigation/DefaultNavigationRenderer.js +6 -2
  262. package/dist/navigation/DefaultNavigationRenderer.js.map +1 -1
  263. package/dist/navigation/NavItemButton.d.ts +1 -1
  264. package/dist/navigation/NavItemButton.js +1 -0
  265. package/dist/navigation/NavItemButton.js.map +1 -1
  266. package/dist/navigation/NavItemLink.d.ts +3 -2
  267. package/dist/navigation/NavItemLink.js +6 -2
  268. package/dist/navigation/NavItemLink.js.map +1 -1
  269. package/dist/navigation/NavSubheader.d.ts +2 -3
  270. package/dist/navigation/NavSubheader.js.map +1 -1
  271. package/dist/navigation/Navigation.d.ts +1 -1
  272. package/dist/navigation/Navigation.js.map +1 -1
  273. package/dist/navigation/_navigation.scss +6 -5
  274. package/dist/navigation/types.d.ts +54 -6
  275. package/dist/navigation/types.js.map +1 -1
  276. package/dist/navigation/useActiveHeadingId.d.ts +1 -1
  277. package/dist/navigation/useActiveHeadingId.js.map +1 -1
  278. package/dist/navigation/useNavigationExpansion.d.ts +104 -0
  279. package/dist/navigation/useNavigationExpansion.js +77 -0
  280. package/dist/navigation/useNavigationExpansion.js.map +1 -0
  281. package/dist/navigation/utils.d.ts +13 -0
  282. package/dist/navigation/utils.js +36 -0
  283. package/dist/navigation/utils.js.map +1 -0
  284. package/dist/objectFit.d.ts +69 -0
  285. package/dist/objectFit.js +52 -0
  286. package/dist/objectFit.js.map +1 -0
  287. package/dist/overlay/_overlay.scss +2 -1
  288. package/dist/positioning/useFixedPositioning.d.ts +17 -4
  289. package/dist/positioning/useFixedPositioning.js +10 -5
  290. package/dist/positioning/useFixedPositioning.js.map +1 -1
  291. package/dist/positioning/utils.js.map +1 -1
  292. package/dist/progress/LinearProgress.js.map +1 -1
  293. package/dist/progress/_progress.scss +20 -14
  294. package/dist/responsive-item/ResponsiveItem.d.ts +64 -0
  295. package/dist/responsive-item/ResponsiveItem.js +68 -0
  296. package/dist/responsive-item/ResponsiveItem.js.map +1 -0
  297. package/dist/responsive-item/ResponsiveItemOverlay.d.ts +1 -19
  298. package/dist/responsive-item/ResponsiveItemOverlay.js +1 -12
  299. package/dist/responsive-item/ResponsiveItemOverlay.js.map +1 -1
  300. package/dist/responsive-item/_responsive-item.scss +110 -133
  301. package/dist/responsive-item/responsiveItemOverlayStyles.d.ts +19 -0
  302. package/dist/responsive-item/responsiveItemOverlayStyles.js +14 -0
  303. package/dist/responsive-item/responsiveItemOverlayStyles.js.map +1 -0
  304. package/dist/responsive-item/responsiveItemStyles.d.ts +52 -0
  305. package/dist/responsive-item/responsiveItemStyles.js +15 -0
  306. package/dist/responsive-item/responsiveItemStyles.js.map +1 -0
  307. package/dist/scroll/useScrollLock.d.ts +5 -0
  308. package/dist/scroll/useScrollLock.js.map +1 -1
  309. package/dist/searching/utils.d.ts +2 -2
  310. package/dist/searching/utils.js.map +1 -1
  311. package/dist/segmented-button/SegmentedButton.d.ts +2 -1
  312. package/dist/segmented-button/SegmentedButton.js +2 -1
  313. package/dist/segmented-button/SegmentedButton.js.map +1 -1
  314. package/dist/segmented-button/_segmented-button.scss +6 -6
  315. package/dist/sheet/_sheet.scss +18 -6
  316. package/dist/snackbar/ToastManager.js +15 -5
  317. package/dist/snackbar/ToastManager.js.map +1 -1
  318. package/dist/snackbar/_snackbar.scss +30 -17
  319. package/dist/snackbar/useCurrentToastActions.d.ts +5 -5
  320. package/dist/snackbar/useCurrentToastActions.js.map +1 -1
  321. package/dist/table/_table.scss +15 -3
  322. package/dist/table/tableCellStyles.d.ts +7 -3
  323. package/dist/table/tableCellStyles.js +2 -2
  324. package/dist/table/tableCellStyles.js.map +1 -1
  325. package/dist/tabs/Tab.d.ts +2 -1
  326. package/dist/tabs/Tab.js +2 -1
  327. package/dist/tabs/Tab.js.map +1 -1
  328. package/dist/tabs/TabList.d.ts +2 -2
  329. package/dist/tabs/TabList.js.map +1 -1
  330. package/dist/tabs/TabListScrollButton.d.ts +1 -1
  331. package/dist/tabs/TabListScrollButton.js +1 -1
  332. package/dist/tabs/TabListScrollButton.js.map +1 -1
  333. package/dist/tabs/_tabs.scss +30 -9
  334. package/dist/tabs/getTabListScrollToOptions.d.ts +18 -0
  335. package/dist/tabs/getTabListScrollToOptions.js +19 -0
  336. package/dist/tabs/getTabListScrollToOptions.js.map +1 -0
  337. package/dist/tabs/tabStyles.d.ts +3 -0
  338. package/dist/tabs/tabStyles.js.map +1 -1
  339. package/dist/tabs/useTabList.d.ts +1 -8
  340. package/dist/tabs/useTabList.js +1 -0
  341. package/dist/tabs/useTabList.js.map +1 -1
  342. package/dist/tabs/useTabs.d.ts +6 -6
  343. package/dist/tabs/useTabs.js.map +1 -1
  344. package/dist/tabs/utils.d.ts +0 -18
  345. package/dist/tabs/utils.js +0 -15
  346. package/dist/tabs/utils.js.map +1 -1
  347. package/dist/test-utils/matchMedia.d.ts +1 -1
  348. package/dist/test-utils/matchMedia.js +4 -4
  349. package/dist/test-utils/matchMedia.js.map +1 -1
  350. package/dist/test-utils/polyfills/TextDecoder.js +0 -1
  351. package/dist/test-utils/polyfills/TextDecoder.js.map +1 -1
  352. package/dist/test-utils/timers.d.ts +9 -5
  353. package/dist/test-utils/timers.js +5 -5
  354. package/dist/test-utils/timers.js.map +1 -1
  355. package/dist/theme/LocalStorageColorSchemeProvider.d.ts +1 -1
  356. package/dist/theme/LocalStorageColorSchemeProvider.js +2 -1
  357. package/dist/theme/LocalStorageColorSchemeProvider.js.map +1 -1
  358. package/dist/theme/ThemeProvider.js +3 -1
  359. package/dist/theme/ThemeProvider.js.map +1 -1
  360. package/dist/theme/_a11y.scss +77 -13
  361. package/dist/theme/_colors.scss +279 -277
  362. package/dist/theme/_theme.scss +308 -37
  363. package/dist/theme/isColorScheme.d.ts +16 -0
  364. package/dist/theme/isColorScheme.js +19 -0
  365. package/dist/theme/isColorScheme.js.map +1 -0
  366. package/dist/theme/types.d.ts +53 -1
  367. package/dist/theme/types.js +1 -23
  368. package/dist/theme/types.js.map +1 -1
  369. package/dist/theme/useCSSVariables.d.ts +2 -19
  370. package/dist/theme/useCSSVariables.js.map +1 -1
  371. package/dist/theme/useColorScheme.d.ts +1 -35
  372. package/dist/theme/useColorScheme.js.map +1 -1
  373. package/dist/theme/useColorSchemeMetaTag.d.ts +1 -1
  374. package/dist/theme/useColorSchemeMetaTag.js.map +1 -1
  375. package/dist/theme/useColorSchemeProvider.d.ts +1 -1
  376. package/dist/theme/useColorSchemeProvider.js +1 -1
  377. package/dist/theme/useColorSchemeProvider.js.map +1 -1
  378. package/dist/theme/{usePrefersColorScheme.js → usePrefersDarkScheme.js} +1 -1
  379. package/dist/theme/usePrefersDarkScheme.js.map +1 -0
  380. package/dist/theme/utils.js.map +1 -1
  381. package/dist/tooltip/useTooltip.d.ts +14 -9
  382. package/dist/tooltip/useTooltip.js +2 -1
  383. package/dist/tooltip/useTooltip.js.map +1 -1
  384. package/dist/transition/_transition.scss +16 -9
  385. package/dist/transition/skeletonPlaceholderUtils.js.map +1 -1
  386. package/dist/transition/types.d.ts +1 -1
  387. package/dist/transition/types.js.map +1 -1
  388. package/dist/transition/useCarousel.d.ts +3 -3
  389. package/dist/transition/useCarousel.js.map +1 -1
  390. package/dist/transition/useCollapseTransition.js.map +1 -1
  391. package/dist/transition/useTransition.js +1 -0
  392. package/dist/transition/useTransition.js.map +1 -1
  393. package/dist/transition/utils.js.map +1 -1
  394. package/dist/tree/TreeItem.d.ts +2 -1
  395. package/dist/tree/TreeItem.js +4 -3
  396. package/dist/tree/TreeItem.js.map +1 -1
  397. package/dist/tree/TreeItemExpander.js.map +1 -1
  398. package/dist/tree/_tree.scss +8 -6
  399. package/dist/tree/useTreeExpansion.d.ts +1 -1
  400. package/dist/tree/useTreeExpansion.js +6 -18
  401. package/dist/tree/useTreeExpansion.js.map +1 -1
  402. package/dist/tree/useTreeSelection.d.ts +1 -1
  403. package/dist/tree/useTreeSelection.js +7 -25
  404. package/dist/tree/useTreeSelection.js.map +1 -1
  405. package/dist/tree/utils.d.ts +1 -1
  406. package/dist/tree/utils.js.map +1 -1
  407. package/dist/types.d.ts +12 -4
  408. package/dist/types.js.map +1 -1
  409. package/dist/typography/WritingDirectionProvider.d.ts +1 -1
  410. package/dist/typography/WritingDirectionProvider.js.map +1 -1
  411. package/dist/typography/_typography.scss +94 -37
  412. package/dist/typography/typographyStyles.js.map +1 -1
  413. package/dist/useDebouncedFunction.d.ts +1 -5
  414. package/dist/useDebouncedFunction.js +3 -1
  415. package/dist/useDebouncedFunction.js.map +1 -1
  416. package/dist/useDropzone.d.ts +4 -4
  417. package/dist/useDropzone.js.map +1 -1
  418. package/dist/useEnsuredId.js.map +1 -1
  419. package/dist/useIntersectionObserver.d.ts +5 -5
  420. package/dist/useIntersectionObserver.js.map +1 -1
  421. package/dist/useLocalStorage.d.ts +3 -3
  422. package/dist/useLocalStorage.js +1 -1
  423. package/dist/useLocalStorage.js.map +1 -1
  424. package/dist/useMutationObserver.d.ts +1 -1
  425. package/dist/useMutationObserver.js.map +1 -1
  426. package/dist/useOrientation.js +3 -1
  427. package/dist/useOrientation.js.map +1 -1
  428. package/dist/usePageInactive.d.ts +2 -2
  429. package/dist/usePageInactive.js.map +1 -1
  430. package/dist/useReadonlySet.d.ts +76 -0
  431. package/dist/useReadonlySet.js +72 -0
  432. package/dist/useReadonlySet.js.map +1 -0
  433. package/dist/useResizeListener.d.ts +1 -1
  434. package/dist/useResizeListener.js.map +1 -1
  435. package/dist/useThrottledFunction.d.ts +1 -5
  436. package/dist/useThrottledFunction.js +3 -1
  437. package/dist/useThrottledFunction.js.map +1 -1
  438. package/dist/useToggle.d.ts +3 -3
  439. package/dist/useToggle.js.map +1 -1
  440. package/dist/utils/RenderRecursively.d.ts +1 -1
  441. package/dist/utils/RenderRecursively.js.map +1 -1
  442. package/dist/utils/alphaNumericSort.d.ts +1 -1
  443. package/dist/utils/alphaNumericSort.js.map +1 -1
  444. package/dist/utils/bem.js.map +1 -1
  445. package/dist/utils/debounce.d.ts +5 -0
  446. package/dist/utils/debounce.js +17 -0
  447. package/dist/utils/debounce.js.map +1 -0
  448. package/dist/utils/nearest.js.map +1 -1
  449. package/dist/utils/parseCssLengthUnit.js.map +1 -1
  450. package/dist/utils/throttle.d.ts +5 -0
  451. package/dist/utils/throttle.js +30 -0
  452. package/dist/utils/throttle.js.map +1 -0
  453. package/dist/utils/wait.js +3 -1
  454. package/dist/utils/wait.js.map +1 -1
  455. package/dist/window-splitter/WindowSplitter.d.ts +37 -15
  456. package/dist/window-splitter/WindowSplitter.js +38 -17
  457. package/dist/window-splitter/WindowSplitter.js.map +1 -1
  458. package/dist/window-splitter/_window-splitter.scss +32 -14
  459. package/dist/window-splitter/styles.d.ts +14 -0
  460. package/dist/window-splitter/styles.js +18 -0
  461. package/dist/window-splitter/styles.js.map +1 -0
  462. package/package.json +24 -23
  463. package/src/app-bar/AppBar.tsx +1 -170
  464. package/src/app-bar/AppBarTitle.tsx +1 -44
  465. package/src/app-bar/styles.ts +206 -0
  466. package/src/autocomplete/Autocomplete.tsx +194 -211
  467. package/src/autocomplete/AutocompleteChip.tsx +48 -0
  468. package/src/autocomplete/AutocompleteCircularProgress.tsx +6 -17
  469. package/src/autocomplete/AutocompleteClearButton.tsx +44 -0
  470. package/src/autocomplete/AutocompleteDropdownButton.tsx +16 -37
  471. package/src/autocomplete/AutocompleteListboxChildren.tsx +68 -0
  472. package/src/autocomplete/autocompleteStyles.ts +48 -9
  473. package/src/autocomplete/defaults.ts +26 -17
  474. package/src/autocomplete/types.ts +744 -61
  475. package/src/autocomplete/useAutocomplete.ts +428 -0
  476. package/src/autocomplete/utils.ts +211 -0
  477. package/src/badge/Badge.tsx +1 -39
  478. package/src/badge/styles.ts +45 -0
  479. package/src/box/Box.tsx +11 -9
  480. package/src/box/styles.ts +14 -5
  481. package/src/button/AsyncButton.tsx +1 -1
  482. package/src/button/Button.tsx +5 -1
  483. package/src/card/Card.tsx +35 -4
  484. package/src/card/ClickableCard.tsx +9 -2
  485. package/src/card/styles.ts +1 -10
  486. package/src/chip/Chip.tsx +6 -1
  487. package/src/chip/styles.ts +12 -10
  488. package/src/delegateEvent.ts +5 -5
  489. package/src/dialog/Dialog.tsx +48 -61
  490. package/src/dialog/FixedDialog.tsx +1 -11
  491. package/src/dialog/styles.ts +97 -0
  492. package/src/divider/Divider.tsx +0 -12
  493. package/src/divider/styles.ts +12 -0
  494. package/src/draggable/useDraggable.ts +17 -10
  495. package/src/draggable/utils.ts +3 -3
  496. package/src/expansion-panel/ExpansionPanel.tsx +1 -1
  497. package/src/expansion-panel/useExpansionPanels.ts +18 -27
  498. package/src/{form → files}/FileInput.tsx +7 -15
  499. package/src/files/styles.ts +10 -0
  500. package/src/{form → files}/useFileUpload.ts +30 -34
  501. package/src/files/utils.ts +234 -0
  502. package/src/{form/fileUtils.ts → files/validation.ts} +13 -242
  503. package/src/focus/useFocusContainer.ts +16 -8
  504. package/src/form/FormMessageContainer.tsx +2 -2
  505. package/src/form/InputToggle.tsx +5 -1
  506. package/src/form/Label.tsx +18 -18
  507. package/src/form/Listbox.tsx +87 -0
  508. package/src/form/ListboxProvider.ts +37 -0
  509. package/src/form/MenuItemTextField.tsx +1 -2
  510. package/src/form/NativeSelect.tsx +14 -10
  511. package/src/form/Option.tsx +74 -22
  512. package/src/form/Select.tsx +89 -85
  513. package/src/form/Slider.tsx +14 -11
  514. package/src/form/SliderThumb.tsx +4 -4
  515. package/src/form/SliderValueMarks.tsx +4 -4
  516. package/src/form/TextArea.tsx +6 -8
  517. package/src/form/TextField.tsx +0 -2
  518. package/src/form/TextFieldContainer.tsx +9 -11
  519. package/src/form/formMessageContainerStyles.ts +22 -0
  520. package/src/form/optionStyles.ts +7 -2
  521. package/src/form/sliderUtils.ts +1 -1
  522. package/src/form/textFieldContainerStyles.ts +9 -14
  523. package/src/form/types.ts +3 -11
  524. package/src/form/useCheckboxGroup.ts +28 -36
  525. package/src/form/useCombobox.ts +86 -38
  526. package/src/form/useEditableCombobox.ts +43 -8
  527. package/src/form/useRadioGroup.ts +6 -6
  528. package/src/form/useSelectCombobox.ts +4 -4
  529. package/src/form/useTextField.ts +1 -1
  530. package/src/hoverMode/useHoverMode.ts +3 -3
  531. package/src/hoverMode/useHoverModeProvider.ts +4 -4
  532. package/src/icon/iconConfig.tsx +12 -0
  533. package/src/interaction/UserInteractionModeProvider.tsx +12 -8
  534. package/src/interaction/types.ts +21 -2
  535. package/src/interaction/useElementInteraction.tsx +9 -2
  536. package/src/interaction/utils.ts +7 -7
  537. package/src/layout/useExpandableLayout.ts +3 -3
  538. package/src/layout/useLayoutAppBarHeight.ts +3 -4
  539. package/src/layout/useTemporaryLayout.ts +2 -2
  540. package/src/list/ListItem.tsx +5 -1
  541. package/src/list/ListItemLink.tsx +5 -1
  542. package/src/media-queries/useMediaQuery.ts +2 -1
  543. package/src/menu/Menu.tsx +11 -3
  544. package/src/menu/MenuItemButton.tsx +7 -1
  545. package/src/menu/useContextMenu.ts +3 -3
  546. package/src/movement/types.ts +5 -5
  547. package/src/navigation/CollapsibleNavGroup.tsx +16 -8
  548. package/src/navigation/DefaultNavigationRenderer.tsx +8 -6
  549. package/src/navigation/NavItemButton.tsx +2 -1
  550. package/src/navigation/NavItemLink.tsx +11 -3
  551. package/src/navigation/NavSubheader.tsx +1 -1
  552. package/src/navigation/Navigation.tsx +1 -1
  553. package/src/navigation/types.ts +60 -10
  554. package/src/navigation/useActiveHeadingId.ts +1 -1
  555. package/src/navigation/useNavigationExpansion.ts +170 -0
  556. package/src/navigation/utils.ts +47 -0
  557. package/src/objectFit.ts +88 -0
  558. package/src/positioning/useFixedPositioning.ts +34 -11
  559. package/src/responsive-item/ResponsiveItem.tsx +96 -0
  560. package/src/responsive-item/ResponsiveItemOverlay.tsx +6 -46
  561. package/src/responsive-item/responsiveItemOverlayStyles.ts +46 -0
  562. package/src/responsive-item/responsiveItemStyles.ts +81 -0
  563. package/src/scroll/useScrollLock.ts +6 -0
  564. package/src/searching/utils.ts +3 -3
  565. package/src/segmented-button/SegmentedButton.tsx +5 -1
  566. package/src/snackbar/ToastManager.tsx +16 -5
  567. package/src/snackbar/useCurrentToastActions.ts +5 -5
  568. package/src/table/tableCellStyles.ts +10 -6
  569. package/src/tabs/Tab.tsx +4 -1
  570. package/src/tabs/TabList.tsx +2 -2
  571. package/src/tabs/TabListScrollButton.tsx +4 -4
  572. package/src/tabs/getTabListScrollToOptions.ts +37 -0
  573. package/src/tabs/tabStyles.ts +4 -0
  574. package/src/tabs/useTabList.ts +2 -9
  575. package/src/tabs/useTabs.ts +6 -6
  576. package/src/tabs/utils.ts +0 -38
  577. package/src/test-utils/matchMedia.ts +5 -5
  578. package/src/test-utils/polyfills/TextDecoder.ts +0 -1
  579. package/src/test-utils/timers.ts +10 -7
  580. package/src/theme/LocalStorageColorSchemeProvider.tsx +4 -4
  581. package/src/theme/ThemeProvider.tsx +3 -3
  582. package/src/theme/isColorScheme.ts +22 -0
  583. package/src/theme/types.ts +67 -1
  584. package/src/theme/useCSSVariables.ts +7 -30
  585. package/src/theme/useColorScheme.ts +1 -40
  586. package/src/theme/useColorSchemeMetaTag.ts +1 -1
  587. package/src/theme/useColorSchemeProvider.ts +2 -2
  588. package/src/tooltip/useTooltip.ts +17 -9
  589. package/src/transition/types.ts +1 -1
  590. package/src/transition/useCarousel.ts +3 -3
  591. package/src/transition/useTransition.ts +1 -0
  592. package/src/tree/TreeItem.tsx +7 -1
  593. package/src/tree/TreeItemExpander.tsx +1 -1
  594. package/src/tree/useTreeExpansion.ts +7 -25
  595. package/src/tree/useTreeSelection.ts +8 -32
  596. package/src/tree/utils.ts +6 -2
  597. package/src/types.ts +20 -4
  598. package/src/typography/WritingDirectionProvider.tsx +1 -1
  599. package/src/useDebouncedFunction.ts +4 -9
  600. package/src/useDropzone.ts +4 -4
  601. package/src/useIntersectionObserver.ts +5 -5
  602. package/src/useLocalStorage.ts +6 -6
  603. package/src/useMutationObserver.ts +1 -1
  604. package/src/useOrientation.ts +3 -1
  605. package/src/usePageInactive.ts +2 -2
  606. package/src/useReadonlySet.ts +122 -0
  607. package/src/useResizeListener.ts +1 -1
  608. package/src/useThrottledFunction.ts +6 -9
  609. package/src/useToggle.ts +3 -3
  610. package/src/utils/RenderRecursively.tsx +1 -1
  611. package/src/utils/alphaNumericSort.ts +1 -1
  612. package/src/utils/debounce.ts +22 -0
  613. package/src/utils/throttle.ts +38 -0
  614. package/src/utils/wait.ts +5 -1
  615. package/src/window-splitter/WindowSplitter.tsx +38 -43
  616. package/src/window-splitter/styles.ts +42 -0
  617. package/dist/autocomplete/FilterAutocompleteOptions.d.ts +0 -8
  618. package/dist/autocomplete/FilterAutocompleteOptions.js +0 -57
  619. package/dist/autocomplete/FilterAutocompleteOptions.js.map +0 -1
  620. package/dist/dialog/DialogContainer.d.ts +0 -14
  621. package/dist/dialog/DialogContainer.js +0 -20
  622. package/dist/dialog/DialogContainer.js.map +0 -1
  623. package/dist/form/FileInput.js.map +0 -1
  624. package/dist/form/fileUtils.js.map +0 -1
  625. package/dist/form/useFileUpload.js.map +0 -1
  626. package/dist/form/useListboxProvider.d.ts +0 -31
  627. package/dist/form/useListboxProvider.js.map +0 -1
  628. package/dist/navigation/getHrefFromParents.d.ts +0 -5
  629. package/dist/navigation/getHrefFromParents.js +0 -13
  630. package/dist/navigation/getHrefFromParents.js.map +0 -1
  631. package/dist/responsive-item/ResponsiveItemContainer.d.ts +0 -115
  632. package/dist/responsive-item/ResponsiveItemContainer.js +0 -80
  633. package/dist/responsive-item/ResponsiveItemContainer.js.map +0 -1
  634. package/dist/responsive-item/styles.d.ts +0 -34
  635. package/dist/responsive-item/styles.js +0 -17
  636. package/dist/responsive-item/styles.js.map +0 -1
  637. package/dist/theme/usePrefersColorScheme.js.map +0 -1
  638. package/src/autocomplete/FilterAutocompleteOptions.tsx +0 -86
  639. package/src/dialog/DialogContainer.tsx +0 -28
  640. package/src/form/useListboxProvider.ts +0 -45
  641. package/src/navigation/getHrefFromParents.ts +0 -15
  642. package/src/responsive-item/ResponsiveItemContainer.tsx +0 -174
  643. package/src/responsive-item/styles.ts +0 -58
  644. /package/dist/theme/{usePrefersColorScheme.d.ts → usePrefersDarkScheme.d.ts} +0 -0
  645. /package/src/theme/{usePrefersColorScheme.ts → usePrefersDarkScheme.ts} +0 -0
@@ -0,0 +1,428 @@
1
+ "use client";
2
+ import { useCallback, useMemo, useRef } from "react";
3
+ import { useEditableCombobox } from "../form/useEditableCombobox.js";
4
+ import {
5
+ triggerManualChangeEvent,
6
+ type EditableHTMLElement,
7
+ } from "../form/utils.js";
8
+ import { getIcon } from "../icon/iconConfig.js";
9
+ import { useUserInteractionMode } from "../interaction/UserInteractionModeProvider.js";
10
+ import { TRANSITION_CONFIG } from "../transition/config.js";
11
+ import { type TransitionEnterHandler } from "../transition/types.js";
12
+ import { useEnsuredState } from "../useEnsuredState.js";
13
+ import {
14
+ defaultAutocompleteExtractor,
15
+ defaultAutocompleteFilter,
16
+ defaultAutocompleteGetOptionProps,
17
+ noopAutocompleteFilter,
18
+ } from "./defaults.js";
19
+ import {
20
+ type AutocompleteImplementation,
21
+ type AutocompleteMultiSelectImplementation,
22
+ type AutocompleteMultiSelectOptions,
23
+ type AutocompleteOption,
24
+ type AutocompleteOptions,
25
+ type AutocompleteSingleSelectImplementation,
26
+ type AutocompleteSingleSelectOptions,
27
+ } from "./types.js";
28
+ import {
29
+ enforceSelectedValue,
30
+ getDefaultQuery,
31
+ getDefaultValue,
32
+ isMultipleValues,
33
+ } from "./utils.js";
34
+
35
+ const noop = (): void => {
36
+ // do nothing
37
+ };
38
+
39
+ /**
40
+ * This is the single select autocomplete implementation.
41
+ *
42
+ * @since 6.0.0
43
+ */
44
+ export function useAutocomplete<
45
+ Option extends AutocompleteOption,
46
+ ComboboxEl extends EditableHTMLElement = HTMLInputElement,
47
+ PopupEl extends HTMLElement = HTMLElement,
48
+ >(
49
+ options: AutocompleteSingleSelectOptions<Option, ComboboxEl, PopupEl>
50
+ ): AutocompleteSingleSelectImplementation<Option, ComboboxEl, PopupEl>;
51
+ /**
52
+ * This is the multiselect autocomplete implementation.
53
+ *
54
+ * @since 6.0.0
55
+ */
56
+ export function useAutocomplete<
57
+ Option extends AutocompleteOption,
58
+ ComboboxEl extends EditableHTMLElement = HTMLInputElement,
59
+ PopupEl extends HTMLElement = HTMLElement,
60
+ >(
61
+ options: AutocompleteMultiSelectOptions<Option, ComboboxEl, PopupEl>
62
+ ): AutocompleteMultiSelectImplementation<Option, ComboboxEl, PopupEl>;
63
+ /**
64
+ * This is an internal override implementation where the types are less strict
65
+ * so it can be used with the `Autocomplete` component.
66
+ *
67
+ * @since 6.0.0
68
+ * @internal
69
+ */
70
+ export function useAutocomplete<
71
+ Option extends AutocompleteOption,
72
+ ComboboxEl extends EditableHTMLElement = HTMLInputElement,
73
+ PopupEl extends HTMLElement = HTMLElement,
74
+ >(
75
+ options: AutocompleteOptions<Option, ComboboxEl, PopupEl>
76
+ ): AutocompleteImplementation<Option, ComboboxEl, PopupEl>;
77
+ /**
78
+ * @since 6.0.0
79
+ * @internal
80
+ */
81
+ export function useAutocomplete<
82
+ Option extends AutocompleteOption,
83
+ ComboboxEl extends EditableHTMLElement = HTMLInputElement,
84
+ PopupEl extends HTMLElement = HTMLElement,
85
+ >(
86
+ options: AutocompleteOptions<Option, ComboboxEl, PopupEl>
87
+ ): AutocompleteImplementation<Option, ComboboxEl, PopupEl> {
88
+ const {
89
+ value: propValue,
90
+ setValue: propSetValue,
91
+ defaultValue,
92
+ onValueChange = noop,
93
+ query: propQuery,
94
+ setQuery: propSetQuery,
95
+ defaultQuery,
96
+ options: values,
97
+ getOptionLabel = defaultAutocompleteExtractor,
98
+ getOptionProps = defaultAutocompleteGetOptionProps,
99
+ onBlur = noop,
100
+ onChange = noop,
101
+ onOpen = noop,
102
+ filter = defaultAutocompleteFilter,
103
+ filterSelected,
104
+ allowAnyValue = filter === noopAutocompleteFilter,
105
+ multiselect: propMultiselect,
106
+ checkboxes,
107
+ selectedIcon: propSelectedIcon,
108
+ unselectedIcon: propUnselectedIcon,
109
+ selectedIconAfter,
110
+ disableSelectedIcon: propDisableSelectedIcon,
111
+ updateQueryOnSelect: propUpdateQueryOnSelect,
112
+ disableCloseOnSelect: propDisableCloseOnSelect,
113
+ ...comboboxOptions
114
+ } = options;
115
+
116
+ const mode = useUserInteractionMode();
117
+ const [value, setValueState] = useEnsuredState({
118
+ value: propValue,
119
+ setValue: propSetValue,
120
+ defaultValue: getDefaultValue({
121
+ query: propQuery,
122
+ filter,
123
+ multiselect: propMultiselect,
124
+ defaultQuery,
125
+ defaultValue,
126
+ options: values,
127
+ getOptionLabel,
128
+ }),
129
+ });
130
+ const multiselect =
131
+ propMultiselect ??
132
+ (!!value && typeof value === "object" && "length" in value);
133
+ let updateQueryOnSelect = propUpdateQueryOnSelect;
134
+ if (typeof propUpdateQueryOnSelect === "undefined") {
135
+ updateQueryOnSelect = multiselect ? "clear" : "selected";
136
+ }
137
+
138
+ const disableCloseOnSelect =
139
+ propDisableCloseOnSelect ?? (multiselect && checkboxes);
140
+
141
+ const [query, setQuery] = useEnsuredState({
142
+ value: propQuery,
143
+ setValue: propSetQuery,
144
+ defaultValue: getDefaultQuery({
145
+ value,
146
+ getOptionLabel,
147
+ defaultQuery,
148
+ }),
149
+ });
150
+ const setValue = useCallback(
151
+ (value: Option | null | readonly Option[]) => {
152
+ onValueChange(value);
153
+ setValueState(value);
154
+ },
155
+ [onValueChange, setValueState]
156
+ );
157
+
158
+ const combobox = useEditableCombobox<ComboboxEl, PopupEl>({
159
+ ...comboboxOptions,
160
+ multiselect,
161
+ });
162
+ const {
163
+ visible,
164
+ setVisible,
165
+ popupRef,
166
+ comboboxRef,
167
+ comboboxProps,
168
+ getMenuProps,
169
+ } = combobox;
170
+
171
+ // These refs are used to make it so that the options are not filtered until
172
+ // the user types a new query while the listbox is visible. The filtered
173
+ // options will be "cached" while:
174
+ // - the listbox is closing
175
+ // - the listbox is opening and:
176
+ // - the user has not typed at least one letter
177
+ // - the options have not changed
178
+ const entered = useRef(visible);
179
+ const initialQuery = useRef("");
180
+ const prevAvailableOptions = useRef<readonly Option[] | null>(null);
181
+ const isQueryChange =
182
+ query && query !== initialQuery.current && entered.current;
183
+
184
+ let availableOptions = prevAvailableOptions.current || values;
185
+ if (
186
+ isQueryChange &&
187
+ filter !== noopAutocompleteFilter &&
188
+ !prevAvailableOptions.current
189
+ ) {
190
+ initialQuery.current = "";
191
+ availableOptions = filter({
192
+ list: values,
193
+ query,
194
+ extractor: getOptionLabel,
195
+ });
196
+ }
197
+
198
+ // This is probably overkill, but `filterSelected` will create a quick-lookup
199
+ // for all the selected values in a `Set` since it is much faster than
200
+ // `Array.includes()`. The lookup will only be re-created whenever the `value`
201
+ // changes or is uninitialized to prevent it being created each render as
202
+ // well.
203
+ //
204
+ // These optimizations only start mattering when there are around 5000 items
205
+ // selected...
206
+ const selectedOptions = useMemo(() => {
207
+ if (!filterSelected) {
208
+ return null;
209
+ }
210
+
211
+ let optionList: readonly Option[] = [];
212
+ if (isMultipleValues(value)) {
213
+ optionList = value;
214
+ } else if (value) {
215
+ optionList = [value];
216
+ }
217
+
218
+ return new Set(optionList);
219
+ }, [filterSelected, value]);
220
+
221
+ if (filterSelected && selectedOptions?.size) {
222
+ availableOptions = availableOptions.filter(
223
+ (option) => !selectedOptions.has(option)
224
+ );
225
+ }
226
+
227
+ return {
228
+ ...combobox,
229
+ value,
230
+ setValue,
231
+ query,
232
+ setQuery,
233
+ availableOptions,
234
+ multiselect,
235
+ comboboxProps: {
236
+ ...comboboxProps,
237
+ "aria-autocomplete": "list",
238
+ value: query,
239
+ onKeyDown(event) {
240
+ comboboxProps.onKeyDown(event);
241
+ if (!visible && event.key === "Escape") {
242
+ setQuery("");
243
+ }
244
+ },
245
+ onBlur(event) {
246
+ onBlur(event);
247
+
248
+ if (allowAnyValue) {
249
+ return;
250
+ }
251
+
252
+ enforceSelectedValue({
253
+ value,
254
+ visible,
255
+ popupRef,
256
+ container: event.currentTarget.parentElement,
257
+ comboboxRef,
258
+ getOptionLabel,
259
+ availableOptions,
260
+ prevAvailableOptions,
261
+ });
262
+ },
263
+ onFocus(event) {
264
+ comboboxProps.onFocus(event);
265
+ event.currentTarget.select();
266
+ },
267
+ onChange(event) {
268
+ onChange(event);
269
+
270
+ const { value } = event.currentTarget;
271
+ setQuery(value);
272
+ if (!value && !multiselect) {
273
+ setValue(null);
274
+ }
275
+ },
276
+ },
277
+ getListboxProps(overrides) {
278
+ const {
279
+ ref,
280
+ onEnter,
281
+ onEntered,
282
+ onExited,
283
+ disableTransition,
284
+ ...listboxProps
285
+ } = getMenuProps(overrides);
286
+
287
+ const isTransitionCompleteSkipped =
288
+ !disableTransition && !TRANSITION_CONFIG.disabled;
289
+
290
+ const handleEntering =
291
+ (callback: TransitionEnterHandler = noop, skipped: boolean) =>
292
+ (appearing: boolean) => {
293
+ callback(appearing);
294
+
295
+ if (skipped) {
296
+ return;
297
+ }
298
+
299
+ onOpen();
300
+
301
+ // when the listbox is opened, need to flag the entered state to show
302
+ // that new `query` values should be accepted. Also store the initial
303
+ // query.
304
+ entered.current = true;
305
+ initialQuery.current = query;
306
+ };
307
+
308
+ let selectedIcon = propSelectedIcon;
309
+ let unselectedIcon = propUnselectedIcon;
310
+ let disableSelectedIcon = propDisableSelectedIcon;
311
+ if (multiselect && checkboxes) {
312
+ if (typeof selectedIcon === "undefined") {
313
+ selectedIcon = getIcon("checkboxChecked");
314
+ }
315
+ if (typeof unselectedIcon === "undefined") {
316
+ unselectedIcon = getIcon("checkbox");
317
+ }
318
+ } else if (typeof disableSelectedIcon === "undefined") {
319
+ disableSelectedIcon = true;
320
+ }
321
+
322
+ return {
323
+ selectedIcon,
324
+ unselectedIcon,
325
+ selectedIconAfter,
326
+ disableSelectedIcon,
327
+ ...listboxProps,
328
+ disableTransition,
329
+ onRequestClose() {
330
+ // Make it so clicking on the text field, clear button, dropdown
331
+ // button, etc does not close the listbox
332
+ if (
333
+ mode !== "keyboard" &&
334
+ comboboxRef.current?.parentElement?.contains(document.activeElement)
335
+ ) {
336
+ return;
337
+ }
338
+
339
+ listboxProps.onRequestClose();
340
+ },
341
+ nodeRef: ref,
342
+ value,
343
+ setValue(option) {
344
+ if (!disableCloseOnSelect) {
345
+ // this makes it so that the options are not filtered again while the
346
+ // listbox is closing after selecting a value
347
+ prevAvailableOptions.current = availableOptions;
348
+ }
349
+
350
+ if (value && typeof value === "object" && "length" in value) {
351
+ const nextValue = [...value];
352
+ const i = value.indexOf(option);
353
+ if (i === -1) {
354
+ nextValue.push(option);
355
+ } else {
356
+ nextValue.splice(i, 1);
357
+ }
358
+
359
+ setValue(nextValue);
360
+ } else {
361
+ setValue(option);
362
+ }
363
+
364
+ if (updateQueryOnSelect === "as-is") {
365
+ return;
366
+ }
367
+
368
+ const nextQuery =
369
+ updateQueryOnSelect === "clear" ? "" : getOptionLabel(option);
370
+ triggerManualChangeEvent(comboboxRef.current, nextQuery);
371
+ },
372
+ onEnter: handleEntering(onEnter, false),
373
+ onEntered: handleEntering(onEntered, isTransitionCompleteSkipped),
374
+ onExited() {
375
+ onExited();
376
+
377
+ // once the listbox has exited, reset any cached states so the next
378
+ // time the listbox is opened the filtering behaves the same
379
+ entered.current = false;
380
+ prevAvailableOptions.current = null;
381
+ },
382
+ };
383
+ },
384
+ getOptionLabel,
385
+ getOptionProps(options) {
386
+ const overrides = getOptionProps(options);
387
+
388
+ return {
389
+ ...overrides,
390
+ onClick: (event) => {
391
+ overrides?.onClick?.(event);
392
+ if (disableCloseOnSelect) {
393
+ event.stopPropagation();
394
+ }
395
+ },
396
+ };
397
+ },
398
+ getClearButtonProps(overrides) {
399
+ return {
400
+ ...overrides,
401
+ onClick(event) {
402
+ overrides?.onClick?.(event);
403
+ comboboxRef.current?.focus();
404
+
405
+ if (!multiselect) {
406
+ setValue(null);
407
+ }
408
+ triggerManualChangeEvent(comboboxRef.current, "");
409
+ },
410
+ };
411
+ },
412
+ getDropdownButtonProps(overrides) {
413
+ return {
414
+ "aria-controls": comboboxProps.id,
415
+ visible,
416
+ ...overrides,
417
+ onClick(event) {
418
+ overrides?.onClick?.(event);
419
+ comboboxRef.current?.focus();
420
+ if (visible) {
421
+ prevAvailableOptions.current = availableOptions;
422
+ }
423
+ setVisible((prev) => !prev);
424
+ },
425
+ };
426
+ },
427
+ };
428
+ }
@@ -0,0 +1,211 @@
1
+ import { type RefObject } from "react";
2
+ import {
3
+ type EditableHTMLElement,
4
+ triggerManualChangeEvent,
5
+ } from "../form/utils.js";
6
+ import { type NonNullMutableRef, type UseStateInitializer } from "../types.js";
7
+ import { noopAutocompleteFilter } from "./defaults.js";
8
+ import {
9
+ type AutocompleteFilterOptions,
10
+ type AutocompleteGetOptionLabel,
11
+ type AutocompleteOption,
12
+ } from "./types.js";
13
+
14
+ /**
15
+ * @since 6.0.0
16
+ * @internal
17
+ */
18
+ export interface GetDefaultValueOptions<Option extends AutocompleteOption> {
19
+ query: string | undefined;
20
+ multiselect?: boolean;
21
+ defaultQuery: UseStateInitializer<string> | undefined;
22
+ defaultValue:
23
+ | UseStateInitializer<Option | null | readonly Option[]>
24
+ | undefined;
25
+ options: readonly Option[];
26
+ getOptionLabel: AutocompleteGetOptionLabel<Option>;
27
+ filter: (options: AutocompleteFilterOptions<Option>) => readonly Option[];
28
+ }
29
+
30
+ /**
31
+ * @since 6.0.0
32
+ * @internal
33
+ */
34
+ export function getDefaultValue<Option extends AutocompleteOption>(
35
+ options: GetDefaultValueOptions<Option>
36
+ ): UseStateInitializer<Option | null | readonly Option[]> {
37
+ const {
38
+ query,
39
+ filter,
40
+ multiselect,
41
+ defaultQuery,
42
+ defaultValue,
43
+ options: values,
44
+ getOptionLabel,
45
+ } = options;
46
+
47
+ if (typeof defaultValue !== "undefined") {
48
+ return defaultValue;
49
+ }
50
+
51
+ // do not support determining the default value for a multiselect
52
+ // autocomplete if only a query was provided.
53
+ if (multiselect) {
54
+ return [];
55
+ }
56
+
57
+ // do not support a default value out of the box for this case
58
+ if (filter === noopAutocompleteFilter) {
59
+ return null;
60
+ }
61
+
62
+ return () => {
63
+ let q = "";
64
+ if (query) {
65
+ q = query;
66
+ } else if (defaultQuery) {
67
+ q = defaultQuery instanceof Function ? defaultQuery() : defaultQuery;
68
+ }
69
+
70
+ if (!q) {
71
+ return null;
72
+ }
73
+
74
+ const filtered = filter({
75
+ list: values,
76
+ query: q,
77
+ extractor: getOptionLabel,
78
+ });
79
+
80
+ return filtered[0] ?? null;
81
+ };
82
+ }
83
+
84
+ /**
85
+ * @since 6.0.0
86
+ * @internal
87
+ */
88
+ interface GetDefaultQueryOptions<Option extends AutocompleteOption> {
89
+ value: Option | null | readonly Option[];
90
+ getOptionLabel: AutocompleteGetOptionLabel<Option>;
91
+ defaultQuery?: UseStateInitializer<string>;
92
+ }
93
+
94
+ /**
95
+ * @since 6.0.0
96
+ * @internal
97
+ */
98
+ export function getDefaultQuery<Option extends AutocompleteOption>(
99
+ options: GetDefaultQueryOptions<Option>
100
+ ): UseStateInitializer<string> {
101
+ const { value, getOptionLabel, defaultQuery } = options;
102
+
103
+ if (defaultQuery) {
104
+ return defaultQuery;
105
+ }
106
+
107
+ return () => {
108
+ if (typeof value === "string") {
109
+ return value;
110
+ }
111
+
112
+ if (value && typeof value === "object" && !("length" in value)) {
113
+ return getOptionLabel(value);
114
+ }
115
+
116
+ return "";
117
+ };
118
+ }
119
+
120
+ /**
121
+ * @since 6.0.0
122
+ * @internal
123
+ */
124
+ export interface EnforceSelectedValueOptions<
125
+ Option extends AutocompleteOption,
126
+ > {
127
+ value: Option | readonly Option[] | null;
128
+ visible: boolean;
129
+ container: HTMLElement | null;
130
+ popupRef: RefObject<HTMLElement>;
131
+ comboboxRef: RefObject<EditableHTMLElement>;
132
+ getOptionLabel: AutocompleteGetOptionLabel<Option>;
133
+ availableOptions: readonly Option[];
134
+ prevAvailableOptions: NonNullMutableRef<readonly Option[] | null>;
135
+ }
136
+
137
+ /**
138
+ * This enforces that if the user clicks away, touches somewhere else on the
139
+ * page, tabs to the next element, or focuses another element programmatically
140
+ * the autocomplete will set the `value` back to the previous selected value if
141
+ * there was one. i.e.
142
+ *
143
+ * Case 1:
144
+ * - User selects "Apple"
145
+ * - User hits backspace twice. Input displays "App"
146
+ * - User clicks somewhere else on the page
147
+ * - Input now displays "Apple" again
148
+ *
149
+ * Case 2:
150
+ * - User selects "Apple"
151
+ * - User clears the input
152
+ * - User types "app"
153
+ * - User clicks somewhere else on the page
154
+ * - Input now displays "" and the value is set to `null`
155
+ *
156
+ * NOTE: This mutates the {@link EnforceSelectedValueOptions.prevAvailableOptions}
157
+ *
158
+ * @since 6.0.0
159
+ * @internal
160
+ */
161
+ export function enforceSelectedValue<Option extends AutocompleteOption>(
162
+ options: EnforceSelectedValueOptions<Option>
163
+ ): void {
164
+ const {
165
+ value,
166
+ visible,
167
+ container,
168
+ popupRef,
169
+ comboboxRef,
170
+ getOptionLabel,
171
+ availableOptions,
172
+ prevAvailableOptions,
173
+ } = options;
174
+
175
+ if (!container) {
176
+ return;
177
+ }
178
+
179
+ window.requestAnimationFrame(() => {
180
+ if (
181
+ container.contains(document.activeElement) ||
182
+ popupRef.current?.contains(document.activeElement)
183
+ ) {
184
+ return;
185
+ }
186
+
187
+ if (visible) {
188
+ // this makes it so that the options are not filtered again while closing
189
+ prevAvailableOptions.current = availableOptions;
190
+ }
191
+
192
+ let label = "";
193
+ if (typeof value === "string") {
194
+ label = value;
195
+ } else if (typeof value === "object" && value && !("length" in value)) {
196
+ label = getOptionLabel(value);
197
+ }
198
+
199
+ triggerManualChangeEvent(comboboxRef.current, label);
200
+ });
201
+ }
202
+
203
+ /**
204
+ * @since 6.0.0
205
+ * @internal
206
+ */
207
+ export function isMultipleValues<Option extends AutocompleteOption>(
208
+ value: Option | null | readonly Option[]
209
+ ): value is readonly Option[] {
210
+ return !!value && typeof value === "object" && "length" in value;
211
+ }
@@ -1,43 +1,5 @@
1
- import { cnb } from "cnbuilder";
2
1
  import { forwardRef, type HTMLAttributes, type ReactNode } from "react";
3
- import { cssUtils, type BackgroundColor } from "../cssUtils.js";
4
- import { bem } from "../utils/bem.js";
5
-
6
- declare module "react" {
7
- interface CSSProperties {
8
- "--rmd-badge-size"?: string | number;
9
- "--rmd-badge-offset"?: string | number;
10
- "--rmd-badge-offset-top"?: string | number;
11
- "--rmd-badge-offset-right"?: string | number;
12
- }
13
- }
14
-
15
- const styles = bem("rmd-badge");
16
-
17
- /**
18
- * @since 6.0.0 Renamed `"default"` to `"greyscale"` and added all
19
- * theme colors.
20
- */
21
- export type BadgeTheme = BackgroundColor | "greyscale" | "clear";
22
-
23
- export interface BadgeClassNameOptions {
24
- className?: string;
25
-
26
- /** @defaultValue `""greyscale` */
27
- theme?: BadgeTheme;
28
- }
29
-
30
- export function badge(options: BadgeClassNameOptions = {}): string {
31
- const { className, theme = "greyscale" } = options;
32
- const greyscale = theme === "greyscale";
33
- const clear = theme === "clear";
34
-
35
- return cnb(
36
- styles({ greyscale }),
37
- cssUtils({ backgroundColor: !clear && !greyscale ? theme : undefined }),
38
- className
39
- );
40
- }
2
+ import { badge, type BadgeTheme } from "./styles.js";
41
3
 
42
4
  export interface BadgeProps extends HTMLAttributes<HTMLSpanElement> {
43
5
  /** @defaultValue `"greyscale"` */