@react-md/core 6.5.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/_utils.scss +2 -1
- 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/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/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/chip/Chip.js +1 -1
- package/dist/chip/Chip.js.map +1 -1
- 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/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.js +5 -5
- package/dist/form/Select.js.map +1 -1
- 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/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/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/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/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/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/package.json +3 -1
- 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 +5 -5
- package/src/form/formConfig.ts +1 -1
- package/src/form/inputToggleStyles.ts +9 -4
- 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
- package/dist/form/defaultGetSelectedOptionChildren.d.ts +0 -1
- package/dist/form/getSelectedOptionChildren.d.ts +0 -1
|
@@ -15,7 +15,9 @@ import { defaultExtractor } from "../searching/utils.js";
|
|
|
15
15
|
*/ export const DEFAULT_COLLATOR = new Intl.Collator("en-US", DEFAULT_COLLATOR_OPTIONS);
|
|
16
16
|
export function alphaNumericSort(list, options = {}) {
|
|
17
17
|
const { compare = DEFAULT_COLLATOR.compare, extractor = DEFAULT_EXTRACTOR, descending = false } = options;
|
|
18
|
-
const sorted =
|
|
18
|
+
const sorted = [
|
|
19
|
+
...list
|
|
20
|
+
];
|
|
19
21
|
sorted.sort((a, b)=>{
|
|
20
22
|
const aValue = extractor(a);
|
|
21
23
|
const bValue = extractor(b);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/alphaNumericSort.ts"],"sourcesContent":["import { defaultExtractor } from \"../searching/utils.js\";\nimport { type AutomaticTextExtraction, type TextExtractor } from \"../types.js\";\n\n/**\n * @since 6.2.0\n * @internal\n */\nconst DEFAULT_EXTRACTOR = defaultExtractor(\"alphaNumericSort\");\n\n/** @since 6.0.0 */\nexport const DEFAULT_COLLATOR_OPTIONS = {\n numeric: true,\n caseFirst: \"upper\",\n} as const satisfies Intl.CollatorOptions;\n\n/**\n * The default `Intl.Collator` that should be used for sorting large lists.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare#performance\n * @since 6.0.0\n */\nexport const DEFAULT_COLLATOR = new Intl.Collator(\n \"en-US\",\n DEFAULT_COLLATOR_OPTIONS\n);\n\n/** @since 6.0.0 */\nexport interface AlphaNumericSortOptions<T> {\n /**\n * The extractor is only required when the list of items are not strings.\n *\n * @example Simple Example\n * ```ts\n * interface Item {\n * nameField: string;\n * }\n *\n * const items: Item[] = [{ nameField: 'Hello' }, { nameField: 'World' }];\n *\n * alphaNumericSort(items, {\n * extractor: (item) => item.nameField,\n * });\n * ```\n *\n * For javascript developers, this will throw an error in dev mode if an\n * extractor is not provided for non-string lists.\n *\n * @defaultValue `typeof item === \"string\" ? item : \"\"`\n */\n extractor?: TextExtractor<T>;\n\n /**\n * A custom compare function for sorting the list. This should really only be\n * provided if the language for your app is not `\"en-US\"` or you'd like to\n * provide some custom sorting options.\n *\n * @example Custom Compare using Intl.Collator\n * ```ts\n * const collator = new Intl.Collator(\"en-US\", {\n * numeric: false,\n * caseFirst: \"lower\",\n * usage: \"search\",\n * });\n *\n * alphaNumericSort(items, {\n * compare: collator.compare,\n * })\n * ```\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Collator/Collator\n * @defaultValue `new Intl.Collator(\"en-US\", { numeric: true, caseFirst: \"upper\" }).compare`\n */\n compare?: (a: string, b: string) => number;\n\n /**\n * Setting this to `true` will return the list in descending order instead of\n * ascending.\n *\n * @defaultValue `false`\n */\n descending?: boolean;\n}\n\n/**\n * @example Simple Example\n * ```ts\n * const items = [\"World\", \"Hello\"];\n *\n * const sorted = alphaNumericSort(items);\n * // sorted == [\"Hello\", \"World\"]\n * ```\n *\n * @param list - The list of strings to sort\n * @returns a new sorted list\n */\nexport function alphaNumericSort<T extends AutomaticTextExtraction>(\n list: readonly T[],\n options?: AlphaNumericSortOptions<T>\n): readonly T[];\n/**\n * @example Simple Example\n * ```ts\n * interface Item {\n * nameField: string;\n * }\n *\n * const items: Item[] = [{ nameField: \"World\" }, { nameField: \"Hello\" }];\n *\n * const sorted = alphaNumericSort(items, {\n * extractor: (item) => item.nameField,\n * });\n * // sorted == [{ nameField: \"Hello\" }, { nameField: \"World\" }]\n * ```\n *\n * @param list - The list of items to sort\n * @returns a new sorted list\n */\nexport function alphaNumericSort<T>(\n list: readonly T[],\n options: AlphaNumericSortOptions<T> & { extractor: TextExtractor<T> }\n): readonly T[];\nexport function alphaNumericSort<T>(\n list: readonly T[],\n options: AlphaNumericSortOptions<T> = {}\n): readonly T[] {\n const {\n compare = DEFAULT_COLLATOR.compare,\n extractor = DEFAULT_EXTRACTOR,\n descending = false,\n } = options;\n\n const sorted = list
|
|
1
|
+
{"version":3,"sources":["../../src/utils/alphaNumericSort.ts"],"sourcesContent":["import { defaultExtractor } from \"../searching/utils.js\";\nimport { type AutomaticTextExtraction, type TextExtractor } from \"../types.js\";\n\n/**\n * @since 6.2.0\n * @internal\n */\nconst DEFAULT_EXTRACTOR = defaultExtractor(\"alphaNumericSort\");\n\n/** @since 6.0.0 */\nexport const DEFAULT_COLLATOR_OPTIONS = {\n numeric: true,\n caseFirst: \"upper\",\n} as const satisfies Intl.CollatorOptions;\n\n/**\n * The default `Intl.Collator` that should be used for sorting large lists.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare#performance\n * @since 6.0.0\n */\nexport const DEFAULT_COLLATOR = new Intl.Collator(\n \"en-US\",\n DEFAULT_COLLATOR_OPTIONS\n);\n\n/** @since 6.0.0 */\nexport interface AlphaNumericSortOptions<T> {\n /**\n * The extractor is only required when the list of items are not strings.\n *\n * @example Simple Example\n * ```ts\n * interface Item {\n * nameField: string;\n * }\n *\n * const items: Item[] = [{ nameField: 'Hello' }, { nameField: 'World' }];\n *\n * alphaNumericSort(items, {\n * extractor: (item) => item.nameField,\n * });\n * ```\n *\n * For javascript developers, this will throw an error in dev mode if an\n * extractor is not provided for non-string lists.\n *\n * @defaultValue `typeof item === \"string\" ? item : \"\"`\n */\n extractor?: TextExtractor<T>;\n\n /**\n * A custom compare function for sorting the list. This should really only be\n * provided if the language for your app is not `\"en-US\"` or you'd like to\n * provide some custom sorting options.\n *\n * @example Custom Compare using Intl.Collator\n * ```ts\n * const collator = new Intl.Collator(\"en-US\", {\n * numeric: false,\n * caseFirst: \"lower\",\n * usage: \"search\",\n * });\n *\n * alphaNumericSort(items, {\n * compare: collator.compare,\n * })\n * ```\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Collator/Collator\n * @defaultValue `new Intl.Collator(\"en-US\", { numeric: true, caseFirst: \"upper\" }).compare`\n */\n compare?: (a: string, b: string) => number;\n\n /**\n * Setting this to `true` will return the list in descending order instead of\n * ascending.\n *\n * @defaultValue `false`\n */\n descending?: boolean;\n}\n\n/**\n * @example Simple Example\n * ```ts\n * const items = [\"World\", \"Hello\"];\n *\n * const sorted = alphaNumericSort(items);\n * // sorted == [\"Hello\", \"World\"]\n * ```\n *\n * @param list - The list of strings to sort\n * @returns a new sorted list\n */\nexport function alphaNumericSort<T extends AutomaticTextExtraction>(\n list: readonly T[],\n options?: AlphaNumericSortOptions<T>\n): readonly T[];\n/**\n * @example Simple Example\n * ```ts\n * interface Item {\n * nameField: string;\n * }\n *\n * const items: Item[] = [{ nameField: \"World\" }, { nameField: \"Hello\" }];\n *\n * const sorted = alphaNumericSort(items, {\n * extractor: (item) => item.nameField,\n * });\n * // sorted == [{ nameField: \"Hello\" }, { nameField: \"World\" }]\n * ```\n *\n * @param list - The list of items to sort\n * @returns a new sorted list\n */\nexport function alphaNumericSort<T>(\n list: readonly T[],\n options: AlphaNumericSortOptions<T> & { extractor: TextExtractor<T> }\n): readonly T[];\nexport function alphaNumericSort<T>(\n list: readonly T[],\n options: AlphaNumericSortOptions<T> = {}\n): readonly T[] {\n const {\n compare = DEFAULT_COLLATOR.compare,\n extractor = DEFAULT_EXTRACTOR,\n descending = false,\n } = options;\n\n const sorted = [...list];\n sorted.sort((a, b) => {\n const aValue = extractor(a);\n const bValue = extractor(b);\n\n const value1 = descending ? bValue : aValue;\n const value2 = descending ? aValue : bValue;\n\n return compare(value1, value2);\n });\n\n return sorted;\n}\n"],"names":["defaultExtractor","DEFAULT_EXTRACTOR","DEFAULT_COLLATOR_OPTIONS","numeric","caseFirst","DEFAULT_COLLATOR","Intl","Collator","alphaNumericSort","list","options","compare","extractor","descending","sorted","sort","a","b","aValue","bValue","value1","value2"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,wBAAwB;AAGzD;;;CAGC,GACD,MAAMC,oBAAoBD,iBAAiB;AAE3C,iBAAiB,GACjB,OAAO,MAAME,2BAA2B;IACtCC,SAAS;IACTC,WAAW;AACb,EAA0C;AAE1C;;;;;CAKC,GACD,OAAO,MAAMC,mBAAmB,IAAIC,KAAKC,QAAQ,CAC/C,SACAL,0BACA;AAiGF,OAAO,SAASM,iBACdC,IAAkB,EAClBC,UAAsC,CAAC,CAAC;IAExC,MAAM,EACJC,UAAUN,iBAAiBM,OAAO,EAClCC,YAAYX,iBAAiB,EAC7BY,aAAa,KAAK,EACnB,GAAGH;IAEJ,MAAMI,SAAS;WAAIL;KAAK;IACxBK,OAAOC,IAAI,CAAC,CAACC,GAAGC;QACd,MAAMC,SAASN,UAAUI;QACzB,MAAMG,SAASP,UAAUK;QAEzB,MAAMG,SAASP,aAAaM,SAASD;QACrC,MAAMG,SAASR,aAAaK,SAASC;QAErC,OAAOR,QAAQS,QAAQC;IACzB;IAEA,OAAOP;AACT"}
|
package/dist/utils/bem.js
CHANGED
|
@@ -3,12 +3,13 @@ function modify(base, modifier) {
|
|
|
3
3
|
return base;
|
|
4
4
|
}
|
|
5
5
|
const hasOwn = Object.prototype.hasOwnProperty;
|
|
6
|
-
|
|
6
|
+
let className = base;
|
|
7
|
+
for (const mod of Object.keys(modifier)){
|
|
7
8
|
if (hasOwn.call(modifier, mod) && modifier[mod]) {
|
|
8
|
-
|
|
9
|
+
className += ` ${base}--${mod}`;
|
|
9
10
|
}
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
}
|
|
12
|
+
return className;
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
14
15
|
* Applies the BEM styled class name to an element.
|
|
@@ -50,16 +51,12 @@ function modify(base, modifier) {
|
|
|
50
51
|
* @param base - The base class to use
|
|
51
52
|
* @returns a function to call that generates the full class name
|
|
52
53
|
*/ export function bem(base) {
|
|
53
|
-
if (process.env.NODE_ENV !== "production") {
|
|
54
|
-
|
|
55
|
-
throw new Error("bem requires a base block class but none were provided.");
|
|
56
|
-
}
|
|
54
|
+
if (process.env.NODE_ENV !== "production" && !base) {
|
|
55
|
+
throw new Error("bem requires a base block class but none were provided.");
|
|
57
56
|
}
|
|
58
57
|
function block(elementOrModifier, modifier) {
|
|
59
|
-
if (process.env.NODE_ENV !== "production") {
|
|
60
|
-
|
|
61
|
-
throw new TypeError("bem does not support having two modifier arguments.");
|
|
62
|
-
}
|
|
58
|
+
if (process.env.NODE_ENV !== "production" && typeof elementOrModifier !== "string" && modifier) {
|
|
59
|
+
throw new TypeError("bem does not support having two modifier arguments.");
|
|
63
60
|
}
|
|
64
61
|
if (!elementOrModifier) {
|
|
65
62
|
return base;
|
package/dist/utils/bem.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/bem.ts"],"sourcesContent":["export type BEMModifier = Record<string, unknown>;\n\nfunction modify(base: string, modifier?: BEMModifier): string {\n if (!modifier) {\n return base;\n }\n\n const hasOwn = Object.prototype.hasOwnProperty;\n
|
|
1
|
+
{"version":3,"sources":["../../src/utils/bem.ts"],"sourcesContent":["export type BEMModifier = Record<string, unknown>;\n\nfunction modify(base: string, modifier?: BEMModifier): string {\n if (!modifier) {\n return base;\n }\n\n const hasOwn = Object.prototype.hasOwnProperty;\n let className = base;\n for (const mod of Object.keys(modifier)) {\n if (hasOwn.call(modifier, mod) && modifier[mod]) {\n className += ` ${base}--${mod}`;\n }\n }\n\n return className;\n}\n\n/**\n * Creates the full class name from the base block name. This can be called\n * without any arguments which will just return the base block name (kind of\n * worthless), or you can provide a child element name and modifiers.\n *\n * @since 6.0.0 Converted to an interface that supports the `base` attribute.\n */\nexport interface BEMResult {\n /**\n * @example Simple Example\n * ```ts\n * const styles = bem(\"root\");\n *\n * styles(\"child\"); // \"root__child\"\n * styles(\"child\", {\n * modifier1: true,\n * modifier2: false,\n * }); // \"root__child root__child--modifier-1\"\n * ```\n * @param element - The child element to be prefixed before any modifiers.\n * @param modifier - Any optional modifiers to apply to the block and optional\n * element.\n * @returns the full class name\n */\n (element: string, modifier?: BEMModifier): string;\n\n /**\n * @example Simple Example\n * ```ts\n * const styles = bem(\"root\");\n *\n * styles() // \"root\"\n * styles({\n * modifier1: true,\n * modifier2: false,\n * }); // \"root--modifier-1\"\n * ```\n * @param modifier - Any optional modifiers to apply to the block and optional\n * element.\n * @returns the full class name\n */\n (modifier?: BEMModifier): string;\n\n /**\n * The base class name\n */\n base: string;\n}\n\n/**\n * Applies the BEM styled class name to an element.\n *\n * @example Simple Example\n * ```tsx\n * import { bem } from \"@react-md/core/utils/bem\":\n *\n * const styles = bem(\"my-component\"):\n *\n * export function MyComponent(props) {\n * const className = styles({\n * always: true,\n * never: false,\n * \"some-condition\": props.something,\n * }):\n * const childClassName = styles('child', {\n * always: true,\n * never: false,\n * \"some-condition\": props.something,\n * });\n *\n * // With a false-like `props.something`\n * // className === \"my-component__child my-component__child--always\"\n * // childClassName === \"my-component my-component--always\"\n * // With a truthy `props.something`\n * // className === \"my-component my-component--always my-component--some-condition\"\n * // childClassName === \"my-component__child my-component__child--always my-component__child--some-condition\"\n *\n * return (\n * <div className={className}>\n * <div className={childClassName} />\n * </div>\n * ):\n * }\n * ```\n *\n * @see https://en.bem.info/methodology/css/\n * @param base - The base class to use\n * @returns a function to call that generates the full class name\n */\nexport function bem(base: string): BEMResult {\n if (process.env.NODE_ENV !== \"production\" && !base) {\n throw new Error(\"bem requires a base block class but none were provided.\");\n }\n\n function block(\n elementOrModifier?: BEMModifier | string,\n modifier?: BEMModifier\n ): string {\n if (\n process.env.NODE_ENV !== \"production\" &&\n typeof elementOrModifier !== \"string\" &&\n modifier\n ) {\n throw new TypeError(\n \"bem does not support having two modifier arguments.\"\n );\n }\n\n if (!elementOrModifier) {\n return base;\n }\n\n if (typeof elementOrModifier !== \"string\") {\n return modify(base, elementOrModifier);\n }\n\n return modify(`${base}__${elementOrModifier}`, modifier);\n }\n block.base = base;\n return block;\n}\n"],"names":["modify","base","modifier","hasOwn","Object","prototype","hasOwnProperty","className","mod","keys","call","bem","process","env","NODE_ENV","Error","block","elementOrModifier","TypeError"],"mappings":"AAEA,SAASA,OAAOC,IAAY,EAAEC,QAAsB;IAClD,IAAI,CAACA,UAAU;QACb,OAAOD;IACT;IAEA,MAAME,SAASC,OAAOC,SAAS,CAACC,cAAc;IAC9C,IAAIC,YAAYN;IAChB,KAAK,MAAMO,OAAOJ,OAAOK,IAAI,CAACP,UAAW;QACvC,IAAIC,OAAOO,IAAI,CAACR,UAAUM,QAAQN,QAAQ,CAACM,IAAI,EAAE;YAC/CD,aAAa,CAAC,CAAC,EAAEN,KAAK,EAAE,EAAEO,KAAK;QACjC;IACF;IAEA,OAAOD;AACT;AAmDA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCC,GACD,OAAO,SAASI,IAAIV,IAAY;IAC9B,IAAIW,QAAQC,GAAG,CAACC,QAAQ,KAAK,gBAAgB,CAACb,MAAM;QAClD,MAAM,IAAIc,MAAM;IAClB;IAEA,SAASC,MACPC,iBAAwC,EACxCf,QAAsB;QAEtB,IACEU,QAAQC,GAAG,CAACC,QAAQ,KAAK,gBACzB,OAAOG,sBAAsB,YAC7Bf,UACA;YACA,MAAM,IAAIgB,UACR;QAEJ;QAEA,IAAI,CAACD,mBAAmB;YACtB,OAAOhB;QACT;QAEA,IAAI,OAAOgB,sBAAsB,UAAU;YACzC,OAAOjB,OAAOC,MAAMgB;QACtB;QAEA,OAAOjB,OAAO,GAAGC,KAAK,EAAE,EAAEgB,mBAAmB,EAAEf;IACjD;IACAc,MAAMf,IAAI,GAAGA;IACb,OAAOe;AACT"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/getNumberOfDigits.ts"],"sourcesContent":["/**\n * @since 6.4.0\n * @see {@link https://stackoverflow.com/a/28203456}\n */\nexport function getNumberOfDigits(value: number): number;\nexport function getNumberOfDigits(value: undefined): undefined;\nexport function getNumberOfDigits(\n value: number | undefined\n): number | undefined;\nexport function getNumberOfDigits(\n value: number | undefined\n): number | undefined {\n if (typeof value !== \"number\") {\n return;\n }\n\n return (Math.log10((value ^ (value >> 31)) - (value >> 31)) | 0) + 1;\n}\n"],"names":["getNumberOfDigits","value","Math","log10"],"mappings":"AAAA;;;CAGC,GAMD,OAAO,SAASA,kBACdC,KAAyB;IAEzB,IAAI,OAAOA,UAAU,UAAU;QAC7B;IACF;IAEA,OAAO,AAACC,CAAAA,KAAKC,KAAK,CAAC,AAACF,CAAAA,QAASA,SAAS,EAAE,IAAMA,CAAAA,SAAS,EAAC,KAAM,CAAA,IAAK;AACrE"}
|
|
1
|
+
{"version":3,"sources":["../../src/utils/getNumberOfDigits.ts"],"sourcesContent":["/**\n * @since 6.4.0\n * @see {@link https://stackoverflow.com/a/28203456}\n */\nexport function getNumberOfDigits(value: number): number;\nexport function getNumberOfDigits(value: undefined): undefined;\nexport function getNumberOfDigits(\n value: number | undefined\n): number | undefined;\nexport function getNumberOfDigits(\n value: number | undefined\n): number | undefined {\n if (typeof value !== \"number\") {\n return;\n }\n\n // eslint-disable-next-line unicorn/prefer-math-trunc\n return (Math.log10((value ^ (value >> 31)) - (value >> 31)) | 0) + 1;\n}\n"],"names":["getNumberOfDigits","value","Math","log10"],"mappings":"AAAA;;;CAGC,GAMD,OAAO,SAASA,kBACdC,KAAyB;IAEzB,IAAI,OAAOA,UAAU,UAAU;QAC7B;IACF;IAEA,qDAAqD;IACrD,OAAO,AAACC,CAAAA,KAAKC,KAAK,CAAC,AAACF,CAAAA,QAASA,SAAS,EAAE,IAAMA,CAAAA,SAAS,EAAC,KAAM,CAAA,IAAK;AACrE"}
|
|
@@ -4,7 +4,7 @@ import { getMiddleOfRange } from "./getMiddleOfRange.js";
|
|
|
4
4
|
* @since 6.0.0
|
|
5
5
|
*/ export function getRangeDefaultValue(options) {
|
|
6
6
|
const { defaultValue } = options;
|
|
7
|
-
if (
|
|
7
|
+
if (defaultValue !== undefined) {
|
|
8
8
|
return defaultValue;
|
|
9
9
|
}
|
|
10
10
|
return ()=>getMiddleOfRange(options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/getRangeDefaultValue.ts"],"sourcesContent":["import { type UseStateInitializer } from \"../types.js\";\nimport {\n type GetMiddleOfRangeOptions,\n getMiddleOfRange,\n} from \"./getMiddleOfRange.js\";\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport interface RangeDefaultValueOptions extends GetMiddleOfRangeOptions {\n defaultValue?: UseStateInitializer<number>;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport function getRangeDefaultValue(\n options: RangeDefaultValueOptions\n): UseStateInitializer<number> {\n const { defaultValue } = options;\n if (
|
|
1
|
+
{"version":3,"sources":["../../src/utils/getRangeDefaultValue.ts"],"sourcesContent":["import { type UseStateInitializer } from \"../types.js\";\nimport {\n type GetMiddleOfRangeOptions,\n getMiddleOfRange,\n} from \"./getMiddleOfRange.js\";\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport interface RangeDefaultValueOptions extends GetMiddleOfRangeOptions {\n defaultValue?: UseStateInitializer<number>;\n}\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport function getRangeDefaultValue(\n options: RangeDefaultValueOptions\n): UseStateInitializer<number> {\n const { defaultValue } = options;\n if (defaultValue !== undefined) {\n return defaultValue;\n }\n\n return () => getMiddleOfRange(options);\n}\n"],"names":["getMiddleOfRange","getRangeDefaultValue","options","defaultValue","undefined"],"mappings":"AACA,SAEEA,gBAAgB,QACX,wBAAwB;AAU/B;;;CAGC,GACD,OAAO,SAASC,qBACdC,OAAiC;IAEjC,MAAM,EAAEC,YAAY,EAAE,GAAGD;IACzB,IAAIC,iBAAiBC,WAAW;QAC9B,OAAOD;IACT;IAEA,OAAO,IAAMH,iBAAiBE;AAChC"}
|
package/dist/utils/nearest.js
CHANGED
|
@@ -17,8 +17,8 @@ import { getNumberOfDigits } from "./getNumberOfDigits.js";
|
|
|
17
17
|
// precision gets weird:
|
|
18
18
|
// 0.28 * 100 === 28.000000000000004
|
|
19
19
|
const step = range / steps;
|
|
20
|
-
const decimals = Number.isInteger(step) ? range % steps : getNumberOfDigits(parseInt(`${step}`.split(".")[1]));
|
|
21
|
-
return Math.min(max, Math.max(min, parseFloat((zeroToOne * range + min).toFixed(decimals))));
|
|
20
|
+
const decimals = Number.isInteger(step) ? range % steps : getNumberOfDigits(Number.parseInt(`${step}`.split(".")[1]));
|
|
21
|
+
return Math.min(max, Math.max(min, Number.parseFloat((zeroToOne * range + min).toFixed(decimals))));
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
//# sourceMappingURL=nearest.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/nearest.ts"],"sourcesContent":["import { type MinMaxRange } from \"../types.js\";\nimport { getNumberOfDigits } from \"./getNumberOfDigits.js\";\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport interface NearestOptions extends MinMaxRange {\n steps: number;\n value: number;\n\n /** @defaultValue `max - min` */\n range?: number;\n}\n\n/**\n * Rounds a number to the nearest step within a min/max range.\n *\n * @see https://stackoverflow.com/a/13635455\n * @returns the value rounded to the nearest step in the min/max range\n * @since 2.5.0 Added the `range` param\n * @since 6.0.0 Converted to using an object instead of multiple arguments.\n */\nexport function nearest(options: NearestOptions): number {\n const { min, max, steps, value, range = max - min } = options;\n if (min === max) {\n return max;\n }\n\n const rounded = Math.round(((value - min) * steps) / range) / steps;\n const zeroToOne = Math.min(Math.max(rounded, 0), 1);\n\n // have to calculate the number of allowed decimal places since decimal\n // precision gets weird:\n // 0.28 * 100 === 28.000000000000004\n const step = range / steps;\n const decimals = Number.isInteger(step)\n ? range % steps\n : getNumberOfDigits(parseInt(`${step}`.split(\".\")[1]));\n\n return Math.min(\n max,\n Math.max(min
|
|
1
|
+
{"version":3,"sources":["../../src/utils/nearest.ts"],"sourcesContent":["import { type MinMaxRange } from \"../types.js\";\nimport { getNumberOfDigits } from \"./getNumberOfDigits.js\";\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport interface NearestOptions extends MinMaxRange {\n steps: number;\n value: number;\n\n /** @defaultValue `max - min` */\n range?: number;\n}\n\n/**\n * Rounds a number to the nearest step within a min/max range.\n *\n * @see https://stackoverflow.com/a/13635455\n * @returns the value rounded to the nearest step in the min/max range\n * @since 2.5.0 Added the `range` param\n * @since 6.0.0 Converted to using an object instead of multiple arguments.\n */\nexport function nearest(options: NearestOptions): number {\n const { min, max, steps, value, range = max - min } = options;\n if (min === max) {\n return max;\n }\n\n const rounded = Math.round(((value - min) * steps) / range) / steps;\n const zeroToOne = Math.min(Math.max(rounded, 0), 1);\n\n // have to calculate the number of allowed decimal places since decimal\n // precision gets weird:\n // 0.28 * 100 === 28.000000000000004\n const step = range / steps;\n const decimals = Number.isInteger(step)\n ? range % steps\n : getNumberOfDigits(Number.parseInt(`${step}`.split(\".\")[1]));\n\n return Math.min(\n max,\n Math.max(\n min,\n Number.parseFloat((zeroToOne * range + min).toFixed(decimals))\n )\n );\n}\n"],"names":["getNumberOfDigits","nearest","options","min","max","steps","value","range","rounded","Math","round","zeroToOne","step","decimals","Number","isInteger","parseInt","split","parseFloat","toFixed"],"mappings":"AACA,SAASA,iBAAiB,QAAQ,yBAAyB;AAc3D;;;;;;;CAOC,GACD,OAAO,SAASC,QAAQC,OAAuB;IAC7C,MAAM,EAAEC,GAAG,EAAEC,GAAG,EAAEC,KAAK,EAAEC,KAAK,EAAEC,QAAQH,MAAMD,GAAG,EAAE,GAAGD;IACtD,IAAIC,QAAQC,KAAK;QACf,OAAOA;IACT;IAEA,MAAMI,UAAUC,KAAKC,KAAK,CAAC,AAAEJ,CAAAA,QAAQH,GAAE,IAAKE,QAASE,SAASF;IAC9D,MAAMM,YAAYF,KAAKN,GAAG,CAACM,KAAKL,GAAG,CAACI,SAAS,IAAI;IAEjD,uEAAuE;IACvE,wBAAwB;IACxB,oCAAoC;IACpC,MAAMI,OAAOL,QAAQF;IACrB,MAAMQ,WAAWC,OAAOC,SAAS,CAACH,QAC9BL,QAAQF,QACRL,kBAAkBc,OAAOE,QAAQ,CAAC,GAAGJ,MAAM,CAACK,KAAK,CAAC,IAAI,CAAC,EAAE;IAE7D,OAAOR,KAAKN,GAAG,CACbC,KACAK,KAAKL,GAAG,CACND,KACAW,OAAOI,UAAU,CAAC,AAACP,CAAAA,YAAYJ,QAAQJ,GAAE,EAAGgB,OAAO,CAACN;AAG1D"}
|
|
@@ -25,15 +25,15 @@
|
|
|
25
25
|
if (value.includes("calc")) {
|
|
26
26
|
throw new Error(`Unable to parse a unit with \`calc\`: "${value}"`);
|
|
27
27
|
}
|
|
28
|
-
const parsed = parseFloat(value);
|
|
28
|
+
const parsed = Number.parseFloat(value);
|
|
29
29
|
if (/px$/i.test(value)) {
|
|
30
30
|
return parsed;
|
|
31
31
|
}
|
|
32
|
-
if (
|
|
32
|
+
if (globalThis.window === undefined) {
|
|
33
33
|
return parsed * fallbackFontSize;
|
|
34
34
|
}
|
|
35
35
|
const styleContainer = !container || /rem$/i.test(value) ? document.documentElement : container;
|
|
36
|
-
const fontSize = parseFloat(
|
|
36
|
+
const fontSize = Number.parseFloat(globalThis.getComputedStyle(styleContainer).fontSize || `${fallbackFontSize}px`);
|
|
37
37
|
return parsed * fontSize;
|
|
38
38
|
}
|
|
39
39
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/parseCssLengthUnit.ts"],"sourcesContent":["/** @internal */\nexport interface ParseCssLengthUnitOptions {\n /**\n * The css unit to convert to a numeric value.\n */\n value: number | string;\n\n /**\n * @defaultValue `16`\n */\n fallbackFontSize?: number;\n\n /**\n * @defaultValue `document.documentElement`\n */\n container?: Element | null;\n}\n\n/**\n * This is used to convert CSS length units into a number. At this time, it really only supports\n * - `px`\n * - `rem`\n * - `em` (if {@link ParseCssLengthUnitOptions.container} is provided)\n *\n * @example Simple Example\n * ```ts\n * parseCssLengthUnit({ value: \"24px\" }) // 24\n * parseCssLengthUnit({ value: \"3.5rem\" }) // 56\n * parseCssLengthUnit({\n * value: \"3em\",\n * container: document.querySelector(SOME_QUERY),\n * }); // container's computed fontSize * 3\n * ```\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units#lengths}\n * @internal\n * @since 6.0.0 This was renamed from `unitToNumber`\n */\nexport function parseCssLengthUnit(options: ParseCssLengthUnitOptions): number {\n const { value, container, fallbackFontSize = 16 } = options;\n\n if (typeof value === \"number\") {\n return value;\n }\n\n if (value.includes(\"calc\")) {\n throw new Error(`Unable to parse a unit with \\`calc\\`: \"${value}\"`);\n }\n\n const parsed = parseFloat(value);\n if (/px$/i.test(value)) {\n return parsed;\n }\n\n if (
|
|
1
|
+
{"version":3,"sources":["../../src/utils/parseCssLengthUnit.ts"],"sourcesContent":["/** @internal */\nexport interface ParseCssLengthUnitOptions {\n /**\n * The css unit to convert to a numeric value.\n */\n value: number | string;\n\n /**\n * @defaultValue `16`\n */\n fallbackFontSize?: number;\n\n /**\n * @defaultValue `document.documentElement`\n */\n container?: Element | null;\n}\n\n/**\n * This is used to convert CSS length units into a number. At this time, it really only supports\n * - `px`\n * - `rem`\n * - `em` (if {@link ParseCssLengthUnitOptions.container} is provided)\n *\n * @example Simple Example\n * ```ts\n * parseCssLengthUnit({ value: \"24px\" }) // 24\n * parseCssLengthUnit({ value: \"3.5rem\" }) // 56\n * parseCssLengthUnit({\n * value: \"3em\",\n * container: document.querySelector(SOME_QUERY),\n * }); // container's computed fontSize * 3\n * ```\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/Values_and_units#lengths}\n * @internal\n * @since 6.0.0 This was renamed from `unitToNumber`\n */\nexport function parseCssLengthUnit(options: ParseCssLengthUnitOptions): number {\n const { value, container, fallbackFontSize = 16 } = options;\n\n if (typeof value === \"number\") {\n return value;\n }\n\n if (value.includes(\"calc\")) {\n throw new Error(`Unable to parse a unit with \\`calc\\`: \"${value}\"`);\n }\n\n const parsed = Number.parseFloat(value);\n if (/px$/i.test(value)) {\n return parsed;\n }\n\n if (globalThis.window === undefined) {\n return parsed * fallbackFontSize;\n }\n\n const styleContainer =\n !container || /rem$/i.test(value) ? document.documentElement : container;\n\n const fontSize = Number.parseFloat(\n globalThis.getComputedStyle(styleContainer).fontSize ||\n `${fallbackFontSize}px`\n );\n\n return parsed * fontSize;\n}\n"],"names":["parseCssLengthUnit","options","value","container","fallbackFontSize","includes","Error","parsed","Number","parseFloat","test","globalThis","window","undefined","styleContainer","document","documentElement","fontSize","getComputedStyle"],"mappings":"AAAA,cAAc,GAkBd;;;;;;;;;;;;;;;;;;;CAmBC,GACD,OAAO,SAASA,mBAAmBC,OAAkC;IACnE,MAAM,EAAEC,KAAK,EAAEC,SAAS,EAAEC,mBAAmB,EAAE,EAAE,GAAGH;IAEpD,IAAI,OAAOC,UAAU,UAAU;QAC7B,OAAOA;IACT;IAEA,IAAIA,MAAMG,QAAQ,CAAC,SAAS;QAC1B,MAAM,IAAIC,MAAM,CAAC,uCAAuC,EAAEJ,MAAM,CAAC,CAAC;IACpE;IAEA,MAAMK,SAASC,OAAOC,UAAU,CAACP;IACjC,IAAI,OAAOQ,IAAI,CAACR,QAAQ;QACtB,OAAOK;IACT;IAEA,IAAII,WAAWC,MAAM,KAAKC,WAAW;QACnC,OAAON,SAASH;IAClB;IAEA,MAAMU,iBACJ,CAACX,aAAa,QAAQO,IAAI,CAACR,SAASa,SAASC,eAAe,GAAGb;IAEjE,MAAMc,WAAWT,OAAOC,UAAU,CAChCE,WAAWO,gBAAgB,CAACJ,gBAAgBG,QAAQ,IAClD,GAAGb,iBAAiB,EAAE,CAAC;IAG3B,OAAOG,SAASU;AAClB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utils/trigonometry.ts"],"sourcesContent":["import { type Point } from \"../types.js\";\n\n/**\n * @since 6.3.0\n * @internal\n */\nexport const radiansToDegrees = (radians: number): number =>\n (radians * 180) / Math.PI;\n\n/**\n * @since 6.3.0\n * @internal\n */\nexport const degreesToRadians = (degrees: number): number =>\n (degrees * Math.PI) / 180;\n\n/**\n * @since 6.3.0\n * @internal\n */\ninterface IsPointInCircleOptions {\n point: Point;\n center: Point;\n radius: number;\n}\n\n/**\n * @since 6.3.0\n * @internal\n */\nexport function isPointInCircle(options: IsPointInCircleOptions): boolean {\n const { point, center, radius } = options;\n\n const distance = (center.x - point.x) ** 2 + (center.y - point.y) ** 2;\n return distance <= radius ** 2;\n}\n\n/**\n * @internal\n * @since 6.3.0\n */\nexport function calcHypotenuse(point: Point): number {\n const { x, y } = point;\n\n return Math.
|
|
1
|
+
{"version":3,"sources":["../../src/utils/trigonometry.ts"],"sourcesContent":["import { type Point } from \"../types.js\";\n\n/**\n * @since 6.3.0\n * @internal\n */\nexport const radiansToDegrees = (radians: number): number =>\n (radians * 180) / Math.PI;\n\n/**\n * @since 6.3.0\n * @internal\n */\nexport const degreesToRadians = (degrees: number): number =>\n (degrees * Math.PI) / 180;\n\n/**\n * @since 6.3.0\n * @internal\n */\ninterface IsPointInCircleOptions {\n point: Point;\n center: Point;\n radius: number;\n}\n\n/**\n * @since 6.3.0\n * @internal\n */\nexport function isPointInCircle(options: IsPointInCircleOptions): boolean {\n const { point, center, radius } = options;\n\n const distance = (center.x - point.x) ** 2 + (center.y - point.y) ** 2;\n return distance <= radius ** 2;\n}\n\n/**\n * @internal\n * @since 6.3.0\n */\nexport function calcHypotenuse(point: Point): number {\n const { x, y } = point;\n\n return Math.hypot(x, y);\n}\n"],"names":["radiansToDegrees","radians","Math","PI","degreesToRadians","degrees","isPointInCircle","options","point","center","radius","distance","x","y","calcHypotenuse","hypot"],"mappings":"AAEA;;;CAGC,GACD,OAAO,MAAMA,mBAAmB,CAACC,UAC/B,AAACA,UAAU,MAAOC,KAAKC,EAAE,CAAC;AAE5B;;;CAGC,GACD,OAAO,MAAMC,mBAAmB,CAACC,UAC/B,AAACA,UAAUH,KAAKC,EAAE,GAAI,IAAI;AAY5B;;;CAGC,GACD,OAAO,SAASG,gBAAgBC,OAA+B;IAC7D,MAAM,EAAEC,KAAK,EAAEC,MAAM,EAAEC,MAAM,EAAE,GAAGH;IAElC,MAAMI,WAAW,AAACF,CAAAA,OAAOG,CAAC,GAAGJ,MAAMI,CAAC,AAADA,KAAM,IAAI,AAACH,CAAAA,OAAOI,CAAC,GAAGL,MAAMK,CAAC,AAADA,KAAM;IACrE,OAAOF,YAAYD,UAAU;AAC/B;AAEA;;;CAGC,GACD,OAAO,SAASI,eAAeN,KAAY;IACzC,MAAM,EAAEI,CAAC,EAAEC,CAAC,EAAE,GAAGL;IAEjB,OAAON,KAAKa,KAAK,CAACH,GAAGC;AACvB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-md/core",
|
|
3
|
-
"version": "6.5.
|
|
3
|
+
"version": "6.5.1",
|
|
4
4
|
"description": "The core components and functionality for react-md.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sass": "./dist/_core.scss",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"./autocomplete/AutocompleteListboxChildren": null,
|
|
30
30
|
"./autocomplete/utils": null,
|
|
31
31
|
"./error-boundary/context": null,
|
|
32
|
+
"./files/createAcceptFromExtensions": null,
|
|
32
33
|
"./form/InputToggleIcon": null,
|
|
33
34
|
"./form/ResizingTextAreaWrapper": null,
|
|
34
35
|
"./form/SliderTrack": null,
|
|
@@ -177,6 +178,7 @@
|
|
|
177
178
|
"clean-dist": "rm -rf dist",
|
|
178
179
|
"clean": "rm -rf .turbo dist node_modules",
|
|
179
180
|
"typecheck": "tsc --noEmit",
|
|
181
|
+
"typecheck-watch": "pnpm typecheck --watch",
|
|
180
182
|
"check-format": "prettier --check .",
|
|
181
183
|
"format": "prettier --write .",
|
|
182
184
|
"lint-scripts": "eslint \"src/**/*.{ts,tsx,js,jsx,cjs,mjs}\"",
|
|
@@ -28,11 +28,11 @@ export const AutocompleteChip = forwardRef<
|
|
|
28
28
|
let rightAddon = propRightAddon;
|
|
29
29
|
let ariaDescription = propAriaDescription;
|
|
30
30
|
const removeIcon = getIcon("remove", propRemoveIcon);
|
|
31
|
-
if (
|
|
31
|
+
if (rightAddon === undefined) {
|
|
32
32
|
rightAddon = removeIcon;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
if (
|
|
35
|
+
if (ariaDescription === undefined && typeof children === "string") {
|
|
36
36
|
ariaDescription = `Remove "${children}"`;
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -49,7 +49,7 @@ export function AutocompleteListboxChildren<Option extends AutocompleteOption>(
|
|
|
49
49
|
return (
|
|
50
50
|
<>
|
|
51
51
|
{children}
|
|
52
|
-
{
|
|
52
|
+
{availableOptions.length === 0 && noOptionsChildren}
|
|
53
53
|
{availableOptions.map((option, index) => {
|
|
54
54
|
const label = getOptionLabel(option);
|
|
55
55
|
const optionProps = getOptionProps({
|
|
@@ -136,7 +136,7 @@ export function useAutocomplete<
|
|
|
136
136
|
propMultiselect ??
|
|
137
137
|
(!!value && typeof value === "object" && "length" in value);
|
|
138
138
|
let updateQueryOnSelect = propUpdateQueryOnSelect;
|
|
139
|
-
if (
|
|
139
|
+
if (propUpdateQueryOnSelect === undefined) {
|
|
140
140
|
updateQueryOnSelect = multiselect ? "clear" : "selected";
|
|
141
141
|
}
|
|
142
142
|
|
|
@@ -294,13 +294,13 @@ export function useAutocomplete<
|
|
|
294
294
|
let unselectedIcon = propUnselectedIcon;
|
|
295
295
|
let disableSelectedIcon = propDisableSelectedIcon;
|
|
296
296
|
if (multiselect && checkboxes) {
|
|
297
|
-
if (
|
|
297
|
+
if (selectedIcon === undefined) {
|
|
298
298
|
selectedIcon = getIcon("checkboxChecked");
|
|
299
299
|
}
|
|
300
|
-
if (
|
|
300
|
+
if (unselectedIcon === undefined) {
|
|
301
301
|
unselectedIcon = getIcon("checkbox");
|
|
302
302
|
}
|
|
303
|
-
} else if (
|
|
303
|
+
} else if (disableSelectedIcon === undefined) {
|
|
304
304
|
disableSelectedIcon = true;
|
|
305
305
|
}
|
|
306
306
|
|
|
@@ -46,7 +46,7 @@ export function getDefaultValue<Option extends AutocompleteOption>(
|
|
|
46
46
|
getOptionLabel,
|
|
47
47
|
} = options;
|
|
48
48
|
|
|
49
|
-
if (
|
|
49
|
+
if (defaultValue !== undefined) {
|
|
50
50
|
return defaultValue;
|
|
51
51
|
}
|
|
52
52
|
|
|
@@ -66,7 +66,7 @@ export function getDefaultValue<Option extends AutocompleteOption>(
|
|
|
66
66
|
if (query) {
|
|
67
67
|
q = query;
|
|
68
68
|
} else if (defaultQuery) {
|
|
69
|
-
q = defaultQuery
|
|
69
|
+
q = typeof defaultQuery === "function" ? defaultQuery() : defaultQuery;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
if (!q) {
|
|
@@ -178,7 +178,7 @@ export function enforceSelectedValue<Option extends AutocompleteOption>(
|
|
|
178
178
|
return;
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
|
|
181
|
+
globalThis.requestAnimationFrame(() => {
|
|
182
182
|
if (
|
|
183
183
|
container.contains(document.activeElement) ||
|
|
184
184
|
popupRef.current?.contains(document.activeElement)
|
package/src/box/styles.ts
CHANGED
|
@@ -428,14 +428,14 @@ function applyBoxVarGroup(
|
|
|
428
428
|
value,
|
|
429
429
|
});
|
|
430
430
|
if (value && typeof value === "object") {
|
|
431
|
-
|
|
431
|
+
for (const media of BREAKPOINTS) {
|
|
432
432
|
style = applyBoxVar({
|
|
433
433
|
type,
|
|
434
434
|
style,
|
|
435
435
|
media,
|
|
436
436
|
value: value[media],
|
|
437
437
|
});
|
|
438
|
-
}
|
|
438
|
+
}
|
|
439
439
|
}
|
|
440
440
|
return style;
|
|
441
441
|
}
|
|
@@ -310,9 +310,7 @@ export const AsyncButton = forwardRef<HTMLButtonElement, AsyncButtonProps>(
|
|
|
310
310
|
onClick={handleAsync((event) => Promise.resolve(onClick(event)))}
|
|
311
311
|
>
|
|
312
312
|
{beforeAddon}
|
|
313
|
-
{loading &&
|
|
314
|
-
? loadingChildren
|
|
315
|
-
: children}
|
|
313
|
+
{loading && loadingChildren !== undefined ? loadingChildren : children}
|
|
316
314
|
{afterAddon}
|
|
317
315
|
{overlayElement}
|
|
318
316
|
</Button>
|
package/src/chip/Chip.tsx
CHANGED
|
@@ -271,8 +271,7 @@ export const Chip = forwardRef<HTMLButtonElement, ChipProps>(
|
|
|
271
271
|
const isTransitionable =
|
|
272
272
|
!selectedThemed &&
|
|
273
273
|
typeof selected === "boolean" &&
|
|
274
|
-
|
|
275
|
-
"undefined";
|
|
274
|
+
(selectedIconAfter ? propRightAddon : propLeftAddon) === undefined;
|
|
276
275
|
const selectedIcon = useMaxWidthTransition({
|
|
277
276
|
element: selectedIconNode,
|
|
278
277
|
transitionIn: !!selected,
|
package/src/cssUtils.ts
CHANGED
|
@@ -115,6 +115,16 @@ export interface TextCssUtilsOptions {
|
|
|
115
115
|
textOverflow?: TextOverflow;
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
+
/**
|
|
119
|
+
* Set this to `true` to allow the content to only be visible for screen
|
|
120
|
+
* readers. Set this to `"focusable"` to allow the content to be visible to
|
|
121
|
+
* screen readers and once focused. Set this to `"phone"` to only render the
|
|
122
|
+
* content as screen reader only text on phones.
|
|
123
|
+
*
|
|
124
|
+
* @since 6.5.1
|
|
125
|
+
*/
|
|
126
|
+
export type SrOnlyBehavior = boolean | "focusable" | "phone";
|
|
127
|
+
|
|
118
128
|
/**
|
|
119
129
|
* @since 6.0.0
|
|
120
130
|
*/
|
|
@@ -122,14 +132,10 @@ export interface CssUtilsOptions extends TextCssUtilsOptions {
|
|
|
122
132
|
className?: string;
|
|
123
133
|
|
|
124
134
|
/**
|
|
125
|
-
*
|
|
126
|
-
* readers. Set this to `"focusable"` to allow the content to be visible to
|
|
127
|
-
* screen readers and once focused. Set this to `"phone"` to only render the
|
|
128
|
-
* the content as screen reader only text on phones.
|
|
129
|
-
*
|
|
135
|
+
* @see {@link SrOnlyBehavior}
|
|
130
136
|
* @defaultValue `false`
|
|
131
137
|
*/
|
|
132
|
-
srOnly?:
|
|
138
|
+
srOnly?: SrOnlyBehavior;
|
|
133
139
|
|
|
134
140
|
/**
|
|
135
141
|
* Set this to `"current-color"` to inherit the current text color or a
|
package/src/delegateEvent.ts
CHANGED
|
@@ -49,8 +49,8 @@ function createEventHandler(
|
|
|
49
49
|
): (event: WindowEventMap[keyof WindowEventMap]) => void {
|
|
50
50
|
let running = false;
|
|
51
51
|
const runCallbacks = (event: WindowEventMap[keyof WindowEventMap]) => () => {
|
|
52
|
-
for (
|
|
53
|
-
|
|
52
|
+
for (const callback of callbacks) {
|
|
53
|
+
callback(event);
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
running = false;
|
|
@@ -67,7 +67,7 @@ function createEventHandler(
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
running = true;
|
|
70
|
-
|
|
70
|
+
globalThis.requestAnimationFrame(runCallbacks(event));
|
|
71
71
|
};
|
|
72
72
|
}
|
|
73
73
|
|
|
@@ -77,7 +77,7 @@ function createEventHandler(
|
|
|
77
77
|
*/
|
|
78
78
|
function createDelegatedEventHandler(
|
|
79
79
|
eventType: string,
|
|
80
|
-
eventTarget: DelegatedEventTarget = window,
|
|
80
|
+
eventTarget: DelegatedEventTarget = globalThis.window,
|
|
81
81
|
throttle = false,
|
|
82
82
|
options?: boolean | AddEventListenerOptions
|
|
83
83
|
): DelegatedEventHandler {
|
|
@@ -91,11 +91,11 @@ function createDelegatedEventHandler(
|
|
|
91
91
|
* event will also be started.
|
|
92
92
|
*/
|
|
93
93
|
add: (callback: EventListener) => {
|
|
94
|
-
if (
|
|
94
|
+
if (callbacks.length === 0) {
|
|
95
95
|
eventTarget.addEventListener(eventType, handler, options);
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
if (callbacks.
|
|
98
|
+
if (!callbacks.includes(callback)) {
|
|
99
99
|
callbacks.push(callback);
|
|
100
100
|
}
|
|
101
101
|
},
|
|
@@ -107,10 +107,10 @@ function createDelegatedEventHandler(
|
|
|
107
107
|
*/
|
|
108
108
|
remove: (callback: EventListener) => {
|
|
109
109
|
const i = callbacks.indexOf(callback);
|
|
110
|
-
if (i
|
|
110
|
+
if (i !== -1) {
|
|
111
111
|
callbacks.splice(i, 1);
|
|
112
112
|
|
|
113
|
-
if (
|
|
113
|
+
if (callbacks.length === 0) {
|
|
114
114
|
eventTarget.removeEventListener(eventType, handler, options);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
@@ -145,7 +145,7 @@ function createDelegatedEventHandler(
|
|
|
145
145
|
*/
|
|
146
146
|
export function delegateEvent(
|
|
147
147
|
eventType: string,
|
|
148
|
-
eventTarget: DelegatedEventTarget = window,
|
|
148
|
+
eventTarget: DelegatedEventTarget = globalThis.window,
|
|
149
149
|
throttle: boolean = eventType === "resize" || eventType === "scroll",
|
|
150
150
|
options?: boolean | AddEventListenerOptions
|
|
151
151
|
): DelegatedEventHandler {
|
|
@@ -477,11 +477,11 @@ export function useDraggable<E extends HTMLElement>(
|
|
|
477
477
|
const stopKey = isTouch ? "touchend" : "mouseup";
|
|
478
478
|
const passive = isTouch ? { passive: false } : undefined;
|
|
479
479
|
|
|
480
|
-
|
|
481
|
-
|
|
480
|
+
globalThis.addEventListener(updateKey, updatePosition, passive);
|
|
481
|
+
globalThis.addEventListener(stopKey, stopDragging);
|
|
482
482
|
return () => {
|
|
483
|
-
|
|
484
|
-
|
|
483
|
+
globalThis.removeEventListener(updateKey, updatePosition);
|
|
484
|
+
globalThis.removeEventListener(stopKey, stopDragging);
|
|
485
485
|
};
|
|
486
486
|
}, [
|
|
487
487
|
dragging,
|
package/src/draggable/utils.ts
CHANGED
|
@@ -215,7 +215,7 @@ export function useExpansionPanels(
|
|
|
215
215
|
} = useReadonlySet({
|
|
216
216
|
toggleType: multiple ? "multiple" : "single",
|
|
217
217
|
defaultValue: () => {
|
|
218
|
-
if (
|
|
218
|
+
if (defaultExpandedIds === undefined) {
|
|
219
219
|
const initialList: string[] = [];
|
|
220
220
|
if (typeof defaultExpandedIndex === "number" || preventAllCollapsed) {
|
|
221
221
|
initialList.push(createId(defaultExpandedIndex ?? 0));
|
package/src/files/FileInput.tsx
CHANGED
|
@@ -166,7 +166,7 @@ export const FileInput = forwardRef<HTMLInputElement, FileInputProps>(
|
|
|
166
166
|
const icon = getIcon("upload", propIcon);
|
|
167
167
|
let children = propChildren;
|
|
168
168
|
if (
|
|
169
|
-
|
|
169
|
+
propChildren === undefined &&
|
|
170
170
|
!props["aria-label"] &&
|
|
171
171
|
!props["aria-labelledby"]
|
|
172
172
|
) {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 6.5.1
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
export function createAcceptFromExtensions(
|
|
6
|
+
extensions: readonly string[]
|
|
7
|
+
): string {
|
|
8
|
+
let accept = "";
|
|
9
|
+
for (const extension of extensions) {
|
|
10
|
+
if (accept) {
|
|
11
|
+
accept += ",";
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
accept += `.${extension}`;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
return accept;
|
|
18
|
+
}
|