@react-md/core 6.3.4 → 6.5.0

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 (477) hide show
  1. package/dist/CoreProviders.d.ts +1 -0
  2. package/dist/CoreProviders.js.map +1 -1
  3. package/dist/_a11y.scss +3 -1
  4. package/dist/_base.scss +3 -0
  5. package/dist/_box-shadows.scss +20 -12
  6. package/dist/_core.scss +2 -1
  7. package/dist/_utils.scss +32 -10
  8. package/dist/app-bar/AppBar.js.map +1 -1
  9. package/dist/app-bar/AppBarTitle.js.map +1 -1
  10. package/dist/app-bar/_app-bar.scss +3 -3
  11. package/dist/autocomplete/AutocompleteListboxChildren.js.map +1 -1
  12. package/dist/autocomplete/_autocomplete.scss +20 -16
  13. package/dist/autocomplete/types.js.map +1 -1
  14. package/dist/autocomplete/utils.js.map +1 -1
  15. package/dist/avatar/Avatar.js.map +1 -1
  16. package/dist/avatar/_avatar.scss +2 -1
  17. package/dist/button/Button.js.map +1 -1
  18. package/dist/button/FloatingActionButton.js.map +1 -1
  19. package/dist/button/_button.scss +9 -5
  20. package/dist/card/Card.js.map +1 -1
  21. package/dist/card/CardContent.js.map +1 -1
  22. package/dist/card/ClickableCard.js.map +1 -1
  23. package/dist/card/_card.scss +6 -6
  24. package/dist/chip/Chip.js.map +1 -1
  25. package/dist/chip/_chip.scss +6 -6
  26. package/dist/datetime/NativeDateField.js.map +1 -1
  27. package/dist/datetime/NativeTimeField.js.map +1 -1
  28. package/dist/datetime/useDateField.js.map +1 -1
  29. package/dist/datetime/useTimeField.js.map +1 -1
  30. package/dist/dialog/Dialog.js.map +1 -1
  31. package/dist/dialog/DialogContainer.js.map +1 -1
  32. package/dist/dialog/DialogContent.js.map +1 -1
  33. package/dist/dialog/DialogFooter.js.map +1 -1
  34. package/dist/dialog/_dialog.scss +6 -6
  35. package/dist/divider/Divider.js.map +1 -1
  36. package/dist/divider/_divider.scss +6 -2
  37. package/dist/draggable/useDraggable.js.map +1 -1
  38. package/dist/draggable/utils.js.map +1 -1
  39. package/dist/expansion-panel/ExpansionPanelHeader.js.map +1 -1
  40. package/dist/files/FileInput.js.map +1 -1
  41. package/dist/files/useFileUpload.js.map +1 -1
  42. package/dist/files/validation.js.map +1 -1
  43. package/dist/focus/useFocusContainer.js.map +1 -1
  44. package/dist/form/Fieldset.d.ts +19 -0
  45. package/dist/form/Fieldset.js +22 -2
  46. package/dist/form/Fieldset.js.map +1 -1
  47. package/dist/form/FormMessageContainer.js.map +1 -1
  48. package/dist/form/FormMessageCounter.js.map +1 -1
  49. package/dist/form/InputToggle.js.map +1 -1
  50. package/dist/form/Legend.d.ts +27 -5
  51. package/dist/form/Legend.js +39 -6
  52. package/dist/form/Legend.js.map +1 -1
  53. package/dist/form/Listbox.js.map +1 -1
  54. package/dist/form/ListboxProvider.js.map +1 -1
  55. package/dist/form/NativeSelect.js.map +1 -1
  56. package/dist/form/Password.js.map +1 -1
  57. package/dist/form/ResizingTextAreaWrapper.js.map +1 -1
  58. package/dist/form/Select.d.ts +24 -0
  59. package/dist/form/Select.js +14 -3
  60. package/dist/form/Select.js.map +1 -1
  61. package/dist/form/SelectedOption.d.ts +1 -2
  62. package/dist/form/SelectedOption.js +2 -2
  63. package/dist/form/SelectedOption.js.map +1 -1
  64. package/dist/form/Slider.js.map +1 -1
  65. package/dist/form/SliderContainer.js.map +1 -1
  66. package/dist/form/SliderThumb.js.map +1 -1
  67. package/dist/form/SliderTrack.js.map +1 -1
  68. package/dist/form/SliderValueMarks.js.map +1 -1
  69. package/dist/form/Switch.js.map +1 -1
  70. package/dist/form/TextArea.js.map +1 -1
  71. package/dist/form/TextField.js.map +1 -1
  72. package/dist/form/TextFieldContainer.js.map +1 -1
  73. package/dist/form/_fieldset.scss +7 -0
  74. package/dist/form/_input-toggle.scss +6 -5
  75. package/dist/form/_label.scss +2 -2
  76. package/dist/form/_legend.scss +77 -0
  77. package/dist/form/_slider.scss +7 -5
  78. package/dist/form/_switch.scss +7 -5
  79. package/dist/form/_text-field.scss +52 -15
  80. package/dist/form/defaultGetSelectedOptionChildren.d.ts +1 -0
  81. package/dist/form/fieldsetStyles.d.ts +6 -1
  82. package/dist/form/fieldsetStyles.js +3 -2
  83. package/dist/form/fieldsetStyles.js.map +1 -1
  84. package/dist/form/getSelectedOptionChildren.d.ts +1 -0
  85. package/dist/form/inputToggleStyles.js.map +1 -1
  86. package/dist/form/labelStyles.d.ts +1 -1
  87. package/dist/form/labelStyles.js +1 -1
  88. package/dist/form/labelStyles.js.map +1 -1
  89. package/dist/form/legendStyles.d.ts +83 -0
  90. package/dist/form/legendStyles.js +25 -0
  91. package/dist/form/legendStyles.js.map +1 -0
  92. package/dist/form/selectUtils.js.map +1 -1
  93. package/dist/form/textFieldContainerStyles.js.map +1 -1
  94. package/dist/form/types.d.ts +28 -6
  95. package/dist/form/types.js.map +1 -1
  96. package/dist/form/useCheckboxGroup.js.map +1 -1
  97. package/dist/form/useCombobox.js.map +1 -1
  98. package/dist/form/useNumberField.js +16 -19
  99. package/dist/form/useNumberField.js.map +1 -1
  100. package/dist/form/useRangeSlider.js.map +1 -1
  101. package/dist/form/useSlider.js.map +1 -1
  102. package/dist/form/useTextField.js.map +1 -1
  103. package/dist/hoverMode/useHoverMode.js.map +1 -1
  104. package/dist/icon/FontIcon.js.map +1 -1
  105. package/dist/icon/IconRotator.js.map +1 -1
  106. package/dist/icon/MaterialIcon.js.map +1 -1
  107. package/dist/icon/MaterialSymbol.js.map +1 -1
  108. package/dist/icon/SVGIcon.js.map +1 -1
  109. package/dist/icon/config.d.ts +0 -1
  110. package/dist/icon/config.js +10 -7
  111. package/dist/icon/config.js.map +1 -1
  112. package/dist/icon/materialConfig.js.map +1 -1
  113. package/dist/icon/styles.js.map +1 -1
  114. package/dist/interaction/UserInteractionModeProvider.js +6 -4
  115. package/dist/interaction/UserInteractionModeProvider.js.map +1 -1
  116. package/dist/interaction/_interaction.scss +5 -3
  117. package/dist/interaction/types.js.map +1 -1
  118. package/dist/interaction/useElementInteraction.js.map +1 -1
  119. package/dist/layout/LayoutAppBar.d.ts +6 -6
  120. package/dist/layout/LayoutAppBar.js +6 -6
  121. package/dist/layout/LayoutAppBar.js.map +1 -1
  122. package/dist/layout/LayoutNav.js.map +1 -1
  123. package/dist/layout/LayoutWindowSplitter.js.map +1 -1
  124. package/dist/layout/Main.js.map +1 -1
  125. package/dist/layout/useExpandableLayout.js +43 -0
  126. package/dist/layout/useExpandableLayout.js.map +1 -1
  127. package/dist/layout/useHorizontalLayoutTransition.js.map +1 -1
  128. package/dist/layout/useLayoutTree.js.map +1 -1
  129. package/dist/layout/useLayoutWindowSplitter.js.map +1 -1
  130. package/dist/layout/useResizableLayout.js.map +1 -1
  131. package/dist/link/Link.js.map +1 -1
  132. package/dist/link/SkipToMainContent.js +19 -21
  133. package/dist/link/SkipToMainContent.js.map +1 -1
  134. package/dist/list/List.js.map +1 -1
  135. package/dist/list/ListItem.js.map +1 -1
  136. package/dist/list/ListItemAddon.js.map +1 -1
  137. package/dist/list/ListItemLink.js.map +1 -1
  138. package/dist/list/ListSubheader.js.map +1 -1
  139. package/dist/list/getListItemHeight.js.map +1 -1
  140. package/dist/list/listItemStyles.js.map +1 -1
  141. package/dist/list/types.js.map +1 -1
  142. package/dist/media-queries/AppSizeProvider.d.ts +2 -0
  143. package/dist/media-queries/AppSizeProvider.js +3 -2
  144. package/dist/media-queries/AppSizeProvider.js.map +1 -1
  145. package/dist/media-queries/appSize.d.ts +3 -0
  146. package/dist/media-queries/appSize.js +3 -1
  147. package/dist/media-queries/appSize.js.map +1 -1
  148. package/dist/media-queries/config.d.ts +11 -0
  149. package/dist/media-queries/config.js +26 -0
  150. package/dist/media-queries/config.js.map +1 -0
  151. package/dist/menu/DropdownMenu.js.map +1 -1
  152. package/dist/menu/Menu.js.map +1 -1
  153. package/dist/menu/MenuItemButton.js.map +1 -1
  154. package/dist/menu/MenuItemFileInput.js.map +1 -1
  155. package/dist/menu/MenuItemInputToggle.js.map +1 -1
  156. package/dist/menu/MenuItemSeparator.js.map +1 -1
  157. package/dist/menu/MenuVisibilityProvider.js.map +1 -1
  158. package/dist/menu/MenuWidget.js.map +1 -1
  159. package/dist/menu/useContextMenu.js.map +1 -1
  160. package/dist/movement/types.d.ts +28 -3
  161. package/dist/movement/types.js.map +1 -1
  162. package/dist/movement/useKeyboardMovementProvider.js +96 -47
  163. package/dist/movement/useKeyboardMovementProvider.js.map +1 -1
  164. package/dist/navigation/CollapsibleNavGroup.js.map +1 -1
  165. package/dist/navigation/NavItem.js.map +1 -1
  166. package/dist/navigation/NavItemButton.js.map +1 -1
  167. package/dist/navigation/NavItemLink.js.map +1 -1
  168. package/dist/navigation/getTableOfContentsHeadings.js.map +1 -1
  169. package/dist/navigation/types.js.map +1 -1
  170. package/dist/overlay/Overlay.js.map +1 -1
  171. package/dist/positioning/createHorizontalPosition.js.map +1 -1
  172. package/dist/positioning/createVerticalPosition.js.map +1 -1
  173. package/dist/positioning/useFixedPositioning.js.map +1 -1
  174. package/dist/progress/CircularProgress.js.map +1 -1
  175. package/dist/progress/LinearProgress.js.map +1 -1
  176. package/dist/progress/linearProgressStyles.js.map +1 -1
  177. package/dist/responsive-item/ResponsiveItem.js.map +1 -1
  178. package/dist/responsive-item/ResponsiveItemOverlay.js.map +1 -1
  179. package/dist/searching/caseInsensitive.js.map +1 -1
  180. package/dist/segmented-button/SegmentedButton.js.map +1 -1
  181. package/dist/segmented-button/SegmentedButtonContainer.js.map +1 -1
  182. package/dist/segmented-button/segmentedButtonStyles.js.map +1 -1
  183. package/dist/sheet/Sheet.js.map +1 -1
  184. package/dist/snackbar/Toast.js.map +1 -1
  185. package/dist/snackbar/_snackbar.scss +3 -3
  186. package/dist/spinbutton/SpinButton.d.ts +16 -0
  187. package/dist/spinbutton/SpinButton.js +55 -0
  188. package/dist/spinbutton/SpinButton.js.map +1 -0
  189. package/dist/spinbutton/SpinButtonGroupProvider.d.ts +17 -0
  190. package/dist/spinbutton/SpinButtonGroupProvider.js +19 -0
  191. package/dist/spinbutton/SpinButtonGroupProvider.js.map +1 -0
  192. package/dist/spinbutton/defaults.d.ts +9 -0
  193. package/dist/spinbutton/defaults.js +25 -0
  194. package/dist/spinbutton/defaults.js.map +1 -0
  195. package/dist/spinbutton/types.d.ts +324 -0
  196. package/dist/spinbutton/types.js +5 -0
  197. package/dist/spinbutton/types.js.map +1 -0
  198. package/dist/spinbutton/useSpinButton.d.ts +5 -0
  199. package/dist/spinbutton/useSpinButton.js +260 -0
  200. package/dist/spinbutton/useSpinButton.js.map +1 -0
  201. package/dist/spinbutton/useSpinButtonGroupProvider.d.ts +27 -0
  202. package/dist/spinbutton/useSpinButtonGroupProvider.js +49 -0
  203. package/dist/spinbutton/useSpinButtonGroupProvider.js.map +1 -0
  204. package/dist/spinbutton/utils/deselectNode.d.ts +5 -0
  205. package/dist/spinbutton/utils/deselectNode.js +17 -0
  206. package/dist/spinbutton/utils/deselectNode.js.map +1 -0
  207. package/dist/spinbutton/utils/resolveInputEvent.d.ts +30 -0
  208. package/dist/spinbutton/utils/resolveInputEvent.js +53 -0
  209. package/dist/spinbutton/utils/resolveInputEvent.js.map +1 -0
  210. package/dist/spinbutton/utils/selectNode.d.ts +5 -0
  211. package/dist/spinbutton/utils/selectNode.js +15 -0
  212. package/dist/spinbutton/utils/selectNode.js.map +1 -0
  213. package/dist/table/StickyTableSection.js.map +1 -1
  214. package/dist/table/Table.js.map +1 -1
  215. package/dist/table/TableBody.js.map +1 -1
  216. package/dist/table/TableCellContent.js.map +1 -1
  217. package/dist/table/TableCheckbox.js.map +1 -1
  218. package/dist/table/TableFooter.js.map +1 -1
  219. package/dist/table/TableHeader.js.map +1 -1
  220. package/dist/table/TableRadio.js.map +1 -1
  221. package/dist/table/TableRow.js.map +1 -1
  222. package/dist/table/useStickyTableSection.js.map +1 -1
  223. package/dist/tabs/SimpleTabPanel.js.map +1 -1
  224. package/dist/tabs/SimpleTabPanels.js.map +1 -1
  225. package/dist/tabs/Tab.js.map +1 -1
  226. package/dist/tabs/TabList.js.map +1 -1
  227. package/dist/tabs/TabListScrollButton.js.map +1 -1
  228. package/dist/tabs/_tabs.scss +5 -6
  229. package/dist/tabs/useMaxTabPanelHeight.js.map +1 -1
  230. package/dist/test-utils/data-testid.js.map +1 -1
  231. package/dist/test-utils/mocks/match-media.js +5 -5
  232. package/dist/test-utils/mocks/match-media.js.map +1 -1
  233. package/dist/test-utils/vitest/timers.d.ts +1 -1
  234. package/dist/test-utils/vitest/timers.js +1 -1
  235. package/dist/test-utils/vitest/timers.js.map +1 -1
  236. package/dist/theme/_a11y.scss +3 -1
  237. package/dist/theme/_theme.scss +16 -12
  238. package/dist/tooltip/Tooltip.js.map +1 -1
  239. package/dist/tooltip/TooltipHoverModeProvider.js.map +1 -1
  240. package/dist/tooltip/useTooltip.js.map +1 -1
  241. package/dist/transition/CSSTransition.js.map +1 -1
  242. package/dist/transition/Collapse.js.map +1 -1
  243. package/dist/transition/CrossFade.js.map +1 -1
  244. package/dist/transition/ScaleTransition.js.map +1 -1
  245. package/dist/transition/SkeletonPlaceholder.js.map +1 -1
  246. package/dist/transition/Slide.js.map +1 -1
  247. package/dist/transition/SlideContainer.js.map +1 -1
  248. package/dist/transition/types.js.map +1 -1
  249. package/dist/transition/useCollapseTransition.js.map +1 -1
  250. package/dist/transition/useCrossFadeTransition.js.map +1 -1
  251. package/dist/transition/useMaxWidthTransition.js.map +1 -1
  252. package/dist/transition/useScaleTransition.js.map +1 -1
  253. package/dist/transition/useSkeletonPlaceholder.js.map +1 -1
  254. package/dist/tree/Tree.js.map +1 -1
  255. package/dist/tree/TreeItem.js.map +1 -1
  256. package/dist/tree/TreeProvider.js.map +1 -1
  257. package/dist/tree/styles.js.map +1 -1
  258. package/dist/tree/types.js.map +1 -1
  259. package/dist/tree/useTreeMovement.js.map +1 -1
  260. package/dist/typography/HighlightTextMark.js.map +1 -1
  261. package/dist/typography/Mark.js.map +1 -1
  262. package/dist/typography/TextContainer.js.map +1 -1
  263. package/dist/typography/Typography.js.map +1 -1
  264. package/dist/typography/_typography.scss +0 -1
  265. package/dist/useElementSize.js.map +1 -1
  266. package/dist/useIntersectionObserver.js.map +1 -1
  267. package/dist/useMutationObserver.js.map +1 -1
  268. package/dist/useWindowSize.js.map +1 -1
  269. package/dist/utils/getNumberOfDigits.d.ts +7 -0
  270. package/dist/utils/getNumberOfDigits.js +11 -0
  271. package/dist/utils/getNumberOfDigits.js.map +1 -0
  272. package/dist/utils/nearest.js +2 -1
  273. package/dist/utils/nearest.js.map +1 -1
  274. package/dist/utils/useDevEffect.d.ts +7 -0
  275. package/dist/utils/useDevEffect.js +8 -0
  276. package/dist/utils/useDevEffect.js.map +1 -0
  277. package/dist/window-splitter/WindowSplitter.js +3 -2
  278. package/dist/window-splitter/WindowSplitter.js.map +1 -1
  279. package/dist/window-splitter/_window-splitter.scss +65 -19
  280. package/dist/window-splitter/styles.d.ts +9 -0
  281. package/dist/window-splitter/styles.js +3 -2
  282. package/dist/window-splitter/styles.js.map +1 -1
  283. package/dist/window-splitter/useWindowSplitter.js.map +1 -1
  284. package/package.json +38 -30
  285. package/src/CoreProviders.tsx +1 -0
  286. package/src/app-bar/AppBar.tsx +1 -2
  287. package/src/app-bar/AppBarTitle.tsx +1 -2
  288. package/src/autocomplete/AutocompleteListboxChildren.tsx +3 -1
  289. package/src/autocomplete/types.ts +24 -19
  290. package/src/autocomplete/utils.ts +9 -6
  291. package/src/avatar/Avatar.tsx +2 -1
  292. package/src/button/Button.tsx +2 -1
  293. package/src/button/FloatingActionButton.tsx +2 -1
  294. package/src/card/Card.tsx +2 -1
  295. package/src/card/CardContent.tsx +1 -2
  296. package/src/card/ClickableCard.tsx +1 -2
  297. package/src/chip/Chip.tsx +2 -1
  298. package/src/datetime/NativeDateField.tsx +2 -1
  299. package/src/datetime/NativeTimeField.tsx +2 -1
  300. package/src/datetime/useDateField.ts +13 -8
  301. package/src/datetime/useTimeField.ts +13 -8
  302. package/src/dialog/Dialog.tsx +2 -1
  303. package/src/dialog/DialogContainer.tsx +1 -2
  304. package/src/dialog/DialogContent.tsx +1 -2
  305. package/src/dialog/DialogFooter.tsx +1 -2
  306. package/src/divider/Divider.tsx +1 -2
  307. package/src/draggable/useDraggable.ts +4 -4
  308. package/src/draggable/utils.ts +4 -2
  309. package/src/expansion-panel/ExpansionPanelHeader.tsx +1 -2
  310. package/src/files/FileInput.tsx +2 -1
  311. package/src/files/useFileUpload.ts +6 -6
  312. package/src/files/validation.ts +1 -2
  313. package/src/focus/useFocusContainer.ts +4 -4
  314. package/src/form/Fieldset.tsx +25 -3
  315. package/src/form/FormMessageContainer.tsx +1 -2
  316. package/src/form/FormMessageCounter.tsx +1 -2
  317. package/src/form/InputToggle.tsx +3 -3
  318. package/src/form/Legend.tsx +55 -10
  319. package/src/form/Listbox.tsx +1 -2
  320. package/src/form/ListboxProvider.ts +3 -2
  321. package/src/form/NativeSelect.tsx +2 -1
  322. package/src/form/Password.tsx +4 -2
  323. package/src/form/ResizingTextAreaWrapper.tsx +1 -2
  324. package/src/form/Select.tsx +55 -3
  325. package/src/form/SelectedOption.tsx +2 -4
  326. package/src/form/Slider.tsx +2 -1
  327. package/src/form/SliderContainer.tsx +1 -2
  328. package/src/form/SliderThumb.tsx +6 -3
  329. package/src/form/SliderTrack.tsx +2 -1
  330. package/src/form/SliderValueMarks.tsx +1 -2
  331. package/src/form/Switch.tsx +2 -1
  332. package/src/form/TextArea.tsx +1 -2
  333. package/src/form/TextField.tsx +2 -1
  334. package/src/form/TextFieldContainer.tsx +1 -2
  335. package/src/form/fieldsetStyles.ts +18 -3
  336. package/src/form/inputToggleStyles.ts +4 -2
  337. package/src/form/labelStyles.ts +1 -1
  338. package/src/form/legendStyles.ts +132 -0
  339. package/src/form/selectUtils.ts +3 -2
  340. package/src/form/textFieldContainerStyles.ts +1 -2
  341. package/src/form/types.ts +35 -17
  342. package/src/form/useCheckboxGroup.ts +3 -2
  343. package/src/form/useCombobox.ts +8 -3
  344. package/src/form/useNumberField.ts +36 -35
  345. package/src/form/useRangeSlider.ts +1 -2
  346. package/src/form/useSlider.ts +1 -2
  347. package/src/form/useTextField.ts +8 -3
  348. package/src/hoverMode/useHoverMode.ts +4 -8
  349. package/src/icon/FontIcon.tsx +1 -2
  350. package/src/icon/IconRotator.tsx +1 -2
  351. package/src/icon/MaterialIcon.tsx +2 -1
  352. package/src/icon/MaterialSymbol.tsx +2 -1
  353. package/src/icon/SVGIcon.tsx +1 -2
  354. package/src/icon/config.tsx +10 -7
  355. package/src/icon/materialConfig.ts +1 -2
  356. package/src/icon/styles.ts +1 -2
  357. package/src/interaction/UserInteractionModeProvider.tsx +9 -4
  358. package/src/interaction/types.ts +1 -2
  359. package/src/interaction/useElementInteraction.tsx +3 -2
  360. package/src/layout/LayoutAppBar.tsx +6 -6
  361. package/src/layout/LayoutNav.tsx +2 -1
  362. package/src/layout/LayoutWindowSplitter.tsx +2 -1
  363. package/src/layout/Main.tsx +1 -2
  364. package/src/layout/useExpandableLayout.ts +63 -5
  365. package/src/layout/useHorizontalLayoutTransition.ts +1 -2
  366. package/src/layout/useLayoutTree.ts +2 -2
  367. package/src/layout/useLayoutWindowSplitter.ts +6 -6
  368. package/src/layout/useResizableLayout.ts +3 -6
  369. package/src/link/Link.tsx +1 -2
  370. package/src/link/SkipToMainContent.tsx +20 -23
  371. package/src/list/List.tsx +1 -2
  372. package/src/list/ListItem.tsx +2 -1
  373. package/src/list/ListItemAddon.tsx +2 -1
  374. package/src/list/ListItemLink.tsx +2 -1
  375. package/src/list/ListSubheader.tsx +1 -2
  376. package/src/list/getListItemHeight.ts +8 -9
  377. package/src/list/listItemStyles.ts +1 -2
  378. package/src/list/types.ts +1 -2
  379. package/src/media-queries/AppSizeProvider.tsx +8 -10
  380. package/src/media-queries/appSize.ts +3 -0
  381. package/src/media-queries/config.ts +41 -0
  382. package/src/menu/DropdownMenu.tsx +4 -5
  383. package/src/menu/Menu.tsx +2 -1
  384. package/src/menu/MenuItemButton.tsx +1 -2
  385. package/src/menu/MenuItemFileInput.tsx +2 -1
  386. package/src/menu/MenuItemInputToggle.tsx +3 -3
  387. package/src/menu/MenuItemSeparator.tsx +2 -1
  388. package/src/menu/MenuVisibilityProvider.tsx +4 -2
  389. package/src/menu/MenuWidget.tsx +1 -2
  390. package/src/menu/useContextMenu.ts +4 -2
  391. package/src/movement/types.ts +52 -13
  392. package/src/movement/useKeyboardMovementProvider.ts +77 -38
  393. package/src/navigation/CollapsibleNavGroup.tsx +1 -2
  394. package/src/navigation/NavItem.tsx +1 -2
  395. package/src/navigation/NavItemButton.tsx +2 -1
  396. package/src/navigation/NavItemLink.tsx +2 -1
  397. package/src/navigation/getTableOfContentsHeadings.ts +1 -2
  398. package/src/navigation/types.ts +1 -2
  399. package/src/overlay/Overlay.tsx +2 -1
  400. package/src/positioning/createHorizontalPosition.ts +10 -12
  401. package/src/positioning/createVerticalPosition.ts +10 -11
  402. package/src/positioning/useFixedPositioning.ts +6 -3
  403. package/src/progress/CircularProgress.tsx +2 -1
  404. package/src/progress/LinearProgress.tsx +2 -1
  405. package/src/progress/linearProgressStyles.ts +1 -2
  406. package/src/responsive-item/ResponsiveItem.tsx +1 -2
  407. package/src/responsive-item/ResponsiveItemOverlay.tsx +2 -1
  408. package/src/searching/caseInsensitive.ts +2 -4
  409. package/src/segmented-button/SegmentedButton.tsx +2 -1
  410. package/src/segmented-button/SegmentedButtonContainer.tsx +2 -1
  411. package/src/segmented-button/segmentedButtonStyles.ts +1 -2
  412. package/src/sheet/Sheet.tsx +1 -2
  413. package/src/snackbar/Toast.tsx +2 -1
  414. package/src/spinbutton/SpinButton.tsx +98 -0
  415. package/src/spinbutton/SpinButtonGroupProvider.tsx +32 -0
  416. package/src/spinbutton/defaults.ts +45 -0
  417. package/src/spinbutton/types.ts +413 -0
  418. package/src/spinbutton/useSpinButton.ts +311 -0
  419. package/src/spinbutton/useSpinButtonGroupProvider.ts +104 -0
  420. package/src/spinbutton/utils/deselectNode.ts +17 -0
  421. package/src/spinbutton/utils/resolveInputEvent.ts +112 -0
  422. package/src/spinbutton/utils/selectNode.ts +15 -0
  423. package/src/table/StickyTableSection.tsx +2 -1
  424. package/src/table/Table.tsx +1 -2
  425. package/src/table/TableBody.tsx +2 -1
  426. package/src/table/TableCellContent.tsx +1 -2
  427. package/src/table/TableCheckbox.tsx +1 -2
  428. package/src/table/TableFooter.tsx +1 -2
  429. package/src/table/TableHeader.tsx +1 -2
  430. package/src/table/TableRadio.tsx +1 -2
  431. package/src/table/TableRow.tsx +1 -2
  432. package/src/table/useStickyTableSection.tsx +1 -2
  433. package/src/tabs/SimpleTabPanel.tsx +2 -1
  434. package/src/tabs/SimpleTabPanels.tsx +2 -1
  435. package/src/tabs/Tab.tsx +3 -6
  436. package/src/tabs/TabList.tsx +2 -1
  437. package/src/tabs/TabListScrollButton.tsx +1 -2
  438. package/src/tabs/useMaxTabPanelHeight.ts +7 -4
  439. package/src/test-utils/data-testid.ts +1 -2
  440. package/src/test-utils/mocks/match-media.ts +5 -10
  441. package/src/test-utils/vitest/timers.ts +1 -1
  442. package/src/tooltip/Tooltip.tsx +2 -1
  443. package/src/tooltip/TooltipHoverModeProvider.tsx +1 -2
  444. package/src/tooltip/useTooltip.ts +9 -5
  445. package/src/transition/CSSTransition.tsx +2 -1
  446. package/src/transition/Collapse.tsx +4 -2
  447. package/src/transition/CrossFade.tsx +2 -1
  448. package/src/transition/ScaleTransition.tsx +2 -1
  449. package/src/transition/SkeletonPlaceholder.tsx +1 -2
  450. package/src/transition/Slide.tsx +2 -1
  451. package/src/transition/SlideContainer.tsx +1 -2
  452. package/src/transition/types.ts +15 -16
  453. package/src/transition/useCollapseTransition.ts +6 -5
  454. package/src/transition/useCrossFadeTransition.ts +3 -2
  455. package/src/transition/useMaxWidthTransition.ts +1 -2
  456. package/src/transition/useScaleTransition.ts +3 -2
  457. package/src/transition/useSkeletonPlaceholder.ts +1 -2
  458. package/src/tree/Tree.tsx +2 -1
  459. package/src/tree/TreeItem.tsx +2 -1
  460. package/src/tree/TreeProvider.tsx +4 -4
  461. package/src/tree/styles.ts +1 -2
  462. package/src/tree/types.ts +1 -2
  463. package/src/tree/useTreeMovement.ts +1 -2
  464. package/src/typography/HighlightTextMark.tsx +1 -2
  465. package/src/typography/Mark.tsx +1 -2
  466. package/src/typography/TextContainer.tsx +1 -2
  467. package/src/typography/Typography.tsx +1 -2
  468. package/src/useElementSize.ts +7 -4
  469. package/src/useIntersectionObserver.ts +3 -2
  470. package/src/useMutationObserver.ts +3 -2
  471. package/src/useWindowSize.ts +4 -2
  472. package/src/utils/getNumberOfDigits.ts +18 -0
  473. package/src/utils/nearest.ts +2 -1
  474. package/src/utils/useDevEffect.ts +9 -0
  475. package/src/window-splitter/WindowSplitter.tsx +5 -2
  476. package/src/window-splitter/styles.ts +13 -2
  477. package/src/window-splitter/useWindowSplitter.ts +3 -1
