@react-md/core 6.4.0 → 6.5.1
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/_a11y.scss +3 -1
- package/dist/_box-shadows.scss +20 -12
- package/dist/_core.scss +1 -1
- package/dist/_utils.scss +26 -11
- package/dist/app-bar/_app-bar.scss +3 -3
- package/dist/autocomplete/AutocompleteChip.js +2 -2
- package/dist/autocomplete/AutocompleteChip.js.map +1 -1
- package/dist/autocomplete/AutocompleteListboxChildren.js +1 -1
- package/dist/autocomplete/AutocompleteListboxChildren.js.map +1 -1
- package/dist/autocomplete/_autocomplete.scss +20 -16
- package/dist/autocomplete/useAutocomplete.js +4 -4
- package/dist/autocomplete/useAutocomplete.js.map +1 -1
- package/dist/autocomplete/utils.js +3 -3
- package/dist/autocomplete/utils.js.map +1 -1
- package/dist/avatar/_avatar.scss +2 -1
- package/dist/box/styles.js +2 -2
- package/dist/box/styles.js.map +1 -1
- package/dist/button/AsyncButton.js +1 -1
- package/dist/button/AsyncButton.js.map +1 -1
- package/dist/button/_button.scss +9 -5
- package/dist/card/_card.scss +6 -6
- package/dist/chip/Chip.js +1 -1
- package/dist/chip/Chip.js.map +1 -1
- package/dist/chip/_chip.scss +6 -6
- package/dist/cssUtils.d.ts +11 -6
- package/dist/cssUtils.js.map +1 -1
- package/dist/datetime/useTimeField.js +1 -1
- package/dist/datetime/useTimeField.js.map +1 -1
- package/dist/delegateEvent.js +9 -9
- package/dist/delegateEvent.js.map +1 -1
- package/dist/dialog/_dialog.scss +6 -6
- package/dist/divider/_divider.scss +6 -2
- package/dist/draggable/useDraggable.js +4 -4
- package/dist/draggable/useDraggable.js.map +1 -1
- package/dist/draggable/utils.js +1 -1
- package/dist/draggable/utils.js.map +1 -1
- package/dist/expansion-panel/ExpansionPanel.js +1 -1
- package/dist/expansion-panel/ExpansionPanel.js.map +1 -1
- package/dist/expansion-panel/useExpansionPanels.js +1 -1
- package/dist/expansion-panel/useExpansionPanels.js.map +1 -1
- package/dist/files/FileInput.js +1 -1
- package/dist/files/FileInput.js.map +1 -1
- package/dist/files/createAcceptFromExtensions.d.ts +5 -0
- package/dist/files/createAcceptFromExtensions.js +15 -0
- package/dist/files/createAcceptFromExtensions.js.map +1 -0
- package/dist/files/useFileUpload.js +45 -41
- package/dist/files/useFileUpload.js.map +1 -1
- package/dist/files/utils.js +14 -10
- package/dist/files/utils.js.map +1 -1
- package/dist/files/validation.js +7 -8
- package/dist/files/validation.js.map +1 -1
- package/dist/focus/useFocusContainer.js +1 -1
- package/dist/focus/useFocusContainer.js.map +1 -1
- package/dist/focus/utils.js +12 -7
- package/dist/focus/utils.js.map +1 -1
- package/dist/form/InputToggleIcon.js +5 -1
- package/dist/form/InputToggleIcon.js.map +1 -1
- package/dist/form/NativeSelect.js +1 -1
- package/dist/form/NativeSelect.js.map +1 -1
- package/dist/form/Select.d.ts +24 -0
- package/dist/form/Select.js +19 -8
- package/dist/form/Select.js.map +1 -1
- package/dist/form/SelectedOption.d.ts +1 -2
- package/dist/form/SelectedOption.js +2 -2
- package/dist/form/SelectedOption.js.map +1 -1
- package/dist/form/_input-toggle.scss +6 -5
- package/dist/form/_label.scss +2 -2
- package/dist/form/_legend.scss +22 -13
- package/dist/form/_slider.scss +7 -5
- package/dist/form/_switch.scss +7 -5
- package/dist/form/_text-field.scss +13 -11
- package/dist/form/formConfig.js +1 -1
- package/dist/form/formConfig.js.map +1 -1
- package/dist/form/inputToggleStyles.js +7 -1
- package/dist/form/inputToggleStyles.js.map +1 -1
- package/dist/form/legendStyles.d.ts +1 -1
- package/dist/form/legendStyles.js.map +1 -1
- package/dist/form/selectUtils.js +2 -2
- package/dist/form/selectUtils.js.map +1 -1
- package/dist/form/useCombobox.js +1 -0
- package/dist/form/useCombobox.js.map +1 -1
- package/dist/form/useFormReset.js +2 -2
- package/dist/form/useFormReset.js.map +1 -1
- package/dist/form/useNumberField.js +1 -1
- package/dist/form/useNumberField.js.map +1 -1
- package/dist/form/useResizingTextArea.js +4 -4
- package/dist/form/useResizingTextArea.js.map +1 -1
- package/dist/form/useSelectCombobox.js +1 -1
- package/dist/form/useSelectCombobox.js.map +1 -1
- package/dist/form/validation.js +1 -1
- package/dist/form/validation.js.map +1 -1
- package/dist/hoverMode/useHoverMode.js +8 -8
- package/dist/hoverMode/useHoverMode.js.map +1 -1
- package/dist/hoverMode/useHoverModeProvider.js +3 -3
- package/dist/hoverMode/useHoverModeProvider.js.map +1 -1
- package/dist/icon/config.js +3 -3
- package/dist/icon/config.js.map +1 -1
- package/dist/icon/materialConfig.js +1 -1
- package/dist/icon/materialConfig.js.map +1 -1
- package/dist/interaction/UserInteractionModeProvider.js +11 -10
- package/dist/interaction/UserInteractionModeProvider.js.map +1 -1
- package/dist/interaction/_interaction.scss +5 -3
- package/dist/interaction/utils.js +7 -3
- package/dist/interaction/utils.js.map +1 -1
- package/dist/layout/useExpandableLayout.js +3 -4
- package/dist/layout/useExpandableLayout.js.map +1 -1
- package/dist/layout/useMainTabIndex.js +1 -1
- package/dist/layout/useMainTabIndex.js.map +1 -1
- package/dist/list/ListItem.js +1 -1
- package/dist/list/ListItem.js.map +1 -1
- package/dist/media-queries/AppSizeProvider.js +1 -1
- package/dist/media-queries/AppSizeProvider.js.map +1 -1
- package/dist/media-queries/config.js +2 -2
- package/dist/media-queries/config.js.map +1 -1
- package/dist/media-queries/useMediaQuery.js +3 -3
- package/dist/media-queries/useMediaQuery.js.map +1 -1
- package/dist/menu/Menu.js +4 -4
- package/dist/menu/Menu.js.map +1 -1
- package/dist/menu/MenuItemButton.js +1 -1
- package/dist/menu/MenuItemButton.js.map +1 -1
- package/dist/menu/MenuItemFileInput.js +1 -1
- package/dist/menu/MenuItemFileInput.js.map +1 -1
- package/dist/menu/MenuWidget.js +2 -2
- package/dist/menu/MenuWidget.js.map +1 -1
- package/dist/movement/findMatchIndex.js +2 -2
- package/dist/movement/findMatchIndex.js.map +1 -1
- package/dist/movement/useKeyboardMovementProvider.js +2 -2
- package/dist/movement/useKeyboardMovementProvider.js.map +1 -1
- package/dist/movement/utils.js +12 -10
- package/dist/movement/utils.js.map +1 -1
- package/dist/navigation/getTableOfContentsHeadings.js +4 -3
- package/dist/navigation/getTableOfContentsHeadings.js.map +1 -1
- package/dist/navigation/useActiveHeadingId.js +9 -9
- package/dist/navigation/useActiveHeadingId.js.map +1 -1
- package/dist/navigation/useTableOfContentsHeadings.js +1 -1
- package/dist/navigation/useTableOfContentsHeadings.js.map +1 -1
- package/dist/navigation/utils.js +6 -5
- package/dist/navigation/utils.js.map +1 -1
- package/dist/portal/PortalContainerProvider.js +5 -3
- package/dist/portal/PortalContainerProvider.js.map +1 -1
- package/dist/positioning/getFixedPosition.js +2 -4
- package/dist/positioning/getFixedPosition.js.map +1 -1
- package/dist/positioning/useFixedPositioning.js +2 -2
- package/dist/positioning/useFixedPositioning.js.map +1 -1
- package/dist/positioning/utils.js +3 -3
- package/dist/positioning/utils.js.map +1 -1
- package/dist/scroll/getScrollbarWidth.js +4 -4
- package/dist/scroll/getScrollbarWidth.js.map +1 -1
- package/dist/searching/fuzzy.js +3 -2
- package/dist/searching/fuzzy.js.map +1 -1
- package/dist/searching/toSearchQuery.js +1 -1
- package/dist/searching/toSearchQuery.js.map +1 -1
- package/dist/searching/utils.js +1 -1
- package/dist/searching/utils.js.map +1 -1
- package/dist/snackbar/Toast.js +1 -1
- package/dist/snackbar/Toast.js.map +1 -1
- package/dist/snackbar/ToastContent.js +2 -2
- package/dist/snackbar/ToastContent.js.map +1 -1
- package/dist/snackbar/ToastManager.d.ts +1 -1
- package/dist/snackbar/ToastManager.js +11 -11
- package/dist/snackbar/ToastManager.js.map +1 -1
- package/dist/snackbar/_snackbar.scss +3 -3
- package/dist/spinbutton/useSpinButton.js +1 -1
- package/dist/spinbutton/useSpinButton.js.map +1 -1
- package/dist/spinbutton/utils/deselectNode.js +1 -1
- package/dist/spinbutton/utils/deselectNode.js.map +1 -1
- package/dist/spinbutton/utils/resolveInputEvent.js +1 -1
- package/dist/spinbutton/utils/resolveInputEvent.js.map +1 -1
- package/dist/spinbutton/utils/selectNode.js +1 -1
- package/dist/spinbutton/utils/selectNode.js.map +1 -1
- package/dist/storage/useStorage.js +8 -3
- package/dist/storage/useStorage.js.map +1 -1
- package/dist/table/useStickyTableSection.js +1 -1
- package/dist/table/useStickyTableSection.js.map +1 -1
- package/dist/tabs/TabList.js +2 -2
- package/dist/tabs/TabList.js.map +1 -1
- package/dist/tabs/_tabs.scss +5 -6
- package/dist/tabs/useMaxTabPanelHeight.js +4 -3
- package/dist/tabs/useMaxTabPanelHeight.js.map +1 -1
- package/dist/tabs/useTabList.js +1 -1
- package/dist/tabs/useTabList.js.map +1 -1
- package/dist/test-utils/jest-globals/match-media.d.ts +1 -1
- package/dist/test-utils/jest-globals/match-media.js +1 -1
- package/dist/test-utils/jest-globals/match-media.js.map +1 -1
- package/dist/test-utils/jest-globals/timers.js +1 -1
- package/dist/test-utils/jest-globals/timers.js.map +1 -1
- package/dist/test-utils/jest-globals/uploadMenuItemFileInput.js +1 -1
- package/dist/test-utils/jest-globals/uploadMenuItemFileInput.js.map +1 -1
- package/dist/test-utils/mocks/ResizeObserver.js +2 -2
- package/dist/test-utils/mocks/ResizeObserver.js.map +1 -1
- package/dist/test-utils/polyfills/IntersectionObserver.js +2 -2
- package/dist/test-utils/polyfills/IntersectionObserver.js.map +1 -1
- package/dist/test-utils/polyfills/ResizeObserver.js +2 -2
- package/dist/test-utils/polyfills/ResizeObserver.js.map +1 -1
- package/dist/test-utils/polyfills/TextDecoder.js +2 -2
- package/dist/test-utils/polyfills/TextDecoder.js.map +1 -1
- package/dist/test-utils/polyfills/TextEncoder.js +2 -2
- package/dist/test-utils/polyfills/TextEncoder.js.map +1 -1
- package/dist/test-utils/polyfills/matchMedia.js +2 -2
- package/dist/test-utils/polyfills/matchMedia.js.map +1 -1
- package/dist/test-utils/polyfills/offsetParent.js +2 -2
- package/dist/test-utils/polyfills/offsetParent.js.map +1 -1
- package/dist/test-utils/polyfills/scrollIntoView.js +1 -1
- package/dist/test-utils/polyfills/scrollIntoView.js.map +1 -1
- package/dist/test-utils/queries/select.js +2 -2
- package/dist/test-utils/queries/select.js.map +1 -1
- package/dist/test-utils/queries/slider.js +1 -1
- package/dist/test-utils/queries/slider.js.map +1 -1
- package/dist/test-utils/utils/createFileList.js +2 -0
- package/dist/test-utils/utils/createFileList.js.map +1 -1
- package/dist/test-utils/utils/createMatchMediaSpy.d.ts +1 -1
- package/dist/test-utils/utils/createMatchMediaSpy.js +3 -3
- package/dist/test-utils/utils/createMatchMediaSpy.js.map +1 -1
- package/dist/test-utils/vitest/match-media.d.ts +1 -1
- package/dist/test-utils/vitest/match-media.js +1 -1
- package/dist/test-utils/vitest/match-media.js.map +1 -1
- package/dist/test-utils/vitest/timers.js +1 -1
- package/dist/test-utils/vitest/timers.js.map +1 -1
- package/dist/test-utils/vitest/uploadMenuItemFileInput.js +1 -1
- package/dist/test-utils/vitest/uploadMenuItemFileInput.js.map +1 -1
- package/dist/theme/ThemeProvider.js +2 -2
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/_a11y.scss +3 -1
- package/dist/theme/_theme.scss +16 -12
- package/dist/theme/getDerivedTheme.js +1 -1
- package/dist/theme/getDerivedTheme.js.map +1 -1
- package/dist/theme/useCSSVariables.js +5 -5
- package/dist/theme/useCSSVariables.js.map +1 -1
- package/dist/theme/useColorSchemeMetaTag.js +2 -2
- package/dist/theme/useColorSchemeMetaTag.js.map +1 -1
- package/dist/theme/useInlineCSSVariables.js +4 -3
- package/dist/theme/useInlineCSSVariables.js.map +1 -1
- package/dist/theme/utils.js +8 -8
- package/dist/theme/utils.js.map +1 -1
- package/dist/tooltip/useTooltip.js +7 -7
- package/dist/tooltip/useTooltip.js.map +1 -1
- package/dist/tooltip/useTooltipPosition.js +1 -1
- package/dist/tooltip/useTooltipPosition.js.map +1 -1
- package/dist/transition/useCarousel.js +2 -2
- package/dist/transition/useCarousel.js.map +1 -1
- package/dist/transition/useCollapseTransition.js +1 -1
- package/dist/transition/useCollapseTransition.js.map +1 -1
- package/dist/transition/useSkeletonPlaceholder.js +4 -4
- package/dist/transition/useSkeletonPlaceholder.js.map +1 -1
- package/dist/transition/useTransition.js +2 -2
- package/dist/transition/useTransition.js.map +1 -1
- package/dist/transition/utils.js +5 -5
- package/dist/transition/utils.js.map +1 -1
- package/dist/tree/TreeItem.js +1 -1
- package/dist/tree/TreeItem.js.map +1 -1
- package/dist/tree/useTreeItems.js +7 -5
- package/dist/tree/useTreeItems.js.map +1 -1
- package/dist/tree/useTreeMovement.js +1 -1
- package/dist/tree/useTreeMovement.js.map +1 -1
- package/dist/tree/utils.js +6 -9
- package/dist/tree/utils.js.map +1 -1
- package/dist/typography/HighlightText.js +2 -1
- package/dist/typography/HighlightText.js.map +1 -1
- package/dist/typography/SrOnly.js +7 -1
- package/dist/typography/SrOnly.js.map +1 -1
- package/dist/useDebouncedFunction.js +4 -4
- package/dist/useDebouncedFunction.js.map +1 -1
- package/dist/useDropzone.js +9 -9
- package/dist/useDropzone.js.map +1 -1
- package/dist/useEnsuredState.js +5 -5
- package/dist/useEnsuredState.js.map +1 -1
- package/dist/useIntersectionObserver.js +3 -3
- package/dist/useIntersectionObserver.js.map +1 -1
- package/dist/useIsomorphicLayoutEffect.js +1 -1
- package/dist/useIsomorphicLayoutEffect.js.map +1 -1
- package/dist/useOrientation.js +1 -1
- package/dist/useOrientation.js.map +1 -1
- package/dist/useReadonlySet.js +1 -1
- package/dist/useReadonlySet.js.map +1 -1
- package/dist/useResizeListener.js +2 -2
- package/dist/useResizeListener.js.map +1 -1
- package/dist/useResizeObserver.js +3 -4
- package/dist/useResizeObserver.js.map +1 -1
- package/dist/useThrottledFunction.js +3 -3
- package/dist/useThrottledFunction.js.map +1 -1
- package/dist/useWindowSize.js +1 -1
- package/dist/useWindowSize.js.map +1 -1
- package/dist/utils/alphaNumericSort.js +3 -1
- package/dist/utils/alphaNumericSort.js.map +1 -1
- package/dist/utils/bem.js +9 -12
- package/dist/utils/bem.js.map +1 -1
- package/dist/utils/getNumberOfDigits.js +1 -0
- package/dist/utils/getNumberOfDigits.js.map +1 -1
- package/dist/utils/getRangeDefaultValue.js +1 -1
- package/dist/utils/getRangeDefaultValue.js.map +1 -1
- package/dist/utils/nearest.js +2 -2
- package/dist/utils/nearest.js.map +1 -1
- package/dist/utils/parseCssLengthUnit.js +3 -3
- package/dist/utils/parseCssLengthUnit.js.map +1 -1
- package/dist/utils/trigonometry.js +1 -1
- package/dist/utils/trigonometry.js.map +1 -1
- package/dist/window-splitter/_window-splitter.scss +15 -17
- package/package.json +9 -7
- package/src/autocomplete/AutocompleteChip.tsx +2 -2
- package/src/autocomplete/AutocompleteListboxChildren.tsx +1 -1
- package/src/autocomplete/useAutocomplete.ts +4 -4
- package/src/autocomplete/utils.ts +3 -3
- package/src/box/styles.ts +2 -2
- package/src/button/AsyncButton.tsx +1 -3
- package/src/chip/Chip.tsx +1 -2
- package/src/cssUtils.ts +12 -6
- package/src/datetime/useTimeField.ts +1 -1
- package/src/delegateEvent.ts +9 -9
- package/src/draggable/useDraggable.ts +4 -4
- package/src/draggable/utils.ts +1 -1
- package/src/expansion-panel/ExpansionPanel.tsx +1 -1
- package/src/expansion-panel/useExpansionPanels.ts +1 -1
- package/src/files/FileInput.tsx +1 -1
- package/src/files/createAcceptFromExtensions.ts +18 -0
- package/src/files/useFileUpload.ts +36 -37
- package/src/files/utils.ts +15 -11
- package/src/files/validation.ts +7 -9
- package/src/focus/useFocusContainer.ts +1 -1
- package/src/focus/utils.ts +11 -6
- package/src/form/InputToggleIcon.tsx +5 -5
- package/src/form/NativeSelect.tsx +1 -1
- package/src/form/Select.tsx +58 -7
- package/src/form/SelectedOption.tsx +2 -4
- package/src/form/formConfig.ts +1 -1
- package/src/form/inputToggleStyles.ts +9 -4
- package/src/form/legendStyles.ts +1 -1
- package/src/form/selectUtils.ts +2 -2
- package/src/form/useCombobox.ts +1 -0
- package/src/form/useFormReset.ts +2 -2
- package/src/form/useNumberField.ts +1 -1
- package/src/form/useResizingTextArea.ts +5 -5
- package/src/form/useSelectCombobox.ts +1 -4
- package/src/form/validation.ts +1 -1
- package/src/hoverMode/useHoverMode.ts +9 -9
- package/src/hoverMode/useHoverModeProvider.ts +4 -4
- package/src/icon/config.tsx +3 -3
- package/src/icon/materialConfig.ts +1 -1
- package/src/interaction/UserInteractionModeProvider.tsx +11 -10
- package/src/interaction/utils.ts +3 -3
- package/src/layout/useExpandableLayout.ts +3 -4
- package/src/layout/useMainTabIndex.ts +1 -1
- package/src/list/ListItem.tsx +1 -1
- package/src/media-queries/AppSizeProvider.tsx +1 -1
- package/src/media-queries/config.ts +2 -2
- package/src/media-queries/useMediaQuery.ts +3 -3
- package/src/menu/Menu.tsx +4 -4
- package/src/menu/MenuItemButton.tsx +1 -1
- package/src/menu/MenuItemFileInput.tsx +1 -1
- package/src/menu/MenuWidget.tsx +6 -4
- package/src/movement/findMatchIndex.ts +2 -2
- package/src/movement/useKeyboardMovementProvider.ts +2 -2
- package/src/movement/utils.ts +15 -14
- package/src/navigation/getTableOfContentsHeadings.ts +4 -3
- package/src/navigation/useActiveHeadingId.ts +8 -8
- package/src/navigation/useTableOfContentsHeadings.ts +1 -1
- package/src/navigation/utils.ts +6 -5
- package/src/portal/PortalContainerProvider.tsx +5 -3
- package/src/positioning/getFixedPosition.ts +9 -6
- package/src/positioning/useFixedPositioning.ts +2 -2
- package/src/positioning/utils.ts +3 -3
- package/src/scroll/getScrollbarWidth.ts +4 -4
- package/src/searching/fuzzy.ts +7 -3
- package/src/searching/toSearchQuery.ts +1 -1
- package/src/searching/utils.ts +1 -1
- package/src/snackbar/Toast.tsx +1 -1
- package/src/snackbar/ToastContent.tsx +2 -2
- package/src/snackbar/ToastManager.ts +11 -12
- package/src/spinbutton/useSpinButton.ts +1 -1
- package/src/spinbutton/utils/deselectNode.ts +1 -1
- package/src/spinbutton/utils/resolveInputEvent.ts +1 -1
- package/src/spinbutton/utils/selectNode.ts +1 -1
- package/src/storage/useStorage.ts +7 -2
- package/src/table/useStickyTableSection.tsx +1 -1
- package/src/tabs/TabList.tsx +2 -2
- package/src/tabs/useMaxTabPanelHeight.ts +6 -3
- package/src/tabs/useTabList.ts +2 -2
- package/src/test-utils/jest-globals/match-media.ts +5 -2
- package/src/test-utils/jest-globals/timers.ts +1 -1
- package/src/test-utils/jest-globals/uploadMenuItemFileInput.ts +1 -1
- package/src/test-utils/mocks/ResizeObserver.ts +2 -2
- package/src/test-utils/polyfills/IntersectionObserver.ts +2 -2
- package/src/test-utils/polyfills/ResizeObserver.ts +2 -2
- package/src/test-utils/polyfills/TextDecoder.ts +2 -2
- package/src/test-utils/polyfills/TextEncoder.ts +2 -2
- package/src/test-utils/polyfills/matchMedia.ts +5 -2
- package/src/test-utils/polyfills/offsetParent.ts +2 -2
- package/src/test-utils/polyfills/scrollIntoView.ts +1 -1
- package/src/test-utils/queries/select.ts +2 -2
- package/src/test-utils/queries/slider.ts +1 -1
- package/src/test-utils/utils/createFileList.ts +2 -0
- package/src/test-utils/utils/createMatchMediaSpy.ts +4 -4
- package/src/test-utils/vitest/match-media.ts +2 -2
- package/src/test-utils/vitest/timers.ts +1 -1
- package/src/test-utils/vitest/uploadMenuItemFileInput.ts +1 -1
- package/src/theme/ThemeProvider.tsx +2 -2
- package/src/theme/getDerivedTheme.ts +1 -1
- package/src/theme/useCSSVariables.ts +5 -5
- package/src/theme/useColorSchemeMetaTag.ts +2 -2
- package/src/theme/useInlineCSSVariables.ts +6 -7
- package/src/theme/utils.ts +8 -8
- package/src/tooltip/useTooltip.ts +7 -7
- package/src/tooltip/useTooltipPosition.ts +1 -1
- package/src/transition/useCarousel.ts +2 -2
- package/src/transition/useCollapseTransition.ts +1 -1
- package/src/transition/useSkeletonPlaceholder.ts +4 -4
- package/src/transition/useTransition.ts +2 -2
- package/src/transition/utils.ts +5 -5
- package/src/tree/TreeItem.tsx +1 -1
- package/src/tree/useTreeItems.ts +5 -5
- package/src/tree/useTreeMovement.ts +1 -1
- package/src/tree/utils.ts +9 -9
- package/src/typography/HighlightText.tsx +4 -3
- package/src/typography/SrOnly.tsx +9 -2
- package/src/useDebouncedFunction.ts +5 -5
- package/src/useDropzone.ts +10 -10
- package/src/useEnsuredState.ts +5 -5
- package/src/useIntersectionObserver.ts +3 -3
- package/src/useIsomorphicLayoutEffect.ts +3 -3
- package/src/useOrientation.ts +1 -1
- package/src/useReadonlySet.ts +3 -1
- package/src/useResizeListener.ts +2 -2
- package/src/useResizeObserver.ts +3 -4
- package/src/useThrottledFunction.ts +4 -4
- package/src/useWindowSize.ts +1 -1
- package/src/utils/alphaNumericSort.ts +1 -1
- package/src/utils/bem.ts +15 -16
- package/src/utils/getNumberOfDigits.ts +1 -0
- package/src/utils/getRangeDefaultValue.ts +1 -1
- package/src/utils/nearest.ts +5 -2
- package/src/utils/parseCssLengthUnit.ts +5 -4
- package/src/utils/trigonometry.ts +1 -1
|
@@ -10,7 +10,7 @@ import { useUserInteractionMode } from "../interaction/UserInteractionModeProvid
|
|
|
10
10
|
*/
|
|
11
11
|
export function useMainTabIndex(tabIndex?: number): number | undefined {
|
|
12
12
|
const keyboard = useUserInteractionMode() === "keyboard";
|
|
13
|
-
if (keyboard &&
|
|
13
|
+
if (keyboard && tabIndex === undefined) {
|
|
14
14
|
// eslint-disable-next-line no-param-reassign
|
|
15
15
|
tabIndex = -1;
|
|
16
16
|
}
|
package/src/list/ListItem.tsx
CHANGED
|
@@ -159,7 +159,7 @@ export const ListItem = forwardRef<HTMLLIElement, ListItemProps>(
|
|
|
159
159
|
} = props;
|
|
160
160
|
|
|
161
161
|
let tabIndex = propTabIndex;
|
|
162
|
-
if (!presentational &&
|
|
162
|
+
if (!presentational && tabIndex === undefined) {
|
|
163
163
|
tabIndex = disabled ? -1 : 0;
|
|
164
164
|
}
|
|
165
165
|
|
|
@@ -137,7 +137,7 @@ export function AppSizeProvider(props: AppSizeProviderProps): ReactElement {
|
|
|
137
137
|
);
|
|
138
138
|
|
|
139
139
|
let value = appSize;
|
|
140
|
-
if (ssr ||
|
|
140
|
+
if (ssr || globalThis.window === undefined) {
|
|
141
141
|
value = {
|
|
142
142
|
__root: true,
|
|
143
143
|
...ssrSize,
|
|
@@ -28,13 +28,13 @@ export function configureMediaQueries(
|
|
|
28
28
|
queries: Readonly<Partial<MediaQueryConfig>>
|
|
29
29
|
): void {
|
|
30
30
|
if (process.env.NODE_ENV !== "production") {
|
|
31
|
-
|
|
31
|
+
for (const [name, value] of Object.entries(queries)) {
|
|
32
32
|
if (!(name in MEDIA_QUERY_CONFIG)) {
|
|
33
33
|
throw new Error(`${name} is an invalid react-md media query.`);
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
MEDIA_QUERY_CONFIG[name as keyof MediaQueryConfig] = value;
|
|
37
|
-
}
|
|
37
|
+
}
|
|
38
38
|
} else {
|
|
39
39
|
Object.assign(MEDIA_QUERY_CONFIG, queries);
|
|
40
40
|
}
|
|
@@ -28,11 +28,11 @@ import { useSsr } from "../SsrProvider.js";
|
|
|
28
28
|
export function useMediaQuery(query: string, disabled = false): boolean {
|
|
29
29
|
const ssr = useSsr();
|
|
30
30
|
const [matches, setMatches] = useState(() => {
|
|
31
|
-
if (
|
|
31
|
+
if (globalThis.window === undefined || disabled || ssr) {
|
|
32
32
|
return false;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
return
|
|
35
|
+
return globalThis.matchMedia(query).matches;
|
|
36
36
|
});
|
|
37
37
|
|
|
38
38
|
useEffect(() => {
|
|
@@ -40,7 +40,7 @@ export function useMediaQuery(query: string, disabled = false): boolean {
|
|
|
40
40
|
return;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
const result =
|
|
43
|
+
const result = globalThis.matchMedia(query);
|
|
44
44
|
setMatches(result.matches);
|
|
45
45
|
|
|
46
46
|
const updater = ({ matches }: MediaQueryListEvent): void => {
|
package/src/menu/Menu.tsx
CHANGED
|
@@ -543,13 +543,13 @@ export const Menu = forwardRef<HTMLDivElement, LabelRequiredForA11y<MenuProps>>(
|
|
|
543
543
|
|
|
544
544
|
// wait an animation frame so the initial click event that caused the menu
|
|
545
545
|
// to become visible does not immediately close the menu
|
|
546
|
-
const frame =
|
|
547
|
-
|
|
546
|
+
const frame = globalThis.requestAnimationFrame(() => {
|
|
547
|
+
globalThis.addEventListener("click", callback);
|
|
548
548
|
});
|
|
549
549
|
|
|
550
550
|
return () => {
|
|
551
|
-
|
|
552
|
-
|
|
551
|
+
globalThis.cancelAnimationFrame(frame);
|
|
552
|
+
globalThis.removeEventListener("click", callback);
|
|
553
553
|
};
|
|
554
554
|
}, [disableHoverMode, role, visible]);
|
|
555
555
|
useIsomorphicLayoutEffect(() => {
|
|
@@ -46,7 +46,7 @@ export const MenuItemButton = forwardRef<HTMLLIElement, MenuItemButtonProps>(
|
|
|
46
46
|
onMouseLeave = noop,
|
|
47
47
|
rightAddon: propRightAddon,
|
|
48
48
|
iconRotatorProps,
|
|
49
|
-
disableDropdownIcon =
|
|
49
|
+
disableDropdownIcon = propRightAddon !== undefined,
|
|
50
50
|
...remaining
|
|
51
51
|
} = props;
|
|
52
52
|
const { disabled } = props;
|
|
@@ -114,7 +114,7 @@ export const MenuItemFileInput = forwardRef<
|
|
|
114
114
|
|
|
115
115
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
116
116
|
// @ts-expect-error
|
|
117
|
-
input.
|
|
117
|
+
input.addEventListener("change", onChange);
|
|
118
118
|
input.click();
|
|
119
119
|
input = null;
|
|
120
120
|
}}
|
package/src/menu/MenuWidget.tsx
CHANGED
|
@@ -92,7 +92,7 @@ export const MenuWidget = forwardRef<HTMLDivElement, MenuWidgetProps>(
|
|
|
92
92
|
return;
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
|
|
95
|
+
globalThis.cancelAnimationFrame(sheetBlurredFame.current);
|
|
96
96
|
setSheetMenuFocused(true);
|
|
97
97
|
},
|
|
98
98
|
onKeyDown,
|
|
@@ -127,9 +127,11 @@ export const MenuWidget = forwardRef<HTMLDivElement, MenuWidgetProps>(
|
|
|
127
127
|
return;
|
|
128
128
|
}
|
|
129
129
|
|
|
130
|
-
sheetBlurredFame.current =
|
|
131
|
-
|
|
132
|
-
|
|
130
|
+
sheetBlurredFame.current = globalThis.requestAnimationFrame(
|
|
131
|
+
() => {
|
|
132
|
+
setSheetMenuFocused(false);
|
|
133
|
+
}
|
|
134
|
+
);
|
|
133
135
|
}}
|
|
134
136
|
>
|
|
135
137
|
<List
|
|
@@ -36,7 +36,7 @@ export interface MatchInRangeOptions extends BaseOptions {
|
|
|
36
36
|
*/
|
|
37
37
|
export function findMatchInRange(options: MatchInRangeOptions): number {
|
|
38
38
|
const { values, startIndex, endIndex } = options;
|
|
39
|
-
if (
|
|
39
|
+
if (values.length === 0) {
|
|
40
40
|
return -1;
|
|
41
41
|
}
|
|
42
42
|
|
|
@@ -76,7 +76,7 @@ export interface MatchIndexOptions extends BaseOptions {
|
|
|
76
76
|
export function findMatchIndex(options: MatchIndexOptions): number {
|
|
77
77
|
const { value, values, startIndex, isSelfMatchable = true } = options;
|
|
78
78
|
// this was added to support comboboxes when there are no options available
|
|
79
|
-
if (
|
|
79
|
+
if (values.length === 0) {
|
|
80
80
|
return -1;
|
|
81
81
|
}
|
|
82
82
|
|
|
@@ -490,7 +490,7 @@ export function useKeyboardMovementProvider<E extends HTMLElement>(
|
|
|
490
490
|
const focusedIndex = focusables.findIndex(
|
|
491
491
|
(element) => element === target || element.contains(target)
|
|
492
492
|
);
|
|
493
|
-
if (focusedIndex === -1 ||
|
|
493
|
+
if (focusedIndex === -1 || focusables.length === 0) {
|
|
494
494
|
return;
|
|
495
495
|
}
|
|
496
496
|
|
|
@@ -530,7 +530,7 @@ export function useKeyboardMovementProvider<E extends HTMLElement>(
|
|
|
530
530
|
event.currentTarget,
|
|
531
531
|
programmatic
|
|
532
532
|
);
|
|
533
|
-
if (
|
|
533
|
+
if (focusables.length === 0) {
|
|
534
534
|
return;
|
|
535
535
|
}
|
|
536
536
|
|
package/src/movement/utils.ts
CHANGED
|
@@ -48,7 +48,7 @@ export const getVirtualFocusDefaultIndex = (
|
|
|
48
48
|
options: VirtualFocusableIndexOptions
|
|
49
49
|
): number => {
|
|
50
50
|
const { focusables, includeDisabled, activeDescendantId } = options;
|
|
51
|
-
if (
|
|
51
|
+
if (focusables.length === 0 || (!activeDescendantId && includeDisabled)) {
|
|
52
52
|
return 0;
|
|
53
53
|
}
|
|
54
54
|
|
|
@@ -71,7 +71,7 @@ export const getFirstFocusableIndex = (
|
|
|
71
71
|
): number => {
|
|
72
72
|
const { focusables, includeDisabled } = options;
|
|
73
73
|
|
|
74
|
-
if (
|
|
74
|
+
if (focusables.length === 0) {
|
|
75
75
|
return -1;
|
|
76
76
|
}
|
|
77
77
|
|
|
@@ -99,7 +99,7 @@ export const getLastFocusableIndex = (
|
|
|
99
99
|
): number => {
|
|
100
100
|
const { focusables, includeDisabled } = options;
|
|
101
101
|
|
|
102
|
-
if (
|
|
102
|
+
if (focusables.length === 0) {
|
|
103
103
|
return -1;
|
|
104
104
|
}
|
|
105
105
|
|
|
@@ -142,7 +142,7 @@ export const getNextFocusableIndex = (
|
|
|
142
142
|
includeDisabled,
|
|
143
143
|
currentFocusIndex,
|
|
144
144
|
} = options;
|
|
145
|
-
if (
|
|
145
|
+
if (focusables.length === 0) {
|
|
146
146
|
return currentFocusIndex;
|
|
147
147
|
}
|
|
148
148
|
|
|
@@ -186,14 +186,14 @@ export function getSearchText(
|
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
const cloned = element.cloneNode(true) as HTMLElement;
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
189
|
+
|
|
190
|
+
const invisibleElements = cloned.querySelectorAll(
|
|
191
|
+
// Note: do not include DISPLAY_NONE_CLASS since it is presentational only
|
|
192
|
+
".rmd-icon--font,[aria-hidden=true],[hidden],[role=presentation]"
|
|
193
|
+
);
|
|
194
|
+
for (const element of invisibleElements) {
|
|
195
|
+
element.remove();
|
|
196
|
+
}
|
|
197
197
|
|
|
198
198
|
// Note: It would be good to use `cloned.innerText` (maybe?) at some point,
|
|
199
199
|
// but it returns `undefined` in jsdom. It also does cause a reflow, so maybe
|
|
@@ -232,8 +232,9 @@ export function recalculateFocusIndex(options: RecalculateOptions): number {
|
|
|
232
232
|
});
|
|
233
233
|
}
|
|
234
234
|
|
|
235
|
-
|
|
236
|
-
|
|
235
|
+
// do type-casting since the types don't matter much here
|
|
236
|
+
const activeElement = document.activeElement as HTMLElement;
|
|
237
|
+
return focusables.indexOf(activeElement);
|
|
237
238
|
}
|
|
238
239
|
|
|
239
240
|
/**
|
|
@@ -28,7 +28,7 @@ export function getTableOfContentsHeadings(
|
|
|
28
28
|
): TableOfContentsHeadings {
|
|
29
29
|
const { ssr, selector, getDepth, getHeadingText } = options;
|
|
30
30
|
|
|
31
|
-
if (ssr ||
|
|
31
|
+
if (ssr || globalThis.window === undefined) {
|
|
32
32
|
return [];
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -41,7 +41,7 @@ export function getTableOfContentsHeadings(
|
|
|
41
41
|
let previous: TableOfContentsHeadingItem = root;
|
|
42
42
|
const parents: TableOfContentsHeadingItem[] = [];
|
|
43
43
|
const headings = document.querySelectorAll(selector);
|
|
44
|
-
|
|
44
|
+
for (const heading of headings) {
|
|
45
45
|
const depth = getDepth(heading);
|
|
46
46
|
const item: TableOfContentsHeadingItem = {
|
|
47
47
|
id: heading.id,
|
|
@@ -56,6 +56,7 @@ export function getTableOfContentsHeadings(
|
|
|
56
56
|
|
|
57
57
|
parents.push(previous);
|
|
58
58
|
} else if (depth < previous.depth) {
|
|
59
|
+
// eslint-disable-next-line unicorn/prefer-at
|
|
59
60
|
while (parents[parents.length - 1].depth >= depth) {
|
|
60
61
|
parents.pop();
|
|
61
62
|
}
|
|
@@ -63,7 +64,7 @@ export function getTableOfContentsHeadings(
|
|
|
63
64
|
const i = parents.length - 1;
|
|
64
65
|
parents[i].items = [...(parents[i].items ?? []), item];
|
|
65
66
|
previous = item;
|
|
66
|
-
}
|
|
67
|
+
}
|
|
67
68
|
|
|
68
69
|
return root.items;
|
|
69
70
|
}
|
|
@@ -16,7 +16,7 @@ import { type HeadingReferenceWithChildren } from "./types.js";
|
|
|
16
16
|
* @since 6.0.0
|
|
17
17
|
*/
|
|
18
18
|
export const DEFAULT_ACTIVE_HEADING_THRESHOLD: IntersectionObserverThreshold = [
|
|
19
|
-
0
|
|
19
|
+
0, 1,
|
|
20
20
|
];
|
|
21
21
|
|
|
22
22
|
/**
|
|
@@ -33,7 +33,7 @@ export const DEFAULT_ACTIVE_HEADING_THRESHOLD: IntersectionObserverThreshold = [
|
|
|
33
33
|
* @since 6.0.0
|
|
34
34
|
*/
|
|
35
35
|
export const DEFAULT_ACTIVE_HEADING_GET_ROOT_MARGIN = (): string => {
|
|
36
|
-
const headerHeightVar =
|
|
36
|
+
const headerHeightVar = globalThis
|
|
37
37
|
.getComputedStyle(document.documentElement)
|
|
38
38
|
.getPropertyValue("--rmd-layout-header-height");
|
|
39
39
|
const headerHeight = parseCssLengthUnit({
|
|
@@ -51,7 +51,7 @@ function getHeadingElements(
|
|
|
51
51
|
items: readonly HeadingReferenceWithChildren[]
|
|
52
52
|
): readonly HTMLElement[] {
|
|
53
53
|
const headings: HTMLElement[] = [];
|
|
54
|
-
|
|
54
|
+
for (const item of items) {
|
|
55
55
|
const heading = document.getElementById(item.id);
|
|
56
56
|
if (heading) {
|
|
57
57
|
headings.push(heading);
|
|
@@ -60,7 +60,7 @@ function getHeadingElements(
|
|
|
60
60
|
if (item.items) {
|
|
61
61
|
headings.push(...getHeadingElements(item.items));
|
|
62
62
|
}
|
|
63
|
-
}
|
|
63
|
+
}
|
|
64
64
|
|
|
65
65
|
return headings;
|
|
66
66
|
}
|
|
@@ -134,9 +134,9 @@ export function useActiveHeadingId(options: ActiveHeadingIdOptions): string {
|
|
|
134
134
|
getTargets: useCallback(() => {
|
|
135
135
|
const headingElements = getHeadingElements(headings);
|
|
136
136
|
const lookup = new Map<string, boolean>();
|
|
137
|
-
|
|
137
|
+
for (const heading of headingElements) {
|
|
138
138
|
lookup.set(heading.id, false);
|
|
139
|
-
}
|
|
139
|
+
}
|
|
140
140
|
elements.current = lookup;
|
|
141
141
|
|
|
142
142
|
return headingElements;
|
|
@@ -148,9 +148,9 @@ export function useActiveHeadingId(options: ActiveHeadingIdOptions): string {
|
|
|
148
148
|
return;
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
for (const entry of entries) {
|
|
152
152
|
lookup.set(entry.target.id, entry.isIntersecting);
|
|
153
|
-
}
|
|
153
|
+
}
|
|
154
154
|
|
|
155
155
|
// get the first visible/intersecting item and set it
|
|
156
156
|
let foundId = [...lookup.entries()].find(
|
|
@@ -25,7 +25,7 @@ export const DEFAULT_HEADING_SELECTOR =
|
|
|
25
25
|
* @since 6.0.0
|
|
26
26
|
*/
|
|
27
27
|
export const DEFAULT_GET_HEADING_DEPTH = (element: Element): number => {
|
|
28
|
-
const depth = parseInt(element.tagName.
|
|
28
|
+
const depth = Number.parseInt(element.tagName.slice(1));
|
|
29
29
|
return Number.isNaN(depth) ? 0 : depth;
|
|
30
30
|
};
|
|
31
31
|
|
package/src/navigation/utils.ts
CHANGED
|
@@ -4,14 +4,15 @@ import { type NavigationItem } from "./types.js";
|
|
|
4
4
|
* @since 6.0.0
|
|
5
5
|
*/
|
|
6
6
|
export function getHrefFromParents(parents: readonly NavigationItem[]): string {
|
|
7
|
-
|
|
7
|
+
let result = "";
|
|
8
|
+
for (const parent of parents) {
|
|
8
9
|
if ("href" in parent && parent.href) {
|
|
9
10
|
const { href } = parent;
|
|
10
|
-
|
|
11
|
+
result += href;
|
|
11
12
|
}
|
|
13
|
+
}
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
}, "");
|
|
15
|
+
return result;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
/**
|
|
@@ -33,7 +34,7 @@ export function getNavigationGroupId(
|
|
|
33
34
|
*/
|
|
34
35
|
export function getPartsFromPathname(pathname: string): ReadonlySet<string> {
|
|
35
36
|
// remove trailing slashes just in case there aren't rewrites in place
|
|
36
|
-
const href = pathname.
|
|
37
|
+
const href = pathname.replaceAll(/\/{2,}/g, "/").replace(/\/+$/, "");
|
|
37
38
|
const parts = href.split("/");
|
|
38
39
|
const set = new Set<string>();
|
|
39
40
|
let prefix = "";
|
|
@@ -29,7 +29,7 @@ export const PORTAL_CONTAINER_ID = "rmd-portal-container";
|
|
|
29
29
|
let portalContainer: PortalContainerNode = null;
|
|
30
30
|
|
|
31
31
|
const getPortalContainer = (): PortalContainerNode =>
|
|
32
|
-
|
|
32
|
+
globalThis.window === undefined ? null : document.body;
|
|
33
33
|
|
|
34
34
|
const context = createContext<PortalContainerNode>(getPortalContainer());
|
|
35
35
|
context.displayName = "PortalContainer";
|
|
@@ -77,7 +77,7 @@ export function PortalContainerProvider(
|
|
|
77
77
|
return;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
if (
|
|
80
|
+
if (container !== undefined) {
|
|
81
81
|
setValue(container);
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
@@ -87,13 +87,15 @@ export function PortalContainerProvider(
|
|
|
87
87
|
portalContainer.id = PORTAL_CONTAINER_ID;
|
|
88
88
|
}
|
|
89
89
|
if (!document.body.contains(portalContainer)) {
|
|
90
|
-
document.body.
|
|
90
|
+
document.body.append(portalContainer);
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
setValue(portalContainer);
|
|
94
94
|
|
|
95
95
|
return () => {
|
|
96
96
|
if (portalContainer && document.body.contains(portalContainer)) {
|
|
97
|
+
// can't use `portalContainer.remove()` since `DocumentFragment` does not have `.remove()`
|
|
98
|
+
// eslint-disable-next-line unicorn/prefer-dom-node-remove
|
|
97
99
|
document.body.removeChild(portalContainer);
|
|
98
100
|
}
|
|
99
101
|
};
|
|
@@ -80,12 +80,15 @@ export function getFixedPosition(options: FixedPositionOptions): FixedPosition {
|
|
|
80
80
|
let { initialY } = options;
|
|
81
81
|
const container = findSizingContainer(options.container);
|
|
82
82
|
|
|
83
|
-
if (
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
83
|
+
if (
|
|
84
|
+
process.env.NODE_ENV !== "production" &&
|
|
85
|
+
preventOverlap &&
|
|
86
|
+
anchor.y !== "above" &&
|
|
87
|
+
anchor.y !== "below"
|
|
88
|
+
) {
|
|
89
|
+
throw new Error(
|
|
90
|
+
'Unable to prevent overlap when the vertical anchor is not `"above"` or `"below"`'
|
|
91
|
+
);
|
|
89
92
|
}
|
|
90
93
|
|
|
91
94
|
if (!element) {
|
|
@@ -407,8 +407,8 @@ export function useFixedPositioning<
|
|
|
407
407
|
updateStyle();
|
|
408
408
|
};
|
|
409
409
|
|
|
410
|
-
const resizeHandler = delegateEvent("resize", window, true);
|
|
411
|
-
const scrollHandler = delegateEvent("scroll", window, true, {
|
|
410
|
+
const resizeHandler = delegateEvent("resize", globalThis.window, true);
|
|
411
|
+
const scrollHandler = delegateEvent("scroll", globalThis.window, true, {
|
|
412
412
|
passive: true,
|
|
413
413
|
});
|
|
414
414
|
resizeHandler.add(resizeCallback);
|
package/src/positioning/utils.ts
CHANGED
|
@@ -294,7 +294,7 @@ export function findSizingContainer(
|
|
|
294
294
|
}
|
|
295
295
|
}
|
|
296
296
|
|
|
297
|
-
const data = el.
|
|
297
|
+
const data = el.dataset.sizingSelector;
|
|
298
298
|
if (data) {
|
|
299
299
|
const content = el.querySelector(data) as HTMLElement;
|
|
300
300
|
if (content) {
|
|
@@ -344,10 +344,10 @@ export function getElementRect(element: HTMLElement): DOMRect {
|
|
|
344
344
|
cloned.style.transform = "none";
|
|
345
345
|
|
|
346
346
|
const parent = element.parentElement || document.body;
|
|
347
|
-
parent.
|
|
347
|
+
parent.append(cloned);
|
|
348
348
|
|
|
349
349
|
const rect = cloned.getBoundingClientRect();
|
|
350
|
-
|
|
350
|
+
cloned.remove();
|
|
351
351
|
|
|
352
352
|
return rect;
|
|
353
353
|
}
|
|
@@ -5,7 +5,7 @@ let cache: number | undefined;
|
|
|
5
5
|
*/
|
|
6
6
|
export function getScrollbarWidth(force = false): number {
|
|
7
7
|
/* istanbul ignore if */
|
|
8
|
-
if (
|
|
8
|
+
if (globalThis.window === undefined) {
|
|
9
9
|
return 0;
|
|
10
10
|
}
|
|
11
11
|
|
|
@@ -17,16 +17,16 @@ export function getScrollbarWidth(force = false): number {
|
|
|
17
17
|
const outer = document.createElement("div");
|
|
18
18
|
outer.style.visibility = "hidden";
|
|
19
19
|
outer.style.overflow = "scroll";
|
|
20
|
-
document.body.
|
|
20
|
+
document.body.append(outer);
|
|
21
21
|
|
|
22
22
|
const inner = document.createElement("div");
|
|
23
|
-
outer.
|
|
23
|
+
outer.append(inner);
|
|
24
24
|
|
|
25
25
|
// the scrollbar width can be determined by comparing the width of the parent
|
|
26
26
|
// element that has scrollbars to the child element that does not.
|
|
27
27
|
value = outer.offsetWidth - inner.offsetWidth;
|
|
28
28
|
cache = value;
|
|
29
|
-
|
|
29
|
+
outer.remove();
|
|
30
30
|
|
|
31
31
|
return value;
|
|
32
32
|
}
|
package/src/searching/fuzzy.ts
CHANGED
|
@@ -42,11 +42,15 @@ const DEFAULT_EXTRACTOR = defaultExtractor("fuzzySearch");
|
|
|
42
42
|
export function createFuzzyRegExp(query: string): RegExp {
|
|
43
43
|
return new RegExp(
|
|
44
44
|
query
|
|
45
|
+
// eslint-disable-next-line unicorn/prefer-spread
|
|
45
46
|
.split("")
|
|
46
|
-
.join(
|
|
47
|
-
.
|
|
47
|
+
.join(String.raw`\w*`)
|
|
48
|
+
.replaceAll(
|
|
49
|
+
/(\(|\||\)|\\(?!w\*)|\[|\|-|\.|\^|\+|\$|\?|^(?!w)\*)/g,
|
|
50
|
+
String.raw`\$1`
|
|
51
|
+
)
|
|
48
52
|
// Couldn't get the matching of two '*' working, so replace them here..
|
|
49
|
-
.
|
|
53
|
+
.replaceAll("**", String.raw`*\*`),
|
|
50
54
|
"i"
|
|
51
55
|
);
|
|
52
56
|
}
|
package/src/searching/utils.ts
CHANGED
|
@@ -48,7 +48,7 @@ export function search<T>(
|
|
|
48
48
|
): readonly T[] | T | undefined {
|
|
49
49
|
const { list, type, query, filter, extractor, whitespace = "keep" } = options;
|
|
50
50
|
const fallback = type === "search" ? undefined : list;
|
|
51
|
-
if (
|
|
51
|
+
if (list.length === 0) {
|
|
52
52
|
return fallback;
|
|
53
53
|
}
|
|
54
54
|
|
package/src/snackbar/Toast.tsx
CHANGED
|
@@ -190,7 +190,7 @@ export const Toast = forwardRef<HTMLDivElement, ToastProps>(
|
|
|
190
190
|
}
|
|
191
191
|
|
|
192
192
|
let closeIcon = propCloseIcon;
|
|
193
|
-
if (
|
|
193
|
+
if (closeButtonProps?.children !== undefined) {
|
|
194
194
|
closeIcon = closeButtonProps.children;
|
|
195
195
|
}
|
|
196
196
|
|
|
@@ -62,8 +62,8 @@ export const ToastContent = forwardRef<HTMLDivElement, ToastContentProps>(
|
|
|
62
62
|
disableWidth: true,
|
|
63
63
|
onUpdate: useCallback((entry) => {
|
|
64
64
|
const element = entry.target;
|
|
65
|
-
const style =
|
|
66
|
-
const lineHeight = parseFloat(style.lineHeight);
|
|
65
|
+
const style = globalThis.getComputedStyle(element);
|
|
66
|
+
const lineHeight = Number.parseFloat(style.lineHeight);
|
|
67
67
|
if (Number.isNaN(lineHeight)) {
|
|
68
68
|
return;
|
|
69
69
|
}
|
|
@@ -121,7 +121,7 @@ export interface ToastVisibilityTimers {
|
|
|
121
121
|
inactive: boolean;
|
|
122
122
|
startTime: number;
|
|
123
123
|
elapsedTime: number;
|
|
124
|
-
exitTimeout?:
|
|
124
|
+
exitTimeout?: NodeJS.Timeout;
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
/**
|
|
@@ -154,9 +154,9 @@ export class ToastManager {
|
|
|
154
154
|
#emit = (): void => {
|
|
155
155
|
// shallow clone to ensure react updates
|
|
156
156
|
this.#queue = [...this.#queue];
|
|
157
|
-
this.#listeners
|
|
157
|
+
for (const callback of this.#listeners) {
|
|
158
158
|
callback(this.#queue);
|
|
159
|
-
}
|
|
159
|
+
}
|
|
160
160
|
};
|
|
161
161
|
|
|
162
162
|
#getToastIndex = (toastId: string | undefined): number => {
|
|
@@ -404,7 +404,7 @@ export class ToastManager {
|
|
|
404
404
|
startTime: Date.now(),
|
|
405
405
|
elapsedTime: 0,
|
|
406
406
|
};
|
|
407
|
-
|
|
407
|
+
globalThis.clearTimeout(timers.exitTimeout);
|
|
408
408
|
|
|
409
409
|
let duration = visibleTime;
|
|
410
410
|
if (timers.elapsedTime) {
|
|
@@ -412,7 +412,7 @@ export class ToastManager {
|
|
|
412
412
|
}
|
|
413
413
|
|
|
414
414
|
timers.inactive = false;
|
|
415
|
-
timers.exitTimeout =
|
|
415
|
+
timers.exitTimeout = globalThis.setTimeout(() => {
|
|
416
416
|
this.removeToast(toastId, true);
|
|
417
417
|
}, duration);
|
|
418
418
|
this.#timers.set(toastId, timers);
|
|
@@ -431,9 +431,8 @@ export class ToastManager {
|
|
|
431
431
|
return;
|
|
432
432
|
}
|
|
433
433
|
|
|
434
|
-
|
|
435
|
-
const timers = { ...cached };
|
|
436
|
-
timers.inactive = true;
|
|
434
|
+
globalThis.clearTimeout(cached.exitTimeout);
|
|
435
|
+
const timers = { ...cached, inactive: true };
|
|
437
436
|
timers.elapsedTime = Date.now() - timers.startTime + timers.elapsedTime;
|
|
438
437
|
this.#timers.set(toastId, timers);
|
|
439
438
|
this.#updateToast(toastId, { paused: true });
|
|
@@ -499,7 +498,7 @@ export class ToastManager {
|
|
|
499
498
|
*/
|
|
500
499
|
clearTimer = (toastId: string): void => {
|
|
501
500
|
const timer = this.#timers.get(toastId);
|
|
502
|
-
|
|
501
|
+
globalThis.clearTimeout(timer?.exitTimeout);
|
|
503
502
|
this.#timers.delete(toastId);
|
|
504
503
|
};
|
|
505
504
|
|
|
@@ -520,9 +519,9 @@ export class ToastManager {
|
|
|
520
519
|
*/
|
|
521
520
|
clearToasts = (disableEmit = false): void => {
|
|
522
521
|
this.#queue = [];
|
|
523
|
-
this.#timers
|
|
524
|
-
|
|
525
|
-
}
|
|
522
|
+
for (const [, meta] of this.#timers) {
|
|
523
|
+
globalThis.clearTimeout(meta.exitTimeout);
|
|
524
|
+
}
|
|
526
525
|
this.#timers.clear();
|
|
527
526
|
if (!disableEmit) {
|
|
528
527
|
this.#emit();
|
|
@@ -70,7 +70,7 @@ export function useSpinButton<E extends HTMLElement = HTMLDivElement>(
|
|
|
70
70
|
// trigger a noop setValue when `value` and `onValueChange` are provided
|
|
71
71
|
// since `onValueChange is always called with `setValue
|
|
72
72
|
let propSetValue: Dispatch<SpinButtonValue> | undefined;
|
|
73
|
-
if (
|
|
73
|
+
if (propValue !== undefined && options.onValueChange) {
|
|
74
74
|
propSetValue = noop;
|
|
75
75
|
}
|
|
76
76
|
|