@react-md/core 1.0.0-next.16 → 1.0.0-next.18
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/_box-shadows.scss +76 -0
- package/dist/_colors.scss +279 -277
- package/dist/_core.scss +107 -16
- package/dist/_object-fit.scss +86 -0
- package/dist/_utils.scss +246 -72
- package/dist/app-bar/AppBar.d.ts +1 -90
- package/dist/app-bar/AppBar.js +1 -40
- package/dist/app-bar/AppBar.js.map +1 -1
- package/dist/app-bar/AppBarTitle.d.ts +1 -27
- package/dist/app-bar/AppBarTitle.js +1 -15
- package/dist/app-bar/AppBarTitle.js.map +1 -1
- package/dist/app-bar/_app-bar.scss +156 -25
- package/dist/app-bar/styles.d.ts +117 -0
- package/dist/app-bar/styles.js +55 -0
- package/dist/app-bar/styles.js.map +1 -0
- package/dist/autocomplete/Autocomplete.d.ts +8 -79
- package/dist/autocomplete/Autocomplete.js +112 -83
- package/dist/autocomplete/Autocomplete.js.map +1 -1
- package/dist/autocomplete/AutocompleteChip.d.ts +8 -0
- package/dist/autocomplete/AutocompleteChip.js +34 -0
- package/dist/autocomplete/AutocompleteChip.js.map +1 -0
- package/dist/autocomplete/AutocompleteCircularProgress.d.ts +5 -11
- package/dist/autocomplete/AutocompleteCircularProgress.js +4 -0
- package/dist/autocomplete/AutocompleteCircularProgress.js.map +1 -1
- package/dist/autocomplete/AutocompleteClearButton.d.ts +9 -0
- package/dist/autocomplete/AutocompleteClearButton.js +29 -0
- package/dist/autocomplete/AutocompleteClearButton.js.map +1 -0
- package/dist/autocomplete/AutocompleteDropdownButton.d.ts +4 -26
- package/dist/autocomplete/AutocompleteDropdownButton.js +5 -1
- package/dist/autocomplete/AutocompleteDropdownButton.js.map +1 -1
- package/dist/autocomplete/AutocompleteListboxChildren.d.ts +22 -0
- package/dist/autocomplete/AutocompleteListboxChildren.js +37 -0
- package/dist/autocomplete/AutocompleteListboxChildren.js.map +1 -0
- package/dist/autocomplete/_autocomplete.scss +362 -34
- package/dist/autocomplete/autocompleteStyles.d.ts +22 -0
- package/dist/autocomplete/autocompleteStyles.js +17 -8
- package/dist/autocomplete/autocompleteStyles.js.map +1 -1
- package/dist/autocomplete/defaults.d.ts +9 -9
- package/dist/autocomplete/defaults.js +13 -13
- package/dist/autocomplete/defaults.js.map +1 -1
- package/dist/autocomplete/types.d.ts +554 -56
- package/dist/autocomplete/types.js.map +1 -1
- package/dist/autocomplete/useAutocomplete.d.ts +22 -0
- package/dist/autocomplete/useAutocomplete.js +281 -0
- package/dist/autocomplete/useAutocomplete.js.map +1 -0
- package/dist/autocomplete/utils.d.ts +81 -0
- package/dist/autocomplete/utils.js +108 -0
- package/dist/autocomplete/utils.js.map +1 -0
- package/dist/avatar/_avatar.scss +93 -2
- package/dist/badge/Badge.d.ts +1 -20
- package/dist/badge/Badge.js +1 -14
- package/dist/badge/Badge.js.map +1 -1
- package/dist/badge/_badge.scss +90 -3
- package/dist/badge/styles.d.ts +26 -0
- package/dist/badge/styles.js +18 -0
- package/dist/badge/styles.js.map +1 -0
- package/dist/box/Box.js +2 -1
- package/dist/box/Box.js.map +1 -1
- package/dist/box/_box.scss +130 -17
- package/dist/box/styles.d.ts +6 -0
- package/dist/box/styles.js +2 -1
- package/dist/box/styles.js.map +1 -1
- package/dist/button/AsyncButton.d.ts +1 -1
- package/dist/button/AsyncButton.js.map +1 -1
- package/dist/button/Button.d.ts +2 -1
- package/dist/button/Button.js +2 -1
- package/dist/button/Button.js.map +1 -1
- package/dist/button/_button.scss +157 -25
- package/dist/card/Card.d.ts +16 -0
- package/dist/card/Card.js +11 -3
- package/dist/card/Card.js.map +1 -1
- package/dist/card/ClickableCard.d.ts +2 -1
- package/dist/card/ClickableCard.js +5 -2
- package/dist/card/ClickableCard.js.map +1 -1
- package/dist/card/_card.scss +90 -19
- package/dist/card/styles.d.ts +0 -7
- package/dist/card/styles.js +2 -3
- package/dist/card/styles.js.map +1 -1
- package/dist/chip/Chip.d.ts +2 -1
- package/dist/chip/Chip.js +2 -1
- package/dist/chip/Chip.js.map +1 -1
- package/dist/chip/_chip.scss +45 -22
- package/dist/chip/styles.d.ts +12 -10
- package/dist/chip/styles.js.map +1 -1
- package/dist/cssUtils.js.map +1 -1
- package/dist/delegateEvent.d.ts +2 -2
- package/dist/delegateEvent.js.map +1 -1
- package/dist/dialog/Dialog.d.ts +8 -21
- package/dist/dialog/Dialog.js +27 -27
- package/dist/dialog/Dialog.js.map +1 -1
- package/dist/dialog/FixedDialog.d.ts +1 -3
- package/dist/dialog/FixedDialog.js +0 -8
- package/dist/dialog/FixedDialog.js.map +1 -1
- package/dist/dialog/_dialog.scss +67 -13
- package/dist/dialog/styles.d.ts +56 -0
- package/dist/dialog/styles.js +29 -2
- package/dist/dialog/styles.js.map +1 -1
- package/dist/divider/Divider.d.ts +0 -11
- package/dist/divider/Divider.js.map +1 -1
- package/dist/divider/_divider.scss +7 -1
- package/dist/divider/styles.d.ts +11 -0
- package/dist/divider/styles.js.map +1 -1
- package/dist/draggable/useDraggable.d.ts +6 -6
- package/dist/draggable/useDraggable.js.map +1 -1
- package/dist/draggable/utils.d.ts +3 -3
- package/dist/draggable/utils.js.map +1 -1
- package/dist/expansion-panel/ExpansionPanel.d.ts +1 -1
- package/dist/expansion-panel/ExpansionPanel.js.map +1 -1
- package/dist/expansion-panel/_expansion-panel.scss +5 -1
- package/dist/expansion-panel/useExpansionPanels.js +12 -24
- package/dist/expansion-panel/useExpansionPanels.js.map +1 -1
- package/dist/{form → files}/FileInput.d.ts +3 -6
- package/dist/{form → files}/FileInput.js +3 -6
- package/dist/files/FileInput.js.map +1 -0
- package/dist/files/_files.scss +22 -0
- package/dist/files/styles.d.ts +5 -0
- package/dist/files/styles.js +7 -0
- package/dist/files/styles.js.map +1 -0
- package/dist/{form → files}/useFileUpload.d.ts +7 -9
- package/dist/{form → files}/useFileUpload.js +5 -7
- package/dist/files/useFileUpload.js.map +1 -0
- package/dist/files/utils.d.ts +169 -0
- package/dist/files/utils.js +114 -0
- package/dist/files/utils.js.map +1 -0
- package/dist/{form/fileUtils.d.ts → files/validation.d.ts} +11 -176
- package/dist/{form/fileUtils.js → files/validation.js} +10 -135
- package/dist/files/validation.js.map +1 -0
- package/dist/focus/useFocusContainer.d.ts +2 -2
- package/dist/focus/useFocusContainer.js.map +1 -1
- package/dist/focus/utils.js.map +1 -1
- package/dist/form/FormMessage.js.map +1 -1
- package/dist/form/FormMessageContainer.js +4 -2
- package/dist/form/FormMessageContainer.js.map +1 -1
- package/dist/form/InputToggle.d.ts +2 -1
- package/dist/form/InputToggle.js +2 -1
- package/dist/form/InputToggle.js.map +1 -1
- package/dist/form/InputToggleIcon.js.map +1 -1
- package/dist/form/Label.js +2 -2
- package/dist/form/Label.js.map +1 -1
- package/dist/form/Listbox.d.ts +24 -0
- package/dist/form/Listbox.js +46 -0
- package/dist/form/Listbox.js.map +1 -0
- package/dist/form/ListboxProvider.d.ts +21 -0
- package/dist/form/{useListboxProvider.js → ListboxProvider.js} +1 -1
- package/dist/form/ListboxProvider.js.map +1 -0
- package/dist/form/MenuItemTextField.js +1 -2
- package/dist/form/MenuItemTextField.js.map +1 -1
- package/dist/form/NativeSelect.js +7 -4
- package/dist/form/NativeSelect.js.map +1 -1
- package/dist/form/Option.d.ts +49 -10
- package/dist/form/Option.js +11 -9
- package/dist/form/Option.js.map +1 -1
- package/dist/form/Password.js.map +1 -1
- package/dist/form/Select.d.ts +2 -2
- package/dist/form/Select.js +81 -85
- package/dist/form/Select.js.map +1 -1
- package/dist/form/SelectedOption.js +2 -1
- package/dist/form/SelectedOption.js.map +1 -1
- package/dist/form/Slider.d.ts +4 -4
- package/dist/form/Slider.js +6 -2
- package/dist/form/Slider.js.map +1 -1
- package/dist/form/SliderThumb.d.ts +3 -3
- package/dist/form/SliderThumb.js.map +1 -1
- package/dist/form/SliderValueMarks.d.ts +2 -2
- package/dist/form/SliderValueMarks.js.map +1 -1
- package/dist/form/SliderValueTooltip.js.map +1 -1
- package/dist/form/TextArea.js +1 -2
- package/dist/form/TextArea.js.map +1 -1
- package/dist/form/TextField.js +1 -2
- package/dist/form/TextField.js.map +1 -1
- package/dist/form/TextFieldContainer.js +1 -2
- package/dist/form/TextFieldContainer.js.map +1 -1
- package/dist/form/_form.scss +193 -124
- package/dist/form/formMessageContainerStyles.d.ts +10 -0
- package/dist/form/formMessageContainerStyles.js +11 -0
- package/dist/form/formMessageContainerStyles.js.map +1 -0
- package/dist/form/inputToggleStyles.js.map +1 -1
- package/dist/form/optionStyles.d.ts +1 -0
- package/dist/form/optionStyles.js +2 -2
- package/dist/form/optionStyles.js.map +1 -1
- package/dist/form/selectUtils.js.map +1 -1
- package/dist/form/sliderUtils.d.ts +1 -1
- package/dist/form/sliderUtils.js.map +1 -1
- package/dist/form/textFieldContainerStyles.d.ts +0 -2
- package/dist/form/textFieldContainerStyles.js +1 -2
- package/dist/form/textFieldContainerStyles.js.map +1 -1
- package/dist/form/types.d.ts +3 -10
- package/dist/form/types.js.map +1 -1
- package/dist/form/useCheckboxGroup.d.ts +17 -17
- package/dist/form/useCheckboxGroup.js +9 -17
- package/dist/form/useCheckboxGroup.js.map +1 -1
- package/dist/form/useCombobox.d.ts +56 -21
- package/dist/form/useCombobox.js +19 -4
- package/dist/form/useCombobox.js.map +1 -1
- package/dist/form/useEditableCombobox.d.ts +24 -4
- package/dist/form/useEditableCombobox.js +5 -0
- package/dist/form/useEditableCombobox.js.map +1 -1
- package/dist/form/useNumberField.js.map +1 -1
- package/dist/form/useRadioGroup.d.ts +6 -6
- package/dist/form/useRadioGroup.js.map +1 -1
- package/dist/form/useResizingTextArea.js.map +1 -1
- package/dist/form/useSelectCombobox.d.ts +3 -4
- package/dist/form/useSelectCombobox.js.map +1 -1
- package/dist/form/useTextField.d.ts +1 -1
- package/dist/form/useTextField.js.map +1 -1
- package/dist/form/useTextFieldContainerAddons.js.map +1 -1
- package/dist/hoverMode/useHoverMode.d.ts +3 -3
- package/dist/hoverMode/useHoverMode.js.map +1 -1
- package/dist/hoverMode/useHoverModeProvider.d.ts +4 -4
- package/dist/hoverMode/useHoverModeProvider.js.map +1 -1
- package/dist/icon/FontIcon.d.ts +4 -2
- package/dist/icon/FontIcon.js.map +1 -1
- package/dist/icon/TextIconSpacing.d.ts +3 -1
- package/dist/icon/TextIconSpacing.js.map +1 -1
- package/dist/icon/_icon.scss +151 -2
- package/dist/icon/iconConfig.d.ts +10 -0
- package/dist/icon/iconConfig.js +7 -0
- package/dist/icon/iconConfig.js.map +1 -1
- package/dist/icon/materialConfig.js.map +1 -1
- package/dist/icon/styles.js.map +1 -1
- package/dist/interaction/UserInteractionModeProvider.d.ts +5 -5
- package/dist/interaction/UserInteractionModeProvider.js +12 -8
- package/dist/interaction/UserInteractionModeProvider.js.map +1 -1
- package/dist/interaction/types.d.ts +20 -2
- package/dist/interaction/types.js.map +1 -1
- package/dist/interaction/useElementInteraction.d.ts +7 -1
- package/dist/interaction/useElementInteraction.js +1 -2
- package/dist/interaction/useElementInteraction.js.map +1 -1
- package/dist/interaction/utils.d.ts +2 -2
- package/dist/interaction/utils.js +2 -2
- package/dist/interaction/utils.js.map +1 -1
- package/dist/layout/LayoutWindowSplitter.js.map +1 -1
- package/dist/layout/_layout.scss +23 -10
- package/dist/layout/useExpandableLayout.d.ts +3 -3
- package/dist/layout/useExpandableLayout.js.map +1 -1
- package/dist/layout/useLayoutAppBarHeight.d.ts +2 -3
- package/dist/layout/useLayoutAppBarHeight.js.map +1 -1
- package/dist/layout/useTemporaryLayout.d.ts +2 -2
- package/dist/layout/useTemporaryLayout.js.map +1 -1
- package/dist/link/SkipToMainContent.js.map +1 -1
- package/dist/list/ListItem.d.ts +2 -1
- package/dist/list/ListItem.js +2 -1
- package/dist/list/ListItem.js.map +1 -1
- package/dist/list/ListItemChildren.js.map +1 -1
- package/dist/list/ListItemLink.d.ts +2 -1
- package/dist/list/ListItemLink.js +2 -1
- package/dist/list/ListItemLink.js.map +1 -1
- package/dist/list/_list.scss +6 -5
- package/dist/media-queries/_media-queries.scss +12 -0
- package/dist/media-queries/appSize.js.map +1 -1
- package/dist/media-queries/useMediaQuery.js +3 -1
- package/dist/media-queries/useMediaQuery.js.map +1 -1
- package/dist/menu/DropdownMenu.js.map +1 -1
- package/dist/menu/Menu.d.ts +8 -3
- package/dist/menu/Menu.js +2 -1
- package/dist/menu/Menu.js.map +1 -1
- package/dist/menu/MenuItemButton.js +6 -2
- package/dist/menu/MenuItemButton.js.map +1 -1
- package/dist/menu/useContextMenu.d.ts +3 -3
- package/dist/menu/useContextMenu.js.map +1 -1
- package/dist/movement/types.d.ts +5 -5
- package/dist/movement/types.js.map +1 -1
- package/dist/navigation/CollapsibleNavGroup.d.ts +5 -3
- package/dist/navigation/CollapsibleNavGroup.js +3 -4
- package/dist/navigation/CollapsibleNavGroup.js.map +1 -1
- package/dist/navigation/DefaultNavigationRenderer.d.ts +1 -2
- package/dist/navigation/DefaultNavigationRenderer.js +6 -2
- package/dist/navigation/DefaultNavigationRenderer.js.map +1 -1
- package/dist/navigation/NavItemButton.d.ts +1 -1
- package/dist/navigation/NavItemButton.js +1 -0
- package/dist/navigation/NavItemButton.js.map +1 -1
- package/dist/navigation/NavItemLink.d.ts +3 -2
- package/dist/navigation/NavItemLink.js +6 -2
- package/dist/navigation/NavItemLink.js.map +1 -1
- package/dist/navigation/NavSubheader.d.ts +2 -3
- package/dist/navigation/NavSubheader.js.map +1 -1
- package/dist/navigation/Navigation.d.ts +1 -1
- package/dist/navigation/Navigation.js.map +1 -1
- package/dist/navigation/_navigation.scss +6 -5
- package/dist/navigation/types.d.ts +54 -6
- package/dist/navigation/types.js.map +1 -1
- package/dist/navigation/useActiveHeadingId.d.ts +1 -1
- package/dist/navigation/useActiveHeadingId.js.map +1 -1
- package/dist/navigation/useNavigationExpansion.d.ts +104 -0
- package/dist/navigation/useNavigationExpansion.js +77 -0
- package/dist/navigation/useNavigationExpansion.js.map +1 -0
- package/dist/navigation/utils.d.ts +13 -0
- package/dist/navigation/utils.js +36 -0
- package/dist/navigation/utils.js.map +1 -0
- package/dist/objectFit.d.ts +69 -0
- package/dist/objectFit.js +52 -0
- package/dist/objectFit.js.map +1 -0
- package/dist/overlay/_overlay.scss +2 -1
- package/dist/positioning/useFixedPositioning.d.ts +17 -4
- package/dist/positioning/useFixedPositioning.js +10 -5
- package/dist/positioning/useFixedPositioning.js.map +1 -1
- package/dist/positioning/utils.js.map +1 -1
- package/dist/progress/LinearProgress.js.map +1 -1
- package/dist/progress/_progress.scss +20 -14
- package/dist/responsive-item/ResponsiveItem.d.ts +64 -0
- package/dist/responsive-item/ResponsiveItem.js +68 -0
- package/dist/responsive-item/ResponsiveItem.js.map +1 -0
- package/dist/responsive-item/ResponsiveItemOverlay.d.ts +1 -19
- package/dist/responsive-item/ResponsiveItemOverlay.js +1 -12
- package/dist/responsive-item/ResponsiveItemOverlay.js.map +1 -1
- package/dist/responsive-item/_responsive-item.scss +110 -133
- package/dist/responsive-item/responsiveItemOverlayStyles.d.ts +19 -0
- package/dist/responsive-item/responsiveItemOverlayStyles.js +14 -0
- package/dist/responsive-item/responsiveItemOverlayStyles.js.map +1 -0
- package/dist/responsive-item/responsiveItemStyles.d.ts +52 -0
- package/dist/responsive-item/responsiveItemStyles.js +15 -0
- package/dist/responsive-item/responsiveItemStyles.js.map +1 -0
- package/dist/scroll/useScrollLock.d.ts +5 -0
- package/dist/scroll/useScrollLock.js.map +1 -1
- package/dist/searching/utils.d.ts +2 -2
- package/dist/searching/utils.js.map +1 -1
- package/dist/segmented-button/SegmentedButton.d.ts +2 -1
- package/dist/segmented-button/SegmentedButton.js +2 -1
- package/dist/segmented-button/SegmentedButton.js.map +1 -1
- package/dist/segmented-button/_segmented-button.scss +6 -6
- package/dist/sheet/_sheet.scss +18 -6
- package/dist/snackbar/ToastManager.js +15 -5
- package/dist/snackbar/ToastManager.js.map +1 -1
- package/dist/snackbar/_snackbar.scss +30 -17
- package/dist/snackbar/useCurrentToastActions.d.ts +5 -5
- package/dist/snackbar/useCurrentToastActions.js.map +1 -1
- package/dist/table/_table.scss +15 -3
- package/dist/table/tableCellStyles.d.ts +7 -3
- package/dist/table/tableCellStyles.js +2 -2
- package/dist/table/tableCellStyles.js.map +1 -1
- package/dist/tabs/Tab.d.ts +2 -1
- package/dist/tabs/Tab.js +2 -1
- package/dist/tabs/Tab.js.map +1 -1
- package/dist/tabs/TabList.d.ts +2 -2
- package/dist/tabs/TabList.js.map +1 -1
- package/dist/tabs/TabListScrollButton.d.ts +1 -1
- package/dist/tabs/TabListScrollButton.js +1 -1
- package/dist/tabs/TabListScrollButton.js.map +1 -1
- package/dist/tabs/_tabs.scss +30 -9
- package/dist/tabs/getTabListScrollToOptions.d.ts +18 -0
- package/dist/tabs/getTabListScrollToOptions.js +19 -0
- package/dist/tabs/getTabListScrollToOptions.js.map +1 -0
- package/dist/tabs/tabStyles.d.ts +3 -0
- package/dist/tabs/tabStyles.js.map +1 -1
- package/dist/tabs/useTabList.d.ts +1 -8
- package/dist/tabs/useTabList.js +1 -0
- package/dist/tabs/useTabList.js.map +1 -1
- package/dist/tabs/useTabs.d.ts +6 -6
- package/dist/tabs/useTabs.js.map +1 -1
- package/dist/tabs/utils.d.ts +0 -18
- package/dist/tabs/utils.js +0 -15
- package/dist/tabs/utils.js.map +1 -1
- package/dist/test-utils/ResizeObserver.d.ts +11 -12
- package/dist/test-utils/ResizeObserver.js +11 -12
- package/dist/test-utils/ResizeObserver.js.map +1 -1
- package/dist/test-utils/matchMedia.d.ts +3 -3
- package/dist/test-utils/matchMedia.js +6 -6
- package/dist/test-utils/matchMedia.js.map +1 -1
- package/dist/test-utils/polyfills/TextDecoder.js +0 -1
- package/dist/test-utils/polyfills/TextDecoder.js.map +1 -1
- package/dist/test-utils/timers.d.ts +9 -5
- package/dist/test-utils/timers.js +5 -5
- package/dist/test-utils/timers.js.map +1 -1
- package/dist/theme/LocalStorageColorSchemeProvider.d.ts +1 -1
- package/dist/theme/LocalStorageColorSchemeProvider.js +2 -1
- package/dist/theme/LocalStorageColorSchemeProvider.js.map +1 -1
- package/dist/theme/ThemeProvider.js +3 -1
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/_a11y.scss +86 -13
- package/dist/theme/_colors.scss +279 -277
- package/dist/theme/_theme.scss +308 -37
- package/dist/theme/isColorScheme.d.ts +16 -0
- package/dist/theme/isColorScheme.js +19 -0
- package/dist/theme/isColorScheme.js.map +1 -0
- package/dist/theme/types.d.ts +53 -1
- package/dist/theme/types.js +1 -23
- package/dist/theme/types.js.map +1 -1
- package/dist/theme/useCSSVariables.d.ts +2 -19
- package/dist/theme/useCSSVariables.js.map +1 -1
- package/dist/theme/useColorScheme.d.ts +1 -35
- package/dist/theme/useColorScheme.js.map +1 -1
- package/dist/theme/useColorSchemeMetaTag.d.ts +1 -1
- package/dist/theme/useColorSchemeMetaTag.js.map +1 -1
- package/dist/theme/useColorSchemeProvider.d.ts +1 -1
- package/dist/theme/useColorSchemeProvider.js +1 -1
- package/dist/theme/useColorSchemeProvider.js.map +1 -1
- package/dist/theme/{usePrefersColorScheme.js → usePrefersDarkScheme.js} +1 -1
- package/dist/theme/usePrefersDarkScheme.js.map +1 -0
- package/dist/theme/utils.js.map +1 -1
- package/dist/tooltip/useTooltip.d.ts +14 -9
- package/dist/tooltip/useTooltip.js +2 -1
- package/dist/tooltip/useTooltip.js.map +1 -1
- package/dist/transition/_transition.scss +16 -9
- package/dist/transition/skeletonPlaceholderUtils.js.map +1 -1
- package/dist/transition/types.d.ts +1 -1
- package/dist/transition/types.js.map +1 -1
- package/dist/transition/useCarousel.d.ts +3 -3
- package/dist/transition/useCarousel.js.map +1 -1
- package/dist/transition/useCollapseTransition.js.map +1 -1
- package/dist/transition/useTransition.js +1 -0
- package/dist/transition/useTransition.js.map +1 -1
- package/dist/transition/utils.js.map +1 -1
- package/dist/tree/TreeItem.d.ts +2 -1
- package/dist/tree/TreeItem.js +4 -3
- package/dist/tree/TreeItem.js.map +1 -1
- package/dist/tree/TreeItemExpander.js.map +1 -1
- package/dist/tree/_tree.scss +8 -6
- package/dist/tree/useTreeExpansion.d.ts +1 -1
- package/dist/tree/useTreeExpansion.js +6 -18
- package/dist/tree/useTreeExpansion.js.map +1 -1
- package/dist/tree/useTreeSelection.d.ts +1 -1
- package/dist/tree/useTreeSelection.js +7 -25
- package/dist/tree/useTreeSelection.js.map +1 -1
- package/dist/tree/utils.d.ts +1 -1
- package/dist/tree/utils.js.map +1 -1
- package/dist/types.d.ts +12 -4
- package/dist/types.js.map +1 -1
- package/dist/typography/WritingDirectionProvider.d.ts +1 -1
- package/dist/typography/WritingDirectionProvider.js.map +1 -1
- package/dist/typography/_typography.scss +94 -37
- package/dist/typography/typographyStyles.js.map +1 -1
- package/dist/useDebouncedFunction.d.ts +1 -5
- package/dist/useDebouncedFunction.js +3 -1
- package/dist/useDebouncedFunction.js.map +1 -1
- package/dist/useDropzone.d.ts +4 -4
- package/dist/useDropzone.js.map +1 -1
- package/dist/useEnsuredId.js.map +1 -1
- package/dist/useIntersectionObserver.d.ts +5 -5
- package/dist/useIntersectionObserver.js.map +1 -1
- package/dist/useLocalStorage.d.ts +3 -3
- package/dist/useLocalStorage.js +1 -1
- package/dist/useLocalStorage.js.map +1 -1
- package/dist/useMutationObserver.d.ts +1 -1
- package/dist/useMutationObserver.js.map +1 -1
- package/dist/useOrientation.js +3 -1
- package/dist/useOrientation.js.map +1 -1
- package/dist/usePageInactive.d.ts +2 -2
- package/dist/usePageInactive.js.map +1 -1
- package/dist/useReadonlySet.d.ts +76 -0
- package/dist/useReadonlySet.js +72 -0
- package/dist/useReadonlySet.js.map +1 -0
- package/dist/useResizeListener.d.ts +1 -1
- package/dist/useResizeListener.js.map +1 -1
- package/dist/useResizeObserver.d.ts +19 -0
- package/dist/useResizeObserver.js +19 -0
- package/dist/useResizeObserver.js.map +1 -1
- package/dist/useThrottledFunction.d.ts +1 -5
- package/dist/useThrottledFunction.js +3 -1
- package/dist/useThrottledFunction.js.map +1 -1
- package/dist/useToggle.d.ts +3 -3
- package/dist/useToggle.js.map +1 -1
- package/dist/utils/RenderRecursively.d.ts +2 -2
- package/dist/utils/RenderRecursively.js.map +1 -1
- package/dist/utils/alphaNumericSort.d.ts +5 -5
- package/dist/utils/alphaNumericSort.js.map +1 -1
- package/dist/utils/bem.d.ts +1 -1
- package/dist/utils/bem.js +1 -1
- package/dist/utils/bem.js.map +1 -1
- package/dist/utils/debounce.d.ts +5 -0
- package/dist/utils/debounce.js +17 -0
- package/dist/utils/debounce.js.map +1 -0
- package/dist/utils/nearest.js.map +1 -1
- package/dist/utils/parseCssLengthUnit.js.map +1 -1
- package/dist/utils/throttle.d.ts +5 -0
- package/dist/utils/throttle.js +30 -0
- package/dist/utils/throttle.js.map +1 -0
- package/dist/utils/wait.js +3 -1
- package/dist/utils/wait.js.map +1 -1
- package/dist/window-splitter/WindowSplitter.d.ts +37 -15
- package/dist/window-splitter/WindowSplitter.js +38 -17
- package/dist/window-splitter/WindowSplitter.js.map +1 -1
- package/dist/window-splitter/_window-splitter.scss +32 -14
- package/dist/window-splitter/styles.d.ts +14 -0
- package/dist/window-splitter/styles.js +18 -0
- package/dist/window-splitter/styles.js.map +1 -0
- package/package.json +25 -24
- package/src/app-bar/AppBar.tsx +1 -170
- package/src/app-bar/AppBarTitle.tsx +1 -44
- package/src/app-bar/styles.ts +206 -0
- package/src/autocomplete/Autocomplete.tsx +194 -211
- package/src/autocomplete/AutocompleteChip.tsx +48 -0
- package/src/autocomplete/AutocompleteCircularProgress.tsx +6 -17
- package/src/autocomplete/AutocompleteClearButton.tsx +44 -0
- package/src/autocomplete/AutocompleteDropdownButton.tsx +16 -37
- package/src/autocomplete/AutocompleteListboxChildren.tsx +68 -0
- package/src/autocomplete/autocompleteStyles.ts +48 -9
- package/src/autocomplete/defaults.ts +26 -17
- package/src/autocomplete/types.ts +744 -61
- package/src/autocomplete/useAutocomplete.ts +428 -0
- package/src/autocomplete/utils.ts +211 -0
- package/src/badge/Badge.tsx +1 -39
- package/src/badge/styles.ts +45 -0
- package/src/box/Box.tsx +11 -9
- package/src/box/styles.ts +14 -5
- package/src/button/AsyncButton.tsx +1 -1
- package/src/button/Button.tsx +5 -1
- package/src/card/Card.tsx +35 -4
- package/src/card/ClickableCard.tsx +9 -2
- package/src/card/styles.ts +1 -10
- package/src/chip/Chip.tsx +6 -1
- package/src/chip/styles.ts +12 -10
- package/src/delegateEvent.ts +5 -5
- package/src/dialog/Dialog.tsx +48 -61
- package/src/dialog/FixedDialog.tsx +1 -11
- package/src/dialog/styles.ts +97 -0
- package/src/divider/Divider.tsx +0 -12
- package/src/divider/styles.ts +12 -0
- package/src/draggable/useDraggable.ts +17 -10
- package/src/draggable/utils.ts +3 -3
- package/src/expansion-panel/ExpansionPanel.tsx +1 -1
- package/src/expansion-panel/useExpansionPanels.ts +18 -27
- package/src/{form → files}/FileInput.tsx +7 -15
- package/src/files/styles.ts +10 -0
- package/src/{form → files}/useFileUpload.ts +30 -34
- package/src/files/utils.ts +234 -0
- package/src/{form/fileUtils.ts → files/validation.ts} +15 -244
- package/src/focus/useFocusContainer.ts +16 -8
- package/src/form/FormMessageContainer.tsx +2 -2
- package/src/form/InputToggle.tsx +5 -1
- package/src/form/Label.tsx +18 -18
- package/src/form/Listbox.tsx +87 -0
- package/src/form/ListboxProvider.ts +37 -0
- package/src/form/MenuItemTextField.tsx +1 -2
- package/src/form/NativeSelect.tsx +14 -10
- package/src/form/Option.tsx +74 -22
- package/src/form/Select.tsx +89 -85
- package/src/form/SelectedOption.tsx +2 -0
- package/src/form/Slider.tsx +14 -11
- package/src/form/SliderThumb.tsx +4 -4
- package/src/form/SliderValueMarks.tsx +4 -4
- package/src/form/TextArea.tsx +6 -8
- package/src/form/TextField.tsx +0 -2
- package/src/form/TextFieldContainer.tsx +9 -11
- package/src/form/formMessageContainerStyles.ts +22 -0
- package/src/form/optionStyles.ts +7 -2
- package/src/form/sliderUtils.ts +1 -1
- package/src/form/textFieldContainerStyles.ts +9 -14
- package/src/form/types.ts +3 -11
- package/src/form/useCheckboxGroup.ts +28 -36
- package/src/form/useCombobox.ts +86 -38
- package/src/form/useEditableCombobox.ts +43 -8
- package/src/form/useRadioGroup.ts +6 -6
- package/src/form/useSelectCombobox.ts +4 -4
- package/src/form/useTextField.ts +1 -1
- package/src/hoverMode/useHoverMode.ts +3 -3
- package/src/hoverMode/useHoverModeProvider.ts +4 -4
- package/src/icon/FontIcon.tsx +4 -2
- package/src/icon/TextIconSpacing.tsx +1 -1
- package/src/icon/iconConfig.tsx +12 -0
- package/src/interaction/UserInteractionModeProvider.tsx +12 -8
- package/src/interaction/types.ts +21 -2
- package/src/interaction/useElementInteraction.tsx +9 -2
- package/src/interaction/utils.ts +7 -7
- package/src/layout/useExpandableLayout.ts +3 -3
- package/src/layout/useLayoutAppBarHeight.ts +3 -4
- package/src/layout/useTemporaryLayout.ts +2 -2
- package/src/list/ListItem.tsx +5 -1
- package/src/list/ListItemLink.tsx +5 -1
- package/src/media-queries/useMediaQuery.ts +2 -1
- package/src/menu/Menu.tsx +11 -3
- package/src/menu/MenuItemButton.tsx +7 -1
- package/src/menu/useContextMenu.ts +3 -3
- package/src/movement/types.ts +5 -5
- package/src/navigation/CollapsibleNavGroup.tsx +16 -8
- package/src/navigation/DefaultNavigationRenderer.tsx +8 -6
- package/src/navigation/NavItemButton.tsx +2 -1
- package/src/navigation/NavItemLink.tsx +11 -3
- package/src/navigation/NavSubheader.tsx +1 -1
- package/src/navigation/Navigation.tsx +1 -1
- package/src/navigation/types.ts +60 -10
- package/src/navigation/useActiveHeadingId.ts +1 -1
- package/src/navigation/useNavigationExpansion.ts +170 -0
- package/src/navigation/utils.ts +47 -0
- package/src/objectFit.ts +88 -0
- package/src/positioning/useFixedPositioning.ts +34 -11
- package/src/responsive-item/ResponsiveItem.tsx +96 -0
- package/src/responsive-item/ResponsiveItemOverlay.tsx +6 -46
- package/src/responsive-item/responsiveItemOverlayStyles.ts +46 -0
- package/src/responsive-item/responsiveItemStyles.ts +81 -0
- package/src/scroll/useScrollLock.ts +6 -0
- package/src/searching/utils.ts +3 -3
- package/src/segmented-button/SegmentedButton.tsx +5 -1
- package/src/snackbar/ToastManager.tsx +16 -5
- package/src/snackbar/useCurrentToastActions.ts +5 -5
- package/src/table/tableCellStyles.ts +10 -6
- package/src/tabs/Tab.tsx +4 -1
- package/src/tabs/TabList.tsx +2 -2
- package/src/tabs/TabListScrollButton.tsx +4 -4
- package/src/tabs/getTabListScrollToOptions.ts +37 -0
- package/src/tabs/tabStyles.ts +4 -0
- package/src/tabs/useTabList.ts +2 -9
- package/src/tabs/useTabs.ts +6 -6
- package/src/tabs/utils.ts +0 -38
- package/src/test-utils/ResizeObserver.ts +11 -12
- package/src/test-utils/matchMedia.ts +7 -7
- package/src/test-utils/polyfills/TextDecoder.ts +0 -1
- package/src/test-utils/timers.ts +10 -7
- package/src/theme/LocalStorageColorSchemeProvider.tsx +4 -4
- package/src/theme/ThemeProvider.tsx +3 -3
- package/src/theme/isColorScheme.ts +22 -0
- package/src/theme/types.ts +67 -1
- package/src/theme/useCSSVariables.ts +7 -30
- package/src/theme/useColorScheme.ts +1 -40
- package/src/theme/useColorSchemeMetaTag.ts +1 -1
- package/src/theme/useColorSchemeProvider.ts +2 -2
- package/src/tooltip/useTooltip.ts +17 -9
- package/src/transition/types.ts +1 -1
- package/src/transition/useCarousel.ts +3 -3
- package/src/transition/useTransition.ts +1 -0
- package/src/tree/TreeItem.tsx +7 -1
- package/src/tree/TreeItemExpander.tsx +1 -1
- package/src/tree/useTreeExpansion.ts +7 -25
- package/src/tree/useTreeSelection.ts +8 -32
- package/src/tree/utils.ts +6 -2
- package/src/types.ts +20 -4
- package/src/typography/WritingDirectionProvider.tsx +1 -1
- package/src/useDebouncedFunction.ts +4 -9
- package/src/useDropzone.ts +4 -4
- package/src/useIntersectionObserver.ts +5 -5
- package/src/useLocalStorage.ts +6 -6
- package/src/useMutationObserver.ts +1 -1
- package/src/useOrientation.ts +3 -1
- package/src/usePageInactive.ts +2 -2
- package/src/useReadonlySet.ts +122 -0
- package/src/useResizeListener.ts +1 -1
- package/src/useResizeObserver.ts +19 -0
- package/src/useThrottledFunction.ts +6 -9
- package/src/useToggle.ts +3 -3
- package/src/utils/RenderRecursively.tsx +2 -2
- package/src/utils/alphaNumericSort.ts +5 -5
- package/src/utils/bem.ts +1 -1
- package/src/utils/debounce.ts +22 -0
- package/src/utils/throttle.ts +38 -0
- package/src/utils/wait.ts +5 -1
- package/src/window-splitter/WindowSplitter.tsx +38 -43
- package/src/window-splitter/styles.ts +42 -0
- package/dist/autocomplete/FilterAutocompleteOptions.d.ts +0 -8
- package/dist/autocomplete/FilterAutocompleteOptions.js +0 -57
- package/dist/autocomplete/FilterAutocompleteOptions.js.map +0 -1
- package/dist/dialog/DialogContainer.d.ts +0 -14
- package/dist/dialog/DialogContainer.js +0 -20
- package/dist/dialog/DialogContainer.js.map +0 -1
- package/dist/form/FileInput.js.map +0 -1
- package/dist/form/fileUtils.js.map +0 -1
- package/dist/form/useFileUpload.js.map +0 -1
- package/dist/form/useListboxProvider.d.ts +0 -31
- package/dist/form/useListboxProvider.js.map +0 -1
- package/dist/navigation/getHrefFromParents.d.ts +0 -5
- package/dist/navigation/getHrefFromParents.js +0 -13
- package/dist/navigation/getHrefFromParents.js.map +0 -1
- package/dist/responsive-item/ResponsiveItemContainer.d.ts +0 -115
- package/dist/responsive-item/ResponsiveItemContainer.js +0 -80
- package/dist/responsive-item/ResponsiveItemContainer.js.map +0 -1
- package/dist/responsive-item/styles.d.ts +0 -34
- package/dist/responsive-item/styles.js +0 -17
- package/dist/responsive-item/styles.js.map +0 -1
- package/dist/theme/usePrefersColorScheme.js.map +0 -1
- package/src/autocomplete/FilterAutocompleteOptions.tsx +0 -86
- package/src/dialog/DialogContainer.tsx +0 -28
- package/src/form/useListboxProvider.ts +0 -45
- package/src/navigation/getHrefFromParents.ts +0 -15
- package/src/responsive-item/ResponsiveItemContainer.tsx +0 -174
- package/src/responsive-item/styles.ts +0 -58
- /package/dist/theme/{usePrefersColorScheme.d.ts → usePrefersDarkScheme.d.ts} +0 -0
- /package/src/theme/{usePrefersColorScheme.ts → usePrefersDarkScheme.ts} +0 -0
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
import { useEffect } from "react";
|
|
3
3
|
import { getScrollbarWidth } from "./getScrollbarWidth.js";
|
|
4
4
|
|
|
5
|
+
declare module "react" {
|
|
6
|
+
interface CSSProperties {
|
|
7
|
+
"--rmd-scrollbar-size"?: string;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
5
11
|
export const SCROLLBAR_SIZE_VAR = "--rmd-scrollbar-size";
|
|
6
12
|
|
|
7
13
|
// this is really just so that nested dialogs will work correctly. Only the
|
package/src/searching/utils.ts
CHANGED
|
@@ -7,8 +7,8 @@ import { type BaseSearchOptions } from "./types.js";
|
|
|
7
7
|
* @internal
|
|
8
8
|
*/
|
|
9
9
|
export const defaultExtractor =
|
|
10
|
-
|
|
11
|
-
(item:
|
|
10
|
+
(name: string) =>
|
|
11
|
+
(item: unknown): string => {
|
|
12
12
|
if (typeof item === "string") {
|
|
13
13
|
return item;
|
|
14
14
|
}
|
|
@@ -24,7 +24,7 @@ export const defaultExtractor =
|
|
|
24
24
|
*/
|
|
25
25
|
export interface SearchOptions<T> extends BaseSearchOptions<T> {
|
|
26
26
|
type: "search" | "filter";
|
|
27
|
-
filter(query: string, value: string)
|
|
27
|
+
filter: (query: string, value: string) => boolean;
|
|
28
28
|
extractor: TextExtractor<T>;
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from "react";
|
|
3
3
|
import { getIcon } from "../icon/iconConfig.js";
|
|
4
|
+
import { type ComponentWithRippleProps } from "../interaction/types.js";
|
|
4
5
|
import { useElementInteraction } from "../interaction/useElementInteraction.js";
|
|
5
6
|
import { useHigherContrastChildren } from "../interaction/useHigherContrastChildren.js";
|
|
6
7
|
import { useMaxWidthTransition } from "../transition/useMaxWidthTransition.js";
|
|
@@ -10,7 +11,8 @@ import { segmentedButton } from "./segmentedButtonStyles.js";
|
|
|
10
11
|
* @since 6.0.0
|
|
11
12
|
*/
|
|
12
13
|
export interface SegmentedButtonProps
|
|
13
|
-
extends ButtonHTMLAttributes<HTMLButtonElement
|
|
14
|
+
extends ButtonHTMLAttributes<HTMLButtonElement>,
|
|
15
|
+
ComponentWithRippleProps {
|
|
14
16
|
/**
|
|
15
17
|
* Set this to `true` to apply selected styles and an optional
|
|
16
18
|
* {@link selectedIcon}
|
|
@@ -126,6 +128,7 @@ export const SegmentedButton = forwardRef<
|
|
|
126
128
|
onTouchEnd,
|
|
127
129
|
onTouchMove,
|
|
128
130
|
disabled,
|
|
131
|
+
disableRipple,
|
|
129
132
|
...remaining
|
|
130
133
|
} = props;
|
|
131
134
|
|
|
@@ -138,6 +141,7 @@ export const SegmentedButton = forwardRef<
|
|
|
138
141
|
disableTransition: disableSelectedTransition,
|
|
139
142
|
});
|
|
140
143
|
const { pressedClassName, handlers, ripples } = useElementInteraction({
|
|
144
|
+
mode: disableRipple ? "none" : undefined,
|
|
141
145
|
onBlur,
|
|
142
146
|
onClick,
|
|
143
147
|
onKeyDown,
|
|
@@ -542,8 +542,9 @@ export const toastManager = new ToastManager();
|
|
|
542
542
|
* @see {@link ToastManager.addToast}
|
|
543
543
|
* @since 6.0.0
|
|
544
544
|
*/
|
|
545
|
-
export const addToast: ToastManager["addToast"] = (toast) =>
|
|
545
|
+
export const addToast: ToastManager["addToast"] = (toast) => {
|
|
546
546
|
toastManager.addToast(toast);
|
|
547
|
+
};
|
|
547
548
|
|
|
548
549
|
/**
|
|
549
550
|
* @see {@link ToastManager.startRemoveTimeout}
|
|
@@ -551,23 +552,33 @@ export const addToast: ToastManager["addToast"] = (toast) =>
|
|
|
551
552
|
*/
|
|
552
553
|
export const startRemoveToastTimeout: ToastManager["startRemoveTimeout"] = (
|
|
553
554
|
toastId
|
|
554
|
-
) =>
|
|
555
|
+
) => {
|
|
556
|
+
toastManager.startRemoveTimeout(toastId);
|
|
557
|
+
};
|
|
555
558
|
|
|
556
559
|
/**
|
|
557
560
|
* @see {@link ToastManager.popToast}
|
|
558
561
|
* @since 6.0.0
|
|
559
562
|
*/
|
|
560
|
-
export const popToast: ToastManager["popToast"] = () =>
|
|
563
|
+
export const popToast: ToastManager["popToast"] = () => {
|
|
564
|
+
toastManager.popToast();
|
|
565
|
+
};
|
|
561
566
|
|
|
562
567
|
/**
|
|
563
568
|
* @see {@link ToastManager.removeToast}
|
|
564
569
|
* @since 6.0.0
|
|
565
570
|
*/
|
|
566
|
-
export const removeToast: ToastManager["removeToast"] = (
|
|
571
|
+
export const removeToast: ToastManager["removeToast"] = (
|
|
572
|
+
toastId,
|
|
573
|
+
transition
|
|
574
|
+
) => {
|
|
567
575
|
toastManager.removeToast(toastId, transition);
|
|
576
|
+
};
|
|
568
577
|
|
|
569
578
|
/**
|
|
570
579
|
* @see {@link ToastManager.clearToasts}
|
|
571
580
|
* @since 6.0.0
|
|
572
581
|
*/
|
|
573
|
-
export const clearToasts = (): void =>
|
|
582
|
+
export const clearToasts = (): void => {
|
|
583
|
+
toastManager.clearToasts();
|
|
584
|
+
};
|
|
@@ -9,15 +9,15 @@ import { createContext, useContext } from "react";
|
|
|
9
9
|
*/
|
|
10
10
|
export interface CurrentToastActions {
|
|
11
11
|
/** @see {@link ToastManager.clearTimer} */
|
|
12
|
-
clearTimer()
|
|
12
|
+
clearTimer: () => void;
|
|
13
13
|
/** @see {@link ToastManager.removeToast} */
|
|
14
|
-
removeToast(transition: boolean)
|
|
14
|
+
removeToast: (transition: boolean) => void;
|
|
15
15
|
/** @see {@link ToastManager.startRemoveTimeout} */
|
|
16
|
-
startRemoveTimeout()
|
|
16
|
+
startRemoveTimeout: () => void;
|
|
17
17
|
/** @see {@link ToastManager.pauseRemoveTimeout} */
|
|
18
|
-
pauseRemoveTimeout()
|
|
18
|
+
pauseRemoveTimeout: () => void;
|
|
19
19
|
/** @see {@link ToastManager.resumeRemoveTimeout} */
|
|
20
|
-
resumeRemoveTimeout()
|
|
20
|
+
resumeRemoveTimeout: () => void;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
const context = createContext<CurrentToastActions | null>(null);
|
|
@@ -12,14 +12,18 @@ export interface TableCellClassNameOptions {
|
|
|
12
12
|
/**
|
|
13
13
|
* Set this to `true` if the cell is rendered as a `<th>` so that the correct
|
|
14
14
|
* sticky styles can be applied.
|
|
15
|
+
*
|
|
16
|
+
* @defaultValue `false`
|
|
15
17
|
*/
|
|
16
|
-
header
|
|
18
|
+
header?: boolean;
|
|
17
19
|
|
|
18
20
|
/**
|
|
19
21
|
* Set this to true if the cell is rendered in a `<thead>` so that the correct
|
|
20
22
|
* sticky styles can be applied.
|
|
23
|
+
*
|
|
24
|
+
* @defaultValue `header`
|
|
21
25
|
*/
|
|
22
|
-
isInTableHeader
|
|
26
|
+
isInTableHeader?: boolean;
|
|
23
27
|
|
|
24
28
|
/** @defaultValue `false` */
|
|
25
29
|
grow?: boolean;
|
|
@@ -45,17 +49,17 @@ export interface TableCellClassNameOptions {
|
|
|
45
49
|
/**
|
|
46
50
|
* @since 6.0.0
|
|
47
51
|
*/
|
|
48
|
-
export function tableCell(options: TableCellClassNameOptions): string {
|
|
52
|
+
export function tableCell(options: TableCellClassNameOptions = {}): string {
|
|
49
53
|
const {
|
|
50
54
|
grow,
|
|
51
55
|
sticky,
|
|
52
56
|
header,
|
|
53
57
|
inputToggle,
|
|
54
|
-
hAlign,
|
|
55
|
-
vAlign,
|
|
58
|
+
hAlign = "left",
|
|
59
|
+
vAlign = "middle",
|
|
56
60
|
lineWrap = true,
|
|
57
61
|
padding = "horizontal",
|
|
58
|
-
isInTableHeader,
|
|
62
|
+
isInTableHeader = header,
|
|
59
63
|
className,
|
|
60
64
|
} = options;
|
|
61
65
|
|
package/src/tabs/Tab.tsx
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
type ReactElement,
|
|
6
6
|
type ReactNode,
|
|
7
7
|
} from "react";
|
|
8
|
+
import { type ComponentWithRippleProps } from "../interaction/types.js";
|
|
8
9
|
import { useElementInteraction } from "../interaction/useElementInteraction.js";
|
|
9
10
|
import { useHigherContrastChildren } from "../interaction/useHigherContrastChildren.js";
|
|
10
11
|
import { type CustomLinkComponent } from "../link/Link.js";
|
|
@@ -20,7 +21,7 @@ import { type TabListProps } from "./TabList.js";
|
|
|
20
21
|
/**
|
|
21
22
|
* @since 6.0.0
|
|
22
23
|
*/
|
|
23
|
-
export interface BaseTabProps {
|
|
24
|
+
export interface BaseTabProps extends ComponentWithRippleProps {
|
|
24
25
|
/**
|
|
25
26
|
* Set this to `true` if the tab is currently active.
|
|
26
27
|
*
|
|
@@ -126,6 +127,7 @@ export function Tab(props: TabProps): ReactElement {
|
|
|
126
127
|
onTouchStart,
|
|
127
128
|
onTouchEnd,
|
|
128
129
|
onTouchMove,
|
|
130
|
+
disableRipple,
|
|
129
131
|
...remaining
|
|
130
132
|
} = props as TabButtonProps;
|
|
131
133
|
const { disabled } = props as TabButtonProps;
|
|
@@ -133,6 +135,7 @@ export function Tab(props: TabProps): ReactElement {
|
|
|
133
135
|
const id = useEnsuredId(propId, "tab");
|
|
134
136
|
const { activeDescendantId } = useKeyboardMovementContext();
|
|
135
137
|
const { ripples, handlers } = useElementInteraction({
|
|
138
|
+
mode: disableRipple ? "none" : undefined,
|
|
136
139
|
onBlur,
|
|
137
140
|
onClick,
|
|
138
141
|
onKeyDown,
|
package/src/tabs/TabList.tsx
CHANGED
|
@@ -8,13 +8,13 @@ import {
|
|
|
8
8
|
} from "react";
|
|
9
9
|
import { useAppSize } from "../media-queries/AppSizeProvider.js";
|
|
10
10
|
import { KeyboardMovementProvider } from "../movement/useKeyboardMovementProvider.js";
|
|
11
|
+
import { type GetTabListScrollToOptions } from "./getTabListScrollToOptions.js";
|
|
11
12
|
import {
|
|
12
13
|
TabListScrollButton,
|
|
13
14
|
type BaseTabListScrollButtonProps,
|
|
14
15
|
} from "./TabListScrollButton.js";
|
|
15
16
|
import { tabList, type TabsAlignment } from "./tabListStyles.js";
|
|
16
17
|
import { useTabList } from "./useTabList.js";
|
|
17
|
-
import { type GetTabListScrollToOptions } from "./utils.js";
|
|
18
18
|
|
|
19
19
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
20
20
|
import { type useTabs } from "./useTabs.js";
|
|
@@ -24,7 +24,7 @@ import { type useTabs } from "./useTabs.js";
|
|
|
24
24
|
*/
|
|
25
25
|
export interface TabListProps extends HTMLAttributes<HTMLDivElement> {
|
|
26
26
|
activeIndex: number;
|
|
27
|
-
setActiveIndex(nextActiveIndex: number)
|
|
27
|
+
setActiveIndex: (nextActiveIndex: number) => void;
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* @defaultValue `"left"`
|
|
@@ -13,14 +13,14 @@ import { type PropsWithRef } from "../types.js";
|
|
|
13
13
|
import { useDir } from "../typography/WritingDirectionProvider.js";
|
|
14
14
|
import { useIntersectionObserver } from "../useIntersectionObserver.js";
|
|
15
15
|
import { applyRef } from "../utils/applyRef.js";
|
|
16
|
+
import {
|
|
17
|
+
getTabListScrollToOptions,
|
|
18
|
+
type GetTabListScrollToOptions,
|
|
19
|
+
} from "./getTabListScrollToOptions.js";
|
|
16
20
|
import {
|
|
17
21
|
tabListScrollButton,
|
|
18
22
|
tabListScrollButtonContainer,
|
|
19
23
|
} from "./tabListScrollButtonStyles.js";
|
|
20
|
-
import {
|
|
21
|
-
getTabListScrollToOptions,
|
|
22
|
-
type GetTabListScrollToOptions,
|
|
23
|
-
} from "./utils.js";
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* @internal
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @since 6.0.0
|
|
3
|
+
*/
|
|
4
|
+
export interface TabListScrollToOptions {
|
|
5
|
+
isRTL: boolean;
|
|
6
|
+
animate: boolean;
|
|
7
|
+
vertical: boolean;
|
|
8
|
+
increment: boolean;
|
|
9
|
+
container: HTMLElement;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @since 6.0.0
|
|
14
|
+
*/
|
|
15
|
+
export type GetTabListScrollToOptions = (
|
|
16
|
+
options: TabListScrollToOptions
|
|
17
|
+
) => ScrollToOptions | undefined;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* @since 6.0.0
|
|
21
|
+
*/
|
|
22
|
+
export const getTabListScrollToOptions: GetTabListScrollToOptions = (
|
|
23
|
+
options
|
|
24
|
+
) => {
|
|
25
|
+
const { isRTL, animate, vertical, increment, container } = options;
|
|
26
|
+
const { scrollLeft, scrollTop, scrollWidth, scrollHeight } = container;
|
|
27
|
+
const currentScroll = vertical ? scrollTop : scrollLeft;
|
|
28
|
+
const scrollDistance = vertical ? scrollHeight : scrollWidth;
|
|
29
|
+
const amount = (scrollDistance / 10) * (increment ? 1 : -1);
|
|
30
|
+
const distance = currentScroll + amount * (vertical || !isRTL ? 1 : -1);
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
left: vertical ? undefined : distance,
|
|
34
|
+
top: vertical ? distance : undefined,
|
|
35
|
+
behavior: animate ? "smooth" : "auto",
|
|
36
|
+
};
|
|
37
|
+
};
|
package/src/tabs/tabStyles.ts
CHANGED
|
@@ -9,6 +9,10 @@ declare module "react" {
|
|
|
9
9
|
"--rmd-tab-active-color"?: string;
|
|
10
10
|
"--rmd-tab-inactive-color"?: string;
|
|
11
11
|
"--rmd-tab-disabled-color"?: string;
|
|
12
|
+
|
|
13
|
+
"--rmd-tab-size"?: string;
|
|
14
|
+
"--rmd-tab-offset"?: string | number;
|
|
15
|
+
"--rmd-tab-indicator-background"?: string;
|
|
12
16
|
}
|
|
13
17
|
}
|
|
14
18
|
|
package/src/tabs/useTabList.ts
CHANGED
|
@@ -18,14 +18,6 @@ import { useEnsuredRef } from "../useEnsuredRef.js";
|
|
|
18
18
|
import { useResizeObserver } from "../useResizeObserver.js";
|
|
19
19
|
import { getTabRoleOnly, scrollTabIntoView } from "./utils.js";
|
|
20
20
|
|
|
21
|
-
declare module "react" {
|
|
22
|
-
interface CSSProperties {
|
|
23
|
-
"--rmd-tab-size"?: string;
|
|
24
|
-
"--rmd-tab-offset"?: string | number;
|
|
25
|
-
"--rmd-tab-indicator-background"?: string;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
21
|
const TAB_SIZE_VAR = "--rmd-tab-size";
|
|
30
22
|
const TAB_OFFSET_VAR = "--rmd-tab-offset";
|
|
31
23
|
|
|
@@ -43,7 +35,7 @@ export interface TabListHookOptions {
|
|
|
43
35
|
ref: Ref<HTMLDivElement> | undefined;
|
|
44
36
|
style: CSSProperties | undefined;
|
|
45
37
|
activeIndex: number;
|
|
46
|
-
setActiveIndex(nextActiveIndex: number)
|
|
38
|
+
setActiveIndex: (nextActiveIndex: number) => void;
|
|
47
39
|
scrollButtons: boolean;
|
|
48
40
|
activationMode: "manual" | "automatic";
|
|
49
41
|
vertical: boolean;
|
|
@@ -115,6 +107,7 @@ export function useTabList(
|
|
|
115
107
|
// this is kind of hacky -- the styles should update when switching between
|
|
116
108
|
// RTL, but the RTL state isn't required for any styles. Just reference it
|
|
117
109
|
// so that the hooks eslint rule doesn't show a warning...
|
|
110
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-expressions
|
|
118
111
|
isRTL;
|
|
119
112
|
|
|
120
113
|
const activeTab = getTabRoleOnly(entry.target)[activeIndex];
|
package/src/tabs/useTabs.ts
CHANGED
|
@@ -136,11 +136,11 @@ export interface TabsImplementation<TabValue extends string | number = number> {
|
|
|
136
136
|
direction: SlideDirection;
|
|
137
137
|
setDirection: UseStateSetter<SlideDirection>;
|
|
138
138
|
activeTab?: TabValue;
|
|
139
|
-
setActiveTab
|
|
140
|
-
getTabProps(tabValue: TabValue)
|
|
141
|
-
getTabListProps()
|
|
142
|
-
getTabPanelProps(tabValue: TabValue)
|
|
143
|
-
getTabPanelsProps<E extends HTMLElement>()
|
|
139
|
+
setActiveTab?: (nextActiveTab: TabValue) => void;
|
|
140
|
+
getTabProps: (tabValue: TabValue) => ProvidedTabProps;
|
|
141
|
+
getTabListProps: () => ProvidedTabListProps;
|
|
142
|
+
getTabPanelProps: (tabValue: TabValue) => ProvidedTabPanelProps;
|
|
143
|
+
getTabPanelsProps: <E extends HTMLElement>() => ProvidedTabPanelsProps<E>;
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
/**
|
|
@@ -180,7 +180,7 @@ export interface TabsImplementation<TabValue extends string | number = number> {
|
|
|
180
180
|
*
|
|
181
181
|
* @since 6.0.0
|
|
182
182
|
*/
|
|
183
|
-
export function useTabs(): TabsImplementation
|
|
183
|
+
export function useTabs(): TabsImplementation & {
|
|
184
184
|
activeTab: number;
|
|
185
185
|
setActiveTab: number;
|
|
186
186
|
};
|
package/src/tabs/utils.ts
CHANGED
|
@@ -44,41 +44,3 @@ export const scrollTabIntoView = (options: ScrollOptions): void => {
|
|
|
44
44
|
container[scrollAttribute] = elementStart - firstOffset;
|
|
45
45
|
}
|
|
46
46
|
};
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* @since 6.0.0
|
|
50
|
-
*/
|
|
51
|
-
export interface TabListScrollToOptions {
|
|
52
|
-
isRTL: boolean;
|
|
53
|
-
animate: boolean;
|
|
54
|
-
vertical: boolean;
|
|
55
|
-
increment: boolean;
|
|
56
|
-
container: HTMLElement;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* @since 6.0.0
|
|
61
|
-
*/
|
|
62
|
-
export type GetTabListScrollToOptions = (
|
|
63
|
-
options: TabListScrollToOptions
|
|
64
|
-
) => ScrollToOptions | undefined;
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* @since 6.0.0
|
|
68
|
-
*/
|
|
69
|
-
export const getTabListScrollToOptions: GetTabListScrollToOptions = (
|
|
70
|
-
options
|
|
71
|
-
) => {
|
|
72
|
-
const { isRTL, animate, vertical, increment, container } = options;
|
|
73
|
-
const { scrollLeft, scrollTop, scrollWidth, scrollHeight } = container;
|
|
74
|
-
const currentScroll = vertical ? scrollTop : scrollLeft;
|
|
75
|
-
const scrollDistance = vertical ? scrollHeight : scrollWidth;
|
|
76
|
-
const amount = (scrollDistance / 10) * (increment ? 1 : -1);
|
|
77
|
-
const distance = currentScroll + amount * (vertical || !isRTL ? 1 : -1);
|
|
78
|
-
|
|
79
|
-
return {
|
|
80
|
-
left: vertical ? undefined : distance,
|
|
81
|
-
top: vertical ? distance : undefined,
|
|
82
|
-
behavior: animate ? "smooth" : "auto",
|
|
83
|
-
};
|
|
84
|
-
};
|
|
@@ -217,14 +217,14 @@ export interface SetupResizeObserverMockOptions {
|
|
|
217
217
|
*
|
|
218
218
|
* @example Main Usage
|
|
219
219
|
* ```tsx
|
|
220
|
-
* import { useCallback, useState } from "react";
|
|
221
220
|
* import {
|
|
222
221
|
* cleanupResizeObserverAfterEach,
|
|
223
222
|
* render,
|
|
224
223
|
* screen,
|
|
225
224
|
* setupResizeObserverMock,
|
|
226
225
|
* } from "@react-md/core/test-utils";
|
|
227
|
-
* import { useResizeObserver } from "@react-md/core";
|
|
226
|
+
* import { useResizeObserver } from "@react-md/core/useResizeObserver";
|
|
227
|
+
* import { useCallback, useState } from "react";
|
|
228
228
|
*
|
|
229
229
|
* function ExampleComponent() {
|
|
230
230
|
* const [size, setSize] = useState({ height: 0, width: 0 });
|
|
@@ -234,7 +234,7 @@ export interface SetupResizeObserverMockOptions {
|
|
|
234
234
|
* height: entry.contentRect.height,
|
|
235
235
|
* width: entry.contentRect.width,
|
|
236
236
|
* });
|
|
237
|
-
* })
|
|
237
|
+
* }, []),
|
|
238
238
|
* });
|
|
239
239
|
*
|
|
240
240
|
* return (
|
|
@@ -250,10 +250,10 @@ export interface SetupResizeObserverMockOptions {
|
|
|
250
250
|
* describe("ExampleComponent", () => {
|
|
251
251
|
* it("should do stuff", () => {
|
|
252
252
|
* const observer = setupResizeObserverMock();
|
|
253
|
-
* render(<ExampleComponent />)
|
|
253
|
+
* render(<ExampleComponent />);
|
|
254
254
|
*
|
|
255
255
|
* const size = screen.getByTestId("size");
|
|
256
|
-
* const resizeTarget = screen.getByTestId("resize-target")
|
|
256
|
+
* const resizeTarget = screen.getByTestId("resize-target");
|
|
257
257
|
*
|
|
258
258
|
* // jsdom sets all element sizes to 0 by default
|
|
259
259
|
* expect(size).toHaveTextContent(JSON.stringify({ height: 0, width: 0 }));
|
|
@@ -265,19 +265,18 @@ export interface SetupResizeObserverMockOptions {
|
|
|
265
265
|
* expect(size).toHaveTextContent(JSON.stringify({ height: 100, width: 100 }));
|
|
266
266
|
*
|
|
267
267
|
* // or you can mock the `getBoundingClientRect` result
|
|
268
|
-
* jest.spyOn(resizeTarget, "getBoundingClientRect")
|
|
269
|
-
* .
|
|
270
|
-
*
|
|
271
|
-
*
|
|
272
|
-
*
|
|
273
|
-
* }):
|
|
268
|
+
* jest.spyOn(resizeTarget, "getBoundingClientRect").mockReturnValue({
|
|
269
|
+
* ...document.body.getBoundingClientRect(),
|
|
270
|
+
* height: 200,
|
|
271
|
+
* width: 200,
|
|
272
|
+
* });
|
|
274
273
|
*
|
|
275
274
|
* act(() => {
|
|
276
275
|
* observer.resizeElement(resizeTarget);
|
|
277
276
|
* });
|
|
278
277
|
* expect(size).toHaveTextContent(JSON.stringify({ height: 200, width: 200 }));
|
|
279
278
|
* });
|
|
280
|
-
* })
|
|
279
|
+
* });
|
|
281
280
|
* ```
|
|
282
281
|
*
|
|
283
282
|
* @since 6.0.0
|
|
@@ -36,7 +36,7 @@ export type MatchMediaMatcher = (query: string) => boolean;
|
|
|
36
36
|
* @returns `true` for phone media queries
|
|
37
37
|
*/
|
|
38
38
|
export const matchPhone: MatchMediaMatcher = (query) =>
|
|
39
|
-
query.includes(
|
|
39
|
+
query.includes(DEFAULT_PHONE_MAX_WIDTH);
|
|
40
40
|
|
|
41
41
|
/**
|
|
42
42
|
* @see {@link spyOnMatchMedia} for usage
|
|
@@ -44,7 +44,7 @@ export const matchPhone: MatchMediaMatcher = (query) =>
|
|
|
44
44
|
* @returns `true` for tablet media queries
|
|
45
45
|
*/
|
|
46
46
|
export const matchTablet: MatchMediaMatcher = (query) =>
|
|
47
|
-
query.includes(
|
|
47
|
+
query.includes(DEFAULT_TABLET_MIN_WIDTH);
|
|
48
48
|
|
|
49
49
|
/**
|
|
50
50
|
* @see {@link spyOnMatchMedia} for usage
|
|
@@ -52,7 +52,7 @@ export const matchTablet: MatchMediaMatcher = (query) =>
|
|
|
52
52
|
* @returns `true` for desktop media queries
|
|
53
53
|
*/
|
|
54
54
|
export const matchDesktop: MatchMediaMatcher = (query) =>
|
|
55
|
-
query.includes(
|
|
55
|
+
query.includes(DEFAULT_DESKTOP_MIN_WIDTH);
|
|
56
56
|
|
|
57
57
|
/**
|
|
58
58
|
* @see {@link spyOnMatchMedia} for usage
|
|
@@ -60,7 +60,7 @@ export const matchDesktop: MatchMediaMatcher = (query) =>
|
|
|
60
60
|
* @returns `true` for large desktop media queries
|
|
61
61
|
*/
|
|
62
62
|
export const matchLargeDesktop: MatchMediaMatcher = (query) =>
|
|
63
|
-
query.includes(
|
|
63
|
+
query.includes(DEFAULT_DESKTOP_LARGE_MIN_WIDTH);
|
|
64
64
|
|
|
65
65
|
/**
|
|
66
66
|
* @see {@link spyOnMatchMedia} for usage
|
|
@@ -101,13 +101,13 @@ export type MatchMediaSpiedFunction = jest.SpiedFunction<
|
|
|
101
101
|
* // expect phone results
|
|
102
102
|
* ```
|
|
103
103
|
*/
|
|
104
|
-
changeViewport(matcher: MatchMediaMatcher, disableAct?: boolean)
|
|
104
|
+
changeViewport: (matcher: MatchMediaMatcher, disableAct?: boolean) => void;
|
|
105
105
|
};
|
|
106
106
|
|
|
107
107
|
/**
|
|
108
108
|
* @example Default Behavior
|
|
109
109
|
* ```tsx
|
|
110
|
-
* import { matchPhone, render, spyOnMatchMedia } from "@react-md/test-utils";
|
|
110
|
+
* import { matchPhone, render, spyOnMatchMedia } from "@react-md/core/test-utils";
|
|
111
111
|
*
|
|
112
112
|
* const matchMedia = spyOnMatchMedia();
|
|
113
113
|
* render(<Test />);
|
|
@@ -120,7 +120,7 @@ export type MatchMediaSpiedFunction = jest.SpiedFunction<
|
|
|
120
120
|
*
|
|
121
121
|
* @example Set Default Media
|
|
122
122
|
* ```tsx
|
|
123
|
-
* import { matchPhone, render, spyOnMatchMedia } from "@react-md/test-utils";
|
|
123
|
+
* import { matchPhone, render, spyOnMatchMedia } from "@react-md/core/test-utils";
|
|
124
124
|
*
|
|
125
125
|
* const matchMedia = spyOnMatchMedia(matchPhone);
|
|
126
126
|
* render(<Test />);
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { TextDecoder } from "node:util";
|
|
2
2
|
|
|
3
3
|
if (typeof global.TextDecoder === "undefined") {
|
|
4
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
5
4
|
// @ts-expect-error browser TextDecoder does not support `null` while `node:util` does
|
|
6
5
|
global.TextDecoder = TextDecoder;
|
|
7
6
|
}
|
package/src/test-utils/timers.ts
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import { jest } from "@jest/globals";
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* @since 6.0.0
|
|
5
|
+
*/
|
|
6
|
+
export type RafSpy = jest.SpiedFunction<typeof requestAnimationFrame>;
|
|
7
|
+
|
|
3
8
|
/**
|
|
4
9
|
* @example
|
|
5
10
|
* ```ts
|
|
6
|
-
* import {
|
|
11
|
+
* import { testImmediateRaf } from "@react-md/core/test-utils";
|
|
7
12
|
*
|
|
8
13
|
* describe("some test suite", () => {
|
|
9
14
|
* it("should test something with requestAnimationFrame", () => {
|
|
10
|
-
* const raf =
|
|
15
|
+
* const raf = testImmediateRaf();
|
|
11
16
|
*
|
|
12
17
|
* // do some testing with requestAnimationFrame
|
|
13
18
|
*
|
|
@@ -19,7 +24,7 @@ import { jest } from "@jest/globals";
|
|
|
19
24
|
*
|
|
20
25
|
* @example Automatic Cleanup
|
|
21
26
|
* ```ts
|
|
22
|
-
* import {
|
|
27
|
+
* import { testImmediateRaf } from "@react-md/core/test-utils";
|
|
23
28
|
*
|
|
24
29
|
* afterEach(() => {
|
|
25
30
|
* jest.restoreAllMocks();
|
|
@@ -27,7 +32,7 @@ import { jest } from "@jest/globals";
|
|
|
27
32
|
*
|
|
28
33
|
* describe("some test suite", () => {
|
|
29
34
|
* it("should test something with requestAnimationFrame", () => {
|
|
30
|
-
* const raf =
|
|
35
|
+
* const raf = testImmediateRaf();
|
|
31
36
|
*
|
|
32
37
|
* // do some testing with requestAnimationFrame
|
|
33
38
|
* });
|
|
@@ -36,9 +41,7 @@ import { jest } from "@jest/globals";
|
|
|
36
41
|
*
|
|
37
42
|
* @since 6.0.0
|
|
38
43
|
*/
|
|
39
|
-
export const
|
|
40
|
-
typeof requestAnimationFrame
|
|
41
|
-
> =>
|
|
44
|
+
export const testImmediateRaf = (): RafSpy =>
|
|
42
45
|
jest.spyOn(window, "requestAnimationFrame").mockImplementation((cb) => {
|
|
43
46
|
cb(0);
|
|
44
47
|
return 0;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { type ReactElement, type ReactNode } from "react";
|
|
3
3
|
import { useLocalStorage } from "../useLocalStorage.js";
|
|
4
|
-
import {
|
|
4
|
+
import { type ColorSchemeMode } from "./types.js";
|
|
5
|
+
import { ColorSchemeProvider } from "./useColorScheme.js";
|
|
5
6
|
import { useColorSchemeProvider } from "./useColorSchemeProvider.js";
|
|
7
|
+
import { isColorSchemeMode } from "./isColorScheme.js";
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* @since 6.0.0
|
|
@@ -115,9 +117,7 @@ export function LocalStorageColorSchemeProvider(
|
|
|
115
117
|
key: localStorageKey,
|
|
116
118
|
defaultValue: defaultColorSchemeMode,
|
|
117
119
|
deserializer: (item) =>
|
|
118
|
-
item
|
|
119
|
-
? item
|
|
120
|
-
: defaultColorSchemeMode,
|
|
120
|
+
isColorSchemeMode(item) ? item : defaultColorSchemeMode,
|
|
121
121
|
});
|
|
122
122
|
|
|
123
123
|
const value = useColorSchemeProvider({
|
|
@@ -384,9 +384,9 @@ export function ThemeProvider(props: ThemeProviderProps): ReactElement {
|
|
|
384
384
|
// NOTE: This will not be correct the first time a new theme is lazy-loaded
|
|
385
385
|
// and applied. It might be good to have a way to manually force this flow
|
|
386
386
|
// again?
|
|
387
|
-
const frame = window.requestAnimationFrame(() =>
|
|
388
|
-
setDerivedTheme(getDerivedTheme(document.documentElement))
|
|
389
|
-
);
|
|
387
|
+
const frame = window.requestAnimationFrame(() => {
|
|
388
|
+
setDerivedTheme(getDerivedTheme(document.documentElement));
|
|
389
|
+
});
|
|
390
390
|
|
|
391
391
|
return () => {
|
|
392
392
|
window.cancelAnimationFrame(frame);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ColorSchemeMode, type ColorScheme } from "./types.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A type assertion helper to check if a value is a valid {@link ColorScheme}
|
|
5
|
+
* when it is pulled from unknown sources (like local storage).
|
|
6
|
+
*
|
|
7
|
+
* @since 6.0.0
|
|
8
|
+
*/
|
|
9
|
+
export function isColorScheme(value: unknown): value is ColorScheme {
|
|
10
|
+
return value === "light" || value === "dark";
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* A type assertion helper to check if a value is a valid
|
|
15
|
+
* {@link ColorSchemeMode} when it is pulled from unknown sources (like local
|
|
16
|
+
* storage).
|
|
17
|
+
*
|
|
18
|
+
* @since 6.0.0
|
|
19
|
+
*/
|
|
20
|
+
export function isColorSchemeMode(value: unknown): value is ColorSchemeMode {
|
|
21
|
+
return isColorScheme(value) || value === "system";
|
|
22
|
+
}
|