@react-md/core 6.3.4 → 6.4.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.
- package/dist/CoreProviders.d.ts +1 -0
- package/dist/CoreProviders.js.map +1 -1
- package/dist/_base.scss +3 -0
- package/dist/_core.scss +1 -0
- package/dist/_utils.scss +15 -7
- package/dist/app-bar/AppBar.js.map +1 -1
- package/dist/app-bar/AppBarTitle.js.map +1 -1
- package/dist/autocomplete/AutocompleteListboxChildren.js.map +1 -1
- package/dist/autocomplete/types.js.map +1 -1
- package/dist/autocomplete/utils.js.map +1 -1
- package/dist/avatar/Avatar.js.map +1 -1
- package/dist/button/Button.js.map +1 -1
- package/dist/button/FloatingActionButton.js.map +1 -1
- package/dist/card/Card.js.map +1 -1
- package/dist/card/CardContent.js.map +1 -1
- package/dist/card/ClickableCard.js.map +1 -1
- package/dist/chip/Chip.js.map +1 -1
- package/dist/datetime/NativeDateField.js.map +1 -1
- package/dist/datetime/NativeTimeField.js.map +1 -1
- package/dist/datetime/useDateField.js.map +1 -1
- package/dist/datetime/useTimeField.js.map +1 -1
- package/dist/dialog/Dialog.js.map +1 -1
- package/dist/dialog/DialogContainer.js.map +1 -1
- package/dist/dialog/DialogContent.js.map +1 -1
- package/dist/dialog/DialogFooter.js.map +1 -1
- package/dist/divider/Divider.js.map +1 -1
- package/dist/draggable/useDraggable.js.map +1 -1
- package/dist/draggable/utils.js.map +1 -1
- package/dist/expansion-panel/ExpansionPanelHeader.js.map +1 -1
- package/dist/files/FileInput.js.map +1 -1
- package/dist/files/useFileUpload.js.map +1 -1
- package/dist/files/validation.js.map +1 -1
- package/dist/focus/useFocusContainer.js.map +1 -1
- package/dist/form/Fieldset.d.ts +19 -0
- package/dist/form/Fieldset.js +22 -2
- package/dist/form/Fieldset.js.map +1 -1
- package/dist/form/FormMessageContainer.js.map +1 -1
- package/dist/form/FormMessageCounter.js.map +1 -1
- package/dist/form/InputToggle.js.map +1 -1
- package/dist/form/Legend.d.ts +27 -5
- package/dist/form/Legend.js +39 -6
- package/dist/form/Legend.js.map +1 -1
- package/dist/form/Listbox.js.map +1 -1
- package/dist/form/ListboxProvider.js.map +1 -1
- package/dist/form/NativeSelect.js.map +1 -1
- package/dist/form/Password.js.map +1 -1
- package/dist/form/ResizingTextAreaWrapper.js.map +1 -1
- package/dist/form/Select.js.map +1 -1
- package/dist/form/Slider.js.map +1 -1
- package/dist/form/SliderContainer.js.map +1 -1
- package/dist/form/SliderThumb.js.map +1 -1
- package/dist/form/SliderTrack.js.map +1 -1
- package/dist/form/SliderValueMarks.js.map +1 -1
- package/dist/form/Switch.js.map +1 -1
- package/dist/form/TextArea.js.map +1 -1
- package/dist/form/TextField.js.map +1 -1
- package/dist/form/TextFieldContainer.js.map +1 -1
- package/dist/form/_fieldset.scss +7 -0
- package/dist/form/_legend.scss +68 -0
- package/dist/form/_text-field.scss +39 -4
- package/dist/form/fieldsetStyles.d.ts +6 -1
- package/dist/form/fieldsetStyles.js +3 -2
- package/dist/form/fieldsetStyles.js.map +1 -1
- package/dist/form/inputToggleStyles.js.map +1 -1
- package/dist/form/labelStyles.d.ts +1 -1
- package/dist/form/labelStyles.js +1 -1
- package/dist/form/labelStyles.js.map +1 -1
- package/dist/form/legendStyles.d.ts +83 -0
- package/dist/form/legendStyles.js +25 -0
- package/dist/form/legendStyles.js.map +1 -0
- package/dist/form/selectUtils.js.map +1 -1
- package/dist/form/textFieldContainerStyles.js.map +1 -1
- package/dist/form/types.d.ts +28 -6
- package/dist/form/types.js.map +1 -1
- package/dist/form/useCheckboxGroup.js.map +1 -1
- package/dist/form/useCombobox.js.map +1 -1
- package/dist/form/useNumberField.js +16 -19
- package/dist/form/useNumberField.js.map +1 -1
- package/dist/form/useRangeSlider.js.map +1 -1
- package/dist/form/useSlider.js.map +1 -1
- package/dist/form/useTextField.js.map +1 -1
- package/dist/hoverMode/useHoverMode.js.map +1 -1
- package/dist/icon/FontIcon.js.map +1 -1
- package/dist/icon/IconRotator.js.map +1 -1
- package/dist/icon/MaterialIcon.js.map +1 -1
- package/dist/icon/MaterialSymbol.js.map +1 -1
- package/dist/icon/SVGIcon.js.map +1 -1
- package/dist/icon/config.d.ts +0 -1
- package/dist/icon/config.js +10 -7
- package/dist/icon/config.js.map +1 -1
- package/dist/icon/materialConfig.js.map +1 -1
- package/dist/icon/styles.js.map +1 -1
- package/dist/interaction/UserInteractionModeProvider.js +6 -4
- package/dist/interaction/UserInteractionModeProvider.js.map +1 -1
- package/dist/interaction/types.js.map +1 -1
- package/dist/interaction/useElementInteraction.js.map +1 -1
- package/dist/layout/LayoutAppBar.d.ts +6 -6
- package/dist/layout/LayoutAppBar.js +6 -6
- package/dist/layout/LayoutAppBar.js.map +1 -1
- package/dist/layout/LayoutNav.js.map +1 -1
- package/dist/layout/LayoutWindowSplitter.js.map +1 -1
- package/dist/layout/Main.js.map +1 -1
- package/dist/layout/useExpandableLayout.js +43 -0
- package/dist/layout/useExpandableLayout.js.map +1 -1
- package/dist/layout/useHorizontalLayoutTransition.js.map +1 -1
- package/dist/layout/useLayoutTree.js.map +1 -1
- package/dist/layout/useLayoutWindowSplitter.js.map +1 -1
- package/dist/layout/useResizableLayout.js.map +1 -1
- package/dist/link/Link.js.map +1 -1
- package/dist/link/SkipToMainContent.js +19 -21
- package/dist/link/SkipToMainContent.js.map +1 -1
- package/dist/list/List.js.map +1 -1
- package/dist/list/ListItem.js.map +1 -1
- package/dist/list/ListItemAddon.js.map +1 -1
- package/dist/list/ListItemLink.js.map +1 -1
- package/dist/list/ListSubheader.js.map +1 -1
- package/dist/list/getListItemHeight.js.map +1 -1
- package/dist/list/listItemStyles.js.map +1 -1
- package/dist/list/types.js.map +1 -1
- package/dist/media-queries/AppSizeProvider.d.ts +2 -0
- package/dist/media-queries/AppSizeProvider.js +3 -2
- package/dist/media-queries/AppSizeProvider.js.map +1 -1
- package/dist/media-queries/appSize.d.ts +3 -0
- package/dist/media-queries/appSize.js +3 -1
- package/dist/media-queries/appSize.js.map +1 -1
- package/dist/media-queries/config.d.ts +11 -0
- package/dist/media-queries/config.js +26 -0
- package/dist/media-queries/config.js.map +1 -0
- package/dist/menu/DropdownMenu.js.map +1 -1
- package/dist/menu/Menu.js.map +1 -1
- package/dist/menu/MenuItemButton.js.map +1 -1
- package/dist/menu/MenuItemFileInput.js.map +1 -1
- package/dist/menu/MenuItemInputToggle.js.map +1 -1
- package/dist/menu/MenuItemSeparator.js.map +1 -1
- package/dist/menu/MenuVisibilityProvider.js.map +1 -1
- package/dist/menu/MenuWidget.js.map +1 -1
- package/dist/menu/useContextMenu.js.map +1 -1
- package/dist/movement/types.d.ts +28 -3
- package/dist/movement/types.js.map +1 -1
- package/dist/movement/useKeyboardMovementProvider.js +96 -47
- package/dist/movement/useKeyboardMovementProvider.js.map +1 -1
- package/dist/navigation/CollapsibleNavGroup.js.map +1 -1
- package/dist/navigation/NavItem.js.map +1 -1
- package/dist/navigation/NavItemButton.js.map +1 -1
- package/dist/navigation/NavItemLink.js.map +1 -1
- package/dist/navigation/getTableOfContentsHeadings.js.map +1 -1
- package/dist/navigation/types.js.map +1 -1
- package/dist/overlay/Overlay.js.map +1 -1
- package/dist/positioning/createHorizontalPosition.js.map +1 -1
- package/dist/positioning/createVerticalPosition.js.map +1 -1
- package/dist/positioning/useFixedPositioning.js.map +1 -1
- package/dist/progress/CircularProgress.js.map +1 -1
- package/dist/progress/LinearProgress.js.map +1 -1
- package/dist/progress/linearProgressStyles.js.map +1 -1
- package/dist/responsive-item/ResponsiveItem.js.map +1 -1
- package/dist/responsive-item/ResponsiveItemOverlay.js.map +1 -1
- package/dist/searching/caseInsensitive.js.map +1 -1
- package/dist/segmented-button/SegmentedButton.js.map +1 -1
- package/dist/segmented-button/SegmentedButtonContainer.js.map +1 -1
- package/dist/segmented-button/segmentedButtonStyles.js.map +1 -1
- package/dist/sheet/Sheet.js.map +1 -1
- package/dist/snackbar/Toast.js.map +1 -1
- package/dist/spinbutton/SpinButton.d.ts +16 -0
- package/dist/spinbutton/SpinButton.js +55 -0
- package/dist/spinbutton/SpinButton.js.map +1 -0
- package/dist/spinbutton/SpinButtonGroupProvider.d.ts +17 -0
- package/dist/spinbutton/SpinButtonGroupProvider.js +19 -0
- package/dist/spinbutton/SpinButtonGroupProvider.js.map +1 -0
- package/dist/spinbutton/defaults.d.ts +9 -0
- package/dist/spinbutton/defaults.js +25 -0
- package/dist/spinbutton/defaults.js.map +1 -0
- package/dist/spinbutton/types.d.ts +324 -0
- package/dist/spinbutton/types.js +5 -0
- package/dist/spinbutton/types.js.map +1 -0
- package/dist/spinbutton/useSpinButton.d.ts +5 -0
- package/dist/spinbutton/useSpinButton.js +260 -0
- package/dist/spinbutton/useSpinButton.js.map +1 -0
- package/dist/spinbutton/useSpinButtonGroupProvider.d.ts +27 -0
- package/dist/spinbutton/useSpinButtonGroupProvider.js +49 -0
- package/dist/spinbutton/useSpinButtonGroupProvider.js.map +1 -0
- package/dist/spinbutton/utils/deselectNode.d.ts +5 -0
- package/dist/spinbutton/utils/deselectNode.js +17 -0
- package/dist/spinbutton/utils/deselectNode.js.map +1 -0
- package/dist/spinbutton/utils/resolveInputEvent.d.ts +30 -0
- package/dist/spinbutton/utils/resolveInputEvent.js +53 -0
- package/dist/spinbutton/utils/resolveInputEvent.js.map +1 -0
- package/dist/spinbutton/utils/selectNode.d.ts +5 -0
- package/dist/spinbutton/utils/selectNode.js +15 -0
- package/dist/spinbutton/utils/selectNode.js.map +1 -0
- package/dist/table/StickyTableSection.js.map +1 -1
- package/dist/table/Table.js.map +1 -1
- package/dist/table/TableBody.js.map +1 -1
- package/dist/table/TableCellContent.js.map +1 -1
- package/dist/table/TableCheckbox.js.map +1 -1
- package/dist/table/TableFooter.js.map +1 -1
- package/dist/table/TableHeader.js.map +1 -1
- package/dist/table/TableRadio.js.map +1 -1
- package/dist/table/TableRow.js.map +1 -1
- package/dist/table/useStickyTableSection.js.map +1 -1
- package/dist/tabs/SimpleTabPanel.js.map +1 -1
- package/dist/tabs/SimpleTabPanels.js.map +1 -1
- package/dist/tabs/Tab.js.map +1 -1
- package/dist/tabs/TabList.js.map +1 -1
- package/dist/tabs/TabListScrollButton.js.map +1 -1
- package/dist/tabs/useMaxTabPanelHeight.js.map +1 -1
- package/dist/test-utils/data-testid.js.map +1 -1
- package/dist/test-utils/mocks/match-media.js +5 -5
- package/dist/test-utils/mocks/match-media.js.map +1 -1
- package/dist/test-utils/vitest/timers.d.ts +1 -1
- package/dist/test-utils/vitest/timers.js +1 -1
- package/dist/test-utils/vitest/timers.js.map +1 -1
- package/dist/tooltip/Tooltip.js.map +1 -1
- package/dist/tooltip/TooltipHoverModeProvider.js.map +1 -1
- package/dist/tooltip/useTooltip.js.map +1 -1
- package/dist/transition/CSSTransition.js.map +1 -1
- package/dist/transition/Collapse.js.map +1 -1
- package/dist/transition/CrossFade.js.map +1 -1
- package/dist/transition/ScaleTransition.js.map +1 -1
- package/dist/transition/SkeletonPlaceholder.js.map +1 -1
- package/dist/transition/Slide.js.map +1 -1
- package/dist/transition/SlideContainer.js.map +1 -1
- package/dist/transition/types.js.map +1 -1
- package/dist/transition/useCollapseTransition.js.map +1 -1
- package/dist/transition/useCrossFadeTransition.js.map +1 -1
- package/dist/transition/useMaxWidthTransition.js.map +1 -1
- package/dist/transition/useScaleTransition.js.map +1 -1
- package/dist/transition/useSkeletonPlaceholder.js.map +1 -1
- package/dist/tree/Tree.js.map +1 -1
- package/dist/tree/TreeItem.js.map +1 -1
- package/dist/tree/TreeProvider.js.map +1 -1
- package/dist/tree/styles.js.map +1 -1
- package/dist/tree/types.js.map +1 -1
- package/dist/tree/useTreeMovement.js.map +1 -1
- package/dist/typography/HighlightTextMark.js.map +1 -1
- package/dist/typography/Mark.js.map +1 -1
- package/dist/typography/TextContainer.js.map +1 -1
- package/dist/typography/Typography.js.map +1 -1
- package/dist/typography/_typography.scss +0 -1
- package/dist/useElementSize.js.map +1 -1
- package/dist/useIntersectionObserver.js.map +1 -1
- package/dist/useMutationObserver.js.map +1 -1
- package/dist/useWindowSize.js.map +1 -1
- package/dist/utils/getNumberOfDigits.d.ts +7 -0
- package/dist/utils/getNumberOfDigits.js +11 -0
- package/dist/utils/getNumberOfDigits.js.map +1 -0
- package/dist/utils/nearest.js +2 -1
- package/dist/utils/nearest.js.map +1 -1
- package/dist/utils/useDevEffect.d.ts +7 -0
- package/dist/utils/useDevEffect.js +8 -0
- package/dist/utils/useDevEffect.js.map +1 -0
- package/dist/window-splitter/WindowSplitter.js +3 -2
- package/dist/window-splitter/WindowSplitter.js.map +1 -1
- package/dist/window-splitter/_window-splitter.scss +60 -12
- package/dist/window-splitter/styles.d.ts +9 -0
- package/dist/window-splitter/styles.js +3 -2
- package/dist/window-splitter/styles.js.map +1 -1
- package/dist/window-splitter/useWindowSplitter.js.map +1 -1
- package/package.json +37 -29
- package/src/CoreProviders.tsx +1 -0
- package/src/app-bar/AppBar.tsx +1 -2
- package/src/app-bar/AppBarTitle.tsx +1 -2
- package/src/autocomplete/AutocompleteListboxChildren.tsx +3 -1
- package/src/autocomplete/types.ts +24 -19
- package/src/autocomplete/utils.ts +9 -6
- package/src/avatar/Avatar.tsx +2 -1
- package/src/button/Button.tsx +2 -1
- package/src/button/FloatingActionButton.tsx +2 -1
- package/src/card/Card.tsx +2 -1
- package/src/card/CardContent.tsx +1 -2
- package/src/card/ClickableCard.tsx +1 -2
- package/src/chip/Chip.tsx +2 -1
- package/src/datetime/NativeDateField.tsx +2 -1
- package/src/datetime/NativeTimeField.tsx +2 -1
- package/src/datetime/useDateField.ts +13 -8
- package/src/datetime/useTimeField.ts +13 -8
- package/src/dialog/Dialog.tsx +2 -1
- package/src/dialog/DialogContainer.tsx +1 -2
- package/src/dialog/DialogContent.tsx +1 -2
- package/src/dialog/DialogFooter.tsx +1 -2
- package/src/divider/Divider.tsx +1 -2
- package/src/draggable/useDraggable.ts +4 -4
- package/src/draggable/utils.ts +4 -2
- package/src/expansion-panel/ExpansionPanelHeader.tsx +1 -2
- package/src/files/FileInput.tsx +2 -1
- package/src/files/useFileUpload.ts +6 -6
- package/src/files/validation.ts +1 -2
- package/src/focus/useFocusContainer.ts +4 -4
- package/src/form/Fieldset.tsx +25 -3
- package/src/form/FormMessageContainer.tsx +1 -2
- package/src/form/FormMessageCounter.tsx +1 -2
- package/src/form/InputToggle.tsx +3 -3
- package/src/form/Legend.tsx +55 -10
- package/src/form/Listbox.tsx +1 -2
- package/src/form/ListboxProvider.ts +3 -2
- package/src/form/NativeSelect.tsx +2 -1
- package/src/form/Password.tsx +4 -2
- package/src/form/ResizingTextAreaWrapper.tsx +1 -2
- package/src/form/Select.tsx +2 -1
- package/src/form/Slider.tsx +2 -1
- package/src/form/SliderContainer.tsx +1 -2
- package/src/form/SliderThumb.tsx +6 -3
- package/src/form/SliderTrack.tsx +2 -1
- package/src/form/SliderValueMarks.tsx +1 -2
- package/src/form/Switch.tsx +2 -1
- package/src/form/TextArea.tsx +1 -2
- package/src/form/TextField.tsx +2 -1
- package/src/form/TextFieldContainer.tsx +1 -2
- package/src/form/fieldsetStyles.ts +18 -3
- package/src/form/inputToggleStyles.ts +4 -2
- package/src/form/labelStyles.ts +1 -1
- package/src/form/legendStyles.ts +132 -0
- package/src/form/selectUtils.ts +3 -2
- package/src/form/textFieldContainerStyles.ts +1 -2
- package/src/form/types.ts +35 -17
- package/src/form/useCheckboxGroup.ts +3 -2
- package/src/form/useCombobox.ts +8 -3
- package/src/form/useNumberField.ts +36 -35
- package/src/form/useRangeSlider.ts +1 -2
- package/src/form/useSlider.ts +1 -2
- package/src/form/useTextField.ts +8 -3
- package/src/hoverMode/useHoverMode.ts +4 -8
- package/src/icon/FontIcon.tsx +1 -2
- package/src/icon/IconRotator.tsx +1 -2
- package/src/icon/MaterialIcon.tsx +2 -1
- package/src/icon/MaterialSymbol.tsx +2 -1
- package/src/icon/SVGIcon.tsx +1 -2
- package/src/icon/config.tsx +10 -7
- package/src/icon/materialConfig.ts +1 -2
- package/src/icon/styles.ts +1 -2
- package/src/interaction/UserInteractionModeProvider.tsx +9 -4
- package/src/interaction/types.ts +1 -2
- package/src/interaction/useElementInteraction.tsx +3 -2
- package/src/layout/LayoutAppBar.tsx +6 -6
- package/src/layout/LayoutNav.tsx +2 -1
- package/src/layout/LayoutWindowSplitter.tsx +2 -1
- package/src/layout/Main.tsx +1 -2
- package/src/layout/useExpandableLayout.ts +63 -5
- package/src/layout/useHorizontalLayoutTransition.ts +1 -2
- package/src/layout/useLayoutTree.ts +2 -2
- package/src/layout/useLayoutWindowSplitter.ts +6 -6
- package/src/layout/useResizableLayout.ts +3 -6
- package/src/link/Link.tsx +1 -2
- package/src/link/SkipToMainContent.tsx +20 -23
- package/src/list/List.tsx +1 -2
- package/src/list/ListItem.tsx +2 -1
- package/src/list/ListItemAddon.tsx +2 -1
- package/src/list/ListItemLink.tsx +2 -1
- package/src/list/ListSubheader.tsx +1 -2
- package/src/list/getListItemHeight.ts +8 -9
- package/src/list/listItemStyles.ts +1 -2
- package/src/list/types.ts +1 -2
- package/src/media-queries/AppSizeProvider.tsx +8 -10
- package/src/media-queries/appSize.ts +3 -0
- package/src/media-queries/config.ts +41 -0
- package/src/menu/DropdownMenu.tsx +4 -5
- package/src/menu/Menu.tsx +2 -1
- package/src/menu/MenuItemButton.tsx +1 -2
- package/src/menu/MenuItemFileInput.tsx +2 -1
- package/src/menu/MenuItemInputToggle.tsx +3 -3
- package/src/menu/MenuItemSeparator.tsx +2 -1
- package/src/menu/MenuVisibilityProvider.tsx +4 -2
- package/src/menu/MenuWidget.tsx +1 -2
- package/src/menu/useContextMenu.ts +4 -2
- package/src/movement/types.ts +52 -13
- package/src/movement/useKeyboardMovementProvider.ts +77 -38
- package/src/navigation/CollapsibleNavGroup.tsx +1 -2
- package/src/navigation/NavItem.tsx +1 -2
- package/src/navigation/NavItemButton.tsx +2 -1
- package/src/navigation/NavItemLink.tsx +2 -1
- package/src/navigation/getTableOfContentsHeadings.ts +1 -2
- package/src/navigation/types.ts +1 -2
- package/src/overlay/Overlay.tsx +2 -1
- package/src/positioning/createHorizontalPosition.ts +10 -12
- package/src/positioning/createVerticalPosition.ts +10 -11
- package/src/positioning/useFixedPositioning.ts +6 -3
- package/src/progress/CircularProgress.tsx +2 -1
- package/src/progress/LinearProgress.tsx +2 -1
- package/src/progress/linearProgressStyles.ts +1 -2
- package/src/responsive-item/ResponsiveItem.tsx +1 -2
- package/src/responsive-item/ResponsiveItemOverlay.tsx +2 -1
- package/src/searching/caseInsensitive.ts +2 -4
- package/src/segmented-button/SegmentedButton.tsx +2 -1
- package/src/segmented-button/SegmentedButtonContainer.tsx +2 -1
- package/src/segmented-button/segmentedButtonStyles.ts +1 -2
- package/src/sheet/Sheet.tsx +1 -2
- package/src/snackbar/Toast.tsx +2 -1
- package/src/spinbutton/SpinButton.tsx +98 -0
- package/src/spinbutton/SpinButtonGroupProvider.tsx +32 -0
- package/src/spinbutton/defaults.ts +45 -0
- package/src/spinbutton/types.ts +413 -0
- package/src/spinbutton/useSpinButton.ts +311 -0
- package/src/spinbutton/useSpinButtonGroupProvider.ts +104 -0
- package/src/spinbutton/utils/deselectNode.ts +17 -0
- package/src/spinbutton/utils/resolveInputEvent.ts +112 -0
- package/src/spinbutton/utils/selectNode.ts +15 -0
- package/src/table/StickyTableSection.tsx +2 -1
- package/src/table/Table.tsx +1 -2
- package/src/table/TableBody.tsx +2 -1
- package/src/table/TableCellContent.tsx +1 -2
- package/src/table/TableCheckbox.tsx +1 -2
- package/src/table/TableFooter.tsx +1 -2
- package/src/table/TableHeader.tsx +1 -2
- package/src/table/TableRadio.tsx +1 -2
- package/src/table/TableRow.tsx +1 -2
- package/src/table/useStickyTableSection.tsx +1 -2
- package/src/tabs/SimpleTabPanel.tsx +2 -1
- package/src/tabs/SimpleTabPanels.tsx +2 -1
- package/src/tabs/Tab.tsx +3 -6
- package/src/tabs/TabList.tsx +2 -1
- package/src/tabs/TabListScrollButton.tsx +1 -2
- package/src/tabs/useMaxTabPanelHeight.ts +7 -4
- package/src/test-utils/data-testid.ts +1 -2
- package/src/test-utils/mocks/match-media.ts +5 -10
- package/src/test-utils/vitest/timers.ts +1 -1
- package/src/tooltip/Tooltip.tsx +2 -1
- package/src/tooltip/TooltipHoverModeProvider.tsx +1 -2
- package/src/tooltip/useTooltip.ts +9 -5
- package/src/transition/CSSTransition.tsx +2 -1
- package/src/transition/Collapse.tsx +4 -2
- package/src/transition/CrossFade.tsx +2 -1
- package/src/transition/ScaleTransition.tsx +2 -1
- package/src/transition/SkeletonPlaceholder.tsx +1 -2
- package/src/transition/Slide.tsx +2 -1
- package/src/transition/SlideContainer.tsx +1 -2
- package/src/transition/types.ts +15 -16
- package/src/transition/useCollapseTransition.ts +6 -5
- package/src/transition/useCrossFadeTransition.ts +3 -2
- package/src/transition/useMaxWidthTransition.ts +1 -2
- package/src/transition/useScaleTransition.ts +3 -2
- package/src/transition/useSkeletonPlaceholder.ts +1 -2
- package/src/tree/Tree.tsx +2 -1
- package/src/tree/TreeItem.tsx +2 -1
- package/src/tree/TreeProvider.tsx +4 -4
- package/src/tree/styles.ts +1 -2
- package/src/tree/types.ts +1 -2
- package/src/tree/useTreeMovement.ts +1 -2
- package/src/typography/HighlightTextMark.tsx +1 -2
- package/src/typography/Mark.tsx +1 -2
- package/src/typography/TextContainer.tsx +1 -2
- package/src/typography/Typography.tsx +1 -2
- package/src/useElementSize.ts +7 -4
- package/src/useIntersectionObserver.ts +3 -2
- package/src/useMutationObserver.ts +3 -2
- package/src/useWindowSize.ts +4 -2
- package/src/utils/getNumberOfDigits.ts +18 -0
- package/src/utils/nearest.ts +2 -1
- package/src/utils/useDevEffect.ts +9 -0
- package/src/window-splitter/WindowSplitter.tsx +5 -2
- package/src/window-splitter/styles.ts +13 -2
- package/src/window-splitter/useWindowSplitter.ts +3 -1
|
@@ -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
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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 =
|
|
99
|
-
tabletMinWidth =
|
|
100
|
-
tabletMaxWidth =
|
|
101
|
-
desktopMinWidth =
|
|
102
|
-
desktopLargeMinWidth =
|
|
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
|
|
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
|
|
218
|
+
extends
|
|
219
|
+
HTMLAttributes<HTMLDivElement>,
|
|
219
220
|
MenuConfiguration,
|
|
220
221
|
MenuConfigurationProps,
|
|
221
222
|
MenuFixedPositioningOptions,
|
|
@@ -19,7 +19,8 @@ const noop = (): void => {
|
|
|
19
19
|
* implementation.
|
|
20
20
|
*/
|
|
21
21
|
export interface MenuItemFileInputProps
|
|
22
|
-
extends
|
|
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
|
|
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
|
|
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
|
-
|
|
17
|
+
export interface MenuVisibilityContext extends UseStateObject<
|
|
18
|
+
"visible",
|
|
19
|
+
boolean
|
|
20
|
+
> {
|
|
19
21
|
defaultFocusIndex: NonNullMutableRef<number>;
|
|
20
22
|
}
|
|
21
23
|
|
package/src/menu/MenuWidget.tsx
CHANGED
|
@@ -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
|
-
|
|
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
|
}
|
package/src/movement/types.ts
CHANGED
|
@@ -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 = (
|
|
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<
|
|
245
|
-
extends
|
|
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<
|
|
264
|
-
extends
|
|
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
|
|
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
|
-
|
|
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"`.
|
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
type KeyboardMovementContext,
|
|
29
29
|
type KeyboardMovementProviderImplementation,
|
|
30
30
|
type KeyboardMovementProviderOptions,
|
|
31
|
+
type KeyboardMovementUpdateFocusIndexOptions,
|
|
31
32
|
} from "./types.js";
|
|
32
33
|
import {
|
|
33
34
|
getFirstFocusableIndex,
|
|
@@ -62,6 +63,8 @@ export const DEFAULT_KEYBOARD_MOVEMENT_CONTEXT: Readonly<KeyboardMovementContext
|
|
|
62
63
|
focusNext: noop,
|
|
63
64
|
focusPrevious: noop,
|
|
64
65
|
focusFromKey: noop,
|
|
66
|
+
focusCurrent: (): undefined => {},
|
|
67
|
+
updateFocusIndex: noop,
|
|
65
68
|
};
|
|
66
69
|
|
|
67
70
|
/**
|
|
@@ -291,14 +294,18 @@ export function useKeyboardMovementProvider<E extends HTMLElement>(
|
|
|
291
294
|
|
|
292
295
|
return getFocusableElements(container, programmatic);
|
|
293
296
|
}, [getFocusableElements, nodeRef, programmatic]);
|
|
294
|
-
const
|
|
295
|
-
(
|
|
296
|
-
|
|
297
|
+
const focusCurrent = useCallback(
|
|
298
|
+
(focusables = getFocusableElementsFromRef()): HTMLElement | undefined => {
|
|
299
|
+
const index = currentFocusIndex.current;
|
|
300
|
+
if (index === -1) {
|
|
297
301
|
return;
|
|
298
302
|
}
|
|
299
303
|
|
|
300
|
-
currentFocusIndex.current = index;
|
|
301
304
|
const focused = focusables[index];
|
|
305
|
+
if (!focused) {
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
|
|
302
309
|
if (tabIndexBehavior) {
|
|
303
310
|
focused.scrollIntoView({
|
|
304
311
|
block: "nearest",
|
|
@@ -311,65 +318,89 @@ export function useKeyboardMovementProvider<E extends HTMLElement>(
|
|
|
311
318
|
focused.focus();
|
|
312
319
|
}
|
|
313
320
|
|
|
314
|
-
|
|
321
|
+
return focused;
|
|
322
|
+
},
|
|
323
|
+
[getFocusableElementsFromRef, tabIndexBehavior]
|
|
324
|
+
);
|
|
325
|
+
const updateFocusIndex = useCallback(
|
|
326
|
+
(options: KeyboardMovementUpdateFocusIndexOptions) => {
|
|
327
|
+
const {
|
|
315
328
|
index,
|
|
316
|
-
|
|
317
|
-
|
|
329
|
+
force,
|
|
330
|
+
focusables = getFocusableElementsFromRef(),
|
|
331
|
+
} = options;
|
|
332
|
+
const isSameIndex = currentFocusIndex.current === index;
|
|
333
|
+
if ((!force && isSameIndex) || index === -1) {
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
currentFocusIndex.current = index;
|
|
338
|
+
const focused = focusCurrent(focusables);
|
|
339
|
+
if (focused && !isSameIndex) {
|
|
340
|
+
onFocusChange({
|
|
341
|
+
index,
|
|
342
|
+
element: focused,
|
|
343
|
+
});
|
|
344
|
+
}
|
|
318
345
|
},
|
|
319
|
-
[getFocusableElementsFromRef, onFocusChange
|
|
346
|
+
[focusCurrent, getFocusableElementsFromRef, onFocusChange]
|
|
320
347
|
);
|
|
321
348
|
|
|
322
349
|
const focusNext = useCallback(
|
|
323
|
-
(focusables = getFocusableElementsFromRef()) => {
|
|
324
|
-
updateFocusIndex(
|
|
325
|
-
getNextFocusableIndex({
|
|
350
|
+
(focusables = getFocusableElementsFromRef(), force = false) => {
|
|
351
|
+
updateFocusIndex({
|
|
352
|
+
index: getNextFocusableIndex({
|
|
326
353
|
loopable,
|
|
327
354
|
increment: true,
|
|
328
355
|
focusables,
|
|
329
356
|
includeDisabled: true,
|
|
330
357
|
currentFocusIndex: currentFocusIndex.current,
|
|
331
358
|
}),
|
|
332
|
-
|
|
333
|
-
|
|
359
|
+
force,
|
|
360
|
+
focusables,
|
|
361
|
+
});
|
|
334
362
|
},
|
|
335
363
|
[getFocusableElementsFromRef, loopable, updateFocusIndex]
|
|
336
364
|
);
|
|
337
365
|
const focusPrevious = useCallback(
|
|
338
|
-
(focusables = getFocusableElementsFromRef()) => {
|
|
339
|
-
updateFocusIndex(
|
|
340
|
-
getNextFocusableIndex({
|
|
366
|
+
(focusables = getFocusableElementsFromRef(), force = false) => {
|
|
367
|
+
updateFocusIndex({
|
|
368
|
+
index: getNextFocusableIndex({
|
|
341
369
|
loopable,
|
|
342
370
|
increment: false,
|
|
343
371
|
focusables,
|
|
344
372
|
includeDisabled: true,
|
|
345
373
|
currentFocusIndex: currentFocusIndex.current,
|
|
346
374
|
}),
|
|
347
|
-
|
|
348
|
-
|
|
375
|
+
force,
|
|
376
|
+
focusables,
|
|
377
|
+
});
|
|
349
378
|
},
|
|
350
379
|
[getFocusableElementsFromRef, loopable, updateFocusIndex]
|
|
351
380
|
);
|
|
352
381
|
const focusFirst = useCallback(
|
|
353
|
-
(focusables = getFocusableElementsFromRef()) => {
|
|
354
|
-
updateFocusIndex(
|
|
355
|
-
getFirstFocusableIndex({
|
|
382
|
+
(focusables = getFocusableElementsFromRef(), force = false) => {
|
|
383
|
+
updateFocusIndex({
|
|
384
|
+
index: getFirstFocusableIndex({
|
|
356
385
|
focusables,
|
|
357
386
|
includeDisabled,
|
|
358
387
|
}),
|
|
359
|
-
|
|
360
|
-
|
|
388
|
+
force,
|
|
389
|
+
focusables,
|
|
390
|
+
});
|
|
361
391
|
},
|
|
362
392
|
[getFocusableElementsFromRef, includeDisabled, updateFocusIndex]
|
|
363
393
|
);
|
|
364
394
|
const focusLast = useCallback(
|
|
365
|
-
(focusables = getFocusableElementsFromRef()) => {
|
|
366
|
-
updateFocusIndex(
|
|
367
|
-
getLastFocusableIndex({
|
|
395
|
+
(focusables = getFocusableElementsFromRef(), force = false) => {
|
|
396
|
+
updateFocusIndex({
|
|
397
|
+
index: getLastFocusableIndex({
|
|
368
398
|
focusables,
|
|
369
399
|
includeDisabled,
|
|
370
400
|
}),
|
|
371
|
-
|
|
372
|
-
|
|
401
|
+
force,
|
|
402
|
+
focusables,
|
|
403
|
+
});
|
|
373
404
|
},
|
|
374
405
|
[getFocusableElementsFromRef, includeDisabled, updateFocusIndex]
|
|
375
406
|
);
|
|
@@ -377,6 +408,7 @@ export function useKeyboardMovementProvider<E extends HTMLElement>(
|
|
|
377
408
|
(options: KeyboardFocusFromKeyOptions) => {
|
|
378
409
|
const {
|
|
379
410
|
key,
|
|
411
|
+
force,
|
|
380
412
|
reversed,
|
|
381
413
|
focusables = getFocusableElementsFromRef(),
|
|
382
414
|
} = options;
|
|
@@ -391,7 +423,7 @@ export function useKeyboardMovementProvider<E extends HTMLElement>(
|
|
|
391
423
|
),
|
|
392
424
|
startIndex: reversed ? -1 : currentFocusIndex.current,
|
|
393
425
|
});
|
|
394
|
-
updateFocusIndex(index, focusables);
|
|
426
|
+
updateFocusIndex({ index, force, focusables });
|
|
395
427
|
},
|
|
396
428
|
[getFocusableElementsFromRef, includeDisabled, searchable, updateFocusIndex]
|
|
397
429
|
);
|
|
@@ -407,12 +439,15 @@ export function useKeyboardMovementProvider<E extends HTMLElement>(
|
|
|
407
439
|
focusNext,
|
|
408
440
|
focusPrevious,
|
|
409
441
|
focusFromKey,
|
|
442
|
+
focusCurrent,
|
|
443
|
+
updateFocusIndex,
|
|
410
444
|
includeDisabled,
|
|
411
445
|
tabIndexBehavior,
|
|
412
446
|
activeDescendantId,
|
|
413
447
|
}),
|
|
414
448
|
[
|
|
415
449
|
activeDescendantId,
|
|
450
|
+
focusCurrent,
|
|
416
451
|
focusFirst,
|
|
417
452
|
focusFromKey,
|
|
418
453
|
focusLast,
|
|
@@ -423,6 +458,7 @@ export function useKeyboardMovementProvider<E extends HTMLElement>(
|
|
|
423
458
|
loopable,
|
|
424
459
|
searchable,
|
|
425
460
|
tabIndexBehavior,
|
|
461
|
+
updateFocusIndex,
|
|
426
462
|
]
|
|
427
463
|
);
|
|
428
464
|
|
|
@@ -557,7 +593,7 @@ export function useKeyboardMovementProvider<E extends HTMLElement>(
|
|
|
557
593
|
): void => {
|
|
558
594
|
event.preventDefault();
|
|
559
595
|
event.stopPropagation();
|
|
560
|
-
updateFocusIndex(index, focusables);
|
|
596
|
+
updateFocusIndex({ index, focusables });
|
|
561
597
|
};
|
|
562
598
|
|
|
563
599
|
extendKeyDown({
|
|
@@ -619,7 +655,13 @@ export function useKeyboardMovementProvider<E extends HTMLElement>(
|
|
|
619
655
|
}
|
|
620
656
|
|
|
621
657
|
if (trackTabKeys && key === "Tab") {
|
|
622
|
-
currentFocusIndex.current
|
|
658
|
+
currentFocusIndex.current = getNextFocusableIndex({
|
|
659
|
+
loopable,
|
|
660
|
+
increment: !event.shiftKey,
|
|
661
|
+
focusables: getFocusableElements(currentTarget, programmatic),
|
|
662
|
+
includeDisabled,
|
|
663
|
+
currentFocusIndex: currentFocusIndex.current,
|
|
664
|
+
});
|
|
623
665
|
return;
|
|
624
666
|
}
|
|
625
667
|
|
|
@@ -633,21 +675,18 @@ export function useKeyboardMovementProvider<E extends HTMLElement>(
|
|
|
633
675
|
!increment &&
|
|
634
676
|
decrementKeys.includes(key);
|
|
635
677
|
|
|
636
|
-
if (jumpToFirst) {
|
|
678
|
+
if (jumpToFirst || jumpToLast || increment || decrement) {
|
|
637
679
|
event.preventDefault();
|
|
638
680
|
event.stopPropagation();
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
if (jumpToFirst) {
|
|
639
684
|
focusFirst();
|
|
640
685
|
} else if (jumpToLast) {
|
|
641
|
-
event.preventDefault();
|
|
642
|
-
event.stopPropagation();
|
|
643
686
|
focusLast();
|
|
644
687
|
} else if (increment) {
|
|
645
|
-
event.preventDefault();
|
|
646
|
-
event.stopPropagation();
|
|
647
688
|
focusNext();
|
|
648
689
|
} else if (decrement) {
|
|
649
|
-
event.preventDefault();
|
|
650
|
-
event.stopPropagation();
|
|
651
690
|
focusPrevious();
|
|
652
691
|
}
|
|
653
692
|
},
|
|
@@ -23,8 +23,7 @@ const noop = (): void => {
|
|
|
23
23
|
* @since 6.0.0
|
|
24
24
|
*/
|
|
25
25
|
export interface CollapsibleNavGroupProps
|
|
26
|
-
extends NavGroupProps,
|
|
27
|
-
NavItemButtonRotatorProps {
|
|
26
|
+
extends NavGroupProps, NavItemButtonRotatorProps {
|
|
28
27
|
liProps?: PropsWithRef<LiHTMLAttributes<HTMLLIElement>>;
|
|
29
28
|
buttonProps?: PropsWithRef<ButtonProps>;
|
|
30
29
|
collapseOptions?: Omit<
|
|
@@ -8,8 +8,7 @@ import { type NavItemClassNameOptions, navItem } from "./navItemStyles.js";
|
|
|
8
8
|
* augmentation.
|
|
9
9
|
*/
|
|
10
10
|
export interface NavItemProps
|
|
11
|
-
extends LiHTMLAttributes<HTMLLIElement>,
|
|
12
|
-
NavItemClassNameOptions {
|
|
11
|
+
extends LiHTMLAttributes<HTMLLIElement>, NavItemClassNameOptions {
|
|
13
12
|
children: ReactNode;
|
|
14
13
|
}
|
|
15
14
|
|
|
@@ -25,7 +25,8 @@ export interface NavItemButtonRotatorProps {
|
|
|
25
25
|
* @since 6.0.0
|
|
26
26
|
*/
|
|
27
27
|
export interface NavItemButtonProps
|
|
28
|
-
extends
|
|
28
|
+
extends
|
|
29
|
+
Omit<ButtonProps, "children">,
|
|
29
30
|
NavItemButtonRotatorProps,
|
|
30
31
|
NavItemContentProps {
|
|
31
32
|
onClick: MouseEventHandler<HTMLButtonElement>;
|
|
@@ -25,7 +25,8 @@ import {
|
|
|
25
25
|
* @since 6.0.0
|
|
26
26
|
*/
|
|
27
27
|
export interface NavItemLinkProps
|
|
28
|
-
extends
|
|
28
|
+
extends
|
|
29
|
+
Omit<AnchorHTMLAttributes<HTMLAnchorElement>, "children">,
|
|
29
30
|
NavItemContentProps,
|
|
30
31
|
ComponentWithRippleProps {
|
|
31
32
|
/** @defaultValue `"a"` */
|