@react-md/core 1.0.0-next.15 → 1.0.0-next.17
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/RootHtml.d.ts +0 -2
- package/dist/RootHtml.js +0 -2
- package/dist/RootHtml.js.map +1 -1
- 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 -92
- package/dist/app-bar/AppBar.js +1 -42
- package/dist/app-bar/AppBar.js.map +1 -1
- package/dist/app-bar/AppBarTitle.d.ts +1 -30
- package/dist/app-bar/AppBarTitle.js +1 -17
- 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.d.ts +0 -2
- package/dist/avatar/Avatar.js +0 -2
- package/dist/avatar/Avatar.js.map +1 -1
- package/dist/avatar/_avatar.scss +93 -2
- package/dist/badge/Badge.d.ts +2 -23
- package/dist/badge/Badge.js +1 -16
- 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.d.ts +0 -2
- package/dist/box/Box.js +2 -3
- 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/ButtonUnstyled.d.ts +0 -2
- package/dist/button/ButtonUnstyled.js +0 -2
- package/dist/button/ButtonUnstyled.js.map +1 -1
- package/dist/button/_button.scss +157 -25
- package/dist/card/Card.d.ts +16 -2
- package/dist/card/Card.js +11 -5
- package/dist/card/Card.js.map +1 -1
- package/dist/card/CardContent.d.ts +0 -2
- package/dist/card/CardContent.js +0 -2
- package/dist/card/CardContent.js.map +1 -1
- package/dist/card/CardFooter.d.ts +0 -3
- package/dist/card/CardFooter.js +0 -2
- package/dist/card/CardFooter.js.map +1 -1
- package/dist/card/CardHeader.d.ts +0 -2
- package/dist/card/CardHeader.js +0 -2
- package/dist/card/CardHeader.js.map +1 -1
- package/dist/card/CardSubtitle.d.ts +0 -3
- package/dist/card/CardSubtitle.js +0 -2
- package/dist/card/CardSubtitle.js.map +1 -1
- package/dist/card/CardTitle.d.ts +0 -3
- package/dist/card/CardTitle.js +0 -2
- package/dist/card/CardTitle.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 -3
- package/dist/chip/Chip.js +2 -3
- package/dist/chip/Chip.js.map +1 -1
- package/dist/chip/_chip.scss +42 -20
- 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/DialogContent.d.ts +3 -3
- package/dist/dialog/DialogContent.js +3 -3
- package/dist/dialog/DialogContent.js.map +1 -1
- package/dist/dialog/DialogFooter.d.ts +2 -3
- package/dist/dialog/DialogFooter.js +2 -3
- package/dist/dialog/DialogFooter.js.map +1 -1
- package/dist/dialog/DialogHeader.d.ts +3 -3
- package/dist/dialog/DialogHeader.js +3 -3
- package/dist/dialog/DialogHeader.js.map +1 -1
- package/dist/dialog/DialogTitle.d.ts +3 -4
- package/dist/dialog/DialogTitle.js +3 -3
- package/dist/dialog/DialogTitle.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/NestedDialogProvider.d.ts +0 -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 -13
- package/dist/divider/Divider.js +0 -2
- 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/ExpansionList.d.ts +1 -1
- package/dist/expansion-panel/ExpansionList.js +1 -1
- package/dist/expansion-panel/ExpansionList.js.map +1 -1
- package/dist/expansion-panel/ExpansionPanel.d.ts +9 -25
- package/dist/expansion-panel/ExpansionPanel.js +1 -12
- package/dist/expansion-panel/ExpansionPanel.js.map +1 -1
- package/dist/expansion-panel/ExpansionPanelHeader.d.ts +0 -1
- package/dist/expansion-panel/ExpansionPanelHeader.js +0 -1
- package/dist/expansion-panel/ExpansionPanelHeader.js.map +1 -1
- package/dist/expansion-panel/_expansion-panel.scss +5 -1
- package/dist/expansion-panel/expansionPanelStyles.d.ts +19 -0
- package/dist/expansion-panel/expansionPanelStyles.js +14 -0
- package/dist/expansion-panel/expansionPanelStyles.js.map +1 -0
- 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} +9 -174
- package/dist/{form/fileUtils.js → files/validation.js} +9 -134
- 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/Checkbox.d.ts +0 -1
- package/dist/form/Fieldset.d.ts +0 -2
- package/dist/form/Fieldset.js.map +1 -1
- package/dist/form/FormMessage.d.ts +0 -3
- package/dist/form/FormMessage.js +0 -2
- package/dist/form/FormMessage.js.map +1 -1
- package/dist/form/FormMessageContainer.d.ts +0 -1
- package/dist/form/FormMessageContainer.js +4 -3
- package/dist/form/FormMessageContainer.js.map +1 -1
- package/dist/form/FormMessageCounter.d.ts +0 -2
- package/dist/form/FormMessageCounter.js +0 -2
- package/dist/form/FormMessageCounter.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.d.ts +0 -2
- package/dist/form/InputToggleIcon.js +0 -2
- package/dist/form/InputToggleIcon.js.map +1 -1
- package/dist/form/Label.d.ts +0 -3
- package/dist/form/Label.js +2 -4
- package/dist/form/Label.js.map +1 -1
- package/dist/form/Legend.d.ts +0 -3
- package/dist/form/Legend.js +0 -2
- package/dist/form/Legend.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/MenuItemCheckbox.d.ts +0 -1
- package/dist/form/MenuItemRadio.d.ts +0 -1
- package/dist/form/MenuItemSwitch.d.ts +0 -1
- package/dist/form/MenuItemTextField.js +1 -2
- package/dist/form/MenuItemTextField.js.map +1 -1
- package/dist/form/NativeSelect.d.ts +0 -2
- package/dist/form/NativeSelect.js +7 -6
- 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/Radio.d.ts +0 -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.d.ts +0 -2
- package/dist/form/SelectedOption.js +0 -2
- 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/SliderContainer.d.ts +0 -2
- package/dist/form/SliderContainer.js +0 -2
- package/dist/form/SliderContainer.js.map +1 -1
- package/dist/form/SliderMark.d.ts +0 -2
- package/dist/form/SliderMark.js +0 -2
- package/dist/form/SliderMark.js.map +1 -1
- package/dist/form/SliderMarkLabel.d.ts +0 -2
- package/dist/form/SliderMarkLabel.js +0 -2
- package/dist/form/SliderMarkLabel.js.map +1 -1
- package/dist/form/SliderThumb.d.ts +3 -3
- package/dist/form/SliderThumb.js.map +1 -1
- package/dist/form/SliderTrack.d.ts +0 -2
- package/dist/form/SliderTrack.js +0 -2
- package/dist/form/SliderTrack.js.map +1 -1
- package/dist/form/SliderValueMarks.d.ts +2 -4
- package/dist/form/SliderValueMarks.js +0 -2
- package/dist/form/SliderValueMarks.js.map +1 -1
- package/dist/form/SliderValueTooltip.js.map +1 -1
- package/dist/form/Switch.d.ts +0 -2
- package/dist/form/Switch.js +0 -2
- package/dist/form/Switch.js.map +1 -1
- package/dist/form/SwitchTrack.d.ts +2 -1
- package/dist/form/SwitchTrack.js +2 -1
- package/dist/form/SwitchTrack.js.map +1 -1
- package/dist/form/TextArea.js +1 -2
- package/dist/form/TextArea.js.map +1 -1
- package/dist/form/TextField.d.ts +0 -2
- package/dist/form/TextField.js +1 -4
- package/dist/form/TextField.js.map +1 -1
- package/dist/form/TextFieldAddon.d.ts +1 -4
- package/dist/form/TextFieldAddon.js +1 -3
- package/dist/form/TextFieldAddon.js.map +1 -1
- package/dist/form/TextFieldContainer.js +1 -2
- package/dist/form/TextFieldContainer.js.map +1 -1
- package/dist/form/_form.scss +186 -121
- 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 +0 -2
- package/dist/icon/FontIcon.js +0 -2
- package/dist/icon/FontIcon.js.map +1 -1
- package/dist/icon/IconRotator.d.ts +0 -2
- package/dist/icon/IconRotator.js +0 -2
- package/dist/icon/IconRotator.js.map +1 -1
- package/dist/icon/MaterialIcon.d.ts +0 -2
- package/dist/icon/MaterialIcon.js +0 -2
- package/dist/icon/MaterialIcon.js.map +1 -1
- package/dist/icon/MaterialSymbol.d.ts +0 -1
- package/dist/icon/MaterialSymbol.js +0 -1
- package/dist/icon/MaterialSymbol.js.map +1 -1
- package/dist/icon/SVGIcon.d.ts +0 -2
- package/dist/icon/SVGIcon.js +0 -2
- package/dist/icon/SVGIcon.js.map +1 -1
- package/dist/icon/TextIconSpacing.d.ts +0 -2
- package/dist/icon/TextIconSpacing.js +0 -2
- package/dist/icon/TextIconSpacing.js.map +1 -1
- package/dist/icon/_icon.scss +153 -4
- 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 +1 -1
- package/dist/icon/styles.js.map +1 -1
- package/dist/interaction/RippleContainer.d.ts +0 -2
- package/dist/interaction/RippleContainer.js +0 -2
- package/dist/interaction/RippleContainer.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/LayoutAppBar.d.ts +0 -1
- package/dist/layout/LayoutNav.js +1 -2
- package/dist/layout/LayoutNav.js.map +1 -1
- package/dist/layout/LayoutWindowSplitter.d.ts +0 -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/useHorizontalLayoutTransition.js +1 -1
- package/dist/layout/useHorizontalLayoutTransition.js.map +1 -1
- package/dist/layout/useLayoutAppBarHeight.d.ts +2 -3
- package/dist/layout/useLayoutAppBarHeight.js.map +1 -1
- package/dist/layout/useLayoutTree.d.ts +2 -2
- package/dist/layout/useLayoutTree.js.map +1 -1
- package/dist/layout/useTemporaryLayout.d.ts +2 -2
- package/dist/layout/useTemporaryLayout.js.map +1 -1
- package/dist/link/Link.d.ts +0 -2
- package/dist/link/Link.js +0 -2
- package/dist/link/Link.js.map +1 -1
- package/dist/link/SkipToMainContent.js.map +1 -1
- package/dist/list/List.d.ts +0 -20
- package/dist/list/List.js +1 -14
- package/dist/list/List.js.map +1 -1
- package/dist/list/ListItem.d.ts +2 -17
- package/dist/list/ListItem.js +2 -1
- package/dist/list/ListItem.js.map +1 -1
- package/dist/list/ListItemAddon.d.ts +0 -2
- package/dist/list/ListItemAddon.js +0 -2
- package/dist/list/ListItemAddon.js.map +1 -1
- package/dist/list/ListItemChildren.d.ts +0 -2
- package/dist/list/ListItemChildren.js +0 -2
- 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/ListItemText.d.ts +0 -2
- package/dist/list/ListItemText.js +0 -2
- package/dist/list/ListItemText.js.map +1 -1
- package/dist/list/ListSubheader.d.ts +3 -2
- package/dist/list/ListSubheader.js +0 -2
- package/dist/list/ListSubheader.js.map +1 -1
- package/dist/list/_list.scss +6 -5
- package/dist/list/getListItemHeight.d.ts +2 -2
- package/dist/list/getListItemHeight.js +2 -2
- package/dist/list/getListItemHeight.js.map +1 -1
- package/dist/list/listItemStyles.d.ts +17 -1
- package/dist/list/listItemStyles.js.map +1 -1
- package/dist/list/listStyles.d.ts +18 -0
- package/dist/list/listStyles.js +14 -0
- package/dist/list/listStyles.js.map +1 -0
- package/dist/list/types.d.ts +9 -3
- package/dist/list/types.js +6 -1
- package/dist/list/types.js.map +1 -1
- package/dist/media-queries/AppSizeProvider.d.ts +8 -0
- package/dist/media-queries/AppSizeProvider.js +2 -0
- package/dist/media-queries/AppSizeProvider.js.map +1 -1
- package/dist/media-queries/_media-queries.scss +12 -0
- package/dist/media-queries/appSize.d.ts +5 -5
- package/dist/media-queries/appSize.js.map +1 -1
- package/dist/media-queries/useMediaQuery.d.ts +1 -1
- package/dist/media-queries/useMediaQuery.js +4 -2
- 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/MenuBar.d.ts +0 -1
- package/dist/menu/MenuButton.d.ts +0 -1
- package/dist/menu/MenuConfigurationProvider.js.map +1 -1
- package/dist/menu/MenuItem.d.ts +0 -1
- package/dist/menu/MenuItemButton.d.ts +0 -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/menu/useMenuBarProvider.d.ts +0 -1
- package/dist/movement/types.d.ts +5 -5
- package/dist/movement/types.js.map +1 -1
- package/dist/movement/useKeyboardMovementProvider.d.ts +0 -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/NavGroup.d.ts +0 -2
- package/dist/navigation/NavGroup.js +0 -2
- package/dist/navigation/NavGroup.js.map +1 -1
- package/dist/navigation/NavItem.d.ts +0 -2
- package/dist/navigation/NavItem.js +0 -2
- package/dist/navigation/NavItem.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 -6
- package/dist/navigation/NavSubheader.js +0 -2
- 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/CircularProgress.d.ts +0 -2
- package/dist/progress/CircularProgress.js +0 -2
- package/dist/progress/CircularProgress.js.map +1 -1
- package/dist/progress/LinearProgress.d.ts +0 -2
- package/dist/progress/LinearProgress.js +0 -2
- 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 -21
- package/dist/responsive-item/ResponsiveItemOverlay.js +1 -14
- 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/SegmentedButtonContainer.d.ts +0 -2
- package/dist/segmented-button/SegmentedButtonContainer.js +0 -2
- package/dist/segmented-button/SegmentedButtonContainer.js.map +1 -1
- package/dist/segmented-button/_segmented-button.scss +6 -6
- package/dist/sheet/Sheet.d.ts +30 -16
- package/dist/sheet/Sheet.js +24 -14
- package/dist/sheet/Sheet.js.map +1 -1
- package/dist/sheet/_sheet.scss +18 -6
- package/dist/sheet/styles.d.ts +29 -0
- package/dist/sheet/styles.js +13 -0
- package/dist/sheet/styles.js.map +1 -1
- package/dist/snackbar/ToastActionButton.d.ts +0 -1
- package/dist/snackbar/ToastCloseButton.d.ts +0 -1
- 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 -6
- package/dist/snackbar/useCurrentToastActions.js.map +1 -1
- package/dist/suspense/CircularProgressSuspense.d.ts +0 -2
- package/dist/suspense/CircularProgressSuspense.js +0 -2
- package/dist/suspense/CircularProgressSuspense.js.map +1 -1
- package/dist/suspense/NullSuspense.d.ts +0 -2
- package/dist/suspense/NullSuspense.js +0 -2
- package/dist/suspense/NullSuspense.js.map +1 -1
- package/dist/table/TableCellContent.d.ts +0 -3
- package/dist/table/TableCellContent.js +0 -3
- package/dist/table/TableCellContent.js.map +1 -1
- package/dist/table/TableConfigurationProvider.d.ts +0 -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 +5 -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 +6 -2
- package/dist/tabs/TabListScrollButton.js.map +1 -1
- package/dist/tabs/_tabs.scss +48 -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/tabListScrollButtonStyles.d.ts +2 -0
- package/dist/tabs/tabListScrollButtonStyles.js +9 -5
- package/dist/tabs/tabListScrollButtonStyles.js.map +1 -1
- package/dist/tabs/tabStyles.d.ts +3 -0
- package/dist/tabs/tabStyles.js.map +1 -1
- package/dist/tabs/useTabList.d.ts +3 -8
- package/dist/tabs/useTabList.js +5 -2
- package/dist/tabs/useTabList.js.map +1 -1
- package/dist/tabs/useTabs.d.ts +39 -17
- package/dist/tabs/useTabs.js +9 -3
- 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/IntersectionObserver.js.map +1 -1
- package/dist/test-utils/data-testid.d.ts +0 -1
- package/dist/test-utils/matchMedia.d.ts +1 -1
- package/dist/test-utils/matchMedia.js +4 -4
- 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 +77 -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 -36
- 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/SlideContainer.d.ts +2 -48
- package/dist/transition/SlideContainer.js +2 -48
- package/dist/transition/SlideContainer.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/DefaultTreeItemRenderer.d.ts +2 -3
- package/dist/tree/DefaultTreeItemRenderer.js +1 -1
- package/dist/tree/DefaultTreeItemRenderer.js.map +1 -1
- package/dist/tree/Tree.d.ts +3 -4
- package/dist/tree/Tree.js.map +1 -1
- package/dist/tree/TreeItem.d.ts +12 -4
- package/dist/tree/TreeItem.js +9 -5
- 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/types.d.ts +11 -6
- package/dist/tree/types.js +1 -26
- package/dist/tree/types.js.map +1 -1
- package/dist/tree/useTree.d.ts +3 -3
- package/dist/tree/useTree.js.map +1 -1
- package/dist/tree/useTreeExpansion.d.ts +4 -4
- package/dist/tree/useTreeExpansion.js +6 -18
- package/dist/tree/useTreeExpansion.js.map +1 -1
- package/dist/tree/useTreeSelection.d.ts +4 -4
- 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/SrOnly.d.ts +2 -1
- package/dist/typography/SrOnly.js +2 -1
- package/dist/typography/SrOnly.js.map +1 -1
- package/dist/typography/TextContainer.d.ts +0 -2
- package/dist/typography/TextContainer.js +0 -2
- package/dist/typography/TextContainer.js.map +1 -1
- package/dist/typography/Typography.d.ts +0 -2
- package/dist/typography/Typography.js +0 -2
- package/dist/typography/Typography.js.map +1 -1
- package/dist/typography/WritingDirectionProvider.d.ts +3 -3
- package/dist/typography/WritingDirectionProvider.js +2 -2
- 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 +8 -2
- package/dist/useResizeListener.js.map +1 -1
- package/dist/useResizeObserver.d.ts +3 -3
- 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 +7 -7
- package/dist/useToggle.js +1 -1
- package/dist/useToggle.js.map +1 -1
- package/dist/utils/RenderRecursively.d.ts +1 -1
- package/dist/utils/RenderRecursively.js.map +1 -1
- package/dist/utils/alphaNumericSort.d.ts +1 -1
- package/dist/utils/alphaNumericSort.js.map +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 +39 -17
- package/dist/window-splitter/WindowSplitter.js +40 -19
- 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 +27 -26
- package/src/RootHtml.tsx +0 -2
- package/src/app-bar/AppBar.tsx +1 -172
- package/src/app-bar/AppBarTitle.tsx +1 -46
- 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/avatar/Avatar.tsx +0 -2
- package/src/badge/Badge.tsx +2 -42
- package/src/badge/styles.ts +45 -0
- package/src/box/Box.tsx +11 -11
- package/src/box/styles.ts +14 -5
- package/src/button/AsyncButton.tsx +1 -1
- package/src/button/Button.tsx +5 -1
- package/src/button/ButtonUnstyled.tsx +0 -2
- package/src/card/Card.tsx +35 -6
- package/src/card/CardContent.tsx +0 -2
- package/src/card/CardFooter.tsx +0 -2
- package/src/card/CardHeader.tsx +0 -2
- package/src/card/CardSubtitle.tsx +0 -2
- package/src/card/CardTitle.tsx +0 -2
- package/src/card/ClickableCard.tsx +9 -2
- package/src/card/styles.ts +1 -10
- package/src/chip/Chip.tsx +6 -3
- package/src/chip/styles.ts +12 -10
- package/src/delegateEvent.ts +5 -5
- package/src/dialog/Dialog.tsx +48 -61
- package/src/dialog/DialogContent.tsx +3 -3
- package/src/dialog/DialogFooter.tsx +2 -3
- package/src/dialog/DialogHeader.tsx +3 -3
- package/src/dialog/DialogTitle.tsx +3 -3
- package/src/dialog/FixedDialog.tsx +1 -11
- package/src/dialog/styles.ts +97 -0
- package/src/divider/Divider.tsx +0 -14
- 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/ExpansionList.tsx +1 -1
- package/src/expansion-panel/ExpansionPanel.tsx +10 -39
- package/src/expansion-panel/ExpansionPanelHeader.tsx +0 -1
- package/src/expansion-panel/expansionPanelStyles.ts +33 -0
- 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} +13 -242
- package/src/focus/useFocusContainer.ts +16 -8
- package/src/form/Fieldset.tsx +0 -2
- package/src/form/FormMessage.tsx +0 -2
- package/src/form/FormMessageContainer.tsx +2 -3
- package/src/form/FormMessageCounter.tsx +0 -2
- package/src/form/InputToggle.tsx +6 -2
- package/src/form/InputToggleIcon.tsx +0 -2
- package/src/form/Label.tsx +18 -20
- package/src/form/Legend.tsx +0 -2
- 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 -12
- package/src/form/Option.tsx +74 -22
- package/src/form/Select.tsx +89 -85
- package/src/form/SelectedOption.tsx +0 -2
- package/src/form/Slider.tsx +14 -11
- package/src/form/SliderContainer.tsx +0 -2
- package/src/form/SliderMark.tsx +0 -2
- package/src/form/SliderMarkLabel.tsx +0 -2
- package/src/form/SliderThumb.tsx +4 -4
- package/src/form/SliderTrack.tsx +0 -2
- package/src/form/SliderValueMarks.tsx +4 -6
- package/src/form/Switch.tsx +0 -2
- package/src/form/SwitchTrack.tsx +2 -1
- package/src/form/TextArea.tsx +6 -8
- package/src/form/TextField.tsx +0 -4
- package/src/form/TextFieldAddon.tsx +1 -3
- 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 +0 -2
- package/src/icon/IconRotator.tsx +0 -2
- package/src/icon/MaterialIcon.tsx +0 -2
- package/src/icon/MaterialSymbol.tsx +0 -1
- package/src/icon/SVGIcon.tsx +0 -2
- package/src/icon/TextIconSpacing.tsx +0 -2
- package/src/icon/iconConfig.tsx +12 -0
- package/src/icon/styles.ts +1 -1
- package/src/interaction/RippleContainer.tsx +0 -2
- 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/LayoutNav.tsx +3 -2
- package/src/layout/useExpandableLayout.ts +3 -3
- package/src/layout/useHorizontalLayoutTransition.ts +1 -1
- package/src/layout/useLayoutAppBarHeight.ts +3 -4
- package/src/layout/useLayoutTree.ts +2 -2
- package/src/layout/useTemporaryLayout.ts +2 -2
- package/src/link/Link.tsx +0 -2
- package/src/list/List.tsx +1 -33
- package/src/list/ListItem.tsx +5 -18
- package/src/list/ListItemAddon.tsx +0 -2
- package/src/list/ListItemChildren.tsx +0 -2
- package/src/list/ListItemLink.tsx +5 -1
- package/src/list/ListItemText.tsx +0 -2
- package/src/list/ListSubheader.tsx +3 -2
- package/src/list/getListItemHeight.ts +2 -2
- package/src/list/listItemStyles.ts +21 -4
- package/src/list/listStyles.ts +31 -0
- package/src/list/types.ts +9 -3
- package/src/media-queries/AppSizeProvider.tsx +8 -0
- package/src/media-queries/useMediaQuery.ts +3 -2
- package/src/menu/Menu.tsx +11 -3
- package/src/menu/MenuConfigurationProvider.tsx +2 -2
- 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/NavGroup.tsx +0 -2
- package/src/navigation/NavItem.tsx +0 -2
- package/src/navigation/NavItemButton.tsx +2 -1
- package/src/navigation/NavItemLink.tsx +11 -3
- package/src/navigation/NavSubheader.tsx +1 -3
- 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/progress/CircularProgress.tsx +0 -2
- package/src/progress/LinearProgress.tsx +0 -2
- package/src/responsive-item/ResponsiveItem.tsx +96 -0
- package/src/responsive-item/ResponsiveItemOverlay.tsx +6 -48
- 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/segmented-button/SegmentedButtonContainer.tsx +0 -2
- package/src/sheet/Sheet.tsx +36 -33
- package/src/sheet/styles.ts +50 -0
- package/src/snackbar/ToastManager.tsx +16 -5
- package/src/snackbar/useCurrentToastActions.ts +5 -5
- package/src/suspense/CircularProgressSuspense.tsx +0 -2
- package/src/suspense/NullSuspense.tsx +0 -2
- package/src/table/TableCellContent.tsx +0 -3
- package/src/table/tableCellStyles.ts +10 -6
- package/src/tabs/Tab.tsx +7 -1
- package/src/tabs/TabList.tsx +2 -2
- package/src/tabs/TabListScrollButton.tsx +13 -6
- package/src/tabs/getTabListScrollToOptions.ts +37 -0
- package/src/tabs/tabListScrollButtonStyles.ts +9 -5
- package/src/tabs/tabStyles.ts +4 -0
- package/src/tabs/useTabList.ts +6 -9
- package/src/tabs/useTabs.ts +67 -20
- package/src/tabs/utils.ts +0 -38
- package/src/test-utils/IntersectionObserver.ts +1 -1
- package/src/test-utils/matchMedia.ts +5 -5
- 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/SlideContainer.tsx +2 -48
- package/src/transition/types.ts +1 -1
- package/src/transition/useCarousel.ts +3 -3
- package/src/transition/useTransition.ts +1 -0
- package/src/tree/DefaultTreeItemRenderer.tsx +3 -4
- package/src/tree/Tree.tsx +4 -6
- package/src/tree/TreeItem.tsx +18 -5
- package/src/tree/TreeItemExpander.tsx +1 -1
- package/src/tree/types.ts +16 -6
- package/src/tree/useTree.ts +3 -3
- package/src/tree/useTreeExpansion.ts +10 -28
- package/src/tree/useTreeSelection.ts +11 -35
- package/src/tree/utils.ts +6 -2
- package/src/types.ts +20 -4
- package/src/typography/SrOnly.tsx +2 -1
- package/src/typography/TextContainer.tsx +0 -2
- package/src/typography/Typography.tsx +0 -2
- package/src/typography/WritingDirectionProvider.tsx +3 -3
- 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 +8 -2
- package/src/useResizeObserver.ts +3 -3
- package/src/useThrottledFunction.ts +6 -9
- package/src/useToggle.ts +7 -7
- package/src/utils/RenderRecursively.tsx +1 -1
- package/src/utils/alphaNumericSort.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 +40 -45
- package/src/window-splitter/styles.ts +42 -0
- package/.eslintrc.cjs +0 -34
- package/.stylelintrc.json +0 -14
- package/.swcrc +0 -17
- package/.turbo/turbo-build.log +0 -22
- package/.turbo/turbo-lint.log +0 -12
- package/.turbo/turbo-test.log +0 -5516
- package/.turbo/turbo-typecheck.log +0 -4
- package/CHANGELOG.md +0 -323
- package/coverage/clover.xml +0 -842
- package/coverage/coverage-final.json +0 -6
- package/coverage/lcov-report/autocomplete/Autocomplete.tsx.html +0 -1033
- package/coverage/lcov-report/autocomplete/AutocompleteClearButton.tsx.html +0 -262
- package/coverage/lcov-report/autocomplete/FilterAutocompleteOptions.tsx.html +0 -364
- package/coverage/lcov-report/autocomplete/index.html +0 -146
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/button/Button.tsx.html +0 -676
- package/coverage/lcov-report/button/index.html +0 -116
- package/coverage/lcov-report/card/Card.tsx.html +0 -349
- package/coverage/lcov-report/card/CardSubtitle.tsx.html +0 -265
- package/coverage/lcov-report/card/index.html +0 -146
- package/coverage/lcov-report/card/styles.ts.html +0 -682
- package/coverage/lcov-report/createHorizontalPosition.ts.html +0 -1075
- package/coverage/lcov-report/createVerticalPosition.ts.html +0 -997
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/form/Option.tsx.html +0 -727
- package/coverage/lcov-report/form/index.html +0 -131
- package/coverage/lcov-report/form/useListboxProvider.ts.html +0 -253
- package/coverage/lcov-report/index.html +0 -146
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/searching/fuzzy.ts.html +0 -607
- package/coverage/lcov-report/searching/index.html +0 -116
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -196
- package/coverage/lcov-report/src/card/Card.tsx.html +0 -349
- package/coverage/lcov-report/src/card/CardSubtitle.tsx.html +0 -277
- package/coverage/lcov-report/src/card/index.html +0 -146
- package/coverage/lcov-report/src/card/styles.ts.html +0 -682
- package/coverage/lcov-report/src/cssUtils.ts.html +0 -787
- package/coverage/lcov-report/src/index.html +0 -116
- package/coverage/lcov-report/src/transition/index.html +0 -116
- package/coverage/lcov-report/src/transition/useCSSTransition.ts.html +0 -766
- package/coverage/lcov-report/transition/index.html +0 -116
- package/coverage/lcov-report/transition/useCSSTransition.ts.html +0 -766
- package/coverage/lcov-report/typography/SrOnly.tsx.html +0 -325
- package/coverage/lcov-report/typography/index.html +0 -116
- package/coverage/lcov-report/utils.ts.html +0 -1225
- package/coverage/lcov.info +0 -952
- 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 -16
- package/dist/dialog/DialogContainer.js +0 -22
- 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 -117
- package/dist/responsive-item/ResponsiveItemContainer.js +0 -82
- 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/jest.config.ts +0 -68
- package/jest.setup.ts +0 -3
- package/scripts/copySassFiles.ts +0 -70
- package/scripts/getExportMap.ts +0 -66
- package/scripts/tsconfig.json +0 -18
- package/src/__tests__/NoSsr.node.tsx +0 -26
- package/src/__tests__/NoSsr.tsx +0 -89
- package/src/__tests__/RootHtml.node.tsx +0 -46
- package/src/__tests__/__snapshots__/RootHtml.node.tsx.snap +0 -19
- package/src/__tests__/useAsyncFunction.tsx +0 -124
- package/src/__tests__/useDebouncedFunction.tsx +0 -108
- package/src/__tests__/useDropzone.tsx +0 -131
- package/src/__tests__/useElementSize.tsx +0 -181
- package/src/__tests__/useEnsuredId.tsx +0 -25
- package/src/__tests__/useEnsuredState.tsx +0 -74
- package/src/__tests__/useHtmlClassName.tsx +0 -54
- package/src/__tests__/useLocalStorage.tsx +0 -377
- package/src/__tests__/useOrientation.node.tsx +0 -20
- package/src/__tests__/useOrientation.tsx +0 -63
- package/src/__tests__/useResizeObserver.tsx +0 -258
- package/src/__tests__/useThrottledFunction.tsx +0 -226
- package/src/__tests__/useToggle.tsx +0 -78
- package/src/__tests__/useWindowSize.node.tsx +0 -56
- package/src/__tests__/useWindowSize.tsx +0 -155
- package/src/_box-shadows.scss +0 -219
- package/src/_core.scss +0 -432
- package/src/_utils.scss +0 -348
- package/src/app-bar/__tests__/AppBar.tsx +0 -121
- package/src/app-bar/__tests__/AppBarTitle.tsx +0 -39
- package/src/app-bar/__tests__/__snapshots__/AppBar.tsx.snap +0 -186
- package/src/app-bar/__tests__/__snapshots__/AppBarTitle.tsx.snap +0 -47
- package/src/app-bar/_app-bar.scss +0 -248
- package/src/autocomplete/FilterAutocompleteOptions.tsx +0 -86
- package/src/autocomplete/__tests__/Autocomplete.tsx +0 -458
- package/src/autocomplete/__tests__/__snapshots__/Autocomplete.tsx.snap +0 -144
- package/src/autocomplete/_autocomplete.scss +0 -75
- package/src/avatar/__tests__/Avatar.tsx +0 -75
- package/src/avatar/__tests__/__snapshots__/Avatar.tsx.snap +0 -73
- package/src/avatar/_avatar.scss +0 -157
- package/src/badge/__tests__/Badge.tsx +0 -42
- package/src/badge/__tests__/__snapshots__/Badge.tsx.snap +0 -54
- package/src/badge/_badge.scss +0 -145
- package/src/box/__tests__/Box.tsx +0 -158
- package/src/box/__tests__/__snapshots__/Box.tsx.snap +0 -544
- package/src/box/_box.scss +0 -168
- package/src/button/__tests__/AsyncButton.tsx +0 -211
- package/src/button/__tests__/Button.tsx +0 -198
- package/src/button/__tests__/ButtonUnstyled.tsx +0 -37
- package/src/button/__tests__/TooltippedButton.tsx +0 -60
- package/src/button/__tests__/__snapshots__/AsyncButton.tsx.snap +0 -418
- package/src/button/__tests__/__snapshots__/Button.tsx.snap +0 -573
- package/src/button/__tests__/__snapshots__/ButtonUnstyled.tsx.snap +0 -22
- package/src/button/__tests__/__snapshots__/TooltippedButton.tsx.snap +0 -26
- package/src/button/__tests__/__snapshots__/buttonStyles.ts.snap +0 -11
- package/src/button/__tests__/buttonStyles.ts +0 -15
- package/src/button/_button.scss +0 -330
- package/src/card/__tests__/Card.tsx +0 -37
- package/src/card/__tests__/CardContent.tsx +0 -40
- package/src/card/__tests__/CardFooter.tsx +0 -34
- package/src/card/__tests__/CardHeader.tsx +0 -66
- package/src/card/__tests__/CardSubtitle.tsx +0 -30
- package/src/card/__tests__/CardTitle.tsx +0 -30
- package/src/card/__tests__/ClickableCard.tsx +0 -66
- package/src/card/__tests__/__snapshots__/Card.tsx.snap +0 -40
- package/src/card/__tests__/__snapshots__/CardContent.tsx.snap +0 -50
- package/src/card/__tests__/__snapshots__/CardFooter.tsx.snap +0 -30
- package/src/card/__tests__/__snapshots__/CardHeader.tsx.snap +0 -74
- package/src/card/__tests__/__snapshots__/CardSubtitle.tsx.snap +0 -18
- package/src/card/__tests__/__snapshots__/CardTitle.tsx.snap +0 -18
- package/src/card/__tests__/__snapshots__/ClickableCard.tsx.snap +0 -20
- package/src/card/__tests__/__snapshots__/styles.ts.snap +0 -13
- package/src/card/__tests__/styles.ts +0 -45
- package/src/card/_card.scss +0 -189
- package/src/chip/__tests__/Chip.tsx +0 -327
- package/src/chip/__tests__/__snapshots__/Chip.tsx.snap +0 -597
- package/src/chip/__tests__/__snapshots__/styles.ts.snap +0 -5
- package/src/chip/__tests__/styles.ts +0 -14
- package/src/chip/_chip.scss +0 -324
- package/src/dialog/DialogContainer.tsx +0 -30
- package/src/dialog/__tests__/Dialog.tsx +0 -316
- package/src/dialog/__tests__/DialogContent.tsx +0 -53
- package/src/dialog/__tests__/DialogFooter.tsx +0 -70
- package/src/dialog/__tests__/DialogHeader.tsx +0 -37
- package/src/dialog/__tests__/DialogTitle.tsx +0 -41
- package/src/dialog/__tests__/__snapshots__/Dialog.tsx.snap +0 -84
- package/src/dialog/__tests__/__snapshots__/DialogContent.tsx.snap +0 -36
- package/src/dialog/__tests__/__snapshots__/DialogFooter.tsx.snap +0 -186
- package/src/dialog/__tests__/__snapshots__/DialogHeader.tsx.snap +0 -18
- package/src/dialog/__tests__/__snapshots__/DialogTitle.tsx.snap +0 -26
- package/src/dialog/_dialog.scss +0 -273
- package/src/divider/__tests__/Divider.tsx +0 -36
- package/src/divider/__tests__/__snapshots__/Divider.tsx.snap +0 -26
- package/src/divider/_divider.scss +0 -124
- package/src/draggable/__tests__/__snapshots__/useDraggable.tsx.snap +0 -49
- package/src/draggable/__tests__/useDraggable.tsx +0 -540
- package/src/draggable/_draggable.scss +0 -29
- package/src/expansion-panel/__tests__/ExpansionPanel.tsx +0 -290
- package/src/expansion-panel/__tests__/__snapshots__/ExpansionPanel.tsx.snap +0 -197
- package/src/expansion-panel/_expansion-panel.scss +0 -107
- package/src/focus/__tests__/useFocusContainer.tsx +0 -280
- package/src/form/__tests__/Checkbox.tsx +0 -42
- package/src/form/__tests__/Fieldset.tsx +0 -44
- package/src/form/__tests__/FileInput.tsx +0 -120
- package/src/form/__tests__/Label.tsx +0 -69
- package/src/form/__tests__/Legend.tsx +0 -34
- package/src/form/__tests__/MenuItemCheckbox.tsx +0 -53
- package/src/form/__tests__/MenuItemRadio.tsx +0 -53
- package/src/form/__tests__/Radio.tsx +0 -35
- package/src/form/__tests__/Select.tsx +0 -439
- package/src/form/__tests__/Switch.tsx +0 -152
- package/src/form/__tests__/TextArea.tsx +0 -433
- package/src/form/__tests__/TextField.tsx +0 -195
- package/src/form/__tests__/__snapshots__/Checkbox.tsx.snap +0 -99
- package/src/form/__tests__/__snapshots__/Fieldset.tsx.snap +0 -58
- package/src/form/__tests__/__snapshots__/FileInput.tsx.snap +0 -612
- package/src/form/__tests__/__snapshots__/Label.tsx.snap +0 -140
- package/src/form/__tests__/__snapshots__/Legend.tsx.snap +0 -30
- package/src/form/__tests__/__snapshots__/MenuItemCheckbox.tsx.snap +0 -96
- package/src/form/__tests__/__snapshots__/MenuItemRadio.tsx.snap +0 -96
- package/src/form/__tests__/__snapshots__/Radio.tsx.snap +0 -99
- package/src/form/__tests__/__snapshots__/Select.tsx.snap +0 -492
- package/src/form/__tests__/__snapshots__/Switch.tsx.snap +0 -428
- package/src/form/__tests__/__snapshots__/TextArea.tsx.snap +0 -548
- package/src/form/__tests__/__snapshots__/TextField.tsx.snap +0 -279
- package/src/form/__tests__/__snapshots__/useCheckboxGroup.tsx.snap +0 -481
- package/src/form/__tests__/__snapshots__/useRadioGroup.tsx.snap +0 -704
- package/src/form/__tests__/useCheckboxGroup.tsx +0 -292
- package/src/form/__tests__/useFileUpload.tsx +0 -289
- package/src/form/__tests__/useFormReset.tsx +0 -194
- package/src/form/__tests__/useRadioGroup.tsx +0 -227
- package/src/form/__tests__/utils.ts +0 -247
- package/src/form/_form.scss +0 -2190
- package/src/form/useListboxProvider.ts +0 -45
- package/src/icon/__tests__/FontIcon.tsx +0 -45
- package/src/icon/__tests__/IconRotator.tsx +0 -120
- package/src/icon/__tests__/MaterialIcon.tsx +0 -79
- package/src/icon/__tests__/MaterialSymbol.tsx +0 -100
- package/src/icon/__tests__/SVGIcon.tsx +0 -40
- package/src/icon/__tests__/TextIconSpacing.tsx +0 -108
- package/src/icon/__tests__/__snapshots__/FontIcon.tsx.snap +0 -35
- package/src/icon/__tests__/__snapshots__/IconRotator.tsx.snap +0 -165
- package/src/icon/__tests__/__snapshots__/MaterialIcon.tsx.snap +0 -82
- package/src/icon/__tests__/__snapshots__/MaterialSymbol.tsx.snap +0 -42
- package/src/icon/__tests__/__snapshots__/SVGIcon.tsx.snap +0 -47
- package/src/icon/__tests__/__snapshots__/TextIconSpacing.tsx.snap +0 -101
- package/src/icon/__tests__/__snapshots__/styles.ts.snap +0 -29
- package/src/icon/__tests__/styles.ts +0 -28
- package/src/icon/_icon.scss +0 -213
- package/src/interaction/__tests__/UserInteractionModeProvider.tsx +0 -121
- package/src/interaction/__tests__/__snapshots__/useHigherContrastChildren.tsx.snap +0 -79
- package/src/interaction/__tests__/useHigherContrastChildren.tsx +0 -97
- package/src/interaction/_interaction.scss +0 -436
- package/src/layout/__tests__/LayoutAppBar.tsx +0 -117
- package/src/layout/__tests__/LayoutNav.tsx +0 -78
- package/src/layout/__tests__/LayoutWindowSplitter.tsx +0 -63
- package/src/layout/__tests__/Main.tsx +0 -51
- package/src/layout/__tests__/__snapshots__/LayoutAppBar.tsx.snap +0 -78
- package/src/layout/__tests__/__snapshots__/LayoutNav.tsx.snap +0 -31
- package/src/layout/__tests__/__snapshots__/LayoutWindowSplitter.tsx.snap +0 -60
- package/src/layout/__tests__/__snapshots__/Main.tsx.snap +0 -32
- package/src/layout/__tests__/__snapshots__/useExpandableLayout.tsx.snap +0 -116
- package/src/layout/__tests__/__snapshots__/useLayoutTree.tsx.snap +0 -676
- package/src/layout/__tests__/__snapshots__/useResizableLayout.tsx.snap +0 -95
- package/src/layout/__tests__/__snapshots__/useTemporaryLayout.tsx.snap +0 -141
- package/src/layout/__tests__/useExpandableLayout.tsx +0 -279
- package/src/layout/__tests__/useLayoutTree.tsx +0 -212
- package/src/layout/__tests__/useResizableLayout.tsx +0 -170
- package/src/layout/__tests__/useTemporaryLayout.tsx +0 -109
- package/src/layout/_layout.scss +0 -163
- package/src/link/__tests__/Link.tsx +0 -31
- package/src/link/__tests__/SkipToMainContent.tsx +0 -125
- package/src/link/__tests__/__snapshots__/Link.tsx.snap +0 -20
- package/src/link/__tests__/__snapshots__/SkipToMainContent.tsx.snap +0 -22
- package/src/link/_link.scss +0 -149
- package/src/list/__tests__/List.tsx +0 -58
- package/src/list/__tests__/ListItem.tsx +0 -280
- package/src/list/__tests__/ListItemLink.tsx +0 -89
- package/src/list/__tests__/ListSubheader.tsx +0 -81
- package/src/list/__tests__/__snapshots__/List.tsx.snap +0 -41
- package/src/list/__tests__/__snapshots__/ListItem.tsx.snap +0 -414
- package/src/list/__tests__/__snapshots__/ListItemLink.tsx.snap +0 -73
- package/src/list/__tests__/__snapshots__/ListSubheader.tsx.snap +0 -99
- package/src/list/__tests__/getListItemHeight.ts +0 -176
- package/src/list/_list.scss +0 -322
- package/src/media-queries/__tests__/AppSizeProvider.node.tsx +0 -37
- package/src/media-queries/__tests__/AppSizeProvider.tsx +0 -119
- package/src/media-queries/__tests__/useMediaQuery.node.tsx +0 -20
- package/src/media-queries/__tests__/useMediaQuery.tsx +0 -59
- package/src/media-queries/_media-queries.scss +0 -63
- package/src/menu/__tests__/DropdownMenu.tsx +0 -627
- package/src/menu/__tests__/MenuBar.tsx +0 -354
- package/src/menu/__tests__/MenuItemCircularProgress.tsx +0 -39
- package/src/menu/__tests__/MenuVisibilityProvider.tsx +0 -34
- package/src/menu/__tests__/__snapshots__/DropdownMenu.tsx.snap +0 -292
- package/src/menu/__tests__/__snapshots__/MenuBar.tsx.snap +0 -87
- package/src/menu/__tests__/__snapshots__/MenuItemCircularProgress.tsx.snap +0 -68
- package/src/menu/__tests__/__snapshots__/useContextMenu.tsx.snap +0 -54
- package/src/menu/__tests__/useContextMenu.tsx +0 -41
- package/src/menu/__tests__/utils.ts +0 -121
- package/src/menu/_menu.scss +0 -116
- package/src/movement/__tests__/findMatchIndex.ts +0 -244
- package/src/movement/__tests__/utils.ts +0 -710
- package/src/navigation/__tests__/Navigation.tsx +0 -97
- package/src/navigation/__tests__/__snapshots__/Navigation.tsx.snap +0 -165
- package/src/navigation/_navigation.scss +0 -99
- package/src/navigation/getHrefFromParents.ts +0 -15
- package/src/overlay/__tests__/Overlay.tsx +0 -198
- package/src/overlay/__tests__/__snapshots__/Overlay.tsx.snap +0 -77
- package/src/overlay/_overlay.scss +0 -74
- package/src/portal/__tests__/PortalContainerProvider.node.tsx +0 -26
- package/src/portal/__tests__/PortalContainerProvider.tsx +0 -84
- package/src/positioning/__tests__/__snapshots__/useFixedPositioning.tsx.snap +0 -87
- package/src/positioning/__tests__/createHorizontalPosition.ts +0 -777
- package/src/positioning/__tests__/createVerticalPosition.ts +0 -464
- package/src/positioning/__tests__/useFixedPositioning.tsx +0 -205
- package/src/positioning/__tests__/utils.ts +0 -1311
- package/src/progress/__tests__/CircularProgress.tsx +0 -153
- package/src/progress/__tests__/LinearProgress.tsx +0 -131
- package/src/progress/__tests__/__snapshots__/CircularProgress.tsx.snap +0 -499
- package/src/progress/__tests__/__snapshots__/LinearProgress.tsx.snap +0 -321
- package/src/progress/__tests__/getProgressA11y.ts +0 -16
- package/src/progress/_progress.scss +0 -577
- package/src/responsive-item/ResponsiveItemContainer.tsx +0 -176
- package/src/responsive-item/__tests__/ResponsiveItemContainer.tsx +0 -56
- package/src/responsive-item/__tests__/ResponsiveItemOverlay.tsx +0 -66
- package/src/responsive-item/__tests__/__snapshots__/ResponsiveItemContainer.tsx.snap +0 -85
- package/src/responsive-item/__tests__/__snapshots__/ResponsiveItemOverlay.tsx.snap +0 -151
- package/src/responsive-item/__tests__/__snapshots__/styles.ts.snap +0 -9
- package/src/responsive-item/__tests__/styles.ts +0 -32
- package/src/responsive-item/_responsive-item.scss +0 -199
- package/src/responsive-item/styles.ts +0 -58
- package/src/searching/__tests__/caseInsensitive.ts +0 -165
- package/src/searching/__tests__/fuzzy.ts +0 -169
- package/src/searching/__tests__/toSearchQuery.ts +0 -21
- package/src/searching/__tests__/useFuzzyMatch.tsx +0 -200
- package/src/segmented-button/__tests__/SegmentedButton.tsx +0 -61
- package/src/segmented-button/__tests__/SegmentedButtonContainer.tsx +0 -38
- package/src/segmented-button/__tests__/__snapshots__/SegmentedButton.tsx.snap +0 -116
- package/src/segmented-button/__tests__/__snapshots__/SegmentedButtonContainer.tsx.snap +0 -22
- package/src/segmented-button/_segmented-button.scss +0 -208
- package/src/sheet/_sheet.scss +0 -189
- package/src/snackbar/__tests__/Snackbar.tsx +0 -85
- package/src/snackbar/__tests__/Toast.tsx +0 -105
- package/src/snackbar/__tests__/ToastActionButton.tsx +0 -112
- package/src/snackbar/__tests__/ToastCloseButton.tsx +0 -140
- package/src/snackbar/__tests__/ToastContent.tsx +0 -88
- package/src/snackbar/__tests__/ToastManagerProvider.tsx +0 -852
- package/src/snackbar/__tests__/__snapshots__/Snackbar.tsx.snap +0 -176
- package/src/snackbar/__tests__/__snapshots__/Toast.tsx.snap +0 -52
- package/src/snackbar/__tests__/__snapshots__/ToastActionButton.tsx.snap +0 -36
- package/src/snackbar/__tests__/__snapshots__/ToastCloseButton.tsx.snap +0 -104
- package/src/snackbar/__tests__/__snapshots__/ToastContent.tsx.snap +0 -26
- package/src/snackbar/__tests__/__snapshots__/ToastManagerProvider.tsx.snap +0 -290
- package/src/snackbar/_snackbar.scss +0 -266
- package/src/suspense/__tests__/CircularProgressSuspense.tsx +0 -90
- package/src/suspense/__tests__/NullSuspense.tsx +0 -46
- package/src/suspense/__tests__/__snapshots__/CircularProgressSuspense.tsx.snap +0 -24
- package/src/table/__tests__/Table.tsx +0 -315
- package/src/table/__tests__/TableBody.tsx +0 -52
- package/src/table/__tests__/TableCheckbox.tsx +0 -89
- package/src/table/__tests__/TableContainer.tsx +0 -31
- package/src/table/__tests__/TableRadio.tsx +0 -112
- package/src/table/__tests__/TableRow.tsx +0 -63
- package/src/table/__tests__/__snapshots__/Table.tsx.snap +0 -2426
- package/src/table/__tests__/__snapshots__/TableBody.tsx.snap +0 -54
- package/src/table/__tests__/__snapshots__/TableCheckbox.tsx.snap +0 -142
- package/src/table/__tests__/__snapshots__/TableContainer.tsx.snap +0 -16
- package/src/table/__tests__/__snapshots__/TableRadio.tsx.snap +0 -138
- package/src/table/__tests__/__snapshots__/TableRow.tsx.snap +0 -56
- package/src/table/__tests__/__snapshots__/tableContainerStyles.ts.snap +0 -3
- package/src/table/__tests__/__snapshots__/tableRowStyles.ts.snap +0 -3
- package/src/table/__tests__/__snapshots__/tableStyles.ts.snap +0 -3
- package/src/table/__tests__/tableContainerStyles.ts +0 -8
- package/src/table/__tests__/tableRowStyles.ts +0 -8
- package/src/table/__tests__/tableStyles.ts +0 -8
- package/src/table/_table.scss +0 -447
- package/src/tabs/__tests__/Tab.tsx +0 -51
- package/src/tabs/__tests__/TabList.tsx +0 -640
- package/src/tabs/__tests__/__snapshots__/Tab.tsx.snap +0 -85
- package/src/tabs/__tests__/__snapshots__/TabList.tsx.snap +0 -51
- package/src/tabs/__tests__/useTabs.tsx +0 -212
- package/src/tabs/_tabs.scss +0 -273
- package/src/test-utils/__tests__/ResizeObserver.ts +0 -171
- package/src/theme/__tests__/LocalStorageColorSchemeProvider.tsx +0 -162
- package/src/theme/__tests__/ThemeProvider.tsx +0 -90
- package/src/theme/__tests__/__snapshots__/useCSSVariables.tsx.snap +0 -27
- package/src/theme/__tests__/__snapshots__/useColorSchemeMetaTag.tsx.snap +0 -15
- package/src/theme/__tests__/useCSSVariables.tsx +0 -177
- package/src/theme/__tests__/useColorSchemeMetaTag.tsx +0 -36
- package/src/theme/__tests__/utils.ts +0 -67
- package/src/theme/_a11y.scss +0 -114
- package/src/theme/_colors.scss +0 -1057
- package/src/theme/_theme.scss +0 -520
- package/src/tooltip/__tests__/Tooltip.tsx +0 -501
- package/src/tooltip/__tests__/TooltipHoverModeProvider.tsx +0 -94
- package/src/tooltip/__tests__/__snapshots__/Tooltip.tsx.snap +0 -34
- package/src/tooltip/__tests__/utils.ts +0 -94
- package/src/tooltip/_tooltip.scss +0 -155
- package/src/transition/__tests__/CSSTransition.tsx +0 -182
- package/src/transition/__tests__/Collapse.tsx +0 -209
- package/src/transition/__tests__/CrossFade.tsx +0 -227
- package/src/transition/__tests__/ScaleTransition.tsx +0 -204
- package/src/transition/__tests__/SkeletonPlaceholder.tsx +0 -72
- package/src/transition/__tests__/__snapshots__/CSSTransition.tsx.snap +0 -145
- package/src/transition/__tests__/__snapshots__/Collapse.tsx.snap +0 -224
- package/src/transition/__tests__/__snapshots__/CrossFade.tsx.snap +0 -240
- package/src/transition/__tests__/__snapshots__/ScaleTransition.tsx.snap +0 -239
- package/src/transition/__tests__/__snapshots__/SkeletonPlaceholder.tsx.snap +0 -24
- package/src/transition/__tests__/__snapshots__/useCollapseTransition.tsx.snap +0 -361
- package/src/transition/__tests__/__snapshots__/useCrossFadeTransition.tsx.snap +0 -258
- package/src/transition/__tests__/__snapshots__/useMaxWidthTransition.tsx.snap +0 -68
- package/src/transition/__tests__/__snapshots__/useScaleTransition.tsx.snap +0 -209
- package/src/transition/__tests__/useCSSTransition.tsx +0 -190
- package/src/transition/__tests__/useCollapseTransition.tsx +0 -316
- package/src/transition/__tests__/useCrossFadeTransition.tsx +0 -229
- package/src/transition/__tests__/useMaxWidthTransition.tsx +0 -123
- package/src/transition/__tests__/useScaleTransition.tsx +0 -212
- package/src/transition/__tests__/useTransition.tsx +0 -569
- package/src/transition/__tests__/utils.ts +0 -620
- package/src/transition/_transition.scss +0 -365
- package/src/tree/__tests__/Tree.tsx +0 -735
- package/src/tree/__tests__/TreeGroup.tsx +0 -76
- package/src/tree/__tests__/TreeItemExpander.tsx +0 -74
- package/src/tree/__tests__/__snapshots__/Tree.tsx.snap +0 -3618
- package/src/tree/__tests__/__snapshots__/TreeItemExpander.tsx.snap +0 -11
- package/src/tree/__tests__/utils.ts +0 -98
- package/src/tree/_tree.scss +0 -176
- package/src/typography/__tests__/SrOnly.tsx +0 -43
- package/src/typography/__tests__/TextContainer.tsx +0 -45
- package/src/typography/__tests__/Typography.tsx +0 -87
- package/src/typography/__tests__/WritingDirectionProvider.node.tsx +0 -27
- package/src/typography/__tests__/WritingDirectionProvider.tsx +0 -119
- package/src/typography/__tests__/__snapshots__/SrOnly.tsx.snap +0 -56
- package/src/typography/__tests__/__snapshots__/TextContainer.tsx.snap +0 -29
- package/src/typography/__tests__/__snapshots__/Typography.tsx.snap +0 -112
- package/src/typography/_typography.scss +0 -399
- package/src/utils/__tests__/RenderRecursively.tsx +0 -87
- package/src/utils/__tests__/__snapshots__/RenderRecursively.tsx.snap +0 -80
- package/src/utils/__tests__/applyRef.ts +0 -30
- package/src/utils/__tests__/bem.ts +0 -54
- package/src/utils/__tests__/getMiddleOfRange.ts +0 -12
- package/src/utils/__tests__/getPercentage.ts +0 -104
- package/src/utils/__tests__/getRangeDefaultValue.ts +0 -47
- package/src/utils/__tests__/getRangeSteps.ts +0 -14
- package/src/utils/__tests__/loop.ts +0 -50
- package/src/utils/__tests__/nearest.ts +0 -83
- package/src/utils/__tests__/parseCssLengthUnit.node.ts +0 -28
- package/src/utils/__tests__/parseCssLengthUnit.ts +0 -47
- package/src/utils/__tests__/wait.ts +0 -12
- package/src/utils/__tests__/withinRange.ts +0 -24
- package/src/window-splitter/_window-splitter.scss +0 -143
- package/tsconfig.json +0 -19
- package/tsconfig.types.json +0 -12
- package/tsdoc.json +0 -14
- /package/dist/theme/{usePrefersColorScheme.d.ts → usePrefersDarkScheme.d.ts} +0 -0
- /package/src/theme/{usePrefersColorScheme.ts → usePrefersDarkScheme.ts} +0 -0
package/dist/tabs/useTabs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tabs/useTabs.ts"],"sourcesContent":["\"use client\";\nimport type { Dispatch, Ref, RefObject } from \"react\";\nimport { useEffect, useRef, useState } from \"react\";\nimport type { SlideDirection } from \"../transition/SlideContainer.js\";\nimport type { UseStateInitializer, UseStateSetter } from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredState } from \"../useEnsuredState.js\";\n\nconst EMPTY_LIST = [] as const;\nconst PANEL_PREFIX = \"panel-\";\n\n/**\n * @since 6.0.0\n */\nexport interface TabsHookOptions<TabValue extends string | number = number> {\n /**\n * This can be used to generate the ids for the different components within\n * the tab widget.\n *\n * @defaultValue `\"tab-\" + useId()`\n */\n baseId?: string;\n\n /**\n * Set this to `true` if changing active tabs should no longer attempt to\n * scroll to the top of the tab panels container when using the\n * {@link TabsImplementation.getTabPanelsProps}.\n *\n * @defaultValue `false`\n */\n disableScrollFix?: boolean;\n\n /**\n * Set this to an **ordered** list of tab values when:\n * - using a `string` tab value\n * - using a `number` tab value does not represent a tab index\n *\n * See the examples on the {@link useTabs} for usage.\n */\n tabs?: readonly TabValue[];\n\n /**\n * Provide this value and {@link setActiveTab} to control the active tab\n * behavior.\n */\n activeTab?: TabValue;\n\n /** @see {@link activeTab} */\n setActiveTab?: Dispatch<TabValue>;\n\n /**\n * Set this to the default tab index when not controlling the active tab value\n * through {@link activeTab} and {@link setActiveTab}.\n *\n * @defaultValue `0`\n */\n defaultActiveTab?: UseStateInitializer<TabValue>;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabProps {\n \"aria-controls\": string;\n id: string;\n active: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabListProps {\n activeIndex: number;\n setActiveIndex: Dispatch<number>;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabPanelProps {\n \"aria-labelledby\": string;\n id: string;\n role: \"tabpanel\";\n active: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabPanelsProps<E extends HTMLElement> {\n ref: Ref<E>;\n direction: SlideDirection;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface TabsImplementation<TabValue extends string | number = number> {\n direction: SlideDirection;\n setDirection: UseStateSetter<SlideDirection>;\n activeTab?: TabValue;\n setActiveTab?(nextActiveTab: TabValue): void;\n getTabProps(tabValue: TabValue): ProvidedTabProps;\n getTabListProps(): ProvidedTabListProps;\n getTabPanelProps(tabValue: TabValue): ProvidedTabPanelProps;\n getTabPanelsProps<E extends HTMLElement>(): ProvidedTabPanelsProps<E>;\n}\n\n/**\n * @example Super Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * function Example(): ReactElement {\n * const {\n * activeTab,\n * setActiveTab,\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs();\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <Tab {...getTabProps(0)}>Tab 1</Tab>\n * <Tab {...getTabProps(1)}>Tab 2</Tab>\n * <Tab {...getTabProps(2)}>Tab 3</Tab>\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * <Slide {...getTabPanelProps(0)}>Tab 1 Content</Slide>\n * <Slide {...getTabPanelProps(1)}>Tab 2 Content</Slide>\n * <Slide {...getTabPanelProps(2)}>Tab 3 Content</Slide>\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs(): TabsImplementation<number> & {\n activeTab: number;\n setActiveTab: number;\n};\n/**\n * The tab behavior can be controlled by providing the `activeTab` and\n * `setActiveTab` options.\n *\n * @example Controlled\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n * import { useState } from \"react\";\n *\n * function Example(): ReactElement {\n * const [activeTab, setActiveTab] = useState(1);\n *\n * const {\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({\n * activeTab,\n * setActiveTab,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <Tab {...getTabProps(0)}>Tab 1</Tab>\n * <Tab {...getTabProps(1)}>Tab 2</Tab>\n * <Tab {...getTabProps(2)}>Tab 3</Tab>\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * <Slide {...getTabPanelProps(0)}>Tab 1 Content</Slide>\n * <Slide {...getTabPanelProps(1)}>Tab 2 Content</Slide>\n * <Slide {...getTabPanelProps(2)}>Tab 3 Content</Slide>\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends number>(\n options: TabsHookOptions<TabValue> & {\n tabs?: readonly TabValue[];\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n defaultActiveTab?: never;\n }\n): TabsImplementation<TabValue> & { activeTab?: never; setActiveTab?: never };\nexport function useTabs<TabValue extends number>(\n options: TabsHookOptions<TabValue> & {\n tabs?: readonly TabValue[];\n activeTab?: never;\n setActiveTab?: never;\n defaultActiveTab?: UseStateInitializer<TabValue>;\n }\n): TabsImplementation<TabValue> & {\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n};\n/**\n * When using string values, the {@link TabsHookOptions.tabs} option **must** be\n * provided to determine the correct active tab index.\n *\n * @example String Value Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * const tabs = [\"value-1\", \"value-2\", \"value-3\"];\n *\n * function Example(): ReactElement {\n * const {\n * activeTab,\n * setActiveTab,\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({ tabs });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * {tabs.map((value) => (\n * <Tab key={value} {...getTabProps(value)}>{value}</Tab>\n * ))}\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * {tabs.map((value) => (\n * <Slide key={value}>{value} Content</Slide>\n * ))}\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string>(\n options: TabsHookOptions<TabValue> & {\n tabs: readonly TabValue[];\n activeTab?: never;\n setActiveTab?: never;\n defaultActiveTab?: UseStateInitializer<TabValue>;\n }\n): TabsImplementation<TabValue> & {\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n};\n/**\n * When using string values, the {@link TabsHookOptions.tabs} option **must** be\n * provided to determine the correct active tab index.\n *\n * @example String Controlled Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * const tabs = [\"value-1\", \"value-2\", \"value-3\"] as const;\n *\n * function Example(): ReactElement {\n * const [activeTab, setActiveTab] = useState(tabs[0]);\n *\n * const {\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({\n * tabs,\n * activeTab,\n * setActiveTab,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * {tabs.map((value) => (\n * <Tab key={value} {...getTabProps(value)}>{value}</Tab>\n * ))}\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * {tabs.map((value) => (\n * <Slide key={value}>{value} Content</Slide>\n * ))}\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @example Navigation Tabs\n * ```tsx\n * \"use client\";\n * import {\n * RippleContainer,\n * Tab,\n * TabList,\n * useElementInteraction,\n * useEnsuredId,\n * useHigherContrastChildren,\n * useKeyboardMovementContext,\n * useTabs,\n * } from \"@react-md/core\";\n * import type { LinkProps } from \"next/link\";\n * import Link from \"next/link\";\n * import type { PropsWithChildren, ReactElement } from \"react\";\n * import { usePathname } from \"next/navigation\";\n *\n * interface TabLinkProps extends LinkProps {\n * active: boolean;\n * }\n *\n * function TabLink(props: LinkProps): ReactElement {\n * const {\n * id: propId,\n * children: propChildren,\n * active,\n * className,\n * ...remaining,\n * } = props;\n *\n * const id = useEnsuredId(propId, \"tab\");\n * const { activeDescendantId } = useKeyboardMovementContext();\n * const { handlers, ripples } = useElementInteraction(props);\n * const children = useHigherContrastChildren(propChildren);\n *\n * return (\n * <Link\n * {...props}\n * {...handlers}\n * id={id}\n * aria-selected={active}\n * role=\"tab\"\n * tabIndex={id === activeDescendantId ? 0 : -1}\n * className={tab({\n * className,\n * active,\n * // stacked,\n * // reversed,\n * })}\n * >\n * {children}\n * {ripples}\n * </Link>\n * );\n * }\n *\n * const noop = (): void => {\n * // do nothing\n * };\n *\n * const PATHNAME_TABS = [\"/\", \"/page-1\", \"/page-2\"];\n *\n * function Layout({ children }: PropsWithChildren) {\n * const pathname = usePathname();\n * const { getTabListProps, getTabProps } = useTabs({\n * tabs: PATHNAME_TABS,\n * activeTab: pathname,\n * setActiveTab: noop,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <TabLink {...getTabProps(\"/\")} href=\"/\">Home</TabLink>\n * <TabLink {...getTabProps(\"/page-1\")} href=\"/page-1\">Page 1</TabLink>\n * <TabLink {...getTabProps(\"/page-2\")} href=\"/page-2\">Page 2</TabLink>\n * </TabList>\n * <main>{children}</main>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string>(\n options: TabsHookOptions<TabValue> & {\n tabs: readonly TabValue[];\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n defaultActiveTab?: never;\n }\n): TabsImplementation<TabValue> & { activeTab?: never; setActiveTab?: never };\n/**\n * This hook can be uncontrolled/controlled and supports strongly typing the tab\n * values if needed. Check out the overloads for examples.\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string | number>(\n options: TabsHookOptions<TabValue> = {}\n): TabsImplementation<TabValue> {\n const {\n baseId: propBaseId,\n disableScrollFix,\n tabs = EMPTY_LIST,\n activeTab: propActiveTab,\n setActiveTab: propSetActiveTab,\n defaultActiveTab,\n } = options;\n\n const baseId = useEnsuredId(propBaseId, \"tab\");\n const [direction, setDirection] = useState<SlideDirection>(\"left\");\n\n const [activeTab, setActiveTab] = useEnsuredState({\n value: propActiveTab,\n setValue: propSetActiveTab,\n defaultValue: defaultActiveTab ?? (0 as TabValue),\n });\n\n const getTabIndex = (tabValue: TabValue): number =>\n typeof tabValue === \"string\" || tabs.length > 0\n ? tabs.indexOf(tabValue)\n : tabValue;\n const getTabId = (tabValue: TabValue, prefix = \"\"): string =>\n `${baseId}-${prefix}${getTabIndex(tabValue) + 1}`;\n\n const activeIndex = getTabIndex(activeTab);\n const tabPanelsRef = useRef<HTMLElement>(null);\n useEffect(() => {\n const container = tabPanelsRef.current;\n if (!container || disableScrollFix) {\n return;\n }\n\n container.scrollTop = 0;\n }, [disableScrollFix, activeTab]);\n\n return {\n activeTab,\n setActiveTab,\n direction,\n setDirection,\n getTabProps(tabValue) {\n return {\n \"aria-controls\": getTabId(tabValue, PANEL_PREFIX),\n id: getTabId(tabValue),\n active: tabValue === activeTab,\n };\n },\n getTabListProps() {\n return {\n activeIndex,\n setActiveIndex: (nextActiveIndex) => {\n setDirection(activeIndex < nextActiveIndex ? \"left\" : \"right\");\n if (typeof activeTab === \"string\" || tabs.length > 0) {\n setActiveTab(tabs[nextActiveIndex]);\n } else {\n setActiveTab(nextActiveIndex as TabValue);\n }\n },\n };\n },\n getTabPanelProps(tabValue) {\n return {\n \"aria-labelledby\": getTabId(tabValue),\n id: getTabId(tabValue, PANEL_PREFIX),\n role: \"tabpanel\",\n active: tabValue === activeTab,\n };\n },\n getTabPanelsProps<E>() {\n return {\n ref: tabPanelsRef as RefObject<E>,\n direction,\n };\n },\n };\n}\n"],"names":["useEffect","useRef","useState","useEnsuredId","useEnsuredState","EMPTY_LIST","PANEL_PREFIX","useTabs","options","baseId","propBaseId","disableScrollFix","tabs","activeTab","propActiveTab","setActiveTab","propSetActiveTab","defaultActiveTab","direction","setDirection","value","setValue","defaultValue","getTabIndex","tabValue","length","indexOf","getTabId","prefix","activeIndex","tabPanelsRef","container","current","scrollTop","getTabProps","id","active","getTabListProps","setActiveIndex","nextActiveIndex","getTabPanelProps","role","getTabPanelsProps","ref"],"mappings":"AAAA;AAEA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AAGpD,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SAASC,eAAe,QAAQ,wBAAwB;AAExD,MAAMC,aAAa,EAAE;AACrB,MAAMC,eAAe;AA0YrB;;;;;CAKC,GACD,OAAO,SAASC,QACdC,UAAqC,CAAC,CAAC;IAEvC,MAAM,EACJC,QAAQC,UAAU,EAClBC,gBAAgB,EAChBC,OAAOP,UAAU,EACjBQ,WAAWC,aAAa,EACxBC,cAAcC,gBAAgB,EAC9BC,gBAAgB,EACjB,GAAGT;IAEJ,MAAMC,SAASN,aAAaO,YAAY;IACxC,MAAM,CAACQ,WAAWC,aAAa,GAAGjB,SAAyB;IAE3D,MAAM,CAACW,WAAWE,aAAa,GAAGX,gBAAgB;QAChDgB,OAAON;QACPO,UAAUL;QACVM,cAAcL,oBAAqB;IACrC;IAEA,MAAMM,cAAc,CAACC,WACnB,OAAOA,aAAa,YAAYZ,KAAKa,MAAM,GAAG,IAC1Cb,KAAKc,OAAO,CAACF,YACbA;IACN,MAAMG,WAAW,CAACH,UAAoBI,SAAS,EAAE,GAC/C,CAAC,EAAEnB,OAAO,CAAC,EAAEmB,OAAO,EAAEL,YAAYC,YAAY,EAAE,CAAC;IAEnD,MAAMK,cAAcN,YAAYV;IAChC,MAAMiB,eAAe7B,OAAoB;IACzCD,UAAU;QACR,MAAM+B,YAAYD,aAAaE,OAAO;QACtC,IAAI,CAACD,aAAapB,kBAAkB;YAClC;QACF;QAEAoB,UAAUE,SAAS,GAAG;IACxB,GAAG;QAACtB;QAAkBE;KAAU;IAEhC,OAAO;QACLA;QACAE;QACAG;QACAC;QACAe,aAAYV,QAAQ;YAClB,OAAO;gBACL,iBAAiBG,SAASH,UAAUlB;gBACpC6B,IAAIR,SAASH;gBACbY,QAAQZ,aAAaX;YACvB;QACF;QACAwB;YACE,OAAO;gBACLR;gBACAS,gBAAgB,CAACC;oBACfpB,aAAaU,cAAcU,kBAAkB,SAAS;oBACtD,IAAI,OAAO1B,cAAc,YAAYD,KAAKa,MAAM,GAAG,GAAG;wBACpDV,aAAaH,IAAI,CAAC2B,gBAAgB;oBACpC,OAAO;wBACLxB,aAAawB;oBACf;gBACF;YACF;QACF;QACAC,kBAAiBhB,QAAQ;YACvB,OAAO;gBACL,mBAAmBG,SAASH;gBAC5BW,IAAIR,SAASH,UAAUlB;gBACvBmC,MAAM;gBACNL,QAAQZ,aAAaX;YACvB;QACF;QACA6B;YACE,OAAO;gBACLC,KAAKb;gBACLZ;YACF;QACF;IACF;AACF"}
|
|
1
|
+
{"version":3,"sources":["../../src/tabs/useTabs.ts"],"sourcesContent":["\"use client\";\nimport {\n type Dispatch,\n type Ref,\n type RefObject,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { type SlideDirection } from \"../transition/SlideContainer.js\";\nimport { type UseStateInitializer, type UseStateSetter } from \"../types.js\";\nimport { useEnsuredId } from \"../useEnsuredId.js\";\nimport { useEnsuredState } from \"../useEnsuredState.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { type TabProps } from \"./Tab.js\";\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { type TabListProps } from \"./TabList.js\";\n\nconst EMPTY_LIST = [] as const;\nconst PANEL_PREFIX = \"panel-\";\n\n/**\n * @since 6.0.0\n */\nexport interface TabsHookOptions<TabValue extends string | number = number> {\n /**\n * This can be used to generate the ids for the different components within\n * the tab widget.\n *\n * @defaultValue `\"tab-\" + useId()`\n */\n baseId?: string;\n\n /**\n * Set this to an **ordered** list of tab values when:\n * - using a `string` tab value\n * - using a `number` tab value does not represent a tab index\n *\n * See the examples on the {@link useTabs} for usage.\n */\n tabs?: readonly TabValue[];\n\n /**\n * Provide this value and {@link setActiveTab} to control the active tab\n * behavior.\n */\n activeTab?: TabValue;\n\n /** @see {@link activeTab} */\n setActiveTab?: Dispatch<TabValue>;\n\n /**\n * Set this to the default tab index when not controlling the active tab value\n * through {@link activeTab} and {@link setActiveTab}.\n *\n * @defaultValue `0`\n */\n defaultActiveTab?: UseStateInitializer<TabValue>;\n\n /** Convenience pass-through prop to {@link TabProps.stacked} */\n stacked?: boolean;\n /** Convenience pass-through prop to {@link TabProps.iconAfter} */\n iconAfter?: boolean;\n\n /** Convenience pass-through props to {@link TabListProps.vertical} */\n vertical?: boolean;\n\n /**\n * Set this to `true` if changing active tabs should no longer attempt to\n * scroll to the top of the tab panels container when using the\n * {@link TabsImplementation.getTabPanelsProps}.\n *\n * @defaultValue `false`\n */\n disableScrollFix?: boolean;\n\n /**\n * Convenience prop to disable all transitions for the\n * {@link TabsImplementation.getTabProps} and\n * {@link TabsImplementation.getTabListProps}.\n */\n disableTransition?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabProps {\n \"aria-controls\": string;\n id: string;\n active: boolean;\n\n /** Convenience pass-through prop from {@link TabsHookOptions.stacked} */\n stacked?: boolean;\n /** Convenience pass-through prop from {@link TabsHookOptions.iconAfter} */\n iconAfter?: boolean;\n /** Convenience pass-through prop from {@link TabsHookOptions.disableTransition} */\n activeIndicator?: boolean;\n /** Convenience pass-through prop from {@link TabsHookOptions.vertical} and {@link TabsHookOptions.disableTransition} */\n verticalActiveIndicator?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabListProps {\n activeIndex: number;\n setActiveIndex: Dispatch<number>;\n vertical?: boolean;\n disableTransition?: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabPanelProps {\n \"aria-labelledby\": string;\n id: string;\n role: \"tabpanel\";\n active: boolean;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface ProvidedTabPanelsProps<E extends HTMLElement> {\n ref: Ref<E>;\n direction: SlideDirection;\n}\n\n/**\n * @since 6.0.0\n */\nexport interface TabsImplementation<TabValue extends string | number = number> {\n direction: SlideDirection;\n setDirection: UseStateSetter<SlideDirection>;\n activeTab?: TabValue;\n setActiveTab?: (nextActiveTab: TabValue) => void;\n getTabProps: (tabValue: TabValue) => ProvidedTabProps;\n getTabListProps: () => ProvidedTabListProps;\n getTabPanelProps: (tabValue: TabValue) => ProvidedTabPanelProps;\n getTabPanelsProps: <E extends HTMLElement>() => ProvidedTabPanelsProps<E>;\n}\n\n/**\n * @example Super Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * function Example(): ReactElement {\n * const {\n * activeTab,\n * setActiveTab,\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs();\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <Tab {...getTabProps(0)}>Tab 1</Tab>\n * <Tab {...getTabProps(1)}>Tab 2</Tab>\n * <Tab {...getTabProps(2)}>Tab 3</Tab>\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * <Slide {...getTabPanelProps(0)}>Tab 1 Content</Slide>\n * <Slide {...getTabPanelProps(1)}>Tab 2 Content</Slide>\n * <Slide {...getTabPanelProps(2)}>Tab 3 Content</Slide>\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs(): TabsImplementation & {\n activeTab: number;\n setActiveTab: number;\n};\n/**\n * The tab behavior can be controlled by providing the `activeTab` and\n * `setActiveTab` options.\n *\n * @example Controlled\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n * import { useState } from \"react\";\n *\n * function Example(): ReactElement {\n * const [activeTab, setActiveTab] = useState(1);\n *\n * const {\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({\n * activeTab,\n * setActiveTab,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <Tab {...getTabProps(0)}>Tab 1</Tab>\n * <Tab {...getTabProps(1)}>Tab 2</Tab>\n * <Tab {...getTabProps(2)}>Tab 3</Tab>\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * <Slide {...getTabPanelProps(0)}>Tab 1 Content</Slide>\n * <Slide {...getTabPanelProps(1)}>Tab 2 Content</Slide>\n * <Slide {...getTabPanelProps(2)}>Tab 3 Content</Slide>\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends number>(\n options: TabsHookOptions<TabValue> & {\n tabs?: readonly TabValue[];\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n defaultActiveTab?: never;\n }\n): TabsImplementation<TabValue> & { activeTab?: never; setActiveTab?: never };\nexport function useTabs<TabValue extends number>(\n options: TabsHookOptions<TabValue> & {\n tabs?: readonly TabValue[];\n activeTab?: never;\n setActiveTab?: never;\n defaultActiveTab?: UseStateInitializer<TabValue>;\n }\n): TabsImplementation<TabValue> & {\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n};\n/**\n * When using string values, the {@link TabsHookOptions.tabs} option **must** be\n * provided to determine the correct active tab index.\n *\n * @example String Value Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * const tabs = [\"value-1\", \"value-2\", \"value-3\"];\n *\n * function Example(): ReactElement {\n * const {\n * activeTab,\n * setActiveTab,\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({ tabs });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * {tabs.map((value) => (\n * <Tab key={value} {...getTabProps(value)}>{value}</Tab>\n * ))}\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * {tabs.map((value) => (\n * <Slide key={value}>{value} Content</Slide>\n * ))}\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string>(\n options: TabsHookOptions<TabValue> & {\n tabs: readonly TabValue[];\n activeTab?: never;\n setActiveTab?: never;\n defaultActiveTab?: UseStateInitializer<TabValue>;\n }\n): TabsImplementation<TabValue> & {\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n};\n/**\n * When using string values, the {@link TabsHookOptions.tabs} option **must** be\n * provided to determine the correct active tab index.\n *\n * @example String Controlled Simple\n * ```tsx\n * import { TabList, Tab, SlideContainer, Slide, useTabs } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * const tabs = [\"value-1\", \"value-2\", \"value-3\"] as const;\n *\n * function Example(): ReactElement {\n * const [activeTab, setActiveTab] = useState(tabs[0]);\n *\n * const {\n * direction,\n * setDirection,\n * getTabListProps,\n * getTabPanelProps,\n * getTabPanelsProps,\n * getTabProps,\n * } = useTabs({\n * tabs,\n * activeTab,\n * setActiveTab,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * {tabs.map((value) => (\n * <Tab key={value} {...getTabProps(value)}>{value}</Tab>\n * ))}\n * </TabList>\n * <SlideContainer {...getTabPanelsProps()}>\n * {tabs.map((value) => (\n * <Slide key={value}>{value} Content</Slide>\n * ))}\n * </SlideContainer>\n * </>\n * );\n * }\n * ```\n *\n * @example Navigation Tabs\n * ```tsx\n * \"use client\";\n * import {\n * RippleContainer,\n * Tab,\n * TabList,\n * useElementInteraction,\n * useEnsuredId,\n * useHigherContrastChildren,\n * useKeyboardMovementContext,\n * useTabs,\n * } from \"@react-md/core\";\n * import type { LinkProps } from \"next/link\";\n * import Link from \"next/link\";\n * import type { PropsWithChildren, ReactElement } from \"react\";\n * import { usePathname } from \"next/navigation\";\n *\n * interface TabLinkProps extends LinkProps {\n * active: boolean;\n * }\n *\n * function TabLink(props: LinkProps): ReactElement {\n * const {\n * id: propId,\n * children: propChildren,\n * active,\n * className,\n * ...remaining,\n * } = props;\n *\n * const id = useEnsuredId(propId, \"tab\");\n * const { activeDescendantId } = useKeyboardMovementContext();\n * const { handlers, ripples } = useElementInteraction(props);\n * const children = useHigherContrastChildren(propChildren);\n *\n * return (\n * <Link\n * {...props}\n * {...handlers}\n * id={id}\n * aria-selected={active}\n * role=\"tab\"\n * tabIndex={id === activeDescendantId ? 0 : -1}\n * className={tab({\n * className,\n * active,\n * // stacked,\n * // reversed,\n * })}\n * >\n * {children}\n * {ripples}\n * </Link>\n * );\n * }\n *\n * const noop = (): void => {\n * // do nothing\n * };\n *\n * const PATHNAME_TABS = [\"/\", \"/page-1\", \"/page-2\"];\n *\n * function Layout({ children }: PropsWithChildren) {\n * const pathname = usePathname();\n * const { getTabListProps, getTabProps } = useTabs({\n * tabs: PATHNAME_TABS,\n * activeTab: pathname,\n * setActiveTab: noop,\n * });\n *\n * return (\n * <>\n * <TabList {...getTabListProps()}>\n * <TabLink {...getTabProps(\"/\")} href=\"/\">Home</TabLink>\n * <TabLink {...getTabProps(\"/page-1\")} href=\"/page-1\">Page 1</TabLink>\n * <TabLink {...getTabProps(\"/page-2\")} href=\"/page-2\">Page 2</TabLink>\n * </TabList>\n * <main>{children}</main>\n * </>\n * );\n * }\n * ```\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string>(\n options: TabsHookOptions<TabValue> & {\n tabs: readonly TabValue[];\n activeTab: TabValue;\n setActiveTab: Dispatch<TabValue>;\n defaultActiveTab?: never;\n }\n): TabsImplementation<TabValue> & { activeTab?: never; setActiveTab?: never };\n/**\n * This hook can be uncontrolled/controlled and supports strongly typing the tab\n * values if needed. Check out the overloads for examples.\n *\n * @since 6.0.0\n */\nexport function useTabs<TabValue extends string | number>(\n options: TabsHookOptions<TabValue> = {}\n): TabsImplementation<TabValue> {\n const {\n baseId: propBaseId,\n tabs = EMPTY_LIST,\n stacked,\n vertical,\n iconAfter,\n activeTab: propActiveTab,\n setActiveTab: propSetActiveTab,\n defaultActiveTab,\n disableScrollFix,\n disableTransition,\n } = options;\n\n const baseId = useEnsuredId(propBaseId, \"tab\");\n const [direction, setDirection] = useState<SlideDirection>(\"left\");\n\n const [activeTab, setActiveTab] = useEnsuredState({\n value: propActiveTab,\n setValue: propSetActiveTab,\n defaultValue: defaultActiveTab ?? (0 as TabValue),\n });\n\n const getTabIndex = (tabValue: TabValue): number =>\n typeof tabValue === \"string\" || tabs.length > 0\n ? tabs.indexOf(tabValue)\n : tabValue;\n const getTabId = (tabValue: TabValue, prefix = \"\"): string =>\n `${baseId}-${prefix}${getTabIndex(tabValue) + 1}`;\n\n const activeIndex = getTabIndex(activeTab);\n const tabPanelsRef = useRef<HTMLElement>(null);\n useEffect(() => {\n const container = tabPanelsRef.current;\n if (!container || disableScrollFix) {\n return;\n }\n\n container.scrollTop = 0;\n }, [disableScrollFix, activeTab]);\n\n return {\n activeTab,\n setActiveTab,\n direction,\n setDirection,\n getTabProps(tabValue) {\n return {\n \"aria-controls\": getTabId(tabValue, PANEL_PREFIX),\n id: getTabId(tabValue),\n active: tabValue === activeTab,\n stacked,\n iconAfter,\n activeIndicator: disableTransition,\n verticalActiveIndicator: vertical && disableTransition,\n };\n },\n getTabListProps() {\n return {\n activeIndex,\n setActiveIndex: (nextActiveIndex) => {\n setDirection(activeIndex < nextActiveIndex ? \"left\" : \"right\");\n if (typeof activeTab === \"string\" || tabs.length > 0) {\n setActiveTab(tabs[nextActiveIndex]);\n } else {\n setActiveTab(nextActiveIndex as TabValue);\n }\n },\n vertical,\n disableTransition,\n };\n },\n getTabPanelProps(tabValue) {\n return {\n \"aria-labelledby\": getTabId(tabValue),\n id: getTabId(tabValue, PANEL_PREFIX),\n role: \"tabpanel\",\n active: tabValue === activeTab,\n };\n },\n getTabPanelsProps<E>() {\n return {\n ref: tabPanelsRef as RefObject<E>,\n direction,\n };\n },\n };\n}\n"],"names":["useEffect","useRef","useState","useEnsuredId","useEnsuredState","EMPTY_LIST","PANEL_PREFIX","useTabs","options","baseId","propBaseId","tabs","stacked","vertical","iconAfter","activeTab","propActiveTab","setActiveTab","propSetActiveTab","defaultActiveTab","disableScrollFix","disableTransition","direction","setDirection","value","setValue","defaultValue","getTabIndex","tabValue","length","indexOf","getTabId","prefix","activeIndex","tabPanelsRef","container","current","scrollTop","getTabProps","id","active","activeIndicator","verticalActiveIndicator","getTabListProps","setActiveIndex","nextActiveIndex","getTabPanelProps","role","getTabPanelsProps","ref"],"mappings":"AAAA;AACA,SAIEA,SAAS,EACTC,MAAM,EACNC,QAAQ,QACH,QAAQ;AAGf,SAASC,YAAY,QAAQ,qBAAqB;AAClD,SAASC,eAAe,QAAQ,wBAAwB;AAOxD,MAAMC,aAAa,EAAE;AACrB,MAAMC,eAAe;AAoarB;;;;;CAKC,GACD,OAAO,SAASC,QACdC,UAAqC,CAAC,CAAC;IAEvC,MAAM,EACJC,QAAQC,UAAU,EAClBC,OAAON,UAAU,EACjBO,OAAO,EACPC,QAAQ,EACRC,SAAS,EACTC,WAAWC,aAAa,EACxBC,cAAcC,gBAAgB,EAC9BC,gBAAgB,EAChBC,gBAAgB,EAChBC,iBAAiB,EAClB,GAAGb;IAEJ,MAAMC,SAASN,aAAaO,YAAY;IACxC,MAAM,CAACY,WAAWC,aAAa,GAAGrB,SAAyB;IAE3D,MAAM,CAACa,WAAWE,aAAa,GAAGb,gBAAgB;QAChDoB,OAAOR;QACPS,UAAUP;QACVQ,cAAcP,oBAAqB;IACrC;IAEA,MAAMQ,cAAc,CAACC,WACnB,OAAOA,aAAa,YAAYjB,KAAKkB,MAAM,GAAG,IAC1ClB,KAAKmB,OAAO,CAACF,YACbA;IACN,MAAMG,WAAW,CAACH,UAAoBI,SAAS,EAAE,GAC/C,GAAGvB,OAAO,CAAC,EAAEuB,SAASL,YAAYC,YAAY,GAAG;IAEnD,MAAMK,cAAcN,YAAYZ;IAChC,MAAMmB,eAAejC,OAAoB;IACzCD,UAAU;QACR,MAAMmC,YAAYD,aAAaE,OAAO;QACtC,IAAI,CAACD,aAAaf,kBAAkB;YAClC;QACF;QAEAe,UAAUE,SAAS,GAAG;IACxB,GAAG;QAACjB;QAAkBL;KAAU;IAEhC,OAAO;QACLA;QACAE;QACAK;QACAC;QACAe,aAAYV,QAAQ;YAClB,OAAO;gBACL,iBAAiBG,SAASH,UAAUtB;gBACpCiC,IAAIR,SAASH;gBACbY,QAAQZ,aAAab;gBACrBH;gBACAE;gBACA2B,iBAAiBpB;gBACjBqB,yBAAyB7B,YAAYQ;YACvC;QACF;QACAsB;YACE,OAAO;gBACLV;gBACAW,gBAAgB,CAACC;oBACftB,aAAaU,cAAcY,kBAAkB,SAAS;oBACtD,IAAI,OAAO9B,cAAc,YAAYJ,KAAKkB,MAAM,GAAG,GAAG;wBACpDZ,aAAaN,IAAI,CAACkC,gBAAgB;oBACpC,OAAO;wBACL5B,aAAa4B;oBACf;gBACF;gBACAhC;gBACAQ;YACF;QACF;QACAyB,kBAAiBlB,QAAQ;YACvB,OAAO;gBACL,mBAAmBG,SAASH;gBAC5BW,IAAIR,SAASH,UAAUtB;gBACvByC,MAAM;gBACNP,QAAQZ,aAAab;YACvB;QACF;QACAiC;YACE,OAAO;gBACLC,KAAKf;gBACLZ;YACF;QACF;IACF;AACF"}
|
package/dist/tabs/utils.d.ts
CHANGED
|
@@ -14,22 +14,4 @@ interface ScrollOptions {
|
|
|
14
14
|
* @internal
|
|
15
15
|
*/
|
|
16
16
|
export declare const scrollTabIntoView: (options: ScrollOptions) => void;
|
|
17
|
-
/**
|
|
18
|
-
* @since 6.0.0
|
|
19
|
-
*/
|
|
20
|
-
export interface TabListScrollToOptions {
|
|
21
|
-
isRTL: boolean;
|
|
22
|
-
animate: boolean;
|
|
23
|
-
vertical: boolean;
|
|
24
|
-
increment: boolean;
|
|
25
|
-
container: HTMLElement;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* @since 6.0.0
|
|
29
|
-
*/
|
|
30
|
-
export type GetTabListScrollToOptions = (options: TabListScrollToOptions) => ScrollToOptions | undefined;
|
|
31
|
-
/**
|
|
32
|
-
* @since 6.0.0
|
|
33
|
-
*/
|
|
34
|
-
export declare const getTabListScrollToOptions: GetTabListScrollToOptions;
|
|
35
17
|
export {};
|
package/dist/tabs/utils.js
CHANGED
|
@@ -30,20 +30,5 @@
|
|
|
30
30
|
container[scrollAttribute] = elementStart - firstOffset;
|
|
31
31
|
}
|
|
32
32
|
};
|
|
33
|
-
/**
|
|
34
|
-
* @since 6.0.0
|
|
35
|
-
*/ export const getTabListScrollToOptions = (options)=>{
|
|
36
|
-
const { isRTL, animate, vertical, increment, container } = options;
|
|
37
|
-
const { scrollLeft, scrollTop, scrollWidth, scrollHeight } = container;
|
|
38
|
-
const currentScroll = vertical ? scrollTop : scrollLeft;
|
|
39
|
-
const scrollDistance = vertical ? scrollHeight : scrollWidth;
|
|
40
|
-
const amount = scrollDistance / 10 * (increment ? 1 : -1);
|
|
41
|
-
const distance = currentScroll + amount * (vertical || !isRTL ? 1 : -1);
|
|
42
|
-
return {
|
|
43
|
-
left: vertical ? undefined : distance,
|
|
44
|
-
top: vertical ? distance : undefined,
|
|
45
|
-
behavior: animate ? "smooth" : "auto"
|
|
46
|
-
};
|
|
47
|
-
};
|
|
48
33
|
|
|
49
34
|
//# sourceMappingURL=utils.js.map
|
package/dist/tabs/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/tabs/utils.ts"],"sourcesContent":["/**\n * @internal\n */\nexport const getTabRoleOnly = (container: Element): readonly HTMLElement[] => [\n ...container.querySelectorAll<HTMLElement>('[role=\"tab\"]'),\n];\n\n/** @internal */\ninterface ScrollOptions {\n container: HTMLElement | null;\n forward: HTMLElement | null;\n backward: HTMLElement | null;\n vertical: boolean;\n activeIndex: number;\n}\n\n/**\n * @internal\n */\nexport const scrollTabIntoView = (options: ScrollOptions): void => {\n const { container, vertical, forward, backward, activeIndex } = options;\n if (!container) {\n return;\n }\n\n const activeTab = getTabRoleOnly(container)[activeIndex];\n if (!activeTab) {\n return;\n }\n\n const sizeAttribute = vertical ? \"offsetHeight\" : \"offsetWidth\";\n const offsetAttribute = vertical ? \"offsetTop\" : \"offsetLeft\";\n const scrollAttribute = vertical ? \"scrollTop\" : \"scrollLeft\";\n const firstOffset = backward?.[sizeAttribute] || 0;\n const lastOffset = forward?.[sizeAttribute] || 0;\n const elementStart = activeTab[offsetAttribute];\n const elementEnd = elementStart + activeTab[sizeAttribute];\n const containerStart = container[scrollAttribute];\n const containerEnd = containerStart + container[sizeAttribute] - lastOffset;\n if (elementEnd > containerEnd) {\n const containerSize = container[sizeAttribute] - lastOffset;\n container[scrollAttribute] = elementEnd - containerSize;\n } else if (elementStart < containerStart + firstOffset) {\n container[scrollAttribute] = elementStart - firstOffset;\n }\n};\n
|
|
1
|
+
{"version":3,"sources":["../../src/tabs/utils.ts"],"sourcesContent":["/**\n * @internal\n */\nexport const getTabRoleOnly = (container: Element): readonly HTMLElement[] => [\n ...container.querySelectorAll<HTMLElement>('[role=\"tab\"]'),\n];\n\n/** @internal */\ninterface ScrollOptions {\n container: HTMLElement | null;\n forward: HTMLElement | null;\n backward: HTMLElement | null;\n vertical: boolean;\n activeIndex: number;\n}\n\n/**\n * @internal\n */\nexport const scrollTabIntoView = (options: ScrollOptions): void => {\n const { container, vertical, forward, backward, activeIndex } = options;\n if (!container) {\n return;\n }\n\n const activeTab = getTabRoleOnly(container)[activeIndex];\n if (!activeTab) {\n return;\n }\n\n const sizeAttribute = vertical ? \"offsetHeight\" : \"offsetWidth\";\n const offsetAttribute = vertical ? \"offsetTop\" : \"offsetLeft\";\n const scrollAttribute = vertical ? \"scrollTop\" : \"scrollLeft\";\n const firstOffset = backward?.[sizeAttribute] || 0;\n const lastOffset = forward?.[sizeAttribute] || 0;\n const elementStart = activeTab[offsetAttribute];\n const elementEnd = elementStart + activeTab[sizeAttribute];\n const containerStart = container[scrollAttribute];\n const containerEnd = containerStart + container[sizeAttribute] - lastOffset;\n if (elementEnd > containerEnd) {\n const containerSize = container[sizeAttribute] - lastOffset;\n container[scrollAttribute] = elementEnd - containerSize;\n } else if (elementStart < containerStart + firstOffset) {\n container[scrollAttribute] = elementStart - firstOffset;\n }\n};\n"],"names":["getTabRoleOnly","container","querySelectorAll","scrollTabIntoView","options","vertical","forward","backward","activeIndex","activeTab","sizeAttribute","offsetAttribute","scrollAttribute","firstOffset","lastOffset","elementStart","elementEnd","containerStart","containerEnd","containerSize"],"mappings":"AAAA;;CAEC,GACD,OAAO,MAAMA,iBAAiB,CAACC,YAA+C;WACzEA,UAAUC,gBAAgB,CAAc;KAC5C,CAAC;AAWF;;CAEC,GACD,OAAO,MAAMC,oBAAoB,CAACC;IAChC,MAAM,EAAEH,SAAS,EAAEI,QAAQ,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,WAAW,EAAE,GAAGJ;IAChE,IAAI,CAACH,WAAW;QACd;IACF;IAEA,MAAMQ,YAAYT,eAAeC,UAAU,CAACO,YAAY;IACxD,IAAI,CAACC,WAAW;QACd;IACF;IAEA,MAAMC,gBAAgBL,WAAW,iBAAiB;IAClD,MAAMM,kBAAkBN,WAAW,cAAc;IACjD,MAAMO,kBAAkBP,WAAW,cAAc;IACjD,MAAMQ,cAAcN,UAAU,CAACG,cAAc,IAAI;IACjD,MAAMI,aAAaR,SAAS,CAACI,cAAc,IAAI;IAC/C,MAAMK,eAAeN,SAAS,CAACE,gBAAgB;IAC/C,MAAMK,aAAaD,eAAeN,SAAS,CAACC,cAAc;IAC1D,MAAMO,iBAAiBhB,SAAS,CAACW,gBAAgB;IACjD,MAAMM,eAAeD,iBAAiBhB,SAAS,CAACS,cAAc,GAAGI;IACjE,IAAIE,aAAaE,cAAc;QAC7B,MAAMC,gBAAgBlB,SAAS,CAACS,cAAc,GAAGI;QACjDb,SAAS,CAACW,gBAAgB,GAAGI,aAAaG;IAC5C,OAAO,IAAIJ,eAAeE,iBAAiBJ,aAAa;QACtDZ,SAAS,CAACW,gBAAgB,GAAGG,eAAeF;IAC9C;AACF,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/test-utils/IntersectionObserver.ts"],"sourcesContent":["export class IntersectionObserverMock implements IntersectionObserver {\n root: Document | Element | null;\n rootMargin: string;\n thresholds: readonly number[];\n\n elements: Set<Element>;\n\n constructor(\n public callback: IntersectionObserverCallback,\n options: IntersectionObserverInit = {}\n ) {\n this.root = options.root || null;\n this.rootMargin = options.rootMargin || \"\";\n this.thresholds =\n typeof options.threshold === \"number\"\n ? [options.threshold]\n : options.threshold ?? [];\n\n this.elements = new Set();\n }\n\n observe(target: Element): void {\n this.elements.add(target);\n\n this.callback(this.takeRecords(), this);\n }\n\n unobserve(target: Element): void {\n this.elements.delete(target);\n }\n\n takeRecords(): IntersectionObserverEntry[] {\n return [...this.elements].map<IntersectionObserverEntry>((target) => ({\n time: Date.now(),\n target,\n boundingClientRect: target.getBoundingClientRect(),\n intersectionRatio: 0,\n intersectionRect: target.getBoundingClientRect(),\n isIntersecting: false,\n rootBounds:\n this.root && \"getBoundingClientRect\" in this.root\n ? this.root.getBoundingClientRect()\n : null,\n }));\n }\n\n disconnect(): void {\n this.elements.clear();\n }\n}\n"],"names":["IntersectionObserverMock","observe","target","elements","add","callback","takeRecords","unobserve","delete","map","time","Date","now","boundingClientRect","getBoundingClientRect","intersectionRatio","intersectionRect","isIntersecting","rootBounds","root","disconnect","clear","constructor","options","rootMargin","thresholds","threshold","Set"],"mappings":";;;;;;;;;;;;;AAAA,OAAO,MAAMA;IAqBXC,QAAQC,MAAe,EAAQ;QAC7B,IAAI,CAACC,QAAQ,CAACC,GAAG,CAACF;QAElB,IAAI,CAACG,QAAQ,CAAC,IAAI,CAACC,WAAW,IAAI,IAAI;IACxC;IAEAC,UAAUL,MAAe,EAAQ;QAC/B,IAAI,CAACC,QAAQ,CAACK,MAAM,CAACN;IACvB;IAEAI,cAA2C;QACzC,OAAO;eAAI,IAAI,CAACH,QAAQ;SAAC,CAACM,GAAG,CAA4B,CAACP,SAAY,CAAA;gBACpEQ,MAAMC,KAAKC,GAAG;gBACdV;gBACAW,oBAAoBX,OAAOY,qBAAqB;gBAChDC,mBAAmB;gBACnBC,kBAAkBd,OAAOY,qBAAqB;gBAC9CG,gBAAgB;gBAChBC,YACE,IAAI,CAACC,IAAI,IAAI,2BAA2B,IAAI,CAACA,IAAI,GAC7C,IAAI,CAACA,IAAI,CAACL,qBAAqB,KAC/B;YACR,CAAA;IACF;IAEAM,aAAmB;QACjB,IAAI,CAACjB,QAAQ,CAACkB,KAAK;IACrB;IAzCAC,YACE,AAAOjB,QAAsC,EAC7CkB,UAAoC,CAAC,CAAC,CACtC;;QATFJ,uBAAAA,QAAAA,KAAAA;QACAK,uBAAAA,cAAAA,KAAAA;QACAC,uBAAAA,cAAAA,KAAAA;QAEAtB,uBAAAA,YAAAA,KAAAA;aAGSE,WAAAA;QAGP,IAAI,CAACc,IAAI,GAAGI,QAAQJ,IAAI,IAAI;QAC5B,IAAI,CAACK,UAAU,GAAGD,QAAQC,UAAU,IAAI;QACxC,IAAI,CAACC,UAAU,GACb,OAAOF,QAAQG,SAAS,KAAK,WACzB;YAACH,QAAQG,SAAS;SAAC,
|
|
1
|
+
{"version":3,"sources":["../../src/test-utils/IntersectionObserver.ts"],"sourcesContent":["export class IntersectionObserverMock implements IntersectionObserver {\n root: Document | Element | null;\n rootMargin: string;\n thresholds: readonly number[];\n\n elements: Set<Element>;\n\n constructor(\n public callback: IntersectionObserverCallback,\n options: IntersectionObserverInit = {}\n ) {\n this.root = options.root || null;\n this.rootMargin = options.rootMargin || \"\";\n this.thresholds =\n typeof options.threshold === \"number\"\n ? [options.threshold]\n : (options.threshold ?? []);\n\n this.elements = new Set();\n }\n\n observe(target: Element): void {\n this.elements.add(target);\n\n this.callback(this.takeRecords(), this);\n }\n\n unobserve(target: Element): void {\n this.elements.delete(target);\n }\n\n takeRecords(): IntersectionObserverEntry[] {\n return [...this.elements].map<IntersectionObserverEntry>((target) => ({\n time: Date.now(),\n target,\n boundingClientRect: target.getBoundingClientRect(),\n intersectionRatio: 0,\n intersectionRect: target.getBoundingClientRect(),\n isIntersecting: false,\n rootBounds:\n this.root && \"getBoundingClientRect\" in this.root\n ? this.root.getBoundingClientRect()\n : null,\n }));\n }\n\n disconnect(): void {\n this.elements.clear();\n }\n}\n"],"names":["IntersectionObserverMock","observe","target","elements","add","callback","takeRecords","unobserve","delete","map","time","Date","now","boundingClientRect","getBoundingClientRect","intersectionRatio","intersectionRect","isIntersecting","rootBounds","root","disconnect","clear","constructor","options","rootMargin","thresholds","threshold","Set"],"mappings":";;;;;;;;;;;;;AAAA,OAAO,MAAMA;IAqBXC,QAAQC,MAAe,EAAQ;QAC7B,IAAI,CAACC,QAAQ,CAACC,GAAG,CAACF;QAElB,IAAI,CAACG,QAAQ,CAAC,IAAI,CAACC,WAAW,IAAI,IAAI;IACxC;IAEAC,UAAUL,MAAe,EAAQ;QAC/B,IAAI,CAACC,QAAQ,CAACK,MAAM,CAACN;IACvB;IAEAI,cAA2C;QACzC,OAAO;eAAI,IAAI,CAACH,QAAQ;SAAC,CAACM,GAAG,CAA4B,CAACP,SAAY,CAAA;gBACpEQ,MAAMC,KAAKC,GAAG;gBACdV;gBACAW,oBAAoBX,OAAOY,qBAAqB;gBAChDC,mBAAmB;gBACnBC,kBAAkBd,OAAOY,qBAAqB;gBAC9CG,gBAAgB;gBAChBC,YACE,IAAI,CAACC,IAAI,IAAI,2BAA2B,IAAI,CAACA,IAAI,GAC7C,IAAI,CAACA,IAAI,CAACL,qBAAqB,KAC/B;YACR,CAAA;IACF;IAEAM,aAAmB;QACjB,IAAI,CAACjB,QAAQ,CAACkB,KAAK;IACrB;IAzCAC,YACE,AAAOjB,QAAsC,EAC7CkB,UAAoC,CAAC,CAAC,CACtC;;QATFJ,uBAAAA,QAAAA,KAAAA;QACAK,uBAAAA,cAAAA,KAAAA;QACAC,uBAAAA,cAAAA,KAAAA;QAEAtB,uBAAAA,YAAAA,KAAAA;aAGSE,WAAAA;QAGP,IAAI,CAACc,IAAI,GAAGI,QAAQJ,IAAI,IAAI;QAC5B,IAAI,CAACK,UAAU,GAAGD,QAAQC,UAAU,IAAI;QACxC,IAAI,CAACC,UAAU,GACb,OAAOF,QAAQG,SAAS,KAAK,WACzB;YAACH,QAAQG,SAAS;SAAC,GAClBH,QAAQG,SAAS,IAAI,EAAE;QAE9B,IAAI,CAACvB,QAAQ,GAAG,IAAIwB;IACtB;AA8BF"}
|
|
@@ -66,7 +66,7 @@ export type MatchMediaSpiedFunction = jest.SpiedFunction<typeof window.matchMedi
|
|
|
66
66
|
* // expect phone results
|
|
67
67
|
* ```
|
|
68
68
|
*/
|
|
69
|
-
changeViewport(matcher: MatchMediaMatcher, disableAct?: boolean)
|
|
69
|
+
changeViewport: (matcher: MatchMediaMatcher, disableAct?: boolean) => void;
|
|
70
70
|
};
|
|
71
71
|
/**
|
|
72
72
|
* @example Default Behavior
|
|
@@ -22,22 +22,22 @@ const noop = ()=>{
|
|
|
22
22
|
* @see {@link spyOnMatchMedia} for usage
|
|
23
23
|
* @since 6.0.0
|
|
24
24
|
* @returns `true` for phone media queries
|
|
25
|
-
*/ export const matchPhone = (query)=>query.includes(
|
|
25
|
+
*/ export const matchPhone = (query)=>query.includes(DEFAULT_PHONE_MAX_WIDTH);
|
|
26
26
|
/**
|
|
27
27
|
* @see {@link spyOnMatchMedia} for usage
|
|
28
28
|
* @since 6.0.0
|
|
29
29
|
* @returns `true` for tablet media queries
|
|
30
|
-
*/ export const matchTablet = (query)=>query.includes(
|
|
30
|
+
*/ export const matchTablet = (query)=>query.includes(DEFAULT_TABLET_MIN_WIDTH);
|
|
31
31
|
/**
|
|
32
32
|
* @see {@link spyOnMatchMedia} for usage
|
|
33
33
|
* @since 6.0.0
|
|
34
34
|
* @returns `true` for desktop media queries
|
|
35
|
-
*/ export const matchDesktop = (query)=>query.includes(
|
|
35
|
+
*/ export const matchDesktop = (query)=>query.includes(DEFAULT_DESKTOP_MIN_WIDTH);
|
|
36
36
|
/**
|
|
37
37
|
* @see {@link spyOnMatchMedia} for usage
|
|
38
38
|
* @since 6.0.0
|
|
39
39
|
* @returns `true` for large desktop media queries
|
|
40
|
-
*/ export const matchLargeDesktop = (query)=>query.includes(
|
|
40
|
+
*/ export const matchLargeDesktop = (query)=>query.includes(DEFAULT_DESKTOP_LARGE_MIN_WIDTH);
|
|
41
41
|
/**
|
|
42
42
|
* @see {@link spyOnMatchMedia} for usage
|
|
43
43
|
* @since 6.0.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/test-utils/matchMedia.ts"],"sourcesContent":["import { jest } from \"@jest/globals\";\nimport { act } from \"@testing-library/react\";\nimport {\n DEFAULT_DESKTOP_LARGE_MIN_WIDTH,\n DEFAULT_DESKTOP_MIN_WIDTH,\n DEFAULT_PHONE_MAX_WIDTH,\n DEFAULT_TABLET_MIN_WIDTH,\n} from \"../media-queries/appSize.js\";\n\nconst noop = (): void => {\n // do nothing\n};\n\n/**\n * @see {@link spyOnMatchMedia} instead\n * @internal\n * @since 6.0.0\n */\nexport const BASE_MEDIA_QUERY_LIST: MediaQueryList = {\n media: \"\",\n matches: false,\n onchange: noop,\n addListener: noop,\n addEventListener: noop,\n removeEventListener: noop,\n removeListener: noop,\n dispatchEvent: () => false,\n};\n\n/** @since 6.0.0 */\nexport type MatchMediaMatcher = (query: string) => boolean;\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for phone media queries\n */\nexport const matchPhone: MatchMediaMatcher = (query) =>\n query.includes(
|
|
1
|
+
{"version":3,"sources":["../../src/test-utils/matchMedia.ts"],"sourcesContent":["import { jest } from \"@jest/globals\";\nimport { act } from \"@testing-library/react\";\nimport {\n DEFAULT_DESKTOP_LARGE_MIN_WIDTH,\n DEFAULT_DESKTOP_MIN_WIDTH,\n DEFAULT_PHONE_MAX_WIDTH,\n DEFAULT_TABLET_MIN_WIDTH,\n} from \"../media-queries/appSize.js\";\n\nconst noop = (): void => {\n // do nothing\n};\n\n/**\n * @see {@link spyOnMatchMedia} instead\n * @internal\n * @since 6.0.0\n */\nexport const BASE_MEDIA_QUERY_LIST: MediaQueryList = {\n media: \"\",\n matches: false,\n onchange: noop,\n addListener: noop,\n addEventListener: noop,\n removeEventListener: noop,\n removeListener: noop,\n dispatchEvent: () => false,\n};\n\n/** @since 6.0.0 */\nexport type MatchMediaMatcher = (query: string) => boolean;\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for phone media queries\n */\nexport const matchPhone: MatchMediaMatcher = (query) =>\n query.includes(DEFAULT_PHONE_MAX_WIDTH);\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for tablet media queries\n */\nexport const matchTablet: MatchMediaMatcher = (query) =>\n query.includes(DEFAULT_TABLET_MIN_WIDTH);\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for desktop media queries\n */\nexport const matchDesktop: MatchMediaMatcher = (query) =>\n query.includes(DEFAULT_DESKTOP_MIN_WIDTH);\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for large desktop media queries\n */\nexport const matchLargeDesktop: MatchMediaMatcher = (query) =>\n query.includes(DEFAULT_DESKTOP_LARGE_MIN_WIDTH);\n\n/**\n * @see {@link spyOnMatchMedia} for usage\n * @since 6.0.0\n * @returns `true` for both desktop and large desktop media queries\n */\nexport const matchAnyDesktop: MatchMediaMatcher = (query) =>\n matchDesktop(query) || matchLargeDesktop(query);\n\n/**\n * @since 6.0.0\n */\nexport type MatchMediaSpiedFunction = jest.SpiedFunction<\n typeof window.matchMedia\n> & {\n /**\n * @example Default Behavior\n * ```tsx\n * const matchMedia = spyOnMatchMedia();\n * render(<Test />);\n *\n * // expect desktop results\n *\n * matchMedia.changeViewport(matchPhone);\n * // expect phone results\n * ```\n *\n * @example Custom Act Behavior\n * ```tsx\n * const matchMedia = spyOnMatchMedia();\n * const { rerender } = render(<Test />);\n *\n * // expect desktop results\n *\n * matchMedia.changeViewport(matchPhone, false);\n * rerender(<Test key=\"new-key\" />);\n *\n * // expect phone results\n * ```\n */\n changeViewport: (matcher: MatchMediaMatcher, disableAct?: boolean) => void;\n};\n\n/**\n * @example Default Behavior\n * ```tsx\n * import { matchPhone, render, spyOnMatchMedia } from \"@react-md/test-utils\";\n *\n * const matchMedia = spyOnMatchMedia();\n * render(<Test />);\n *\n * // expect desktop results\n *\n * matchMedia.changeViewport(matchPhone);\n * // expect phone results\n * ```\n *\n * @example Set Default Media\n * ```tsx\n * import { matchPhone, render, spyOnMatchMedia } from \"@react-md/test-utils\";\n *\n * const matchMedia = spyOnMatchMedia(matchPhone);\n * render(<Test />);\n *\n * // expect phone results\n * ```\n *\n * @since 6.0.0\n */\nexport function spyOnMatchMedia(\n defaultMatch: MatchMediaMatcher = matchDesktop\n): MatchMediaSpiedFunction {\n type Listener = (event: MediaQueryListEvent) => void;\n\n const listeners = new Map<string, Listener>();\n const matchMedia = jest\n .spyOn(window, \"matchMedia\")\n .mockImplementation((query) => ({\n ...BASE_MEDIA_QUERY_LIST,\n addEventListener(type: string, listener: Listener | EventListenerObject) {\n /* c8 ignore start */\n if (typeof listener !== \"function\" || type !== \"change\") {\n return;\n }\n /* c8 ignore stop */\n\n listeners.set(query, listener);\n },\n removeEventListener(\n type: string,\n listener: Listener | EventListenerObject\n ) {\n /* c8 ignore start */\n if (typeof listener !== \"function\" || type !== \"change\") {\n return;\n }\n /* c8 ignore stop */\n\n listeners.delete(query);\n },\n matches: defaultMatch(query),\n }));\n\n const changeViewport = (\n matcher: MatchMediaMatcher,\n disableAct = false\n ): void => {\n const update = (): void => {\n window.dispatchEvent(new Event(\"resize\"));\n\n const event = new Event(\"change\");\n listeners.forEach((listener, query) => {\n listener({\n ...event,\n media: \"\",\n matches: matcher(query),\n });\n });\n };\n if (disableAct) {\n update();\n } else {\n act(update);\n }\n };\n\n const mock = matchMedia as MatchMediaSpiedFunction;\n mock.changeViewport = changeViewport;\n\n return mock;\n}\n"],"names":["jest","act","DEFAULT_DESKTOP_LARGE_MIN_WIDTH","DEFAULT_DESKTOP_MIN_WIDTH","DEFAULT_PHONE_MAX_WIDTH","DEFAULT_TABLET_MIN_WIDTH","noop","BASE_MEDIA_QUERY_LIST","media","matches","onchange","addListener","addEventListener","removeEventListener","removeListener","dispatchEvent","matchPhone","query","includes","matchTablet","matchDesktop","matchLargeDesktop","matchAnyDesktop","spyOnMatchMedia","defaultMatch","listeners","Map","matchMedia","spyOn","window","mockImplementation","type","listener","set","delete","changeViewport","matcher","disableAct","update","Event","event","forEach","mock"],"mappings":"AAAA,SAASA,IAAI,QAAQ,gBAAgB;AACrC,SAASC,GAAG,QAAQ,yBAAyB;AAC7C,SACEC,+BAA+B,EAC/BC,yBAAyB,EACzBC,uBAAuB,EACvBC,wBAAwB,QACnB,8BAA8B;AAErC,MAAMC,OAAO;AACX,aAAa;AACf;AAEA;;;;CAIC,GACD,OAAO,MAAMC,wBAAwC;IACnDC,OAAO;IACPC,SAAS;IACTC,UAAUJ;IACVK,aAAaL;IACbM,kBAAkBN;IAClBO,qBAAqBP;IACrBQ,gBAAgBR;IAChBS,eAAe,IAAM;AACvB,EAAE;AAKF;;;;CAIC,GACD,OAAO,MAAMC,aAAgC,CAACC,QAC5CA,MAAMC,QAAQ,CAACd,yBAAyB;AAE1C;;;;CAIC,GACD,OAAO,MAAMe,cAAiC,CAACF,QAC7CA,MAAMC,QAAQ,CAACb,0BAA0B;AAE3C;;;;CAIC,GACD,OAAO,MAAMe,eAAkC,CAACH,QAC9CA,MAAMC,QAAQ,CAACf,2BAA2B;AAE5C;;;;CAIC,GACD,OAAO,MAAMkB,oBAAuC,CAACJ,QACnDA,MAAMC,QAAQ,CAAChB,iCAAiC;AAElD;;;;CAIC,GACD,OAAO,MAAMoB,kBAAqC,CAACL,QACjDG,aAAaH,UAAUI,kBAAkBJ,OAAO;AAoClD;;;;;;;;;;;;;;;;;;;;;;;;;CAyBC,GACD,OAAO,SAASM,gBACdC,eAAkCJ,YAAY;IAI9C,MAAMK,YAAY,IAAIC;IACtB,MAAMC,aAAa3B,KAChB4B,KAAK,CAACC,QAAQ,cACdC,kBAAkB,CAAC,CAACb,QAAW,CAAA;YAC9B,GAAGV,qBAAqB;YACxBK,kBAAiBmB,IAAY,EAAEC,QAAwC;gBACrE,mBAAmB,GACnB,IAAI,OAAOA,aAAa,cAAcD,SAAS,UAAU;oBACvD;gBACF;gBACA,kBAAkB,GAElBN,UAAUQ,GAAG,CAAChB,OAAOe;YACvB;YACAnB,qBACEkB,IAAY,EACZC,QAAwC;gBAExC,mBAAmB,GACnB,IAAI,OAAOA,aAAa,cAAcD,SAAS,UAAU;oBACvD;gBACF;gBACA,kBAAkB,GAElBN,UAAUS,MAAM,CAACjB;YACnB;YACAR,SAASe,aAAaP;QACxB,CAAA;IAEF,MAAMkB,iBAAiB,CACrBC,SACAC,aAAa,KAAK;QAElB,MAAMC,SAAS;YACbT,OAAOd,aAAa,CAAC,IAAIwB,MAAM;YAE/B,MAAMC,QAAQ,IAAID,MAAM;YACxBd,UAAUgB,OAAO,CAAC,CAACT,UAAUf;gBAC3Be,SAAS;oBACP,GAAGQ,KAAK;oBACRhC,OAAO;oBACPC,SAAS2B,QAAQnB;gBACnB;YACF;QACF;QACA,IAAIoB,YAAY;YACdC;QACF,OAAO;YACLrC,IAAIqC;QACN;IACF;IAEA,MAAMI,OAAOf;IACbe,KAAKP,cAAc,GAAGA;IAEtB,OAAOO;AACT"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { TextDecoder } from "node:util";
|
|
2
2
|
if (typeof global.TextDecoder === "undefined") {
|
|
3
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
4
3
|
// @ts-expect-error browser TextDecoder does not support `null` while `node:util` does
|
|
5
4
|
global.TextDecoder = TextDecoder;
|
|
6
5
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/test-utils/polyfills/TextDecoder.ts"],"sourcesContent":["import { TextDecoder } from \"node:util\";\n\nif (typeof global.TextDecoder === \"undefined\") {\n //
|
|
1
|
+
{"version":3,"sources":["../../../src/test-utils/polyfills/TextDecoder.ts"],"sourcesContent":["import { TextDecoder } from \"node:util\";\n\nif (typeof global.TextDecoder === \"undefined\") {\n // @ts-expect-error browser TextDecoder does not support `null` while `node:util` does\n global.TextDecoder = TextDecoder;\n}\n"],"names":["TextDecoder","global"],"mappings":"AAAA,SAASA,WAAW,QAAQ,YAAY;AAExC,IAAI,OAAOC,OAAOD,WAAW,KAAK,aAAa;IAC7C,sFAAsF;IACtFC,OAAOD,WAAW,GAAGA;AACvB"}
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { jest } from "@jest/globals";
|
|
2
|
+
/**
|
|
3
|
+
* @since 6.0.0
|
|
4
|
+
*/
|
|
5
|
+
export type RafSpy = jest.SpiedFunction<typeof requestAnimationFrame>;
|
|
2
6
|
/**
|
|
3
7
|
* @example
|
|
4
8
|
* ```ts
|
|
5
|
-
* import {
|
|
9
|
+
* import { testImmediateRaf } from "@react-md/core/test-utils";
|
|
6
10
|
*
|
|
7
11
|
* describe("some test suite", () => {
|
|
8
12
|
* it("should test something with requestAnimationFrame", () => {
|
|
9
|
-
* const raf =
|
|
13
|
+
* const raf = testImmediateRaf();
|
|
10
14
|
*
|
|
11
15
|
* // do some testing with requestAnimationFrame
|
|
12
16
|
*
|
|
@@ -18,7 +22,7 @@ import { jest } from "@jest/globals";
|
|
|
18
22
|
*
|
|
19
23
|
* @example Automatic Cleanup
|
|
20
24
|
* ```ts
|
|
21
|
-
* import {
|
|
25
|
+
* import { testImmediateRaf } from "@react-md/core/test-utils";
|
|
22
26
|
*
|
|
23
27
|
* afterEach(() => {
|
|
24
28
|
* jest.restoreAllMocks();
|
|
@@ -26,7 +30,7 @@ import { jest } from "@jest/globals";
|
|
|
26
30
|
*
|
|
27
31
|
* describe("some test suite", () => {
|
|
28
32
|
* it("should test something with requestAnimationFrame", () => {
|
|
29
|
-
* const raf =
|
|
33
|
+
* const raf = testImmediateRaf();
|
|
30
34
|
*
|
|
31
35
|
* // do some testing with requestAnimationFrame
|
|
32
36
|
* });
|
|
@@ -35,4 +39,4 @@ import { jest } from "@jest/globals";
|
|
|
35
39
|
*
|
|
36
40
|
* @since 6.0.0
|
|
37
41
|
*/
|
|
38
|
-
export declare const
|
|
42
|
+
export declare const testImmediateRaf: () => RafSpy;
|
|
@@ -2,11 +2,11 @@ import { jest } from "@jest/globals";
|
|
|
2
2
|
/**
|
|
3
3
|
* @example
|
|
4
4
|
* ```ts
|
|
5
|
-
* import {
|
|
5
|
+
* import { testImmediateRaf } from "@react-md/core/test-utils";
|
|
6
6
|
*
|
|
7
7
|
* describe("some test suite", () => {
|
|
8
8
|
* it("should test something with requestAnimationFrame", () => {
|
|
9
|
-
* const raf =
|
|
9
|
+
* const raf = testImmediateRaf();
|
|
10
10
|
*
|
|
11
11
|
* // do some testing with requestAnimationFrame
|
|
12
12
|
*
|
|
@@ -18,7 +18,7 @@ import { jest } from "@jest/globals";
|
|
|
18
18
|
*
|
|
19
19
|
* @example Automatic Cleanup
|
|
20
20
|
* ```ts
|
|
21
|
-
* import {
|
|
21
|
+
* import { testImmediateRaf } from "@react-md/core/test-utils";
|
|
22
22
|
*
|
|
23
23
|
* afterEach(() => {
|
|
24
24
|
* jest.restoreAllMocks();
|
|
@@ -26,7 +26,7 @@ import { jest } from "@jest/globals";
|
|
|
26
26
|
*
|
|
27
27
|
* describe("some test suite", () => {
|
|
28
28
|
* it("should test something with requestAnimationFrame", () => {
|
|
29
|
-
* const raf =
|
|
29
|
+
* const raf = testImmediateRaf();
|
|
30
30
|
*
|
|
31
31
|
* // do some testing with requestAnimationFrame
|
|
32
32
|
* });
|
|
@@ -34,7 +34,7 @@ import { jest } from "@jest/globals";
|
|
|
34
34
|
* ```
|
|
35
35
|
*
|
|
36
36
|
* @since 6.0.0
|
|
37
|
-
*/ export const
|
|
37
|
+
*/ export const testImmediateRaf = ()=>jest.spyOn(window, "requestAnimationFrame").mockImplementation((cb)=>{
|
|
38
38
|
cb(0);
|
|
39
39
|
return 0;
|
|
40
40
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/test-utils/timers.ts"],"sourcesContent":["import { jest } from \"@jest/globals\";\n\n/**\n * @example\n * ```ts\n * import {
|
|
1
|
+
{"version":3,"sources":["../../src/test-utils/timers.ts"],"sourcesContent":["import { jest } from \"@jest/globals\";\n\n/**\n * @since 6.0.0\n */\nexport type RafSpy = jest.SpiedFunction<typeof requestAnimationFrame>;\n\n/**\n * @example\n * ```ts\n * import { testImmediateRaf } from \"@react-md/core/test-utils\";\n *\n * describe(\"some test suite\", () => {\n * it(\"should test something with requestAnimationFrame\", () => {\n * const raf = testImmediateRaf();\n *\n * // do some testing with requestAnimationFrame\n *\n * // reset to original at the end of the test\n * raf.mockRestore()\n * });\n * });\n * ```\n *\n * @example Automatic Cleanup\n * ```ts\n * import { testImmediateRaf } from \"@react-md/core/test-utils\";\n *\n * afterEach(() => {\n * jest.restoreAllMocks();\n * });\n *\n * describe(\"some test suite\", () => {\n * it(\"should test something with requestAnimationFrame\", () => {\n * const raf = testImmediateRaf();\n *\n * // do some testing with requestAnimationFrame\n * });\n * });\n * ```\n *\n * @since 6.0.0\n */\nexport const testImmediateRaf = (): RafSpy =>\n jest.spyOn(window, \"requestAnimationFrame\").mockImplementation((cb) => {\n cb(0);\n return 0;\n });\n"],"names":["jest","testImmediateRaf","spyOn","window","mockImplementation","cb"],"mappings":"AAAA,SAASA,IAAI,QAAQ,gBAAgB;AAOrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCC,GACD,OAAO,MAAMC,mBAAmB,IAC9BD,KAAKE,KAAK,CAACC,QAAQ,yBAAyBC,kBAAkB,CAAC,CAACC;QAC9DA,GAAG;QACH,OAAO;IACT,GAAG"}
|
|
@@ -3,6 +3,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import { useLocalStorage } from "../useLocalStorage.js";
|
|
4
4
|
import { ColorSchemeProvider } from "./useColorScheme.js";
|
|
5
5
|
import { useColorSchemeProvider } from "./useColorSchemeProvider.js";
|
|
6
|
+
import { isColorSchemeMode } from "./isColorScheme.js";
|
|
6
7
|
/**
|
|
7
8
|
* An optional implementation of the {@link ColorSchemeProvider} that supports
|
|
8
9
|
* storing the value in local storage if the
|
|
@@ -72,7 +73,7 @@ import { useColorSchemeProvider } from "./useColorSchemeProvider.js";
|
|
|
72
73
|
const { value: colorSchemeMode, setValue: setColorSchemeMode } = useLocalStorage({
|
|
73
74
|
key: localStorageKey,
|
|
74
75
|
defaultValue: defaultColorSchemeMode,
|
|
75
|
-
deserializer: (item)=>item
|
|
76
|
+
deserializer: (item)=>isColorSchemeMode(item) ? item : defaultColorSchemeMode
|
|
76
77
|
});
|
|
77
78
|
const value = useColorSchemeProvider({
|
|
78
79
|
disableMetaTag,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/theme/LocalStorageColorSchemeProvider.tsx"],"sourcesContent":["\"use client\";\nimport { type ReactElement, type ReactNode } from \"react\";\nimport { useLocalStorage } from \"../useLocalStorage.js\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/theme/LocalStorageColorSchemeProvider.tsx"],"sourcesContent":["\"use client\";\nimport { type ReactElement, type ReactNode } from \"react\";\nimport { useLocalStorage } from \"../useLocalStorage.js\";\nimport { type ColorSchemeMode } from \"./types.js\";\nimport { ColorSchemeProvider } from \"./useColorScheme.js\";\nimport { useColorSchemeProvider } from \"./useColorSchemeProvider.js\";\nimport { isColorSchemeMode } from \"./isColorScheme.js\";\n\n/**\n * @since 6.0.0\n */\nexport interface LocalStorageColorSchemeProviderProps {\n /**\n * Set this to `true` to prevent a `<meta name=\"color-scheme\" content=\"{COLOR_SCHEME}\">`\n * from being added to the `document.head`.\n *\n * @defaultValue `false`\n */\n disableMetaTag?: boolean;\n\n /**\n * Set this to a string like `\"colorScheme\"` if you want to store the user's\n * color scheme preference in local storage.\n *\n * @defaultValue `\"\"`\n */\n localStorageKey?: string;\n\n /**\n * The current color scheme mode that is being used by your app. This should\n * match the `$color-scheme` SCSS variable.\n *\n * @defaultValue `\"light\"`\n */\n defaultColorSchemeMode?: ColorSchemeMode;\n\n children: ReactNode;\n}\n\n/**\n * An optional implementation of the {@link ColorSchemeProvider} that supports\n * storing the value in local storage if the\n * {@link LocalStorageColorSchemeProviderProps.localStorageKey} is provided.\n *\n * @example\n * ```tsx\n * import {\n * LocalStorageColorSchemeProvider,\n * SegmentedButtonContainer,\n * SegmentedButton,\n * useColorScheme,\n * } from \"@react-md/core\";\n * import { createRoot } from \"react-dom/client\";\n *\n * function MyComponent(): ReactElement {\n * const { colorScheme, colorSchemeMode, setColorSchemeMode } = useColorScheme();\n * // colorScheme: \"light\" | \"dark\"\n * // colorSchemeMode: \"light\" | \"dark\" | \"system\"\n *\n * return (\n * <>\n * The current color scheme is {colorScheme}\n * <SegmentedButtonContainer>\n * <SegmentedButton\n * selected={colorSchemeMode === \"light\"}\n * onClick={() => {\n * setColorSchemeMode(\"light\")\n * }}\n * >\n * Light\n * </SegmentedButton>\n * <SegmentedButton\n * selected={colorSchemeMode === \"dark\"}\n * onClick={() => {\n * setColorSchemeMode(\"dark\")\n * }}\n * >\n * Dark\n * </SegmentedButton>\n * <SegmentedButton\n * selected={colorSchemeMode === \"system\"}\n * onClick={() => {\n * setColorSchemeMode(\"system\")\n * }}\n * >\n * System\n * </SegmentedButton>\n * </SegmentedButtonContainer>\n * </>\n * )l\n * }\n *\n * const container = document.getElementById(\"root\");\n * const root = createRoot(container);\n *\n * root.render(\n * <LocalStorageColorSchemeProvider defaultColorSchemeMode=\"system\">\n * <MyComponent />\n * </LocalStorageColorSchemeProvider>\n * );\n * ```\n *\n * @since 6.0.0\n */\nexport function LocalStorageColorSchemeProvider(\n props: LocalStorageColorSchemeProviderProps\n): ReactElement {\n const {\n localStorageKey = \"\",\n defaultColorSchemeMode = \"light\",\n disableMetaTag,\n children,\n } = props;\n\n const { value: colorSchemeMode, setValue: setColorSchemeMode } =\n useLocalStorage({\n key: localStorageKey,\n defaultValue: defaultColorSchemeMode,\n deserializer: (item) =>\n isColorSchemeMode(item) ? item : defaultColorSchemeMode,\n });\n\n const value = useColorSchemeProvider({\n disableMetaTag,\n colorSchemeMode,\n setColorSchemeMode,\n });\n\n return <ColorSchemeProvider value={value}>{children}</ColorSchemeProvider>;\n}\n"],"names":["useLocalStorage","ColorSchemeProvider","useColorSchemeProvider","isColorSchemeMode","LocalStorageColorSchemeProvider","props","localStorageKey","defaultColorSchemeMode","disableMetaTag","children","value","colorSchemeMode","setValue","setColorSchemeMode","key","defaultValue","deserializer","item"],"mappings":"AAAA;;AAEA,SAASA,eAAe,QAAQ,wBAAwB;AAExD,SAASC,mBAAmB,QAAQ,sBAAsB;AAC1D,SAASC,sBAAsB,QAAQ,8BAA8B;AACrE,SAASC,iBAAiB,QAAQ,qBAAqB;AAiCvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgEC,GACD,OAAO,SAASC,gCACdC,KAA2C;IAE3C,MAAM,EACJC,kBAAkB,EAAE,EACpBC,yBAAyB,OAAO,EAChCC,cAAc,EACdC,QAAQ,EACT,GAAGJ;IAEJ,MAAM,EAAEK,OAAOC,eAAe,EAAEC,UAAUC,kBAAkB,EAAE,GAC5Db,gBAAgB;QACdc,KAAKR;QACLS,cAAcR;QACdS,cAAc,CAACC,OACbd,kBAAkBc,QAAQA,OAAOV;IACrC;IAEF,MAAMG,QAAQR,uBAAuB;QACnCM;QACAG;QACAE;IACF;IAEA,qBAAO,KAACZ;QAAoBS,OAAOA;kBAAQD;;AAC7C"}
|
|
@@ -186,7 +186,9 @@ const { Provider } = context;
|
|
|
186
186
|
// NOTE: This will not be correct the first time a new theme is lazy-loaded
|
|
187
187
|
// and applied. It might be good to have a way to manually force this flow
|
|
188
188
|
// again?
|
|
189
|
-
const frame = window.requestAnimationFrame(()=>
|
|
189
|
+
const frame = window.requestAnimationFrame(()=>{
|
|
190
|
+
setDerivedTheme(getDerivedTheme(document.documentElement));
|
|
191
|
+
});
|
|
190
192
|
return ()=>{
|
|
191
193
|
window.cancelAnimationFrame(frame);
|
|
192
194
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/theme/ThemeProvider.tsx"],"sourcesContent":["\"use client\";\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { useSsr } from \"../SsrProvider.js\";\nimport { type UseStateSetter } from \"../types.js\";\nimport {\n black,\n blue500,\n greenAccent700,\n orangeAccent200,\n orangeAccent400,\n red500,\n} from \"./colors.js\";\nimport {\n backgroundColorVar,\n errorColorVar,\n onErrorColorVar,\n onPrimaryColorVar,\n onSecondaryColorVar,\n onSuccessColorVar,\n onWarningColorVar,\n primaryColorVar,\n secondaryColorVar,\n successColorVar,\n textDisabledColorVar,\n textHintColorVar,\n textPrimaryColorVar,\n textSecondaryColorVar,\n warningColorVar,\n} from \"./cssVars.js\";\nimport { useColorScheme } from \"./useColorScheme.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-background-color\"?: string;\n \"--rmd-on-background-color\"?: string;\n \"--rmd-surface-color\"?: string;\n \"--rmd-primary-color\"?: string;\n \"--rmd-on-primary-color\"?: string;\n \"--rmd-secondary-color\"?: string;\n \"--rmd-on-secondary-color\"?: string;\n \"--rmd-warning-color\"?: string;\n \"--rmd-on-warning-color\"?: string;\n \"--rmd-error-color\"?: string;\n \"--rmd-on-error-color\"?: string;\n \"--rmd-success-color\"?: string;\n \"--rmd-on-success-color\"?: string;\n \"--rmd-text-primary-color\"?: string;\n \"--rmd-text-secondary-color\"?: string;\n \"--rmd-text-hint-color\"?: string;\n \"--rmd-text-disabled-color\"?: string;\n\n \"--rmd-outline-width\"?: string | number;\n \"--rmd-outline-color\"?: string;\n \"--rmd-outline-grey-color\"?: string;\n }\n}\n\n/** @since 6.0.0 */\nexport interface ThemeColors {\n primaryColor: string;\n onPrimaryColor: string;\n secondaryColor: string;\n onSecondaryColor: string;\n warningColor: string;\n onWarningColor: string;\n errorColor: string;\n onErrorColor: string;\n successColor: string;\n onSuccessColor: string;\n}\n\n/** @since 6.0.0 */\nexport interface ThemeTextColors {\n textPrimaryColor: string;\n textSecondaryColor: string;\n textHintColor: string;\n textDisabledColor: string;\n}\n\n/** @since 6.0.0 */\nexport interface ConfigurableThemeColors extends ThemeColors, ThemeTextColors {\n backgroundColor: string;\n}\n\n/** @since 6.0.0 */\nexport type ConfigurableThemeColorsName = keyof ConfigurableThemeColors;\n\n/** @since 6.0.0 */\nexport interface ThemeContext extends ConfigurableThemeColors {\n /**\n * This will be `true` if a `theme` was not provided to the {@link ThemeProvider}\n */\n derived: boolean;\n\n /**\n * @example Simple Example\n * ```tsx\n * import { getDerivedTheme, useHtmlClassName, useTheme } from \"@react-md/core\";\n * import { useEffect } from \"react\";\n *\n * import styles from \"./LightTheme.module.scss\";\n *\n * let loadedOnce = false;\n *\n * export default function LightTheme(): null {\n * useHtmlClassName(styles.container);\n * const { setDerivedTheme } = useTheme();\n * useEffect(() => {\n * if (loadedOnce) {\n * return;\n * }\n *\n * loadedOnce = true;\n * setDerivedTheme(getDerivedTheme());\n * }, [setDerivedTheme]);\n * return null;\n * }\n * ```\n */\n setDerivedTheme: UseStateSetter<Readonly<ConfigurableThemeColors>>;\n}\n\n/** @since 6.0.0 */\nexport const DEFAULT_THEME_COLORS: Readonly<ThemeColors> = {\n primaryColor: blue500,\n onPrimaryColor: black,\n secondaryColor: orangeAccent400,\n onSecondaryColor: black,\n warningColor: orangeAccent200,\n onWarningColor: black,\n errorColor: red500,\n onErrorColor: black,\n successColor: greenAccent700,\n onSuccessColor: black,\n};\n\n/** @since 6.0.0 */\nexport const DEFAULT_LIGHT_THEME: Readonly<ConfigurableThemeColors> = {\n ...DEFAULT_THEME_COLORS,\n backgroundColor: \"#fafafa\",\n textPrimaryColor: \"#212121\",\n textSecondaryColor: \"#757575\",\n textHintColor: \"#a8a8a8\",\n textDisabledColor: \"#9e9e9e\",\n};\n\n/** @since 6.0.0 */\nexport const DEFAULT_DARK_THEME: Readonly<ConfigurableThemeColors> = {\n ...DEFAULT_THEME_COLORS,\n backgroundColor: \"#121212\",\n textPrimaryColor: \"#d9d9d9\",\n textSecondaryColor: \"#b3b3b3\",\n textHintColor: \"gray\", // #808080\n textDisabledColor: \"gray\", // #808080\n};\n\nconst context = createContext<Readonly<ThemeContext> | undefined>(undefined);\ncontext.displayName = \"Theme\";\nconst { Provider } = context;\n\n/** @since 6.0.0 */\nexport const getDerivedTheme = (\n container: Element = document.documentElement\n): Readonly<ConfigurableThemeColors> => {\n const rootStyles = window.getComputedStyle(container);\n const backgroundColor = rootStyles.getPropertyValue(backgroundColorVar);\n const primaryColor = rootStyles.getPropertyValue(primaryColorVar);\n const onPrimaryColor = rootStyles.getPropertyValue(onPrimaryColorVar);\n const secondaryColor = rootStyles.getPropertyValue(secondaryColorVar);\n const onSecondaryColor = rootStyles.getPropertyValue(onSecondaryColorVar);\n const warningColor = rootStyles.getPropertyValue(warningColorVar);\n const onWarningColor = rootStyles.getPropertyValue(onWarningColorVar);\n const errorColor = rootStyles.getPropertyValue(errorColorVar);\n const onErrorColor = rootStyles.getPropertyValue(onErrorColorVar);\n const successColor = rootStyles.getPropertyValue(successColorVar);\n const onSuccessColor = rootStyles.getPropertyValue(onSuccessColorVar);\n const textPrimaryColor = rootStyles.getPropertyValue(textPrimaryColorVar);\n const textSecondaryColor = rootStyles.getPropertyValue(textSecondaryColorVar);\n const textHintColor = rootStyles.getPropertyValue(textHintColorVar);\n const textDisabledColor = rootStyles.getPropertyValue(textDisabledColorVar);\n\n return {\n backgroundColor,\n primaryColor,\n onPrimaryColor,\n secondaryColor,\n onSecondaryColor,\n warningColor,\n onWarningColor,\n errorColor,\n onErrorColor,\n successColor,\n onSuccessColor,\n textPrimaryColor,\n textSecondaryColor,\n textHintColor,\n textDisabledColor,\n };\n};\n\n/**\n * This hook can be used to access the current theme set by the\n * {@link ThemeProvider}.\n *\n * @example Simple Example\n * ```tsx\n * import { useTheme } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * function Example(): ReactElement {\n * const theme = useTheme();\n *\n * return <pre><code>{JSON.stringify(theme, null, 2)}</code></pre>;\n * }\n * ```\n *\n * @since 6.0.0\n * @throws \"The `ThemeProvider` has not been initialized.\"\n */\nexport function useTheme(): Readonly<ThemeContext>;\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport function useTheme(\n allowUndefined: true\n): Readonly<ThemeContext> | undefined;\n\n/**\n * @internal\n * @since 6.0.0\n * @throws \"The `ThemeProvider` has not been initialized.\"\n */\nexport function useTheme(\n allowUndefined?: boolean\n): Readonly<ThemeContext> | undefined {\n const theme = useContext(context);\n if (!theme && !allowUndefined) {\n throw new Error(\"The `ThemeProvider` has not been initialized.\");\n }\n\n return theme;\n}\n\n/** @since 6.0.0 */\nexport interface ThemeProviderProps {\n /**\n * When this is `undefined`, the theme will be derived by computing the\n * `document.documentElement`'s styles for all the `react-md` theme custom\n * properties. The theme will also automatically update whenever the\n * `colorScheme` or `colorSchemeMode` change.\n *\n * It is recommended to manually provide your theme if you know it beforehand.\n * Deriving the theme is really only useful if you allow your user to\n * customize all these theme values themselves and persist through local\n * storage/cookies.\n *\n * @see {@link DEFAULT_DARK_THEME}\n * @see {@link DEFAULT_LIGHT_THEME}\n * @defaultValue `colorScheme === \"dark\" ? DEFAULT_DARK_THEME : DEFAULT_LIGHT_THEME`\n */\n theme?: Readonly<ConfigurableThemeColors>;\n\n children: ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * The `ThemeProvider` should be added to the root of your app but as a child of\n * the `CoreProviders`.\n *\n * @example\n * ```tsx\n * import {\n * black,\n * blue500,\n * greenAccent700,\n * orangeAccent200,\n * orangeAccent400,\n * red500,\n * CoreProviders,\n * ThemeProvider,\n * } from \"@react-md/core\";\n * import type { ConfigurableThemeColors } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n * import { createRoot } from \"react-dom/client\";\n *\n * import App from \"./App\";\n *\n * const theme: Readonly<ConfigurableThemeColors> = {\n * primaryColor: blue500,\n * onPrimaryColor: black,\n * secondaryColor: orangeAccent400,\n * onSecondaryColor: black,\n * warningColor: orangeAccent200,\n * onWarningColor: black,\n * errorColor: red500,\n * onErrorColor: black,\n * successColor: greenAccent700,\n * onSuccessColor: black,\n * backgroundColor: \"#121212\",\n * textPrimaryColor: \"#d9d9d9\",\n * textSecondaryColor: \"#b3b3b3\",\n * textHintColor: \"gray\", // #808080\n * textDisabledColor: \"gray\", // #808080\n * };\n *\n * const container = document.getElementById(\"app\");\n * const root = createRoot(container);\n * root.render(\n * <CoreProviders>\n * <ThemeProvider theme={theme}>\n * <App />\n * </ThemeProvider>\n * </CoreProviders>\n * );\n * ```\n *\n * @example Automatically Deriving the Theme\n * ```tsx\n * import {\n * CoreProviders,\n * LocalStorageColorSchemeProvider,\n * ThemeProvider,\n * } from \"@react-md/core\";\n * import { type ReactElement } from \"react\";\n * import { createRoot } from \"react-dom/client\";\n *\n * import App from \"./App\";\n *\n * const container = document.getElementById(\"app\");\n * const root = createRoot(container);\n * root.render(\n * <CoreProviders>\n * <LocalStorageColorSchemeProvider>\n * <ThemeProvider>\n * <App />\n * </ThemeProvider>\n * </LocalStorageColorSchemeProvider>\n * </CoreProviders>\n * );\n * ```\n *\n * @since 6.0.0\n */\nexport function ThemeProvider(props: ThemeProviderProps): ReactElement {\n const { children, theme } = props;\n const ssr = useSsr();\n const { colorScheme, colorSchemeMode } = useColorScheme();\n const [derivedTheme, setDerivedTheme] = useState<ConfigurableThemeColors>(\n () => {\n if (theme) {\n return theme;\n }\n\n if (!ssr && typeof document !== \"undefined\") {\n return getDerivedTheme(document.documentElement);\n }\n\n return colorScheme === \"dark\" ? DEFAULT_DARK_THEME : DEFAULT_LIGHT_THEME;\n }\n );\n\n const derived = !theme;\n useEffect(() => {\n if (theme) {\n return;\n }\n\n // This has to be recalculated after an animation to ensure the new theme\n // styles have been applied. It will use the previous theme styles without\n // this frame.\n //\n // NOTE: This will not be correct the first time a new theme is lazy-loaded\n // and applied. It might be good to have a way to manually force this flow\n // again?\n const frame = window.requestAnimationFrame(() =>\n setDerivedTheme(getDerivedTheme(document.documentElement))\n );\n\n return () => {\n window.cancelAnimationFrame(frame);\n };\n }, [theme, colorScheme, colorSchemeMode]);\n\n const value = useMemo<ThemeContext>(() => {\n const backgroundColor =\n theme?.backgroundColor ?? derivedTheme.backgroundColor;\n const primaryColor = theme?.primaryColor ?? derivedTheme.primaryColor;\n const onPrimaryColor = theme?.onPrimaryColor ?? derivedTheme.onPrimaryColor;\n const secondaryColor = theme?.secondaryColor ?? derivedTheme.secondaryColor;\n const onSecondaryColor =\n theme?.onSecondaryColor ?? derivedTheme.onSecondaryColor;\n const warningColor = theme?.warningColor ?? derivedTheme.warningColor;\n const onWarningColor = theme?.onWarningColor ?? derivedTheme.onWarningColor;\n const errorColor = theme?.errorColor ?? derivedTheme.errorColor;\n const onErrorColor = theme?.onErrorColor ?? derivedTheme.onErrorColor;\n const successColor = theme?.successColor ?? derivedTheme.successColor;\n const onSuccessColor = theme?.onSuccessColor ?? derivedTheme.onSuccessColor;\n const textPrimaryColor =\n theme?.textPrimaryColor ?? derivedTheme.textPrimaryColor;\n const textSecondaryColor =\n theme?.textSecondaryColor ?? derivedTheme.textSecondaryColor;\n const textHintColor = theme?.textHintColor ?? derivedTheme.textHintColor;\n const textDisabledColor =\n theme?.textDisabledColor ?? derivedTheme.textDisabledColor;\n\n return {\n derived,\n backgroundColor,\n primaryColor,\n onPrimaryColor,\n secondaryColor,\n onSecondaryColor,\n warningColor,\n onWarningColor,\n errorColor,\n onErrorColor,\n successColor,\n onSuccessColor,\n textPrimaryColor,\n textSecondaryColor,\n textHintColor,\n textDisabledColor,\n setDerivedTheme,\n };\n }, [\n derived,\n derivedTheme.backgroundColor,\n derivedTheme.errorColor,\n derivedTheme.onErrorColor,\n derivedTheme.onPrimaryColor,\n derivedTheme.onSecondaryColor,\n derivedTheme.onSuccessColor,\n derivedTheme.onWarningColor,\n derivedTheme.primaryColor,\n derivedTheme.secondaryColor,\n derivedTheme.successColor,\n derivedTheme.textDisabledColor,\n derivedTheme.textHintColor,\n derivedTheme.textPrimaryColor,\n derivedTheme.textSecondaryColor,\n derivedTheme.warningColor,\n theme?.backgroundColor,\n theme?.errorColor,\n theme?.onErrorColor,\n theme?.onPrimaryColor,\n theme?.onSecondaryColor,\n theme?.onSuccessColor,\n theme?.onWarningColor,\n theme?.primaryColor,\n theme?.secondaryColor,\n theme?.successColor,\n theme?.textDisabledColor,\n theme?.textHintColor,\n theme?.textPrimaryColor,\n theme?.textSecondaryColor,\n theme?.warningColor,\n ]);\n\n return <Provider value={value}>{children}</Provider>;\n}\n"],"names":["createContext","useContext","useEffect","useMemo","useState","useSsr","black","blue500","greenAccent700","orangeAccent200","orangeAccent400","red500","backgroundColorVar","errorColorVar","onErrorColorVar","onPrimaryColorVar","onSecondaryColorVar","onSuccessColorVar","onWarningColorVar","primaryColorVar","secondaryColorVar","successColorVar","textDisabledColorVar","textHintColorVar","textPrimaryColorVar","textSecondaryColorVar","warningColorVar","useColorScheme","DEFAULT_THEME_COLORS","primaryColor","onPrimaryColor","secondaryColor","onSecondaryColor","warningColor","onWarningColor","errorColor","onErrorColor","successColor","onSuccessColor","DEFAULT_LIGHT_THEME","backgroundColor","textPrimaryColor","textSecondaryColor","textHintColor","textDisabledColor","DEFAULT_DARK_THEME","context","undefined","displayName","Provider","getDerivedTheme","container","document","documentElement","rootStyles","window","getComputedStyle","getPropertyValue","useTheme","allowUndefined","theme","Error","ThemeProvider","props","children","ssr","colorScheme","colorSchemeMode","derivedTheme","setDerivedTheme","derived","frame","requestAnimationFrame","cancelAnimationFrame","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/theme/ThemeProvider.tsx"],"sourcesContent":["\"use client\";\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport { useSsr } from \"../SsrProvider.js\";\nimport { type UseStateSetter } from \"../types.js\";\nimport {\n black,\n blue500,\n greenAccent700,\n orangeAccent200,\n orangeAccent400,\n red500,\n} from \"./colors.js\";\nimport {\n backgroundColorVar,\n errorColorVar,\n onErrorColorVar,\n onPrimaryColorVar,\n onSecondaryColorVar,\n onSuccessColorVar,\n onWarningColorVar,\n primaryColorVar,\n secondaryColorVar,\n successColorVar,\n textDisabledColorVar,\n textHintColorVar,\n textPrimaryColorVar,\n textSecondaryColorVar,\n warningColorVar,\n} from \"./cssVars.js\";\nimport { useColorScheme } from \"./useColorScheme.js\";\n\ndeclare module \"react\" {\n interface CSSProperties {\n \"--rmd-background-color\"?: string;\n \"--rmd-on-background-color\"?: string;\n \"--rmd-surface-color\"?: string;\n \"--rmd-primary-color\"?: string;\n \"--rmd-on-primary-color\"?: string;\n \"--rmd-secondary-color\"?: string;\n \"--rmd-on-secondary-color\"?: string;\n \"--rmd-warning-color\"?: string;\n \"--rmd-on-warning-color\"?: string;\n \"--rmd-error-color\"?: string;\n \"--rmd-on-error-color\"?: string;\n \"--rmd-success-color\"?: string;\n \"--rmd-on-success-color\"?: string;\n \"--rmd-text-primary-color\"?: string;\n \"--rmd-text-secondary-color\"?: string;\n \"--rmd-text-hint-color\"?: string;\n \"--rmd-text-disabled-color\"?: string;\n\n \"--rmd-outline-width\"?: string | number;\n \"--rmd-outline-color\"?: string;\n \"--rmd-outline-grey-color\"?: string;\n }\n}\n\n/** @since 6.0.0 */\nexport interface ThemeColors {\n primaryColor: string;\n onPrimaryColor: string;\n secondaryColor: string;\n onSecondaryColor: string;\n warningColor: string;\n onWarningColor: string;\n errorColor: string;\n onErrorColor: string;\n successColor: string;\n onSuccessColor: string;\n}\n\n/** @since 6.0.0 */\nexport interface ThemeTextColors {\n textPrimaryColor: string;\n textSecondaryColor: string;\n textHintColor: string;\n textDisabledColor: string;\n}\n\n/** @since 6.0.0 */\nexport interface ConfigurableThemeColors extends ThemeColors, ThemeTextColors {\n backgroundColor: string;\n}\n\n/** @since 6.0.0 */\nexport type ConfigurableThemeColorsName = keyof ConfigurableThemeColors;\n\n/** @since 6.0.0 */\nexport interface ThemeContext extends ConfigurableThemeColors {\n /**\n * This will be `true` if a `theme` was not provided to the {@link ThemeProvider}\n */\n derived: boolean;\n\n /**\n * @example Simple Example\n * ```tsx\n * import { getDerivedTheme, useHtmlClassName, useTheme } from \"@react-md/core\";\n * import { useEffect } from \"react\";\n *\n * import styles from \"./LightTheme.module.scss\";\n *\n * let loadedOnce = false;\n *\n * export default function LightTheme(): null {\n * useHtmlClassName(styles.container);\n * const { setDerivedTheme } = useTheme();\n * useEffect(() => {\n * if (loadedOnce) {\n * return;\n * }\n *\n * loadedOnce = true;\n * setDerivedTheme(getDerivedTheme());\n * }, [setDerivedTheme]);\n * return null;\n * }\n * ```\n */\n setDerivedTheme: UseStateSetter<Readonly<ConfigurableThemeColors>>;\n}\n\n/** @since 6.0.0 */\nexport const DEFAULT_THEME_COLORS: Readonly<ThemeColors> = {\n primaryColor: blue500,\n onPrimaryColor: black,\n secondaryColor: orangeAccent400,\n onSecondaryColor: black,\n warningColor: orangeAccent200,\n onWarningColor: black,\n errorColor: red500,\n onErrorColor: black,\n successColor: greenAccent700,\n onSuccessColor: black,\n};\n\n/** @since 6.0.0 */\nexport const DEFAULT_LIGHT_THEME: Readonly<ConfigurableThemeColors> = {\n ...DEFAULT_THEME_COLORS,\n backgroundColor: \"#fafafa\",\n textPrimaryColor: \"#212121\",\n textSecondaryColor: \"#757575\",\n textHintColor: \"#a8a8a8\",\n textDisabledColor: \"#9e9e9e\",\n};\n\n/** @since 6.0.0 */\nexport const DEFAULT_DARK_THEME: Readonly<ConfigurableThemeColors> = {\n ...DEFAULT_THEME_COLORS,\n backgroundColor: \"#121212\",\n textPrimaryColor: \"#d9d9d9\",\n textSecondaryColor: \"#b3b3b3\",\n textHintColor: \"gray\", // #808080\n textDisabledColor: \"gray\", // #808080\n};\n\nconst context = createContext<Readonly<ThemeContext> | undefined>(undefined);\ncontext.displayName = \"Theme\";\nconst { Provider } = context;\n\n/** @since 6.0.0 */\nexport const getDerivedTheme = (\n container: Element = document.documentElement\n): Readonly<ConfigurableThemeColors> => {\n const rootStyles = window.getComputedStyle(container);\n const backgroundColor = rootStyles.getPropertyValue(backgroundColorVar);\n const primaryColor = rootStyles.getPropertyValue(primaryColorVar);\n const onPrimaryColor = rootStyles.getPropertyValue(onPrimaryColorVar);\n const secondaryColor = rootStyles.getPropertyValue(secondaryColorVar);\n const onSecondaryColor = rootStyles.getPropertyValue(onSecondaryColorVar);\n const warningColor = rootStyles.getPropertyValue(warningColorVar);\n const onWarningColor = rootStyles.getPropertyValue(onWarningColorVar);\n const errorColor = rootStyles.getPropertyValue(errorColorVar);\n const onErrorColor = rootStyles.getPropertyValue(onErrorColorVar);\n const successColor = rootStyles.getPropertyValue(successColorVar);\n const onSuccessColor = rootStyles.getPropertyValue(onSuccessColorVar);\n const textPrimaryColor = rootStyles.getPropertyValue(textPrimaryColorVar);\n const textSecondaryColor = rootStyles.getPropertyValue(textSecondaryColorVar);\n const textHintColor = rootStyles.getPropertyValue(textHintColorVar);\n const textDisabledColor = rootStyles.getPropertyValue(textDisabledColorVar);\n\n return {\n backgroundColor,\n primaryColor,\n onPrimaryColor,\n secondaryColor,\n onSecondaryColor,\n warningColor,\n onWarningColor,\n errorColor,\n onErrorColor,\n successColor,\n onSuccessColor,\n textPrimaryColor,\n textSecondaryColor,\n textHintColor,\n textDisabledColor,\n };\n};\n\n/**\n * This hook can be used to access the current theme set by the\n * {@link ThemeProvider}.\n *\n * @example Simple Example\n * ```tsx\n * import { useTheme } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n *\n * function Example(): ReactElement {\n * const theme = useTheme();\n *\n * return <pre><code>{JSON.stringify(theme, null, 2)}</code></pre>;\n * }\n * ```\n *\n * @since 6.0.0\n * @throws \"The `ThemeProvider` has not been initialized.\"\n */\nexport function useTheme(): Readonly<ThemeContext>;\n\n/**\n * @internal\n * @since 6.0.0\n */\nexport function useTheme(\n allowUndefined: true\n): Readonly<ThemeContext> | undefined;\n\n/**\n * @internal\n * @since 6.0.0\n * @throws \"The `ThemeProvider` has not been initialized.\"\n */\nexport function useTheme(\n allowUndefined?: boolean\n): Readonly<ThemeContext> | undefined {\n const theme = useContext(context);\n if (!theme && !allowUndefined) {\n throw new Error(\"The `ThemeProvider` has not been initialized.\");\n }\n\n return theme;\n}\n\n/** @since 6.0.0 */\nexport interface ThemeProviderProps {\n /**\n * When this is `undefined`, the theme will be derived by computing the\n * `document.documentElement`'s styles for all the `react-md` theme custom\n * properties. The theme will also automatically update whenever the\n * `colorScheme` or `colorSchemeMode` change.\n *\n * It is recommended to manually provide your theme if you know it beforehand.\n * Deriving the theme is really only useful if you allow your user to\n * customize all these theme values themselves and persist through local\n * storage/cookies.\n *\n * @see {@link DEFAULT_DARK_THEME}\n * @see {@link DEFAULT_LIGHT_THEME}\n * @defaultValue `colorScheme === \"dark\" ? DEFAULT_DARK_THEME : DEFAULT_LIGHT_THEME`\n */\n theme?: Readonly<ConfigurableThemeColors>;\n\n children: ReactNode;\n}\n\n/**\n * **Client Component**\n *\n * The `ThemeProvider` should be added to the root of your app but as a child of\n * the `CoreProviders`.\n *\n * @example\n * ```tsx\n * import {\n * black,\n * blue500,\n * greenAccent700,\n * orangeAccent200,\n * orangeAccent400,\n * red500,\n * CoreProviders,\n * ThemeProvider,\n * } from \"@react-md/core\";\n * import type { ConfigurableThemeColors } from \"@react-md/core\";\n * import type { ReactElement } from \"react\";\n * import { createRoot } from \"react-dom/client\";\n *\n * import App from \"./App\";\n *\n * const theme: Readonly<ConfigurableThemeColors> = {\n * primaryColor: blue500,\n * onPrimaryColor: black,\n * secondaryColor: orangeAccent400,\n * onSecondaryColor: black,\n * warningColor: orangeAccent200,\n * onWarningColor: black,\n * errorColor: red500,\n * onErrorColor: black,\n * successColor: greenAccent700,\n * onSuccessColor: black,\n * backgroundColor: \"#121212\",\n * textPrimaryColor: \"#d9d9d9\",\n * textSecondaryColor: \"#b3b3b3\",\n * textHintColor: \"gray\", // #808080\n * textDisabledColor: \"gray\", // #808080\n * };\n *\n * const container = document.getElementById(\"app\");\n * const root = createRoot(container);\n * root.render(\n * <CoreProviders>\n * <ThemeProvider theme={theme}>\n * <App />\n * </ThemeProvider>\n * </CoreProviders>\n * );\n * ```\n *\n * @example Automatically Deriving the Theme\n * ```tsx\n * import {\n * CoreProviders,\n * LocalStorageColorSchemeProvider,\n * ThemeProvider,\n * } from \"@react-md/core\";\n * import { type ReactElement } from \"react\";\n * import { createRoot } from \"react-dom/client\";\n *\n * import App from \"./App\";\n *\n * const container = document.getElementById(\"app\");\n * const root = createRoot(container);\n * root.render(\n * <CoreProviders>\n * <LocalStorageColorSchemeProvider>\n * <ThemeProvider>\n * <App />\n * </ThemeProvider>\n * </LocalStorageColorSchemeProvider>\n * </CoreProviders>\n * );\n * ```\n *\n * @since 6.0.0\n */\nexport function ThemeProvider(props: ThemeProviderProps): ReactElement {\n const { children, theme } = props;\n const ssr = useSsr();\n const { colorScheme, colorSchemeMode } = useColorScheme();\n const [derivedTheme, setDerivedTheme] = useState<ConfigurableThemeColors>(\n () => {\n if (theme) {\n return theme;\n }\n\n if (!ssr && typeof document !== \"undefined\") {\n return getDerivedTheme(document.documentElement);\n }\n\n return colorScheme === \"dark\" ? DEFAULT_DARK_THEME : DEFAULT_LIGHT_THEME;\n }\n );\n\n const derived = !theme;\n useEffect(() => {\n if (theme) {\n return;\n }\n\n // This has to be recalculated after an animation to ensure the new theme\n // styles have been applied. It will use the previous theme styles without\n // this frame.\n //\n // NOTE: This will not be correct the first time a new theme is lazy-loaded\n // and applied. It might be good to have a way to manually force this flow\n // again?\n const frame = window.requestAnimationFrame(() => {\n setDerivedTheme(getDerivedTheme(document.documentElement));\n });\n\n return () => {\n window.cancelAnimationFrame(frame);\n };\n }, [theme, colorScheme, colorSchemeMode]);\n\n const value = useMemo<ThemeContext>(() => {\n const backgroundColor =\n theme?.backgroundColor ?? derivedTheme.backgroundColor;\n const primaryColor = theme?.primaryColor ?? derivedTheme.primaryColor;\n const onPrimaryColor = theme?.onPrimaryColor ?? derivedTheme.onPrimaryColor;\n const secondaryColor = theme?.secondaryColor ?? derivedTheme.secondaryColor;\n const onSecondaryColor =\n theme?.onSecondaryColor ?? derivedTheme.onSecondaryColor;\n const warningColor = theme?.warningColor ?? derivedTheme.warningColor;\n const onWarningColor = theme?.onWarningColor ?? derivedTheme.onWarningColor;\n const errorColor = theme?.errorColor ?? derivedTheme.errorColor;\n const onErrorColor = theme?.onErrorColor ?? derivedTheme.onErrorColor;\n const successColor = theme?.successColor ?? derivedTheme.successColor;\n const onSuccessColor = theme?.onSuccessColor ?? derivedTheme.onSuccessColor;\n const textPrimaryColor =\n theme?.textPrimaryColor ?? derivedTheme.textPrimaryColor;\n const textSecondaryColor =\n theme?.textSecondaryColor ?? derivedTheme.textSecondaryColor;\n const textHintColor = theme?.textHintColor ?? derivedTheme.textHintColor;\n const textDisabledColor =\n theme?.textDisabledColor ?? derivedTheme.textDisabledColor;\n\n return {\n derived,\n backgroundColor,\n primaryColor,\n onPrimaryColor,\n secondaryColor,\n onSecondaryColor,\n warningColor,\n onWarningColor,\n errorColor,\n onErrorColor,\n successColor,\n onSuccessColor,\n textPrimaryColor,\n textSecondaryColor,\n textHintColor,\n textDisabledColor,\n setDerivedTheme,\n };\n }, [\n derived,\n derivedTheme.backgroundColor,\n derivedTheme.errorColor,\n derivedTheme.onErrorColor,\n derivedTheme.onPrimaryColor,\n derivedTheme.onSecondaryColor,\n derivedTheme.onSuccessColor,\n derivedTheme.onWarningColor,\n derivedTheme.primaryColor,\n derivedTheme.secondaryColor,\n derivedTheme.successColor,\n derivedTheme.textDisabledColor,\n derivedTheme.textHintColor,\n derivedTheme.textPrimaryColor,\n derivedTheme.textSecondaryColor,\n derivedTheme.warningColor,\n theme?.backgroundColor,\n theme?.errorColor,\n theme?.onErrorColor,\n theme?.onPrimaryColor,\n theme?.onSecondaryColor,\n theme?.onSuccessColor,\n theme?.onWarningColor,\n theme?.primaryColor,\n theme?.secondaryColor,\n theme?.successColor,\n theme?.textDisabledColor,\n theme?.textHintColor,\n theme?.textPrimaryColor,\n theme?.textSecondaryColor,\n theme?.warningColor,\n ]);\n\n return <Provider value={value}>{children}</Provider>;\n}\n"],"names":["createContext","useContext","useEffect","useMemo","useState","useSsr","black","blue500","greenAccent700","orangeAccent200","orangeAccent400","red500","backgroundColorVar","errorColorVar","onErrorColorVar","onPrimaryColorVar","onSecondaryColorVar","onSuccessColorVar","onWarningColorVar","primaryColorVar","secondaryColorVar","successColorVar","textDisabledColorVar","textHintColorVar","textPrimaryColorVar","textSecondaryColorVar","warningColorVar","useColorScheme","DEFAULT_THEME_COLORS","primaryColor","onPrimaryColor","secondaryColor","onSecondaryColor","warningColor","onWarningColor","errorColor","onErrorColor","successColor","onSuccessColor","DEFAULT_LIGHT_THEME","backgroundColor","textPrimaryColor","textSecondaryColor","textHintColor","textDisabledColor","DEFAULT_DARK_THEME","context","undefined","displayName","Provider","getDerivedTheme","container","document","documentElement","rootStyles","window","getComputedStyle","getPropertyValue","useTheme","allowUndefined","theme","Error","ThemeProvider","props","children","ssr","colorScheme","colorSchemeMode","derivedTheme","setDerivedTheme","derived","frame","requestAnimationFrame","cancelAnimationFrame","value"],"mappings":"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"}
|