@mui/material 9.0.0-beta.0 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Accordion/Accordion.d.mts +4 -4
- package/Accordion/Accordion.d.ts +4 -4
- package/AccordionActions/AccordionActions.d.mts +2 -2
- package/AccordionActions/AccordionActions.d.ts +2 -2
- package/AccordionDetails/AccordionDetails.d.mts +2 -2
- package/AccordionDetails/AccordionDetails.d.ts +2 -2
- package/AccordionSummary/AccordionSummary.d.mts +3 -3
- package/AccordionSummary/AccordionSummary.d.ts +3 -3
- package/AccordionSummary/AccordionSummary.js +1 -0
- package/AccordionSummary/AccordionSummary.mjs +1 -0
- package/Alert/Alert.d.mts +3 -3
- package/Alert/Alert.d.ts +3 -3
- package/AlertTitle/AlertTitle.d.mts +3 -3
- package/AlertTitle/AlertTitle.d.ts +3 -3
- package/AppBar/AppBar.d.mts +3 -3
- package/AppBar/AppBar.d.ts +3 -3
- package/Autocomplete/Autocomplete.d.mts +2 -2
- package/Autocomplete/Autocomplete.d.ts +2 -2
- package/Avatar/Avatar.d.mts +2 -2
- package/Avatar/Avatar.d.ts +2 -2
- package/AvatarGroup/AvatarGroup.d.mts +2 -2
- package/AvatarGroup/AvatarGroup.d.ts +2 -2
- package/Backdrop/Backdrop.d.mts +4 -4
- package/Backdrop/Backdrop.d.ts +4 -4
- package/Badge/Badge.d.mts +3 -3
- package/Badge/Badge.d.ts +3 -3
- package/BottomNavigation/BottomNavigation.d.mts +2 -2
- package/BottomNavigation/BottomNavigation.d.ts +2 -2
- package/BottomNavigationAction/BottomNavigationAction.d.mts +3 -3
- package/BottomNavigationAction/BottomNavigationAction.d.ts +3 -3
- package/BottomNavigationAction/BottomNavigationAction.js +1 -0
- package/BottomNavigationAction/BottomNavigationAction.mjs +1 -0
- package/Box/Box.d.mts +3 -3
- package/Box/Box.d.ts +3 -3
- package/Breadcrumbs/BreadcrumbCollapsed.js +5 -1
- package/Breadcrumbs/BreadcrumbCollapsed.mjs +5 -1
- package/Breadcrumbs/Breadcrumbs.d.mts +3 -3
- package/Breadcrumbs/Breadcrumbs.d.ts +3 -3
- package/Button/Button.d.mts +6 -6
- package/Button/Button.d.ts +6 -6
- package/Button/Button.js +1 -0
- package/Button/Button.mjs +1 -0
- package/ButtonBase/ButtonBase.d.mts +7 -2
- package/ButtonBase/ButtonBase.d.ts +7 -2
- package/ButtonBase/ButtonBase.js +84 -85
- package/ButtonBase/ButtonBase.mjs +84 -85
- package/ButtonBase/useButtonBase.d.mts +91 -0
- package/ButtonBase/useButtonBase.d.ts +91 -0
- package/ButtonBase/useButtonBase.js +174 -0
- package/ButtonBase/useButtonBase.mjs +167 -0
- package/ButtonGroup/ButtonGroup.d.mts +2 -2
- package/ButtonGroup/ButtonGroup.d.ts +2 -2
- package/CHANGELOG.md +76 -0
- package/Card/Card.d.mts +3 -3
- package/Card/Card.d.ts +3 -3
- package/CardActionArea/CardActionArea.d.mts +3 -3
- package/CardActionArea/CardActionArea.d.ts +3 -3
- package/CardActionArea/CardActionArea.js +1 -0
- package/CardActionArea/CardActionArea.mjs +1 -0
- package/CardActions/CardActions.d.mts +2 -2
- package/CardActions/CardActions.d.ts +2 -2
- package/CardContent/CardContent.d.mts +2 -2
- package/CardContent/CardContent.d.ts +2 -2
- package/CardHeader/CardHeader.d.mts +2 -2
- package/CardHeader/CardHeader.d.ts +2 -2
- package/CardMedia/CardMedia.d.mts +2 -2
- package/CardMedia/CardMedia.d.ts +2 -2
- package/Checkbox/Checkbox.d.mts +4 -4
- package/Checkbox/Checkbox.d.ts +4 -4
- package/Chip/Chip.d.mts +9 -2
- package/Chip/Chip.d.ts +9 -2
- package/Chip/Chip.js +18 -1
- package/Chip/Chip.mjs +18 -1
- package/CircularProgress/CircularProgress.d.mts +2 -2
- package/CircularProgress/CircularProgress.d.ts +2 -2
- package/ClickAwayListener/ClickAwayListener.d.mts +3 -3
- package/ClickAwayListener/ClickAwayListener.d.ts +3 -3
- package/ClickAwayListener/ClickAwayListener.js +3 -3
- package/ClickAwayListener/ClickAwayListener.mjs +3 -3
- package/Collapse/Collapse.d.mts +5 -5
- package/Collapse/Collapse.d.ts +5 -5
- package/Collapse/Collapse.js +6 -18
- package/Collapse/Collapse.mjs +7 -19
- package/Container/Container.d.mts +2 -2
- package/Container/Container.d.ts +2 -2
- package/CssBaseline/CssBaseline.d.mts +2 -2
- package/CssBaseline/CssBaseline.d.ts +2 -2
- package/Dialog/Dialog.d.mts +11 -4
- package/Dialog/Dialog.d.ts +11 -4
- package/Dialog/Dialog.js +9 -1
- package/Dialog/Dialog.mjs +9 -1
- package/DialogActions/DialogActions.d.mts +2 -2
- package/DialogActions/DialogActions.d.ts +2 -2
- package/DialogContent/DialogContent.d.mts +2 -2
- package/DialogContent/DialogContent.d.ts +2 -2
- package/DialogContentText/DialogContentText.d.mts +3 -3
- package/DialogContentText/DialogContentText.d.ts +3 -3
- package/DialogTitle/DialogTitle.d.mts +3 -3
- package/DialogTitle/DialogTitle.d.ts +3 -3
- package/Divider/Divider.d.mts +4 -4
- package/Divider/Divider.d.ts +4 -4
- package/Divider/Divider.js +0 -8
- package/Divider/Divider.mjs +0 -8
- package/Drawer/Drawer.d.mts +4 -4
- package/Drawer/Drawer.d.ts +4 -4
- package/Drawer/Drawer.js +1 -4
- package/Drawer/Drawer.mjs +1 -4
- package/Fab/Fab.d.mts +3 -3
- package/Fab/Fab.d.ts +3 -3
- package/Fab/Fab.js +1 -0
- package/Fab/Fab.mjs +1 -0
- package/Fade/Fade.d.mts +3 -3
- package/Fade/Fade.d.ts +3 -3
- package/Fade/Fade.js +28 -32
- package/Fade/Fade.mjs +29 -33
- package/FilledInput/FilledInput.d.mts +3 -3
- package/FilledInput/FilledInput.d.ts +3 -3
- package/FilledInput/FilledInput.js +1 -1
- package/FilledInput/FilledInput.mjs +1 -1
- package/FormControl/FormControl.d.mts +7 -7
- package/FormControl/FormControl.d.ts +7 -7
- package/FormControlLabel/FormControlLabel.d.mts +4 -4
- package/FormControlLabel/FormControlLabel.d.ts +4 -4
- package/FormGroup/FormGroup.d.mts +3 -3
- package/FormGroup/FormGroup.d.ts +3 -3
- package/FormHelperText/FormHelperText.d.mts +3 -3
- package/FormHelperText/FormHelperText.d.ts +3 -3
- package/FormLabel/FormLabel.d.mts +5 -5
- package/FormLabel/FormLabel.d.ts +5 -5
- package/GlobalStyles/GlobalStyles.d.mts +2 -2
- package/GlobalStyles/GlobalStyles.d.ts +2 -2
- package/Grid/Grid.d.mts +10 -5
- package/Grid/Grid.d.ts +10 -5
- package/Grid/Grid.js +10 -5
- package/Grid/Grid.mjs +10 -5
- package/Grid/gridClasses.js +1 -1
- package/Grid/gridClasses.mjs +1 -1
- package/Grow/Grow.d.mts +5 -5
- package/Grow/Grow.d.ts +5 -5
- package/Grow/Grow.js +30 -38
- package/Grow/Grow.mjs +31 -39
- package/Icon/Icon.d.mts +3 -3
- package/Icon/Icon.d.ts +3 -3
- package/IconButton/IconButton.d.mts +5 -5
- package/IconButton/IconButton.d.ts +5 -5
- package/IconButton/IconButton.js +1 -0
- package/IconButton/IconButton.mjs +1 -0
- package/ImageList/ImageList.d.mts +2 -2
- package/ImageList/ImageList.d.ts +2 -2
- package/ImageListItem/ImageListItem.d.mts +2 -2
- package/ImageListItem/ImageListItem.d.ts +2 -2
- package/ImageListItemBar/ImageListItemBar.d.mts +2 -2
- package/ImageListItemBar/ImageListItemBar.d.ts +2 -2
- package/InitColorSchemeScript/InitColorSchemeScript.d.mts +2 -2
- package/InitColorSchemeScript/InitColorSchemeScript.d.ts +2 -2
- package/InitColorSchemeScript/InitColorSchemeScript.js +2 -2
- package/InitColorSchemeScript/InitColorSchemeScript.mjs +2 -2
- package/Input/Input.d.mts +3 -3
- package/Input/Input.d.ts +3 -3
- package/Input/Input.js +1 -1
- package/Input/Input.mjs +1 -1
- package/InputAdornment/InputAdornment.d.mts +2 -2
- package/InputAdornment/InputAdornment.d.ts +2 -2
- package/InputAdornment/inputAdornmentClasses.d.mts +2 -2
- package/InputAdornment/inputAdornmentClasses.d.ts +2 -2
- package/InputBase/InputBase.d.mts +2 -2
- package/InputBase/InputBase.d.ts +2 -2
- package/InputLabel/InputLabel.d.mts +4 -4
- package/InputLabel/InputLabel.d.ts +4 -4
- package/LinearProgress/LinearProgress.d.mts +2 -2
- package/LinearProgress/LinearProgress.d.ts +2 -2
- package/Link/Link.d.mts +4 -4
- package/Link/Link.d.ts +4 -4
- package/List/List.d.mts +4 -4
- package/List/List.d.ts +4 -4
- package/ListItem/ListItem.d.mts +3 -3
- package/ListItem/ListItem.d.ts +3 -3
- package/ListItem/ListItem.js +1 -2
- package/ListItem/ListItem.mjs +1 -2
- package/ListItemAvatar/ListItemAvatar.d.mts +2 -2
- package/ListItemAvatar/ListItemAvatar.d.ts +2 -2
- package/ListItemButton/ListItemButton.d.mts +4 -4
- package/ListItemButton/ListItemButton.d.ts +4 -4
- package/ListItemButton/ListItemButton.js +1 -0
- package/ListItemButton/ListItemButton.mjs +1 -0
- package/ListItemIcon/ListItemIcon.d.mts +3 -3
- package/ListItemIcon/ListItemIcon.d.ts +3 -3
- package/ListItemIcon/ListItemIcon.js +1 -1
- package/ListItemIcon/ListItemIcon.mjs +1 -1
- package/ListItemSecondaryAction/ListItemSecondaryAction.d.mts +2 -2
- package/ListItemSecondaryAction/ListItemSecondaryAction.d.ts +2 -2
- package/ListItemText/ListItemText.d.mts +3 -3
- package/ListItemText/ListItemText.d.ts +3 -3
- package/ListSubheader/ListSubheader.d.mts +3 -3
- package/ListSubheader/ListSubheader.d.ts +3 -3
- package/ListSubheader/ListSubheader.js +0 -3
- package/ListSubheader/ListSubheader.mjs +0 -3
- package/Menu/Menu.d.mts +5 -5
- package/Menu/Menu.d.ts +5 -5
- package/Menu/Menu.js +15 -32
- package/Menu/Menu.mjs +15 -32
- package/MenuItem/MenuItem.d.mts +3 -3
- package/MenuItem/MenuItem.d.ts +3 -3
- package/MenuItem/MenuItem.js +36 -26
- package/MenuItem/MenuItem.mjs +34 -26
- package/MenuList/MenuList.d.mts +4 -4
- package/MenuList/MenuList.d.ts +4 -4
- package/MenuList/MenuList.js +136 -101
- package/MenuList/MenuList.mjs +135 -100
- package/MenuList/MenuListContext.d.mts +11 -0
- package/MenuList/MenuListContext.d.ts +11 -0
- package/MenuList/MenuListContext.js +25 -0
- package/MenuList/MenuListContext.mjs +19 -0
- package/MobileStepper/MobileStepper.d.mts +3 -3
- package/MobileStepper/MobileStepper.d.ts +3 -3
- package/Modal/Modal.d.mts +7 -7
- package/Modal/Modal.d.ts +7 -7
- package/NativeSelect/NativeSelect.d.mts +3 -3
- package/NativeSelect/NativeSelect.d.ts +3 -3
- package/NoSsr/NoSsr.d.mts +2 -2
- package/NoSsr/NoSsr.d.ts +2 -2
- package/NoSsr/NoSsr.js +2 -2
- package/NoSsr/NoSsr.mjs +2 -2
- package/OutlinedInput/OutlinedInput.d.mts +4 -4
- package/OutlinedInput/OutlinedInput.d.ts +4 -4
- package/Pagination/Pagination.d.mts +2 -2
- package/Pagination/Pagination.d.ts +2 -2
- package/PaginationItem/PaginationItem.d.mts +8 -3
- package/PaginationItem/PaginationItem.d.ts +8 -3
- package/PaginationItem/PaginationItem.js +6 -0
- package/PaginationItem/PaginationItem.mjs +6 -0
- package/Paper/Paper.d.mts +4 -4
- package/Paper/Paper.d.ts +4 -4
- package/PigmentContainer/PigmentContainer.d.mts +2 -2
- package/PigmentContainer/PigmentContainer.d.ts +2 -2
- package/PigmentContainer/PigmentContainer.js +2 -2
- package/PigmentContainer/PigmentContainer.mjs +2 -2
- package/PigmentGrid/PigmentGrid.d.mts +3 -3
- package/PigmentGrid/PigmentGrid.d.ts +3 -3
- package/PigmentGrid/PigmentGrid.js +3 -3
- package/PigmentGrid/PigmentGrid.mjs +3 -3
- package/PigmentStack/PigmentStack.d.mts +2 -2
- package/PigmentStack/PigmentStack.d.ts +2 -2
- package/PigmentStack/PigmentStack.js +2 -2
- package/PigmentStack/PigmentStack.mjs +2 -2
- package/Popover/Popover.d.mts +5 -5
- package/Popover/Popover.d.ts +5 -5
- package/Popover/Popover.js +19 -7
- package/Popover/Popover.mjs +18 -6
- package/Popper/Popper.d.mts +4 -4
- package/Popper/Popper.d.ts +4 -4
- package/Popper/Popper.js +4 -4
- package/Popper/Popper.mjs +4 -4
- package/Portal/Portal.d.mts +2 -2
- package/Portal/Portal.d.ts +2 -2
- package/Portal/Portal.js +2 -2
- package/Portal/Portal.mjs +2 -2
- package/README.md +3 -3
- package/Radio/Radio.d.mts +3 -3
- package/Radio/Radio.d.ts +3 -3
- package/RadioGroup/RadioGroup.d.mts +3 -3
- package/RadioGroup/RadioGroup.d.ts +3 -3
- package/Rating/Rating.d.mts +2 -2
- package/Rating/Rating.d.ts +2 -2
- package/ScopedCssBaseline/ScopedCssBaseline.d.mts +2 -2
- package/ScopedCssBaseline/ScopedCssBaseline.d.ts +2 -2
- package/Select/Select.d.mts +3 -3
- package/Select/Select.d.ts +3 -3
- package/Skeleton/Skeleton.d.mts +2 -2
- package/Skeleton/Skeleton.d.ts +2 -2
- package/Slide/Slide.d.mts +4 -4
- package/Slide/Slide.d.ts +4 -4
- package/Slide/Slide.js +43 -42
- package/Slide/Slide.mjs +44 -44
- package/Slider/Slider.d.mts +4 -4
- package/Slider/Slider.d.ts +4 -4
- package/Slider/Slider.js +1 -1
- package/Slider/Slider.mjs +1 -1
- package/Slider/useSlider.d.mts +1 -1
- package/Slider/useSlider.d.ts +1 -1
- package/Slider/useSlider.js +235 -209
- package/Slider/useSlider.mjs +235 -209
- package/Slider/useSlider.types.d.mts +2 -2
- package/Slider/useSlider.types.d.ts +2 -2
- package/Snackbar/Snackbar.d.mts +3 -3
- package/Snackbar/Snackbar.d.ts +3 -3
- package/SnackbarContent/SnackbarContent.d.mts +3 -3
- package/SnackbarContent/SnackbarContent.d.ts +3 -3
- package/SpeedDial/SpeedDial.d.mts +3 -3
- package/SpeedDial/SpeedDial.d.ts +3 -3
- package/SpeedDialAction/SpeedDialAction.d.mts +3 -3
- package/SpeedDialAction/SpeedDialAction.d.ts +3 -3
- package/SpeedDialIcon/SpeedDialIcon.d.mts +2 -2
- package/SpeedDialIcon/SpeedDialIcon.d.ts +2 -2
- package/Stack/Stack.d.mts +2 -2
- package/Stack/Stack.d.ts +2 -2
- package/Step/Step.d.mts +2 -2
- package/Step/Step.d.ts +2 -2
- package/StepButton/StepButton.d.mts +3 -3
- package/StepButton/StepButton.d.ts +3 -3
- package/StepButton/StepButton.js +44 -14
- package/StepButton/StepButton.mjs +44 -14
- package/StepConnector/StepConnector.d.mts +2 -2
- package/StepConnector/StepConnector.d.ts +2 -2
- package/StepConnector/StepConnector.js +1 -2
- package/StepConnector/StepConnector.mjs +1 -2
- package/StepContent/StepContent.d.mts +3 -3
- package/StepContent/StepContent.d.ts +3 -3
- package/StepIcon/StepIcon.d.mts +3 -3
- package/StepIcon/StepIcon.d.ts +3 -3
- package/StepLabel/StepLabel.d.mts +2 -2
- package/StepLabel/StepLabel.d.ts +2 -2
- package/Stepper/Stepper.d.mts +2 -2
- package/Stepper/Stepper.d.ts +2 -2
- package/Stepper/Stepper.js +54 -22
- package/Stepper/Stepper.mjs +54 -22
- package/Stepper/StepperContext.d.mts +0 -5
- package/Stepper/StepperContext.d.ts +0 -5
- package/Stepper/StepperContext.js +1 -2
- package/Stepper/StepperContext.mjs +0 -1
- package/SvgIcon/SvgIcon.d.mts +3 -3
- package/SvgIcon/SvgIcon.d.ts +3 -3
- package/SwipeableDrawer/SwipeableDrawer.d.mts +3 -3
- package/SwipeableDrawer/SwipeableDrawer.d.ts +3 -3
- package/SwipeableDrawer/SwipeableDrawer.js +0 -3
- package/SwipeableDrawer/SwipeableDrawer.mjs +0 -3
- package/Switch/Switch.d.mts +4 -4
- package/Switch/Switch.d.ts +4 -4
- package/Switch/Switch.js +4 -0
- package/Switch/Switch.mjs +4 -0
- package/Tab/Tab.d.mts +3 -3
- package/Tab/Tab.d.ts +3 -3
- package/Tab/Tab.js +17 -1
- package/Tab/Tab.mjs +17 -1
- package/TabScrollButton/TabScrollButton.d.mts +3 -3
- package/TabScrollButton/TabScrollButton.d.ts +3 -3
- package/TabScrollButton/TabScrollButton.js +6 -2
- package/TabScrollButton/TabScrollButton.mjs +6 -2
- package/Table/Table.d.mts +2 -2
- package/Table/Table.d.ts +2 -2
- package/TableBody/TableBody.d.mts +2 -2
- package/TableBody/TableBody.d.ts +2 -2
- package/TableCell/TableCell.d.mts +2 -2
- package/TableCell/TableCell.d.ts +2 -2
- package/TableContainer/TableContainer.d.mts +2 -2
- package/TableContainer/TableContainer.d.ts +2 -2
- package/TableFooter/TableFooter.d.mts +2 -2
- package/TableFooter/TableFooter.d.ts +2 -2
- package/TableHead/TableHead.d.mts +2 -2
- package/TableHead/TableHead.d.ts +2 -2
- package/TablePagination/TablePagination.d.mts +4 -4
- package/TablePagination/TablePagination.d.ts +4 -4
- package/TablePaginationActions/TablePaginationActions.d.mts +2 -2
- package/TablePaginationActions/TablePaginationActions.d.ts +2 -2
- package/TableRow/TableRow.d.mts +2 -2
- package/TableRow/TableRow.d.ts +2 -2
- package/TableSortLabel/TableSortLabel.d.mts +3 -3
- package/TableSortLabel/TableSortLabel.d.ts +3 -3
- package/TableSortLabel/TableSortLabel.js +5 -3
- package/TableSortLabel/TableSortLabel.mjs +5 -3
- package/Tabs/Tabs.d.mts +2 -2
- package/Tabs/Tabs.d.ts +2 -2
- package/Tabs/Tabs.js +30 -21
- package/Tabs/Tabs.mjs +29 -20
- package/TextField/TextField.d.mts +10 -10
- package/TextField/TextField.d.ts +10 -10
- package/TextareaAutosize/TextareaAutosize.d.mts +2 -2
- package/TextareaAutosize/TextareaAutosize.d.ts +2 -2
- package/TextareaAutosize/TextareaAutosize.js +2 -2
- package/TextareaAutosize/TextareaAutosize.mjs +2 -2
- package/ToggleButton/ToggleButton.d.mts +3 -3
- package/ToggleButton/ToggleButton.d.ts +3 -3
- package/ToggleButton/ToggleButton.js +1 -0
- package/ToggleButton/ToggleButton.mjs +1 -0
- package/ToggleButtonGroup/ToggleButtonGroup.d.mts +2 -2
- package/ToggleButtonGroup/ToggleButtonGroup.d.ts +2 -2
- package/Toolbar/Toolbar.d.mts +2 -2
- package/Toolbar/Toolbar.d.ts +2 -2
- package/Tooltip/Tooltip.d.mts +3 -3
- package/Tooltip/Tooltip.d.ts +3 -3
- package/Typography/Typography.d.mts +4 -4
- package/Typography/Typography.d.ts +4 -4
- package/Zoom/Zoom.d.mts +3 -3
- package/Zoom/Zoom.d.ts +3 -3
- package/Zoom/Zoom.js +24 -30
- package/Zoom/Zoom.mjs +25 -31
- package/index.js +1 -1
- package/index.mjs +1 -1
- package/internal/SwitchBase.d.mts +2 -2
- package/internal/SwitchBase.d.ts +2 -2
- package/internal/SwitchBase.js +5 -1
- package/internal/SwitchBase.mjs +5 -1
- package/locale/psAF.js +1 -1
- package/locale/psAF.mjs +1 -1
- package/package.json +51 -51
- package/styles/createThemeNoVars.js +1 -1
- package/styles/createThemeNoVars.mjs +1 -1
- package/styles/createThemeWithVars.js +9 -9
- package/styles/createThemeWithVars.mjs +9 -9
- package/transitions/utils.d.mts +7 -0
- package/transitions/utils.d.ts +7 -0
- package/transitions/utils.js +27 -0
- package/transitions/utils.mjs +25 -0
- package/useAutocomplete/useAutocomplete.js +8 -0
- package/useAutocomplete/useAutocomplete.mjs +8 -0
- package/utils/focusWithVisible.js +24 -0
- package/utils/focusWithVisible.mjs +19 -0
- package/utils/index.d.mts +0 -1
- package/utils/index.d.ts +0 -1
- package/utils/index.js +0 -7
- package/utils/index.mjs +0 -1
- package/utils/useFocusableWhenDisabled.d.mts +30 -0
- package/utils/useFocusableWhenDisabled.d.ts +30 -0
- package/utils/useFocusableWhenDisabled.js +47 -0
- package/utils/useFocusableWhenDisabled.mjs +41 -0
- package/utils/useRovingTabIndex.d.mts +1 -2
- package/utils/useRovingTabIndex.d.ts +1 -2
- package/utils/useRovingTabIndex.js +25 -4
- package/utils/useRovingTabIndex.mjs +1 -2
- package/version/index.js +2 -2
- package/version/index.mjs +2 -2
|
@@ -80,12 +80,12 @@ export interface BreadcrumbsTypeMap<AdditionalProps = {}, RootComponent extends
|
|
|
80
80
|
*
|
|
81
81
|
* Demos:
|
|
82
82
|
*
|
|
83
|
-
* - [Breadcrumbs](https://
|
|
83
|
+
* - [Breadcrumbs](https://mui.com/material-ui/react-breadcrumbs/)
|
|
84
84
|
*
|
|
85
85
|
* API:
|
|
86
86
|
*
|
|
87
|
-
* - [Breadcrumbs API](https://
|
|
88
|
-
* - inherits [Typography API](https://
|
|
87
|
+
* - [Breadcrumbs API](https://mui.com/material-ui/api/breadcrumbs/)
|
|
88
|
+
* - inherits [Typography API](https://mui.com/material-ui/api/typography/)
|
|
89
89
|
*/
|
|
90
90
|
declare const Breadcrumbs: OverridableComponent<BreadcrumbsTypeMap>;
|
|
91
91
|
export type BreadcrumbsProps<RootComponent extends React.ElementType = BreadcrumbsTypeMap['defaultComponent'], AdditionalProps = {}> = OverrideProps<BreadcrumbsTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
|
package/Button/Button.d.mts
CHANGED
|
@@ -115,15 +115,15 @@ export type ExtendButton<TypeMap extends OverridableTypeMap> = ((props: {
|
|
|
115
115
|
*
|
|
116
116
|
* Demos:
|
|
117
117
|
*
|
|
118
|
-
* - [Button Group](https://
|
|
119
|
-
* - [Button](https://
|
|
120
|
-
* - [Menubar](https://
|
|
121
|
-
* - [Number Field](https://
|
|
118
|
+
* - [Button Group](https://mui.com/material-ui/react-button-group/)
|
|
119
|
+
* - [Button](https://mui.com/material-ui/react-button/)
|
|
120
|
+
* - [Menubar](https://mui.com/material-ui/react-menubar/)
|
|
121
|
+
* - [Number Field](https://mui.com/material-ui/react-number-field/)
|
|
122
122
|
*
|
|
123
123
|
* API:
|
|
124
124
|
*
|
|
125
|
-
* - [Button API](https://
|
|
126
|
-
* - inherits [ButtonBase API](https://
|
|
125
|
+
* - [Button API](https://mui.com/material-ui/api/button/)
|
|
126
|
+
* - inherits [ButtonBase API](https://mui.com/material-ui/api/button-base/)
|
|
127
127
|
*/
|
|
128
128
|
declare const Button: ExtendButtonBase<ButtonTypeMap>;
|
|
129
129
|
export type ButtonProps<RootComponent extends React.ElementType = ButtonTypeMap['defaultComponent'], AdditionalProps = {}> = OverrideProps<ButtonTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
|
package/Button/Button.d.ts
CHANGED
|
@@ -115,15 +115,15 @@ export type ExtendButton<TypeMap extends OverridableTypeMap> = ((props: {
|
|
|
115
115
|
*
|
|
116
116
|
* Demos:
|
|
117
117
|
*
|
|
118
|
-
* - [Button Group](https://
|
|
119
|
-
* - [Button](https://
|
|
120
|
-
* - [Menubar](https://
|
|
121
|
-
* - [Number Field](https://
|
|
118
|
+
* - [Button Group](https://mui.com/material-ui/react-button-group/)
|
|
119
|
+
* - [Button](https://mui.com/material-ui/react-button/)
|
|
120
|
+
* - [Menubar](https://mui.com/material-ui/react-menubar/)
|
|
121
|
+
* - [Number Field](https://mui.com/material-ui/react-number-field/)
|
|
122
122
|
*
|
|
123
123
|
* API:
|
|
124
124
|
*
|
|
125
|
-
* - [Button API](https://
|
|
126
|
-
* - inherits [ButtonBase API](https://
|
|
125
|
+
* - [Button API](https://mui.com/material-ui/api/button/)
|
|
126
|
+
* - inherits [ButtonBase API](https://mui.com/material-ui/api/button-base/)
|
|
127
127
|
*/
|
|
128
128
|
declare const Button: ExtendButtonBase<ButtonTypeMap>;
|
|
129
129
|
export type ButtonProps<RootComponent extends React.ElementType = ButtonTypeMap['defaultComponent'], AdditionalProps = {}> = OverrideProps<ButtonTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
|
package/Button/Button.js
CHANGED
|
@@ -566,6 +566,7 @@ const Button = /*#__PURE__*/React.forwardRef(function Button(inProps, ref) {
|
|
|
566
566
|
focusRipple: !disableFocusRipple,
|
|
567
567
|
focusVisibleClassName: (0, _clsx.default)(classes.focusVisible, focusVisibleClassName),
|
|
568
568
|
ref: ref,
|
|
569
|
+
internalNativeButton: true,
|
|
569
570
|
type: type,
|
|
570
571
|
id: loading ? loadingId : idProp,
|
|
571
572
|
...other,
|
package/Button/Button.mjs
CHANGED
|
@@ -559,6 +559,7 @@ const Button = /*#__PURE__*/React.forwardRef(function Button(inProps, ref) {
|
|
|
559
559
|
focusRipple: !disableFocusRipple,
|
|
560
560
|
focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),
|
|
561
561
|
ref: ref,
|
|
562
|
+
internalNativeButton: true,
|
|
562
563
|
type: type,
|
|
563
564
|
id: loading ? loadingId : idProp,
|
|
564
565
|
...other,
|
|
@@ -62,6 +62,11 @@ export interface ButtonBaseOwnProps {
|
|
|
62
62
|
* @default 'a'
|
|
63
63
|
*/
|
|
64
64
|
LinkComponent?: React.ElementType | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* Whether the custom component is expected to render a native `<button>` element
|
|
67
|
+
* when passing a React component to the `component` or `slots` prop.
|
|
68
|
+
*/
|
|
69
|
+
nativeButton?: boolean | undefined;
|
|
65
70
|
/**
|
|
66
71
|
* Callback fired when the component is focused with a keyboard.
|
|
67
72
|
* We trigger a `onFocus` callback too.
|
|
@@ -109,11 +114,11 @@ export type ExtendButtonBase<TypeMap extends OverridableTypeMap> = ((props: {
|
|
|
109
114
|
*
|
|
110
115
|
* Demos:
|
|
111
116
|
*
|
|
112
|
-
* - [Button](https://
|
|
117
|
+
* - [Button](https://mui.com/material-ui/react-button/)
|
|
113
118
|
*
|
|
114
119
|
* API:
|
|
115
120
|
*
|
|
116
|
-
* - [ButtonBase API](https://
|
|
121
|
+
* - [ButtonBase API](https://mui.com/material-ui/api/button-base/)
|
|
117
122
|
*/
|
|
118
123
|
declare const ButtonBase: ExtendButtonBase<ButtonBaseTypeMap>;
|
|
119
124
|
export type ButtonBaseProps<RootComponent extends React.ElementType = ButtonBaseTypeMap['defaultComponent'], AdditionalProps = {}> = OverrideProps<ButtonBaseTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
|
|
@@ -62,6 +62,11 @@ export interface ButtonBaseOwnProps {
|
|
|
62
62
|
* @default 'a'
|
|
63
63
|
*/
|
|
64
64
|
LinkComponent?: React.ElementType | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* Whether the custom component is expected to render a native `<button>` element
|
|
67
|
+
* when passing a React component to the `component` or `slots` prop.
|
|
68
|
+
*/
|
|
69
|
+
nativeButton?: boolean | undefined;
|
|
65
70
|
/**
|
|
66
71
|
* Callback fired when the component is focused with a keyboard.
|
|
67
72
|
* We trigger a `onFocus` callback too.
|
|
@@ -109,11 +114,11 @@ export type ExtendButtonBase<TypeMap extends OverridableTypeMap> = ((props: {
|
|
|
109
114
|
*
|
|
110
115
|
* Demos:
|
|
111
116
|
*
|
|
112
|
-
* - [Button](https://
|
|
117
|
+
* - [Button](https://mui.com/material-ui/react-button/)
|
|
113
118
|
*
|
|
114
119
|
* API:
|
|
115
120
|
*
|
|
116
|
-
* - [ButtonBase API](https://
|
|
121
|
+
* - [ButtonBase API](https://mui.com/material-ui/api/button-base/)
|
|
117
122
|
*/
|
|
118
123
|
declare const ButtonBase: ExtendButtonBase<ButtonBaseTypeMap>;
|
|
119
124
|
export type ButtonBaseProps<RootComponent extends React.ElementType = ButtonBaseTypeMap['defaultComponent'], AdditionalProps = {}> = OverrideProps<ButtonBaseTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
|
package/ButtonBase/ButtonBase.js
CHANGED
|
@@ -18,6 +18,7 @@ var _zeroStyled = require("../zero-styled");
|
|
|
18
18
|
var _DefaultPropsProvider = require("../DefaultPropsProvider");
|
|
19
19
|
var _useForkRef = _interopRequireDefault(require("../utils/useForkRef"));
|
|
20
20
|
var _useEventCallback = _interopRequireDefault(require("../utils/useEventCallback"));
|
|
21
|
+
var _useButtonBase = _interopRequireDefault(require("./useButtonBase"));
|
|
21
22
|
var _useLazyRipple = _interopRequireDefault(require("../useLazyRipple"));
|
|
22
23
|
var _TouchRipple = _interopRequireDefault(require("./TouchRipple"));
|
|
23
24
|
var _buttonBaseClasses = _interopRequireWildcard(require("./buttonBaseClasses"));
|
|
@@ -27,13 +28,14 @@ const useUtilityClasses = ownerState => {
|
|
|
27
28
|
disabled,
|
|
28
29
|
focusVisible,
|
|
29
30
|
focusVisibleClassName,
|
|
31
|
+
suppressFocusVisible,
|
|
30
32
|
classes
|
|
31
33
|
} = ownerState;
|
|
32
34
|
const slots = {
|
|
33
|
-
root: ['root', disabled && 'disabled', focusVisible && 'focusVisible']
|
|
35
|
+
root: ['root', disabled && 'disabled', focusVisible && !suppressFocusVisible && 'focusVisible']
|
|
34
36
|
};
|
|
35
37
|
const composedClasses = (0, _composeClasses.default)(slots, _buttonBaseClasses.getButtonBaseUtilityClass, classes);
|
|
36
|
-
if (focusVisible && focusVisibleClassName) {
|
|
38
|
+
if (focusVisible && !suppressFocusVisible && focusVisibleClassName) {
|
|
37
39
|
composedClasses.root += ` ${focusVisibleClassName}`;
|
|
38
40
|
}
|
|
39
41
|
return composedClasses;
|
|
@@ -102,15 +104,25 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
|
|
|
102
104
|
disableTouchRipple = false,
|
|
103
105
|
focusRipple = false,
|
|
104
106
|
focusVisibleClassName,
|
|
107
|
+
/* eslint-disable react/prop-types */
|
|
108
|
+
// replaces internal handling in Chip, other components can opt-in individually to use this in the future
|
|
109
|
+
focusableWhenDisabled,
|
|
110
|
+
// escape hatch to suppress the focusVisible state and callback
|
|
111
|
+
// used by anchored <Menu>s to to suppress focus visible styling when opened with a pointer
|
|
112
|
+
suppressFocusVisible = false,
|
|
113
|
+
// private prop to allow native vs non-native button props to be resolved before mount
|
|
114
|
+
internalNativeButton: internalNativeButtonProp,
|
|
115
|
+
/* eslint-enable react/prop-types */
|
|
105
116
|
LinkComponent = 'a',
|
|
117
|
+
nativeButton: nativeButtonProp,
|
|
106
118
|
onBlur,
|
|
107
|
-
onClick,
|
|
119
|
+
onClick: onClickProp,
|
|
108
120
|
onContextMenu,
|
|
109
121
|
onDragLeave,
|
|
110
122
|
onFocus,
|
|
111
123
|
onFocusVisible,
|
|
112
|
-
onKeyDown,
|
|
113
|
-
onKeyUp,
|
|
124
|
+
onKeyDown: onKeyDownProp,
|
|
125
|
+
onKeyUp: onKeyUpProp,
|
|
114
126
|
onMouseDown,
|
|
115
127
|
onMouseLeave,
|
|
116
128
|
onMouseUp,
|
|
@@ -123,19 +135,68 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
|
|
|
123
135
|
type,
|
|
124
136
|
...other
|
|
125
137
|
} = props;
|
|
126
|
-
const
|
|
138
|
+
const isLink = Boolean(other.href || other.to);
|
|
139
|
+
const hasFormAction = Boolean(other.formAction);
|
|
140
|
+
let ComponentProp = component;
|
|
141
|
+
if (ComponentProp === 'button' && isLink) {
|
|
142
|
+
ComponentProp = LinkComponent;
|
|
143
|
+
}
|
|
144
|
+
const internalNativeButton = typeof ComponentProp === 'string' ? ComponentProp === 'button' : internalNativeButtonProp ?? false;
|
|
145
|
+
const nativeButton = nativeButtonProp ?? internalNativeButton;
|
|
127
146
|
const ripple = (0, _useLazyRipple.default)();
|
|
128
147
|
const handleRippleRef = (0, _useForkRef.default)(ripple.ref, touchRippleRef);
|
|
129
148
|
const [focusVisible, setFocusVisible] = React.useState(false);
|
|
130
|
-
if (disabled && focusVisible) {
|
|
149
|
+
if ((disabled || suppressFocusVisible) && focusVisible) {
|
|
131
150
|
setFocusVisible(false);
|
|
132
151
|
}
|
|
152
|
+
const handleBeforeKeyDown = (0, _useEventCallback.default)(event => {
|
|
153
|
+
// Check if key is already down to avoid repeats being counted as multiple activations
|
|
154
|
+
if (focusRipple && !event.repeat && focusVisible && event.key === ' ') {
|
|
155
|
+
ripple.stop(event, () => {
|
|
156
|
+
ripple.start(event);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
const handleBeforeKeyUp = (0, _useEventCallback.default)(event => {
|
|
161
|
+
// calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed
|
|
162
|
+
// https://codesandbox.io/p/sandbox/button-keyup-preventdefault-dn7f0
|
|
163
|
+
if (focusRipple && event.key === ' ' && focusVisible && !event.defaultPrevented) {
|
|
164
|
+
ripple.stop(event, () => {
|
|
165
|
+
ripple.pulsate(event);
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
const {
|
|
170
|
+
getButtonProps,
|
|
171
|
+
rootRef: buttonRef
|
|
172
|
+
} = (0, _useButtonBase.default)({
|
|
173
|
+
nativeButton,
|
|
174
|
+
nativeButtonProp,
|
|
175
|
+
internalNativeButton,
|
|
176
|
+
allowInferredHostMismatch: isLink || typeof ComponentProp === 'string',
|
|
177
|
+
disabled,
|
|
178
|
+
type,
|
|
179
|
+
hasFormAction,
|
|
180
|
+
tabIndex,
|
|
181
|
+
onBeforeKeyDown: handleBeforeKeyDown,
|
|
182
|
+
onBeforeKeyUp: handleBeforeKeyUp
|
|
183
|
+
});
|
|
184
|
+
const {
|
|
185
|
+
onClick,
|
|
186
|
+
onKeyDown,
|
|
187
|
+
onKeyUp,
|
|
188
|
+
...buttonProps
|
|
189
|
+
} = getButtonProps({
|
|
190
|
+
onClick: onClickProp,
|
|
191
|
+
onKeyDown: onKeyDownProp,
|
|
192
|
+
onKeyUp: onKeyUpProp
|
|
193
|
+
});
|
|
133
194
|
React.useImperativeHandle(action, () => ({
|
|
134
195
|
focusVisible: () => {
|
|
135
196
|
setFocusVisible(true);
|
|
136
197
|
buttonRef.current.focus();
|
|
137
198
|
}
|
|
138
|
-
}), []);
|
|
199
|
+
}), [buttonRef]);
|
|
139
200
|
const enableTouchRipple = ripple.shouldMount && !disableRipple && !disabled;
|
|
140
201
|
React.useEffect(() => {
|
|
141
202
|
if (focusVisible && focusRipple && !disableRipple) {
|
|
@@ -170,7 +231,7 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
|
|
|
170
231
|
if (!buttonRef.current) {
|
|
171
232
|
buttonRef.current = event.currentTarget;
|
|
172
233
|
}
|
|
173
|
-
if ((0, _isFocusVisible.default)(event.target)) {
|
|
234
|
+
if (!suppressFocusVisible && (0, _isFocusVisible.default)(event.target)) {
|
|
174
235
|
setFocusVisible(true);
|
|
175
236
|
if (onFocusVisible) {
|
|
176
237
|
onFocusVisible(event);
|
|
@@ -180,79 +241,13 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
|
|
|
180
241
|
onFocus(event);
|
|
181
242
|
}
|
|
182
243
|
});
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
return component && component !== 'button';
|
|
187
|
-
}
|
|
188
|
-
if (button.tagName === 'BUTTON') {
|
|
189
|
-
return false;
|
|
190
|
-
}
|
|
191
|
-
return !(button.tagName === 'A' && button.href);
|
|
192
|
-
};
|
|
193
|
-
const handleKeyDown = (0, _useEventCallback.default)(event => {
|
|
194
|
-
if (disabled) {
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
// Check if key is already down to avoid repeats being counted as multiple activations
|
|
199
|
-
if (focusRipple && !event.repeat && focusVisible && event.key === ' ') {
|
|
200
|
-
ripple.stop(event, () => {
|
|
201
|
-
ripple.start(event);
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ') {
|
|
205
|
-
event.preventDefault();
|
|
206
|
-
}
|
|
207
|
-
if (onKeyDown) {
|
|
208
|
-
onKeyDown(event);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
// Keyboard accessibility for non interactive elements
|
|
212
|
-
if (event.target === event.currentTarget && isNonNativeButton() && event.key === 'Enter' && !disabled) {
|
|
213
|
-
event.preventDefault();
|
|
214
|
-
event.currentTarget.click();
|
|
215
|
-
}
|
|
216
|
-
});
|
|
217
|
-
const handleKeyUp = (0, _useEventCallback.default)(event => {
|
|
244
|
+
const linkProps = {};
|
|
245
|
+
if (isLink) {
|
|
246
|
+
linkProps.tabIndex = disabled ? -1 : tabIndex;
|
|
218
247
|
if (disabled) {
|
|
219
|
-
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed
|
|
223
|
-
// https://codesandbox.io/p/sandbox/button-keyup-preventdefault-dn7f0
|
|
224
|
-
if (focusRipple && event.key === ' ' && focusVisible && !event.defaultPrevented) {
|
|
225
|
-
ripple.stop(event, () => {
|
|
226
|
-
ripple.pulsate(event);
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
if (onKeyUp) {
|
|
230
|
-
onKeyUp(event);
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
// Keyboard accessibility for non interactive elements
|
|
234
|
-
if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ' && !event.defaultPrevented && !disabled) {
|
|
235
|
-
event.currentTarget.click();
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
let ComponentProp = component;
|
|
239
|
-
if (ComponentProp === 'button' && (other.href || other.to)) {
|
|
240
|
-
ComponentProp = LinkComponent;
|
|
241
|
-
}
|
|
242
|
-
const buttonProps = {};
|
|
243
|
-
if (ComponentProp === 'button') {
|
|
244
|
-
const hasFormAttributes = !!other.formAction;
|
|
245
|
-
// ButtonBase was defaulting to type="button" when no type prop was provided, which prevented form submission and broke formAction functionality.
|
|
246
|
-
// The fix checks for form-related attributes and skips the default type to allow the browser's natural submit behavior (type="submit").
|
|
247
|
-
buttonProps.type = type === undefined && !hasFormAttributes ? 'button' : type;
|
|
248
|
-
buttonProps.disabled = disabled;
|
|
249
|
-
} else {
|
|
250
|
-
if (!other.href && !other.to) {
|
|
251
|
-
buttonProps.role = 'button';
|
|
252
|
-
}
|
|
253
|
-
if (disabled) {
|
|
254
|
-
buttonProps['aria-disabled'] = disabled;
|
|
248
|
+
linkProps['aria-disabled'] = disabled;
|
|
255
249
|
}
|
|
250
|
+
linkProps.type = type;
|
|
256
251
|
}
|
|
257
252
|
const handleRef = (0, _useForkRef.default)(ref, buttonRef);
|
|
258
253
|
const ownerState = {
|
|
@@ -263,6 +258,7 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
|
|
|
263
258
|
disableRipple,
|
|
264
259
|
disableTouchRipple,
|
|
265
260
|
focusRipple,
|
|
261
|
+
suppressFocusVisible,
|
|
266
262
|
tabIndex,
|
|
267
263
|
focusVisible
|
|
268
264
|
};
|
|
@@ -275,8 +271,8 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
|
|
|
275
271
|
onClick: onClick,
|
|
276
272
|
onContextMenu: handleContextMenu,
|
|
277
273
|
onFocus: handleFocus,
|
|
278
|
-
onKeyDown:
|
|
279
|
-
onKeyUp:
|
|
274
|
+
onKeyDown: onKeyDown,
|
|
275
|
+
onKeyUp: onKeyUp,
|
|
280
276
|
onMouseDown: handleMouseDown,
|
|
281
277
|
onMouseLeave: handleMouseLeave,
|
|
282
278
|
onMouseUp: handleMouseUp,
|
|
@@ -285,9 +281,7 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
|
|
|
285
281
|
onTouchMove: handleTouchMove,
|
|
286
282
|
onTouchStart: handleTouchStart,
|
|
287
283
|
ref: handleRef,
|
|
288
|
-
|
|
289
|
-
type: type,
|
|
290
|
-
...buttonProps,
|
|
284
|
+
...(isLink ? linkProps : buttonProps),
|
|
291
285
|
...other,
|
|
292
286
|
children: [children, enableTouchRipple ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_TouchRipple.default, {
|
|
293
287
|
ref: handleRippleRef,
|
|
@@ -385,6 +379,11 @@ process.env.NODE_ENV !== "production" ? ButtonBase.propTypes /* remove-proptypes
|
|
|
385
379
|
* @default 'a'
|
|
386
380
|
*/
|
|
387
381
|
LinkComponent: _propTypes.default.elementType,
|
|
382
|
+
/**
|
|
383
|
+
* Whether the custom component is expected to render a native `<button>` element
|
|
384
|
+
* when passing a React component to the `component` or `slots` prop.
|
|
385
|
+
*/
|
|
386
|
+
nativeButton: _propTypes.default.bool,
|
|
388
387
|
/**
|
|
389
388
|
* @ignore
|
|
390
389
|
*/
|
|
@@ -11,6 +11,7 @@ import { styled } from "../zero-styled/index.mjs";
|
|
|
11
11
|
import { useDefaultProps } from "../DefaultPropsProvider/index.mjs";
|
|
12
12
|
import useForkRef from "../utils/useForkRef.mjs";
|
|
13
13
|
import useEventCallback from "../utils/useEventCallback.mjs";
|
|
14
|
+
import useButtonBase from "./useButtonBase.mjs";
|
|
14
15
|
import useLazyRipple from "../useLazyRipple/index.mjs";
|
|
15
16
|
import TouchRipple from "./TouchRipple.mjs";
|
|
16
17
|
import buttonBaseClasses, { getButtonBaseUtilityClass } from "./buttonBaseClasses.mjs";
|
|
@@ -20,13 +21,14 @@ const useUtilityClasses = ownerState => {
|
|
|
20
21
|
disabled,
|
|
21
22
|
focusVisible,
|
|
22
23
|
focusVisibleClassName,
|
|
24
|
+
suppressFocusVisible,
|
|
23
25
|
classes
|
|
24
26
|
} = ownerState;
|
|
25
27
|
const slots = {
|
|
26
|
-
root: ['root', disabled && 'disabled', focusVisible && 'focusVisible']
|
|
28
|
+
root: ['root', disabled && 'disabled', focusVisible && !suppressFocusVisible && 'focusVisible']
|
|
27
29
|
};
|
|
28
30
|
const composedClasses = composeClasses(slots, getButtonBaseUtilityClass, classes);
|
|
29
|
-
if (focusVisible && focusVisibleClassName) {
|
|
31
|
+
if (focusVisible && !suppressFocusVisible && focusVisibleClassName) {
|
|
30
32
|
composedClasses.root += ` ${focusVisibleClassName}`;
|
|
31
33
|
}
|
|
32
34
|
return composedClasses;
|
|
@@ -95,15 +97,25 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
|
|
|
95
97
|
disableTouchRipple = false,
|
|
96
98
|
focusRipple = false,
|
|
97
99
|
focusVisibleClassName,
|
|
100
|
+
/* eslint-disable react/prop-types */
|
|
101
|
+
// replaces internal handling in Chip, other components can opt-in individually to use this in the future
|
|
102
|
+
focusableWhenDisabled,
|
|
103
|
+
// escape hatch to suppress the focusVisible state and callback
|
|
104
|
+
// used by anchored <Menu>s to to suppress focus visible styling when opened with a pointer
|
|
105
|
+
suppressFocusVisible = false,
|
|
106
|
+
// private prop to allow native vs non-native button props to be resolved before mount
|
|
107
|
+
internalNativeButton: internalNativeButtonProp,
|
|
108
|
+
/* eslint-enable react/prop-types */
|
|
98
109
|
LinkComponent = 'a',
|
|
110
|
+
nativeButton: nativeButtonProp,
|
|
99
111
|
onBlur,
|
|
100
|
-
onClick,
|
|
112
|
+
onClick: onClickProp,
|
|
101
113
|
onContextMenu,
|
|
102
114
|
onDragLeave,
|
|
103
115
|
onFocus,
|
|
104
116
|
onFocusVisible,
|
|
105
|
-
onKeyDown,
|
|
106
|
-
onKeyUp,
|
|
117
|
+
onKeyDown: onKeyDownProp,
|
|
118
|
+
onKeyUp: onKeyUpProp,
|
|
107
119
|
onMouseDown,
|
|
108
120
|
onMouseLeave,
|
|
109
121
|
onMouseUp,
|
|
@@ -116,19 +128,68 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
|
|
|
116
128
|
type,
|
|
117
129
|
...other
|
|
118
130
|
} = props;
|
|
119
|
-
const
|
|
131
|
+
const isLink = Boolean(other.href || other.to);
|
|
132
|
+
const hasFormAction = Boolean(other.formAction);
|
|
133
|
+
let ComponentProp = component;
|
|
134
|
+
if (ComponentProp === 'button' && isLink) {
|
|
135
|
+
ComponentProp = LinkComponent;
|
|
136
|
+
}
|
|
137
|
+
const internalNativeButton = typeof ComponentProp === 'string' ? ComponentProp === 'button' : internalNativeButtonProp ?? false;
|
|
138
|
+
const nativeButton = nativeButtonProp ?? internalNativeButton;
|
|
120
139
|
const ripple = useLazyRipple();
|
|
121
140
|
const handleRippleRef = useForkRef(ripple.ref, touchRippleRef);
|
|
122
141
|
const [focusVisible, setFocusVisible] = React.useState(false);
|
|
123
|
-
if (disabled && focusVisible) {
|
|
142
|
+
if ((disabled || suppressFocusVisible) && focusVisible) {
|
|
124
143
|
setFocusVisible(false);
|
|
125
144
|
}
|
|
145
|
+
const handleBeforeKeyDown = useEventCallback(event => {
|
|
146
|
+
// Check if key is already down to avoid repeats being counted as multiple activations
|
|
147
|
+
if (focusRipple && !event.repeat && focusVisible && event.key === ' ') {
|
|
148
|
+
ripple.stop(event, () => {
|
|
149
|
+
ripple.start(event);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
const handleBeforeKeyUp = useEventCallback(event => {
|
|
154
|
+
// calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed
|
|
155
|
+
// https://codesandbox.io/p/sandbox/button-keyup-preventdefault-dn7f0
|
|
156
|
+
if (focusRipple && event.key === ' ' && focusVisible && !event.defaultPrevented) {
|
|
157
|
+
ripple.stop(event, () => {
|
|
158
|
+
ripple.pulsate(event);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
const {
|
|
163
|
+
getButtonProps,
|
|
164
|
+
rootRef: buttonRef
|
|
165
|
+
} = useButtonBase({
|
|
166
|
+
nativeButton,
|
|
167
|
+
nativeButtonProp,
|
|
168
|
+
internalNativeButton,
|
|
169
|
+
allowInferredHostMismatch: isLink || typeof ComponentProp === 'string',
|
|
170
|
+
disabled,
|
|
171
|
+
type,
|
|
172
|
+
hasFormAction,
|
|
173
|
+
tabIndex,
|
|
174
|
+
onBeforeKeyDown: handleBeforeKeyDown,
|
|
175
|
+
onBeforeKeyUp: handleBeforeKeyUp
|
|
176
|
+
});
|
|
177
|
+
const {
|
|
178
|
+
onClick,
|
|
179
|
+
onKeyDown,
|
|
180
|
+
onKeyUp,
|
|
181
|
+
...buttonProps
|
|
182
|
+
} = getButtonProps({
|
|
183
|
+
onClick: onClickProp,
|
|
184
|
+
onKeyDown: onKeyDownProp,
|
|
185
|
+
onKeyUp: onKeyUpProp
|
|
186
|
+
});
|
|
126
187
|
React.useImperativeHandle(action, () => ({
|
|
127
188
|
focusVisible: () => {
|
|
128
189
|
setFocusVisible(true);
|
|
129
190
|
buttonRef.current.focus();
|
|
130
191
|
}
|
|
131
|
-
}), []);
|
|
192
|
+
}), [buttonRef]);
|
|
132
193
|
const enableTouchRipple = ripple.shouldMount && !disableRipple && !disabled;
|
|
133
194
|
React.useEffect(() => {
|
|
134
195
|
if (focusVisible && focusRipple && !disableRipple) {
|
|
@@ -163,7 +224,7 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
|
|
|
163
224
|
if (!buttonRef.current) {
|
|
164
225
|
buttonRef.current = event.currentTarget;
|
|
165
226
|
}
|
|
166
|
-
if (isFocusVisible(event.target)) {
|
|
227
|
+
if (!suppressFocusVisible && isFocusVisible(event.target)) {
|
|
167
228
|
setFocusVisible(true);
|
|
168
229
|
if (onFocusVisible) {
|
|
169
230
|
onFocusVisible(event);
|
|
@@ -173,79 +234,13 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
|
|
|
173
234
|
onFocus(event);
|
|
174
235
|
}
|
|
175
236
|
});
|
|
176
|
-
const
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
return component && component !== 'button';
|
|
180
|
-
}
|
|
181
|
-
if (button.tagName === 'BUTTON') {
|
|
182
|
-
return false;
|
|
183
|
-
}
|
|
184
|
-
return !(button.tagName === 'A' && button.href);
|
|
185
|
-
};
|
|
186
|
-
const handleKeyDown = useEventCallback(event => {
|
|
187
|
-
if (disabled) {
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// Check if key is already down to avoid repeats being counted as multiple activations
|
|
192
|
-
if (focusRipple && !event.repeat && focusVisible && event.key === ' ') {
|
|
193
|
-
ripple.stop(event, () => {
|
|
194
|
-
ripple.start(event);
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ') {
|
|
198
|
-
event.preventDefault();
|
|
199
|
-
}
|
|
200
|
-
if (onKeyDown) {
|
|
201
|
-
onKeyDown(event);
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
// Keyboard accessibility for non interactive elements
|
|
205
|
-
if (event.target === event.currentTarget && isNonNativeButton() && event.key === 'Enter' && !disabled) {
|
|
206
|
-
event.preventDefault();
|
|
207
|
-
event.currentTarget.click();
|
|
208
|
-
}
|
|
209
|
-
});
|
|
210
|
-
const handleKeyUp = useEventCallback(event => {
|
|
237
|
+
const linkProps = {};
|
|
238
|
+
if (isLink) {
|
|
239
|
+
linkProps.tabIndex = disabled ? -1 : tabIndex;
|
|
211
240
|
if (disabled) {
|
|
212
|
-
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
// calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed
|
|
216
|
-
// https://codesandbox.io/p/sandbox/button-keyup-preventdefault-dn7f0
|
|
217
|
-
if (focusRipple && event.key === ' ' && focusVisible && !event.defaultPrevented) {
|
|
218
|
-
ripple.stop(event, () => {
|
|
219
|
-
ripple.pulsate(event);
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
if (onKeyUp) {
|
|
223
|
-
onKeyUp(event);
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
// Keyboard accessibility for non interactive elements
|
|
227
|
-
if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ' && !event.defaultPrevented && !disabled) {
|
|
228
|
-
event.currentTarget.click();
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
let ComponentProp = component;
|
|
232
|
-
if (ComponentProp === 'button' && (other.href || other.to)) {
|
|
233
|
-
ComponentProp = LinkComponent;
|
|
234
|
-
}
|
|
235
|
-
const buttonProps = {};
|
|
236
|
-
if (ComponentProp === 'button') {
|
|
237
|
-
const hasFormAttributes = !!other.formAction;
|
|
238
|
-
// ButtonBase was defaulting to type="button" when no type prop was provided, which prevented form submission and broke formAction functionality.
|
|
239
|
-
// The fix checks for form-related attributes and skips the default type to allow the browser's natural submit behavior (type="submit").
|
|
240
|
-
buttonProps.type = type === undefined && !hasFormAttributes ? 'button' : type;
|
|
241
|
-
buttonProps.disabled = disabled;
|
|
242
|
-
} else {
|
|
243
|
-
if (!other.href && !other.to) {
|
|
244
|
-
buttonProps.role = 'button';
|
|
245
|
-
}
|
|
246
|
-
if (disabled) {
|
|
247
|
-
buttonProps['aria-disabled'] = disabled;
|
|
241
|
+
linkProps['aria-disabled'] = disabled;
|
|
248
242
|
}
|
|
243
|
+
linkProps.type = type;
|
|
249
244
|
}
|
|
250
245
|
const handleRef = useForkRef(ref, buttonRef);
|
|
251
246
|
const ownerState = {
|
|
@@ -256,6 +251,7 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
|
|
|
256
251
|
disableRipple,
|
|
257
252
|
disableTouchRipple,
|
|
258
253
|
focusRipple,
|
|
254
|
+
suppressFocusVisible,
|
|
259
255
|
tabIndex,
|
|
260
256
|
focusVisible
|
|
261
257
|
};
|
|
@@ -268,8 +264,8 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
|
|
|
268
264
|
onClick: onClick,
|
|
269
265
|
onContextMenu: handleContextMenu,
|
|
270
266
|
onFocus: handleFocus,
|
|
271
|
-
onKeyDown:
|
|
272
|
-
onKeyUp:
|
|
267
|
+
onKeyDown: onKeyDown,
|
|
268
|
+
onKeyUp: onKeyUp,
|
|
273
269
|
onMouseDown: handleMouseDown,
|
|
274
270
|
onMouseLeave: handleMouseLeave,
|
|
275
271
|
onMouseUp: handleMouseUp,
|
|
@@ -278,9 +274,7 @@ const ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, re
|
|
|
278
274
|
onTouchMove: handleTouchMove,
|
|
279
275
|
onTouchStart: handleTouchStart,
|
|
280
276
|
ref: handleRef,
|
|
281
|
-
|
|
282
|
-
type: type,
|
|
283
|
-
...buttonProps,
|
|
277
|
+
...(isLink ? linkProps : buttonProps),
|
|
284
278
|
...other,
|
|
285
279
|
children: [children, enableTouchRipple ? /*#__PURE__*/_jsx(TouchRipple, {
|
|
286
280
|
ref: handleRippleRef,
|
|
@@ -378,6 +372,11 @@ process.env.NODE_ENV !== "production" ? ButtonBase.propTypes /* remove-proptypes
|
|
|
378
372
|
* @default 'a'
|
|
379
373
|
*/
|
|
380
374
|
LinkComponent: PropTypes.elementType,
|
|
375
|
+
/**
|
|
376
|
+
* Whether the custom component is expected to render a native `<button>` element
|
|
377
|
+
* when passing a React component to the `component` or `slots` prop.
|
|
378
|
+
*/
|
|
379
|
+
nativeButton: PropTypes.bool,
|
|
381
380
|
/**
|
|
382
381
|
* @ignore
|
|
383
382
|
*/
|