package/src/link/Link.tsx CHANGED
@@ -23,8 +23,7 @@ export type CustomLinkComponent =
23
23
  * @since 6.0.0 Renamed `flexCentered` to `flex`.
24
24
  */
25
25
  export interface LinkProps
26
- extends AnchorHTMLAttributes<HTMLAnchorElement>,
27
- LinkClassNameOptions {
26
+ extends AnchorHTMLAttributes<HTMLAnchorElement>, LinkClassNameOptions {
28
27
  /**
29
28
  * All links **must** have a valid href.
30
29
  */
@@ -1,7 +1,8 @@
1
1
  "use client";
2
2
 
3
- import { type ReactNode, forwardRef, useEffect, useRef } from "react";
3
+ import { type ReactNode, forwardRef, useRef } from "react";
4
4
 
5
+ import { useDevEffect } from "../utils/useDevEffect.js";
5
6
  import { Link, type LinkProps } from "./Link.js";
6
7
  import {
7
8
  type SkipToMainContentClassNameOptions,
@@ -21,8 +22,7 @@ const getMainElement = (mainId: string): HTMLElement | null =>
21
22
  * @since 6.0.0 The `mainId` is optional
22
23
  */
23
24
  export interface SkipToMainContentProps
24
- extends Omit<LinkProps, "href">,
25
- SkipToMainContentClassNameOptions {
25
+ extends Omit<LinkProps, "href">, SkipToMainContentClassNameOptions {
26
26
  /**
27
27
  * @since 6.0.0 Changed default value from `"skip-to-main-content"`
28
28
  * @defaultValue `"skip-to-main"`
@@ -95,30 +95,27 @@ export const SkipToMainContent = forwardRef<
95
95
  // want to warn the developer about missing main element in development
96
96
  // immediately to help prevent errors, but in production this can be lazy
97
97
  // initialized only once a keyboard user focuses and clicks this element
98
- if (process.env.NODE_ENV !== "production") {
99
- // eslint-disable-next-line react-hooks/rules-of-hooks
100
- useEffect(() => {
101
- mainNodeRef.current = getMainElement(mainId);
98
+ useDevEffect(() => {
99
+ mainNodeRef.current = getMainElement(mainId);
102
100
 
103
- if (!mainNodeRef.current) {
104
- const foundMainId = document.querySelector('main,[role="main"]')?.id;
105
- let message = `Unable to find a main element to focus`;
106
- if (mainId) {
107
- message += ` with an id of "${mainId}"`;
101
+ if (!mainNodeRef.current) {
102
+ const foundMainId = document.querySelector('main,[role="main"]')?.id;
103
+ let message = `Unable to find a main element to focus`;
104
+ if (mainId) {
105
+ message += ` with an id of "${mainId}"`;
108
106
 
109
- if (foundMainId) {
110
- message += ` but a main element was found with an id of "${foundMainId}".`;
111
- }
107
+ if (foundMainId) {
108
+ message += ` but a main element was found with an id of "${foundMainId}".`;
112
109
  }
113
- if (!foundMainId) {
114
- message +=
115
- '. There should be at least one <main> element or an element with role="main" on the page for accessibility.';
116
- }
117
-
118
- throw new Error(message);
119
110
  }
120
- }, [mainId]);
121
- }
111
+ if (!foundMainId) {
112
+ message +=
113
+ '. There should be at least one <main> element or an element with role="main" on the page for accessibility.';
114
+ }
115
+
116
+ throw new Error(message);
117
+ }
118
+ }, [mainId]);
122
119
 
123
120
  return (
124
121
  <Link
package/src/list/List.tsx CHANGED
@@ -8,8 +8,7 @@ export type ListElement = HTMLUListElement | HTMLOListElement;
8
8
  * @since 6.3.1 Extends the ListClassNameOptions
9
9
  */
10
10
  export interface ListProps
11
- extends HTMLAttributes<ListElement>,
12
- ListClassNameOptions {
11
+ extends HTMLAttributes<ListElement>, ListClassNameOptions {
13
12
  /**
14
13
  * @defaultValue `"none"`
15
14
  */
@@ -19,7 +19,8 @@ import { type ListItemChildrenProps } from "./types.js";
19
19
  * @since 6.3.1 Extends the BaseListItemClassNameOptions
20
20
  */
21
21
  export interface ListItemProps
22
- extends HTMLAttributes<HTMLLIElement>,
22
+ extends
23
+ HTMLAttributes<HTMLLIElement>,
23
24
  ListItemChildrenProps,
24
25
  BaseListItemClassNameOptions,
25
26
  ComponentWithRippleProps {
@@ -10,7 +10,8 @@ import {
10
10
  } from "./listItemStyles.js";
11
11
 
12
12
  export interface ListItemAddonProps
13
- extends Omit<TextIconSpacingProps, "icon" | "iconAfter" | "forceIconWrap">,
13
+ extends
14
+ Omit<TextIconSpacingProps, "icon" | "iconAfter" | "forceIconWrap">,
14
15
  ListItemAddonClassNameOptions {
15
16
  /**
16
17
  * The addon that should be rendered.
@@ -17,7 +17,8 @@ import { type ListItemClassNameOptions, listItem } from "./listItemStyles.js";
17
17
  import { type ListItemChildrenProps } from "./types.js";
18
18
 
19
19
  export interface ListItemLinkProps
20
- extends AnchorHTMLAttributes<HTMLAnchorElement>,
20
+ extends
21
+ AnchorHTMLAttributes<HTMLAnchorElement>,
21
22
  ListItemClassNameOptions,
22
23
  ListItemChildrenProps,
23
24
  ComponentWithRippleProps {
@@ -35,8 +35,7 @@ export function listSubheader(
35
35
  * @since 6.0.0 The `role` prop defaults to `"presentation"`
36
36
  */
37
37
  export interface ListSubheaderProps
38
- extends HTMLAttributes<HTMLLIElement>,
39
- ListSubheaderClassNameOptions {
38
+ extends HTMLAttributes<HTMLLIElement>, ListSubheaderClassNameOptions {
40
39
  /**
41
40
  * @defaultValue `"presentation"`
42
41
  */
@@ -4,15 +4,14 @@ import type { ListItemChildrenProps, ListItemHeight } from "./types.js";
4
4
  * @since 6.0.0
5
5
  * @internal
6
6
  */
7
- export interface ListItemHeightOptions
8
- extends Pick<
9
- ListItemChildrenProps,
10
- | "leftAddon"
11
- | "rightAddon"
12
- | "leftAddonType"
13
- | "rightAddonType"
14
- | "secondaryText"
15
- > {
7
+ export interface ListItemHeightOptions extends Pick<
8
+ ListItemChildrenProps,
9
+ | "leftAddon"
10
+ | "rightAddon"
11
+ | "leftAddonType"
12
+ | "rightAddonType"
13
+ | "secondaryText"
14
+ > {
16
15
  /**
17
16
  * @see {@link ListItemHeight}
18
17
  */
@@ -72,8 +72,7 @@ export interface ListItemClassNameOptions extends BaseListItemClassNameOptions {
72
72
  }
73
73
 
74
74
  /** @since 6.0.0 */
75
- export interface InternalListItemClassNameOptions
76
- extends ListItemClassNameOptions {
75
+ export interface InternalListItemClassNameOptions extends ListItemClassNameOptions {
77
76
  /**
78
77
  * @defaultValue `false`
79
78
  */
package/src/list/types.ts CHANGED
@@ -227,5 +227,4 @@ export interface ListItemChildrenTextProps {
227
227
  * @since 6.0.0 Renamed `textChildren` to `disableTextChildren`
228
228
  */
229
229
  export interface ListItemChildrenProps
230
- extends ListItemChildrenTextProps,
231
- ListItemChildrenAddonProps {}
230
+ extends ListItemChildrenTextProps, ListItemChildrenAddonProps {}
@@ -14,12 +14,8 @@ import {
14
14
  type AppSize,
15
15
  type AppSizeQueries,
16
16
  DEFAULT_APP_SIZE,
17
- DEFAULT_DESKTOP_LARGE_MIN_WIDTH,
18
- DEFAULT_DESKTOP_MIN_WIDTH,
19
- DEFAULT_PHONE_MAX_WIDTH,
20
- DEFAULT_TABLET_MAX_WIDTH,
21
- DEFAULT_TABLET_MIN_WIDTH,
22
17
  } from "./appSize.js";
18
+ import { MEDIA_QUERY_CONFIG } from "./config.js";
23
19
  import { useMediaQuery } from "./useMediaQuery.js";
24
20
 
25
21
  /** @internal */
@@ -71,6 +67,8 @@ export function useAppSize(): Readonly<AppSize> {
71
67
  * @since 6.0.0 Renamed from `AppSizeListenerProps`.
72
68
  * @since 6.0.0 Removed the `onChange` prop
73
69
  * @since 6.0.0 Renamed `defaultSize` to `ssrSize`
70
+ * @since 6.4.0 Deprecated the `AppSizeQueries` in favor
71
+ * of the `MEDIA_QUERY_CONFIG`
74
72
  */
75
73
  export interface AppSizeProviderProps extends AppSizeQueries {
76
74
  /**
@@ -95,11 +93,11 @@ export interface AppSizeProviderProps extends AppSizeQueries {
95
93
  export function AppSizeProvider(props: AppSizeProviderProps): ReactElement {
96
94
  const {
97
95
  ssrSize = DEFAULT_APP_SIZE,
98
- phoneMaxWidth = DEFAULT_PHONE_MAX_WIDTH,
99
- tabletMinWidth = DEFAULT_TABLET_MIN_WIDTH,
100
- tabletMaxWidth = DEFAULT_TABLET_MAX_WIDTH,
101
- desktopMinWidth = DEFAULT_DESKTOP_MIN_WIDTH,
102
- desktopLargeMinWidth = DEFAULT_DESKTOP_LARGE_MIN_WIDTH,
96
+ phoneMaxWidth = MEDIA_QUERY_CONFIG.phoneMaxWidth,
97
+ tabletMinWidth = MEDIA_QUERY_CONFIG.tabletMinWidth,
98
+ tabletMaxWidth = MEDIA_QUERY_CONFIG.tabletMaxWidth,
99
+ desktopMinWidth = MEDIA_QUERY_CONFIG.desktopMinWidth,
100
+ desktopLargeMinWidth = MEDIA_QUERY_CONFIG.desktopLargeMinWidth,
103
101
  children,
104
102
  } = props;
105
103
  const { __root } = useContext(context);
@@ -62,6 +62,9 @@ export interface AppSizeQueries {
62
62
  desktopLargeMinWidth?: QuerySize;
63
63
  }
64
64
 
65
+ /**
66
+ * @deprecated Use `MEDIA_QUERY_CONFIG` instead.
67
+ */
65
68
  export const DEFAULT_APP_SIZE_QUERIES: Readonly<AppSizeQueries> = {
66
69
  phoneMaxWidth: DEFAULT_PHONE_MAX_WIDTH,
67
70
  tabletMinWidth: DEFAULT_TABLET_MIN_WIDTH,
@@ -0,0 +1,41 @@
1
+ import {
2
+ type AppSizeQueries,
3
+ DEFAULT_DESKTOP_LARGE_MIN_WIDTH,
4
+ DEFAULT_DESKTOP_MIN_WIDTH,
5
+ DEFAULT_PHONE_MAX_WIDTH,
6
+ DEFAULT_TABLET_MAX_WIDTH,
7
+ DEFAULT_TABLET_MIN_WIDTH,
8
+ } from "./appSize.js";
9
+
10
+ /** @since 6.4.0 */
11
+ export type MediaQueryConfig = Required<AppSizeQueries>;
12
+
13
+ /**
14
+ * @since 6.4.0
15
+ */
16
+ export const MEDIA_QUERY_CONFIG: MediaQueryConfig = {
17
+ phoneMaxWidth: DEFAULT_PHONE_MAX_WIDTH,
18
+ tabletMinWidth: DEFAULT_TABLET_MIN_WIDTH,
19
+ tabletMaxWidth: DEFAULT_TABLET_MAX_WIDTH,
20
+ desktopMinWidth: DEFAULT_DESKTOP_MIN_WIDTH,
21
+ desktopLargeMinWidth: DEFAULT_DESKTOP_LARGE_MIN_WIDTH,
22
+ };
23
+
24
+ /**
25
+ * @since 6.4.0
26
+ */
27
+ export function configureMediaQueries(
28
+ queries: Readonly<Partial<MediaQueryConfig>>
29
+ ): void {
30
+ if (process.env.NODE_ENV !== "production") {
31
+ Object.entries(queries).forEach(([name, value]) => {
32
+ if (!(name in MEDIA_QUERY_CONFIG)) {
33
+ throw new Error(`${name} is an invalid react-md media query.`);
34
+ }
35
+
36
+ MEDIA_QUERY_CONFIG[name as keyof MediaQueryConfig] = value;
37
+ });
38
+ } else {
39
+ Object.assign(MEDIA_QUERY_CONFIG, queries);
40
+ }
41
+ }
@@ -29,7 +29,8 @@ import { MenuVisibilityProvider } from "./MenuVisibilityProvider.js";
29
29
  import { useMenuBarContext } from "./useMenuBarProvider.js";
30
30
 
31
31
  export interface BaseDropdownMenuProps
32
- extends MenuConfiguration,
32
+ extends
33
+ MenuConfiguration,
33
34
  MenuListConvenienceProps,
34
35
  MenuSheetConvenienceProps,
35
36
  MenuConvenienceProps {
@@ -37,12 +38,10 @@ export interface BaseDropdownMenuProps
37
38
  }
38
39
 
39
40
  export interface DropdownMenuButtonProps
40
- extends MenuButtonProps,
41
- BaseDropdownMenuProps {}
41
+ extends MenuButtonProps, BaseDropdownMenuProps {}
42
42
 
43
43
  export interface DropdownMenuItemButtonProps
44
- extends MenuItemButtonProps,
45
- BaseDropdownMenuProps {}
44
+ extends MenuItemButtonProps, BaseDropdownMenuProps {}
46
45
 
47
46
  /**
48
47
  * @since 6.0.0
package/src/menu/Menu.tsx CHANGED
@@ -215,7 +215,8 @@ export type MenuFixedPositioningOptions = Omit<
215
215
  * @since 6.0.0 Updated to use the latest Menu, Transition, and Portal API.
216
216
  */
217
217
  export interface MenuProps
218
- extends HTMLAttributes<HTMLDivElement>,
218
+ extends
219
+ HTMLAttributes<HTMLDivElement>,
219
220
  MenuConfiguration,
220
221
  MenuConfigurationProps,
221
222
  MenuFixedPositioningOptions,
@@ -23,8 +23,7 @@ const noop = (): void => {
23
23
  * @since 5.0.0
24
24
  */
25
25
  export interface MenuItemButtonProps
26
- extends BaseMenuButtonProps,
27
- MenuItemProps {}
26
+ extends BaseMenuButtonProps, MenuItemProps {}
28
27
 
29
28
  /**
30
29
  * **Client Component**
@@ -19,7 +19,8 @@ const noop = (): void => {
19
19
  * implementation.
20
20
  */
21
21
  export interface MenuItemFileInputProps
22
- extends Omit<MenuItemProps, "onChange">,
22
+ extends
23
+ Omit<MenuItemProps, "onChange">,
23
24
  Pick<
24
25
  InputHTMLAttributes<HTMLInputElement>,
25
26
  "accept" | "capture" | "multiple"
@@ -46,7 +46,8 @@ export type MenuItemInputToggleCheckedCallback = (
46
46
 
47
47
  /** @since 2.8.0 */
48
48
  export interface BaseMenuItemInputToggleProps
49
- extends HTMLAttributes<HTMLLIElement>,
49
+ extends
50
+ HTMLAttributes<HTMLLIElement>,
50
51
  ConfigurableInputToggleIconProps,
51
52
  ListItemChildrenTextProps {
52
53
  checked: boolean;
@@ -98,8 +99,7 @@ export interface BaseMenuItemInputToggleProps
98
99
  }
99
100
 
100
101
  export interface MenuItemCheckboxProps
101
- extends BaseMenuItemInputToggleProps,
102
- IndeterminateCheckboxProps {}
102
+ extends BaseMenuItemInputToggleProps, IndeterminateCheckboxProps {}
103
103
 
104
104
  export type MenuItemRadioProps = BaseMenuItemInputToggleProps;
105
105
 
@@ -8,7 +8,8 @@ import { useMenuConfiguration } from "./MenuConfigurationProvider.js";
8
8
 
9
9
  /** @since 5.0.0 */
10
10
  export interface MenuItemSeparatorProps
11
- extends HTMLAttributes<HTMLLIElement>,
11
+ extends
12
+ HTMLAttributes<HTMLLIElement>,
12
13
  Pick<DividerProps, "inset" | "vertical"> {}
13
14
 
14
15
  /**
@@ -14,8 +14,10 @@ import { type NonNullMutableRef, type UseStateObject } from "../types.js";
14
14
  * @since 5.0.0
15
15
  * @since 6.0.0 Added the `defaultFocusIndex` ref.
16
16
  */
17
- export interface MenuVisibilityContext
18
- extends UseStateObject<"visible", boolean> {
17
+ export interface MenuVisibilityContext extends UseStateObject<
18
+ "visible",
19
+ boolean
20
+ > {
19
21
  defaultFocusIndex: NonNullMutableRef<number>;
20
22
  }
21
23
 
@@ -23,8 +23,7 @@ const noop = (): void => {
23
23
  * @internal
24
24
  */
25
25
  export interface MenuWidgetProps
26
- extends HTMLAttributes<HTMLDivElement>,
27
- MenuListConvenienceProps {
26
+ extends HTMLAttributes<HTMLDivElement>, MenuListConvenienceProps {
28
27
  isSheet: boolean;
29
28
  horizontal: boolean;
30
29
  disableElevation?: boolean;
@@ -48,8 +48,10 @@ export interface ContextMenuHookOptions {
48
48
  * `ContextMenuImplementation` and dropped the `menuRef` and `menuNodeRef`
49
49
  * fields.
50
50
  */
51
- export interface ContextMenuImplementation
52
- extends UseStateObject<"visible", boolean> {
51
+ export interface ContextMenuImplementation extends UseStateObject<
52
+ "visible",
53
+ boolean
54
+ > {
53
55
  menuProps: ContextMenuProps;
54
56
  onContextMenu: <E extends HTMLElement>(event: MouseEvent<E>) => void;
55
57
  }
@@ -137,9 +137,17 @@ export interface KeyboardMovementBehavior {
137
137
 
138
138
  /**
139
139
  * @since 6.3.0
140
+ * @since 6.4.0 Added `force` option.
140
141
  */
141
142
  export interface KeyboardFocusFromKeyOptions {
142
143
  key: string;
144
+
145
+ /**
146
+ * @since 6.4.0
147
+ * @defaultValue `false`
148
+ */
149
+ force?: boolean;
150
+
143
151
  /** @defaultValue `false` */
144
152
  reversed?: boolean;
145
153
 
@@ -150,15 +158,29 @@ export interface KeyboardFocusFromKeyOptions {
150
158
  /**
151
159
  * @since 6.3.0
152
160
  */
153
- export type KeyboardFocusAction = (focusables?: readonly HTMLElement[]) => void;
161
+ export type KeyboardFocusAction = (
162
+ focusables?: readonly HTMLElement[],
163
+ force?: boolean
164
+ ) => void;
165
+
166
+ /**
167
+ * @since 6.4.0
168
+ */
169
+ export interface KeyboardMovementUpdateFocusIndexOptions {
170
+ index: number;
171
+ force?: boolean;
172
+ focusables?: readonly HTMLElement[];
173
+ }
154
174
 
155
175
  /**
156
176
  * @since 5.0.0
157
177
  * @since 6.0.0 Removed `attach`, `detach` and `watching`
178
+ * @since 6.3.0 Added `focusFirst`, `focusLast`, `focusNext`, `focusPrevious`
179
+ * and `focusFromKey`.
180
+ * @since 6.4.0 Added `focusCurrent` and `updateFocusIndex`
158
181
  * @internal
159
182
  */
160
- export interface KeyboardMovementContext
161
- extends Required<KeyboardMovementBehavior> {
183
+ export interface KeyboardMovementContext extends Required<KeyboardMovementBehavior> {
162
184
  /** {@inheritDoc KeyboardMovementConfig} */
163
185
  config: NonNullRef<KeyboardMovementConfig>;
164
186
 
@@ -195,6 +217,19 @@ export interface KeyboardMovementContext
195
217
  * @since 6.3.0
196
218
  */
197
219
  focusFromKey: (options: KeyboardFocusFromKeyOptions) => void;
220
+
221
+ /**
222
+ * @since 6.4.0
223
+ */
224
+ focusCurrent: (
225
+ focusables?: readonly HTMLElement[],
226
+ force?: boolean
227
+ ) => HTMLElement | undefined;
228
+
229
+ /**
230
+ * @since 6.4.0
231
+ */
232
+ updateFocusIndex: (options: KeyboardMovementUpdateFocusIndexOptions) => void;
198
233
  }
199
234
 
200
235
  /**
@@ -241,8 +276,9 @@ export type KeyboardMovementFocusChangeEventHandler = (
241
276
  * @since 6.0.0
242
277
  * @internal
243
278
  */
244
- export interface KeyboardMovementExtensionData<E extends HTMLElement>
245
- extends KeyboardMovementContext {
279
+ export interface KeyboardMovementExtensionData<
280
+ E extends HTMLElement,
281
+ > extends KeyboardMovementContext {
246
282
  event: KeyboardEvent<E>;
247
283
  currentFocusIndex: NonNullMutableRef<number>;
248
284
  setFocusIndex: (index: number, focusables: readonly HTMLElement[]) => void;
@@ -260,9 +296,13 @@ export type KeyboardMovementEventHandlers<E extends HTMLElement> = Pick<
260
296
  /**
261
297
  * @since 6.3.0
262
298
  */
263
- export interface SimpleKeyboardMovementWrapperOptions<E extends HTMLElement>
264
- extends KeyboardMovementEventHandlers<E> {
299
+ export interface SimpleKeyboardMovementWrapperOptions<
300
+ E extends HTMLElement,
301
+ > extends KeyboardMovementEventHandlers<E> {
265
302
  ref?: Ref<E>;
303
+
304
+ /** @defaultValue `false` */
305
+ disabled?: boolean;
266
306
  }
267
307
 
268
308
  /**
@@ -270,15 +310,13 @@ export interface SimpleKeyboardMovementWrapperOptions<E extends HTMLElement>
270
310
  * @internal
271
311
  */
272
312
  export interface KeyboardMovementProviderOptions<E extends HTMLElement>
273
- extends KeyboardMovementBehavior,
313
+ extends
314
+ KeyboardMovementBehavior,
274
315
  SimpleKeyboardMovementWrapperOptions<E>,
275
316
  KeyboardMovementConfiguration {
276
317
  /** @see {@link TabIndexBehavior} */
277
318
  tabIndexBehavior?: TabIndexBehavior;
278
319
 
279
- /** @defaultValue `false` */
280
- disabled?: boolean;
281
-
282
320
  /**
283
321
  * This is used to implement custom keyboard movement for the `keydown` event.
284
322
  */
@@ -332,8 +370,9 @@ export interface KeyboardMovementProviderOptions<E extends HTMLElement>
332
370
  * @since 6.0.0
333
371
  * @internal
334
372
  */
335
- export interface KeyboardMovementProps<E extends HTMLElement>
336
- extends Required<KeyboardMovementEventHandlers<E>> {
373
+ export interface KeyboardMovementProps<E extends HTMLElement> extends Required<
374
+ KeyboardMovementEventHandlers<E>
375
+ > {
337
376
  /**
338
377
  * This will only be provided if the {@link KeyboardMovementContext.tabIndexBehavior}
339
378
  * is set to `"virtual"`.