@mui/material 9.0.0-beta.1 → 9.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Accordion/Accordion.d.mts +3 -3
- package/Accordion/Accordion.d.ts +3 -3
- 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/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/Autocomplete/Autocomplete.js +65 -11
- package/Autocomplete/Autocomplete.mjs +65 -11
- package/Avatar/Avatar.d.mts +2 -2
- package/Avatar/Avatar.d.ts +2 -2
- package/Avatar/Avatar.js +4 -0
- package/Avatar/Avatar.mjs +4 -0
- package/AvatarGroup/AvatarGroup.d.mts +2 -2
- package/AvatarGroup/AvatarGroup.d.ts +2 -2
- package/Backdrop/Backdrop.d.mts +3 -3
- package/Backdrop/Backdrop.d.ts +3 -3
- package/Badge/Badge.d.mts +3 -3
- package/Badge/Badge.d.ts +3 -3
- package/Badge/Badge.js +3 -0
- package/Badge/Badge.mjs +3 -0
- 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/Box/Box.d.mts +3 -3
- package/Box/Box.d.ts +3 -3
- 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 +19 -2
- package/Button/Button.mjs +19 -2
- package/ButtonBase/ButtonBase.d.mts +9 -2
- package/ButtonBase/ButtonBase.d.ts +9 -2
- package/ButtonBase/ButtonBase.js +5 -2
- package/ButtonBase/ButtonBase.mjs +5 -2
- package/ButtonGroup/ButtonGroup.d.mts +2 -2
- package/ButtonGroup/ButtonGroup.d.ts +2 -2
- package/CHANGELOG.md +160 -1245
- 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/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/Checkbox/Checkbox.js +2 -1
- package/Checkbox/Checkbox.mjs +2 -1
- package/Chip/Chip.d.mts +2 -2
- package/Chip/Chip.d.ts +2 -2
- package/CircularProgress/CircularProgress.d.mts +14 -4
- package/CircularProgress/CircularProgress.d.ts +14 -4
- package/CircularProgress/CircularProgress.js +33 -6
- package/CircularProgress/CircularProgress.mjs +33 -6
- package/ClickAwayListener/ClickAwayListener.d.mts +3 -3
- package/ClickAwayListener/ClickAwayListener.d.ts +3 -3
- package/ClickAwayListener/ClickAwayListener.js +6 -9
- package/ClickAwayListener/ClickAwayListener.mjs +6 -9
- 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 +3 -3
- package/Dialog/Dialog.d.ts +3 -3
- package/Dialog/Dialog.js +11 -6
- package/Dialog/Dialog.mjs +11 -6
- 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/Drawer/Drawer.d.mts +3 -3
- package/Drawer/Drawer.d.ts +3 -3
- package/Drawer/Drawer.js +19 -8
- package/Drawer/Drawer.mjs +19 -8
- package/Fab/Fab.d.mts +3 -3
- package/Fab/Fab.d.ts +3 -3
- package/Fab/Fab.js +7 -1
- package/Fab/Fab.mjs +7 -1
- 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 +7 -3
- package/FilledInput/FilledInput.d.ts +7 -3
- package/FilledInput/FilledInput.js +18 -20
- package/FilledInput/FilledInput.mjs +18 -20
- package/FormControl/FormControl.d.mts +7 -7
- package/FormControl/FormControl.d.ts +7 -7
- package/FormControl/useFormControl.d.mts +12 -2
- package/FormControl/useFormControl.d.ts +12 -2
- package/FormControl/useFormControl.js +13 -0
- package/FormControl/useFormControl.mjs +12 -0
- package/FormControlLabel/FormControlLabel.d.mts +4 -4
- package/FormControlLabel/FormControlLabel.d.ts +4 -4
- package/FormControlLabel/FormControlLabel.js +5 -8
- package/FormControlLabel/FormControlLabel.mjs +5 -8
- package/FormGroup/FormGroup.d.mts +3 -3
- package/FormGroup/FormGroup.d.ts +3 -3
- package/FormGroup/FormGroup.js +2 -5
- package/FormGroup/FormGroup.mjs +2 -5
- package/FormHelperText/FormHelperText.d.mts +3 -3
- package/FormHelperText/FormHelperText.d.ts +3 -3
- package/FormHelperText/FormHelperText.js +2 -5
- package/FormHelperText/FormHelperText.mjs +2 -5
- package/FormLabel/FormLabel.d.mts +5 -5
- package/FormLabel/FormLabel.d.ts +5 -5
- package/FormLabel/FormLabel.js +2 -5
- package/FormLabel/FormLabel.mjs +2 -5
- package/GlobalStyles/GlobalStyles.d.mts +2 -2
- package/GlobalStyles/GlobalStyles.d.ts +2 -2
- package/Grid/Grid.d.mts +2 -2
- package/Grid/Grid.d.ts +2 -2
- package/Grid/Grid.js +2 -2
- package/Grid/Grid.mjs +2 -2
- 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 -8
- package/IconButton/IconButton.mjs +1 -8
- 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 +7 -3
- package/Input/Input.d.ts +7 -3
- package/Input/Input.js +6 -0
- package/Input/Input.mjs +6 -0
- package/InputAdornment/InputAdornment.d.mts +2 -2
- package/InputAdornment/InputAdornment.d.ts +2 -2
- package/InputBase/InputBase.d.mts +4 -3
- package/InputBase/InputBase.d.ts +4 -3
- package/InputBase/InputBase.js +50 -15
- package/InputBase/InputBase.mjs +50 -15
- package/InputLabel/InputLabel.d.mts +4 -4
- package/InputLabel/InputLabel.d.ts +4 -4
- package/InputLabel/InputLabel.js +5 -8
- package/InputLabel/InputLabel.mjs +5 -8
- package/LinearProgress/LinearProgress.d.mts +14 -4
- package/LinearProgress/LinearProgress.d.ts +14 -4
- package/LinearProgress/LinearProgress.js +42 -10
- package/LinearProgress/LinearProgress.mjs +42 -10
- 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/List/List.js +2 -1
- package/List/List.mjs +2 -1
- 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 +7 -1
- package/ListItemButton/ListItemButton.mjs +7 -1
- package/ListItemIcon/ListItemIcon.d.mts +3 -3
- package/ListItemIcon/ListItemIcon.d.ts +3 -3
- 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/Menu/Menu.d.mts +4 -4
- package/Menu/Menu.d.ts +4 -4
- package/MenuItem/MenuItem.d.mts +3 -3
- package/MenuItem/MenuItem.d.ts +3 -3
- package/MenuItem/MenuItem.js +7 -1
- package/MenuItem/MenuItem.mjs +7 -1
- package/MenuList/MenuList.d.mts +4 -4
- package/MenuList/MenuList.d.ts +4 -4
- package/MenuList/MenuList.js +2 -1
- package/MenuList/MenuList.mjs +2 -1
- 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/NativeSelect/NativeSelect.js +2 -5
- package/NativeSelect/NativeSelect.mjs +2 -5
- 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/OutlinedInput/OutlinedInput.js +13 -23
- package/OutlinedInput/OutlinedInput.mjs +13 -23
- package/Pagination/Pagination.d.mts +2 -2
- package/Pagination/Pagination.d.ts +2 -2
- package/PaginationItem/PaginationItem.d.mts +3 -3
- package/PaginationItem/PaginationItem.d.ts +3 -3
- 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 -3
- package/PigmentContainer/PigmentContainer.mjs +2 -3
- package/PigmentGrid/PigmentGrid.d.mts +2 -2
- package/PigmentGrid/PigmentGrid.d.ts +2 -2
- package/PigmentGrid/PigmentGrid.js +2 -2
- package/PigmentGrid/PigmentGrid.mjs +2 -2
- 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 +4 -4
- package/Popover/Popover.d.ts +4 -4
- package/Popper/BasePopper.js +23 -1
- package/Popper/BasePopper.mjs +23 -1
- 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/Select/Select.js +2 -5
- package/Select/Select.mjs +2 -5
- package/Select/SelectInput.js +164 -2
- package/Select/SelectInput.mjs +164 -2
- 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 +73 -50
- package/Slide/Slide.mjs +74 -52
- package/Slider/Slider.d.mts +4 -4
- package/Slider/Slider.d.ts +4 -4
- package/Slider/Slider.js +11 -2
- package/Slider/Slider.mjs +11 -2
- package/Slider/useSlider.d.mts +1 -1
- package/Slider/useSlider.d.ts +1 -1
- package/Slider/useSlider.js +236 -209
- package/Slider/useSlider.mjs +236 -209
- package/Slider/useSlider.types.d.mts +2 -2
- package/Slider/useSlider.types.d.ts +2 -2
- package/Snackbar/Snackbar.d.mts +2 -2
- package/Snackbar/Snackbar.d.ts +2 -2
- package/SnackbarContent/SnackbarContent.d.mts +3 -3
- package/SnackbarContent/SnackbarContent.d.ts +3 -3
- package/SpeedDial/SpeedDial.d.mts +2 -2
- package/SpeedDial/SpeedDial.d.ts +2 -2
- 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/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 +2 -2
- package/StepContent/StepContent.d.ts +2 -2
- 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/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 +7 -6
- package/SwipeableDrawer/SwipeableDrawer.mjs +7 -6
- package/Switch/Switch.d.mts +4 -4
- package/Switch/Switch.d.ts +4 -4
- package/Switch/Switch.js +9 -4
- package/Switch/Switch.mjs +9 -4
- package/Tab/Tab.d.mts +3 -3
- package/Tab/Tab.d.ts +3 -3
- package/TabScrollButton/TabScrollButton.d.mts +2 -2
- package/TabScrollButton/TabScrollButton.d.ts +2 -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 +1 -2
- package/TableSortLabel/TableSortLabel.mjs +1 -2
- package/Tabs/ScrollbarSize.js +2 -1
- package/Tabs/ScrollbarSize.mjs +2 -1
- package/Tabs/Tabs.d.mts +2 -2
- package/Tabs/Tabs.d.ts +2 -2
- package/Tabs/Tabs.js +2 -1
- package/Tabs/Tabs.mjs +2 -1
- 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/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 +2 -2
- package/Tooltip/Tooltip.d.ts +2 -2
- package/Tooltip/Tooltip.js +26 -108
- package/Tooltip/Tooltip.mjs +26 -108
- package/Typography/Typography.d.mts +4 -4
- package/Typography/Typography.d.ts +4 -4
- package/Unstable_TrapFocus/FocusTrap.js +18 -14
- package/Unstable_TrapFocus/FocusTrap.mjs +18 -14
- 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/package.json +7 -7
- package/styles/createThemeNoVars.js +1 -1
- package/styles/createThemeNoVars.mjs +1 -1
- package/styles/responsiveFontSizes.js +19 -8
- package/styles/responsiveFontSizes.mjs +19 -8
- package/styles/useThemeProps.d.mts +3 -3
- package/styles/useThemeProps.d.ts +3 -3
- package/transitions/utils.d.mts +24 -0
- package/transitions/utils.d.ts +24 -0
- package/transitions/utils.js +91 -0
- package/transitions/utils.mjs +88 -0
- package/useAutocomplete/useAutocomplete.d.mts +4 -5
- package/useAutocomplete/useAutocomplete.d.ts +4 -5
- package/useAutocomplete/useAutocomplete.js +166 -53
- package/useAutocomplete/useAutocomplete.mjs +166 -53
- package/utils/contains.d.mts +2 -0
- package/utils/contains.d.ts +2 -0
- package/utils/contains.js +9 -0
- package/utils/contains.mjs +2 -0
- package/utils/focusable.d.mts +7 -0
- package/utils/focusable.d.ts +7 -0
- package/utils/focusable.js +20 -0
- package/utils/focusable.mjs +13 -0
- package/utils/getEventTarget.d.mts +2 -0
- package/utils/getEventTarget.d.ts +2 -0
- package/utils/getEventTarget.js +9 -0
- package/utils/getEventTarget.mjs +2 -0
- package/utils/mergeSlotProps.js +2 -8
- package/utils/mergeSlotProps.mjs +1 -8
- package/version/index.js +3 -3
- package/version/index.mjs +3 -3
- package/FormControl/formControlState.js +0 -21
- package/FormControl/formControlState.mjs +0 -15
package/Select/SelectInput.js
CHANGED
|
@@ -15,12 +15,15 @@ var _clsx = _interopRequireDefault(require("clsx"));
|
|
|
15
15
|
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
|
|
16
16
|
var _useId = _interopRequireDefault(require("@mui/utils/useId"));
|
|
17
17
|
var _refType = _interopRequireDefault(require("@mui/utils/refType"));
|
|
18
|
+
var _useTimeout = _interopRequireDefault(require("@mui/utils/useTimeout"));
|
|
18
19
|
var _ownerDocument = _interopRequireDefault(require("../utils/ownerDocument"));
|
|
19
20
|
var _Menu = _interopRequireDefault(require("../Menu/Menu"));
|
|
20
21
|
var _NativeSelectInput = require("../NativeSelect/NativeSelectInput");
|
|
21
22
|
var _utils = require("../InputBase/utils");
|
|
22
23
|
var _zeroStyled = require("../zero-styled");
|
|
23
24
|
var _slotShouldForwardProp = _interopRequireDefault(require("../styles/slotShouldForwardProp"));
|
|
25
|
+
var _useEnhancedEffect = _interopRequireDefault(require("../utils/useEnhancedEffect"));
|
|
26
|
+
var _useEventCallback = _interopRequireDefault(require("../utils/useEventCallback"));
|
|
24
27
|
var _useForkRef = _interopRequireDefault(require("../utils/useForkRef"));
|
|
25
28
|
var _useControlled = _interopRequireDefault(require("../utils/useControlled"));
|
|
26
29
|
var _selectClasses = _interopRequireWildcard(require("./selectClasses"));
|
|
@@ -28,6 +31,37 @@ var _utils2 = require("./utils");
|
|
|
28
31
|
var _SelectFocusSourceContext = require("./utils/SelectFocusSourceContext");
|
|
29
32
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
30
33
|
var _span;
|
|
34
|
+
const OPENING_MOUSE_UP_BOUNDARY_OFFSET = 2;
|
|
35
|
+
// The initial mouseup may land on an item when the menu opens over the trigger.
|
|
36
|
+
const SELECTED_MOUSE_UP_DELAY = 400;
|
|
37
|
+
const UNSELECTED_MOUSE_UP_DELAY = 200;
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Returns true when a native mouse event should be treated as happening inside
|
|
41
|
+
* the element, even if a portal or backdrop retargeted the event away from it.
|
|
42
|
+
*
|
|
43
|
+
* Select uses this for the opening mouseup: when the menu opens over the
|
|
44
|
+
* trigger, the release can target the backdrop or portaled menu even though the
|
|
45
|
+
* pointer is still inside the trigger or menu bounds.
|
|
46
|
+
*/
|
|
47
|
+
function isMouseEventInsideElement(event, element) {
|
|
48
|
+
if (!element) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
const eventPath = event.composedPath();
|
|
52
|
+
if (eventPath.includes(element)) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
if (event.target?.nodeType && element.contains(event.target)) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
const rect = element.getBoundingClientRect();
|
|
59
|
+
if (rect.width === 0 && rect.height === 0) {
|
|
60
|
+
// Hidden or transition-mounted elements do not have useful bounds to hit-test.
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
return event.clientX >= rect.left - OPENING_MOUSE_UP_BOUNDARY_OFFSET && event.clientX <= rect.right + OPENING_MOUSE_UP_BOUNDARY_OFFSET && event.clientY >= rect.top - OPENING_MOUSE_UP_BOUNDARY_OFFSET && event.clientY <= rect.bottom + OPENING_MOUSE_UP_BOUNDARY_OFFSET;
|
|
64
|
+
}
|
|
31
65
|
const SelectSelect = (0, _zeroStyled.styled)(_NativeSelectInput.StyledSelectSelect, {
|
|
32
66
|
name: 'MuiSelect',
|
|
33
67
|
slot: 'Select',
|
|
@@ -154,6 +188,17 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
154
188
|
});
|
|
155
189
|
const inputRef = React.useRef(null);
|
|
156
190
|
const displayRef = React.useRef(null);
|
|
191
|
+
const paperRef = React.useRef(null);
|
|
192
|
+
const openRef = React.useRef(false);
|
|
193
|
+
const hasSelectedItemInListRef = React.useRef(false);
|
|
194
|
+
const openingMouseUpListenerCleanupRef = React.useRef(null);
|
|
195
|
+
const didPointerDownOnItemRef = React.useRef(false);
|
|
196
|
+
const selectionRef = React.useRef({
|
|
197
|
+
allowSelectedMouseUp: false,
|
|
198
|
+
allowUnselectedMouseUp: false
|
|
199
|
+
});
|
|
200
|
+
const selectedMouseUpTimer = (0, _useTimeout.default)();
|
|
201
|
+
const unselectedMouseUpTimer = (0, _useTimeout.default)();
|
|
157
202
|
const [displayNode, setDisplayNode] = React.useState(null);
|
|
158
203
|
const {
|
|
159
204
|
current: isOpenControlled
|
|
@@ -176,6 +221,42 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
176
221
|
value
|
|
177
222
|
}), [value]);
|
|
178
223
|
const open = displayNode !== null && openState;
|
|
224
|
+
(0, _useEnhancedEffect.default)(() => {
|
|
225
|
+
openRef.current = open;
|
|
226
|
+
}, [open]);
|
|
227
|
+
const clearSelectionTimers = React.useCallback(() => {
|
|
228
|
+
selectedMouseUpTimer.clear();
|
|
229
|
+
unselectedMouseUpTimer.clear();
|
|
230
|
+
}, [selectedMouseUpTimer, unselectedMouseUpTimer]);
|
|
231
|
+
const resetMouseUpSelection = React.useCallback(() => {
|
|
232
|
+
clearSelectionTimers();
|
|
233
|
+
didPointerDownOnItemRef.current = false;
|
|
234
|
+
selectionRef.current = {
|
|
235
|
+
allowSelectedMouseUp: false,
|
|
236
|
+
allowUnselectedMouseUp: false
|
|
237
|
+
};
|
|
238
|
+
}, [clearSelectionTimers]);
|
|
239
|
+
const clearOpeningMouseUpListener = React.useCallback(() => {
|
|
240
|
+
if (openingMouseUpListenerCleanupRef.current) {
|
|
241
|
+
openingMouseUpListenerCleanupRef.current();
|
|
242
|
+
openingMouseUpListenerCleanupRef.current = null;
|
|
243
|
+
}
|
|
244
|
+
}, []);
|
|
245
|
+
React.useEffect(() => {
|
|
246
|
+
if (!open) {
|
|
247
|
+
resetMouseUpSelection();
|
|
248
|
+
clearOpeningMouseUpListener();
|
|
249
|
+
}
|
|
250
|
+
}, [open, resetMouseUpSelection, clearOpeningMouseUpListener]);
|
|
251
|
+
|
|
252
|
+
// Keep unmount cleanup separate from the `open` effect. Effect cleanups also run
|
|
253
|
+
// before the next effect, which would clear the opening mouseup listener while opening.
|
|
254
|
+
React.useEffect(() => {
|
|
255
|
+
return () => {
|
|
256
|
+
resetMouseUpSelection();
|
|
257
|
+
clearOpeningMouseUpListener();
|
|
258
|
+
};
|
|
259
|
+
}, [resetMouseUpSelection, clearOpeningMouseUpListener]);
|
|
179
260
|
React.useEffect(() => {
|
|
180
261
|
if (!open || !anchorElement || autoWidth) {
|
|
181
262
|
return undefined;
|
|
@@ -226,7 +307,11 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
226
307
|
}
|
|
227
308
|
return undefined;
|
|
228
309
|
}, [labelId]);
|
|
229
|
-
const update = (openParam, event) => {
|
|
310
|
+
const update = (0, _useEventCallback.default)((openParam, event) => {
|
|
311
|
+
if (!openParam) {
|
|
312
|
+
resetMouseUpSelection();
|
|
313
|
+
clearOpeningMouseUpListener();
|
|
314
|
+
}
|
|
230
315
|
if (openParam) {
|
|
231
316
|
setOpenInteractionType((0, _utils2.getOpenInteractionType)(event));
|
|
232
317
|
if (onOpen) {
|
|
@@ -239,9 +324,33 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
239
324
|
}
|
|
240
325
|
}
|
|
241
326
|
if (!isOpenControlled) {
|
|
327
|
+
openRef.current = openParam;
|
|
242
328
|
setMenuMinWidthState(autoWidth ? null : anchorElement.clientWidth);
|
|
243
329
|
setOpenState(openParam);
|
|
244
330
|
}
|
|
331
|
+
});
|
|
332
|
+
const scheduleMouseUpSelection = () => {
|
|
333
|
+
resetMouseUpSelection();
|
|
334
|
+
|
|
335
|
+
// When there is no selected item in the list, a mousedown
|
|
336
|
+
// on the trigger followed by a quick mouseup over the first option can accidentally select
|
|
337
|
+
// within 200ms. Delay unselected mouseup to match the safer 400ms window.
|
|
338
|
+
if (!hasSelectedItemInListRef.current) {
|
|
339
|
+
selectedMouseUpTimer.start(SELECTED_MOUSE_UP_DELAY, () => {
|
|
340
|
+
selectionRef.current.allowSelectedMouseUp = true;
|
|
341
|
+
selectionRef.current.allowUnselectedMouseUp = true;
|
|
342
|
+
});
|
|
343
|
+
} else {
|
|
344
|
+
// mousedown -> move to unselected item -> mouseup should not select within 200ms.
|
|
345
|
+
unselectedMouseUpTimer.start(UNSELECTED_MOUSE_UP_DELAY, () => {
|
|
346
|
+
selectionRef.current.allowUnselectedMouseUp = true;
|
|
347
|
+
|
|
348
|
+
// mousedown -> mouseup on selected item should not select within 400ms.
|
|
349
|
+
selectedMouseUpTimer.start(UNSELECTED_MOUSE_UP_DELAY, () => {
|
|
350
|
+
selectionRef.current.allowSelectedMouseUp = true;
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
}
|
|
245
354
|
};
|
|
246
355
|
const handleMouseDown = event => {
|
|
247
356
|
onMouseDown?.(event);
|
|
@@ -252,6 +361,29 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
252
361
|
// Hijack the default focus behavior.
|
|
253
362
|
event.preventDefault();
|
|
254
363
|
displayRef.current.focus();
|
|
364
|
+
const doc = (0, _ownerDocument.default)(event.currentTarget);
|
|
365
|
+
scheduleMouseUpSelection();
|
|
366
|
+
clearOpeningMouseUpListener();
|
|
367
|
+
const handleMouseUp = mouseEvent => {
|
|
368
|
+
openingMouseUpListenerCleanupRef.current = null;
|
|
369
|
+
if (!displayRef.current) {
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
if (isMouseEventInsideElement(mouseEvent, displayRef.current) || isMouseEventInsideElement(mouseEvent, paperRef.current)) {
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
if (!openRef.current && isOpenControlled) {
|
|
376
|
+
return;
|
|
377
|
+
}
|
|
378
|
+
update(false, mouseEvent);
|
|
379
|
+
};
|
|
380
|
+
doc.addEventListener('mouseup', handleMouseUp, {
|
|
381
|
+
capture: true,
|
|
382
|
+
once: true
|
|
383
|
+
});
|
|
384
|
+
openingMouseUpListenerCleanupRef.current = () => {
|
|
385
|
+
doc.removeEventListener('mouseup', handleMouseUp, true);
|
|
386
|
+
};
|
|
255
387
|
update(true, event);
|
|
256
388
|
};
|
|
257
389
|
const handleClose = event => {
|
|
@@ -271,6 +403,7 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
271
403
|
}
|
|
272
404
|
};
|
|
273
405
|
const handleItemClick = child => event => {
|
|
406
|
+
didPointerDownOnItemRef.current = false;
|
|
274
407
|
let newValue;
|
|
275
408
|
|
|
276
409
|
// We use the tabindex attribute to signal the available options.
|
|
@@ -314,6 +447,19 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
314
447
|
update(false, event);
|
|
315
448
|
}
|
|
316
449
|
};
|
|
450
|
+
const handleItemMouseUp = (child, selected) => event => {
|
|
451
|
+
child.props.onMouseUp?.(event);
|
|
452
|
+
if (didPointerDownOnItemRef.current) {
|
|
453
|
+
didPointerDownOnItemRef.current = false;
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
const disallowSelectedMouseUp = !selectionRef.current.allowSelectedMouseUp && selected;
|
|
457
|
+
const disallowUnselectedMouseUp = !selectionRef.current.allowUnselectedMouseUp && !selected;
|
|
458
|
+
if (disallowSelectedMouseUp || disallowUnselectedMouseUp) {
|
|
459
|
+
return;
|
|
460
|
+
}
|
|
461
|
+
event.currentTarget.click();
|
|
462
|
+
};
|
|
317
463
|
const handleKeyDown = event => {
|
|
318
464
|
if (!readOnly) {
|
|
319
465
|
const validKeys = [' ', 'ArrowUp', 'ArrowDown',
|
|
@@ -387,7 +533,16 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
387
533
|
}
|
|
388
534
|
return /*#__PURE__*/React.cloneElement(child, {
|
|
389
535
|
'aria-selected': selected ? 'true' : 'false',
|
|
536
|
+
onMouseDown: event => {
|
|
537
|
+
didPointerDownOnItemRef.current = true;
|
|
538
|
+
child.props.onMouseDown?.(event);
|
|
539
|
+
},
|
|
540
|
+
onPointerDown: event => {
|
|
541
|
+
didPointerDownOnItemRef.current = true;
|
|
542
|
+
child.props.onPointerDown?.(event);
|
|
543
|
+
},
|
|
390
544
|
onClick: handleItemClick(child),
|
|
545
|
+
onMouseUp: handleItemMouseUp(child, selected),
|
|
391
546
|
onKeyUp: event => {
|
|
392
547
|
if (event.key === ' ') {
|
|
393
548
|
// otherwise our MenuItems dispatches a click event
|
|
@@ -406,6 +561,11 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
406
561
|
'data-value': child.props.value // Instead, we provide it as a data attribute.
|
|
407
562
|
});
|
|
408
563
|
});
|
|
564
|
+
|
|
565
|
+
// Keep the opening mouseup guard current without mutating refs during render.
|
|
566
|
+
(0, _useEnhancedEffect.default)(() => {
|
|
567
|
+
hasSelectedItemInListRef.current = foundMatch;
|
|
568
|
+
}, [foundMatch]);
|
|
409
569
|
if (process.env.NODE_ENV !== 'production') {
|
|
410
570
|
// TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler
|
|
411
571
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
@@ -455,6 +615,7 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
455
615
|
};
|
|
456
616
|
const classes = useUtilityClasses(ownerState);
|
|
457
617
|
const menuPaperSlotProps = typeof MenuProps.slotProps?.paper === 'function' ? MenuProps.slotProps.paper(ownerState) : MenuProps.slotProps?.paper;
|
|
618
|
+
const handlePaperRef = (0, _useForkRef.default)(menuPaperSlotProps?.ref, paperRef);
|
|
458
619
|
const menuListSlotProps = typeof MenuProps.slotProps?.list === 'function' ? MenuProps.slotProps.list(ownerState) : MenuProps.slotProps?.list;
|
|
459
620
|
const listboxId = (0, _useId.default)();
|
|
460
621
|
const nativeInputId = (0, _useId.default)();
|
|
@@ -469,7 +630,7 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
469
630
|
"aria-expanded": open ? 'true' : 'false',
|
|
470
631
|
"aria-haspopup": "listbox",
|
|
471
632
|
"aria-label": ariaLabel,
|
|
472
|
-
"aria-labelledby":
|
|
633
|
+
"aria-labelledby": labelId,
|
|
473
634
|
"aria-describedby": ariaDescribedby,
|
|
474
635
|
"aria-required": required ? 'true' : undefined,
|
|
475
636
|
"aria-invalid": error ? 'true' : undefined,
|
|
@@ -536,6 +697,7 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
536
697
|
},
|
|
537
698
|
paper: {
|
|
538
699
|
...menuPaperSlotProps,
|
|
700
|
+
ref: handlePaperRef,
|
|
539
701
|
style: {
|
|
540
702
|
minWidth: menuMinWidth,
|
|
541
703
|
...menuPaperSlotProps?.style
|
package/Select/SelectInput.mjs
CHANGED
|
@@ -9,18 +9,52 @@ import clsx from 'clsx';
|
|
|
9
9
|
import composeClasses from '@mui/utils/composeClasses';
|
|
10
10
|
import useId from '@mui/utils/useId';
|
|
11
11
|
import refType from '@mui/utils/refType';
|
|
12
|
+
import useTimeout from '@mui/utils/useTimeout';
|
|
12
13
|
import ownerDocument from "../utils/ownerDocument.mjs";
|
|
13
14
|
import Menu from "../Menu/Menu.mjs";
|
|
14
15
|
import { StyledSelectSelect, StyledSelectIcon } from "../NativeSelect/NativeSelectInput.mjs";
|
|
15
16
|
import { isFilled } from "../InputBase/utils.mjs";
|
|
16
17
|
import { styled } from "../zero-styled/index.mjs";
|
|
17
18
|
import slotShouldForwardProp from "../styles/slotShouldForwardProp.mjs";
|
|
19
|
+
import useEnhancedEffect from "../utils/useEnhancedEffect.mjs";
|
|
20
|
+
import useEventCallback from "../utils/useEventCallback.mjs";
|
|
18
21
|
import useForkRef from "../utils/useForkRef.mjs";
|
|
19
22
|
import useControlled from "../utils/useControlled.mjs";
|
|
20
23
|
import selectClasses, { getSelectUtilityClasses } from "./selectClasses.mjs";
|
|
21
24
|
import { areEqualValues, isEmpty, getOpenInteractionType } from "./utils/index.mjs";
|
|
22
25
|
import { SelectFocusSourceProvider } from "./utils/SelectFocusSourceContext.mjs";
|
|
23
26
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
27
|
+
const OPENING_MOUSE_UP_BOUNDARY_OFFSET = 2;
|
|
28
|
+
// The initial mouseup may land on an item when the menu opens over the trigger.
|
|
29
|
+
const SELECTED_MOUSE_UP_DELAY = 400;
|
|
30
|
+
const UNSELECTED_MOUSE_UP_DELAY = 200;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Returns true when a native mouse event should be treated as happening inside
|
|
34
|
+
* the element, even if a portal or backdrop retargeted the event away from it.
|
|
35
|
+
*
|
|
36
|
+
* Select uses this for the opening mouseup: when the menu opens over the
|
|
37
|
+
* trigger, the release can target the backdrop or portaled menu even though the
|
|
38
|
+
* pointer is still inside the trigger or menu bounds.
|
|
39
|
+
*/
|
|
40
|
+
function isMouseEventInsideElement(event, element) {
|
|
41
|
+
if (!element) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
const eventPath = event.composedPath();
|
|
45
|
+
if (eventPath.includes(element)) {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
if (event.target?.nodeType && element.contains(event.target)) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
const rect = element.getBoundingClientRect();
|
|
52
|
+
if (rect.width === 0 && rect.height === 0) {
|
|
53
|
+
// Hidden or transition-mounted elements do not have useful bounds to hit-test.
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return event.clientX >= rect.left - OPENING_MOUSE_UP_BOUNDARY_OFFSET && event.clientX <= rect.right + OPENING_MOUSE_UP_BOUNDARY_OFFSET && event.clientY >= rect.top - OPENING_MOUSE_UP_BOUNDARY_OFFSET && event.clientY <= rect.bottom + OPENING_MOUSE_UP_BOUNDARY_OFFSET;
|
|
57
|
+
}
|
|
24
58
|
const SelectSelect = styled(StyledSelectSelect, {
|
|
25
59
|
name: 'MuiSelect',
|
|
26
60
|
slot: 'Select',
|
|
@@ -147,6 +181,17 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
147
181
|
});
|
|
148
182
|
const inputRef = React.useRef(null);
|
|
149
183
|
const displayRef = React.useRef(null);
|
|
184
|
+
const paperRef = React.useRef(null);
|
|
185
|
+
const openRef = React.useRef(false);
|
|
186
|
+
const hasSelectedItemInListRef = React.useRef(false);
|
|
187
|
+
const openingMouseUpListenerCleanupRef = React.useRef(null);
|
|
188
|
+
const didPointerDownOnItemRef = React.useRef(false);
|
|
189
|
+
const selectionRef = React.useRef({
|
|
190
|
+
allowSelectedMouseUp: false,
|
|
191
|
+
allowUnselectedMouseUp: false
|
|
192
|
+
});
|
|
193
|
+
const selectedMouseUpTimer = useTimeout();
|
|
194
|
+
const unselectedMouseUpTimer = useTimeout();
|
|
150
195
|
const [displayNode, setDisplayNode] = React.useState(null);
|
|
151
196
|
const {
|
|
152
197
|
current: isOpenControlled
|
|
@@ -169,6 +214,42 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
169
214
|
value
|
|
170
215
|
}), [value]);
|
|
171
216
|
const open = displayNode !== null && openState;
|
|
217
|
+
useEnhancedEffect(() => {
|
|
218
|
+
openRef.current = open;
|
|
219
|
+
}, [open]);
|
|
220
|
+
const clearSelectionTimers = React.useCallback(() => {
|
|
221
|
+
selectedMouseUpTimer.clear();
|
|
222
|
+
unselectedMouseUpTimer.clear();
|
|
223
|
+
}, [selectedMouseUpTimer, unselectedMouseUpTimer]);
|
|
224
|
+
const resetMouseUpSelection = React.useCallback(() => {
|
|
225
|
+
clearSelectionTimers();
|
|
226
|
+
didPointerDownOnItemRef.current = false;
|
|
227
|
+
selectionRef.current = {
|
|
228
|
+
allowSelectedMouseUp: false,
|
|
229
|
+
allowUnselectedMouseUp: false
|
|
230
|
+
};
|
|
231
|
+
}, [clearSelectionTimers]);
|
|
232
|
+
const clearOpeningMouseUpListener = React.useCallback(() => {
|
|
233
|
+
if (openingMouseUpListenerCleanupRef.current) {
|
|
234
|
+
openingMouseUpListenerCleanupRef.current();
|
|
235
|
+
openingMouseUpListenerCleanupRef.current = null;
|
|
236
|
+
}
|
|
237
|
+
}, []);
|
|
238
|
+
React.useEffect(() => {
|
|
239
|
+
if (!open) {
|
|
240
|
+
resetMouseUpSelection();
|
|
241
|
+
clearOpeningMouseUpListener();
|
|
242
|
+
}
|
|
243
|
+
}, [open, resetMouseUpSelection, clearOpeningMouseUpListener]);
|
|
244
|
+
|
|
245
|
+
// Keep unmount cleanup separate from the `open` effect. Effect cleanups also run
|
|
246
|
+
// before the next effect, which would clear the opening mouseup listener while opening.
|
|
247
|
+
React.useEffect(() => {
|
|
248
|
+
return () => {
|
|
249
|
+
resetMouseUpSelection();
|
|
250
|
+
clearOpeningMouseUpListener();
|
|
251
|
+
};
|
|
252
|
+
}, [resetMouseUpSelection, clearOpeningMouseUpListener]);
|
|
172
253
|
React.useEffect(() => {
|
|
173
254
|
if (!open || !anchorElement || autoWidth) {
|
|
174
255
|
return undefined;
|
|
@@ -219,7 +300,11 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
219
300
|
}
|
|
220
301
|
return undefined;
|
|
221
302
|
}, [labelId]);
|
|
222
|
-
const update = (openParam, event) => {
|
|
303
|
+
const update = useEventCallback((openParam, event) => {
|
|
304
|
+
if (!openParam) {
|
|
305
|
+
resetMouseUpSelection();
|
|
306
|
+
clearOpeningMouseUpListener();
|
|
307
|
+
}
|
|
223
308
|
if (openParam) {
|
|
224
309
|
setOpenInteractionType(getOpenInteractionType(event));
|
|
225
310
|
if (onOpen) {
|
|
@@ -232,9 +317,33 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
232
317
|
}
|
|
233
318
|
}
|
|
234
319
|
if (!isOpenControlled) {
|
|
320
|
+
openRef.current = openParam;
|
|
235
321
|
setMenuMinWidthState(autoWidth ? null : anchorElement.clientWidth);
|
|
236
322
|
setOpenState(openParam);
|
|
237
323
|
}
|
|
324
|
+
});
|
|
325
|
+
const scheduleMouseUpSelection = () => {
|
|
326
|
+
resetMouseUpSelection();
|
|
327
|
+
|
|
328
|
+
// When there is no selected item in the list, a mousedown
|
|
329
|
+
// on the trigger followed by a quick mouseup over the first option can accidentally select
|
|
330
|
+
// within 200ms. Delay unselected mouseup to match the safer 400ms window.
|
|
331
|
+
if (!hasSelectedItemInListRef.current) {
|
|
332
|
+
selectedMouseUpTimer.start(SELECTED_MOUSE_UP_DELAY, () => {
|
|
333
|
+
selectionRef.current.allowSelectedMouseUp = true;
|
|
334
|
+
selectionRef.current.allowUnselectedMouseUp = true;
|
|
335
|
+
});
|
|
336
|
+
} else {
|
|
337
|
+
// mousedown -> move to unselected item -> mouseup should not select within 200ms.
|
|
338
|
+
unselectedMouseUpTimer.start(UNSELECTED_MOUSE_UP_DELAY, () => {
|
|
339
|
+
selectionRef.current.allowUnselectedMouseUp = true;
|
|
340
|
+
|
|
341
|
+
// mousedown -> mouseup on selected item should not select within 400ms.
|
|
342
|
+
selectedMouseUpTimer.start(UNSELECTED_MOUSE_UP_DELAY, () => {
|
|
343
|
+
selectionRef.current.allowSelectedMouseUp = true;
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
}
|
|
238
347
|
};
|
|
239
348
|
const handleMouseDown = event => {
|
|
240
349
|
onMouseDown?.(event);
|
|
@@ -245,6 +354,29 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
245
354
|
// Hijack the default focus behavior.
|
|
246
355
|
event.preventDefault();
|
|
247
356
|
displayRef.current.focus();
|
|
357
|
+
const doc = ownerDocument(event.currentTarget);
|
|
358
|
+
scheduleMouseUpSelection();
|
|
359
|
+
clearOpeningMouseUpListener();
|
|
360
|
+
const handleMouseUp = mouseEvent => {
|
|
361
|
+
openingMouseUpListenerCleanupRef.current = null;
|
|
362
|
+
if (!displayRef.current) {
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
365
|
+
if (isMouseEventInsideElement(mouseEvent, displayRef.current) || isMouseEventInsideElement(mouseEvent, paperRef.current)) {
|
|
366
|
+
return;
|
|
367
|
+
}
|
|
368
|
+
if (!openRef.current && isOpenControlled) {
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
update(false, mouseEvent);
|
|
372
|
+
};
|
|
373
|
+
doc.addEventListener('mouseup', handleMouseUp, {
|
|
374
|
+
capture: true,
|
|
375
|
+
once: true
|
|
376
|
+
});
|
|
377
|
+
openingMouseUpListenerCleanupRef.current = () => {
|
|
378
|
+
doc.removeEventListener('mouseup', handleMouseUp, true);
|
|
379
|
+
};
|
|
248
380
|
update(true, event);
|
|
249
381
|
};
|
|
250
382
|
const handleClose = event => {
|
|
@@ -264,6 +396,7 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
264
396
|
}
|
|
265
397
|
};
|
|
266
398
|
const handleItemClick = child => event => {
|
|
399
|
+
didPointerDownOnItemRef.current = false;
|
|
267
400
|
let newValue;
|
|
268
401
|
|
|
269
402
|
// We use the tabindex attribute to signal the available options.
|
|
@@ -307,6 +440,19 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
307
440
|
update(false, event);
|
|
308
441
|
}
|
|
309
442
|
};
|
|
443
|
+
const handleItemMouseUp = (child, selected) => event => {
|
|
444
|
+
child.props.onMouseUp?.(event);
|
|
445
|
+
if (didPointerDownOnItemRef.current) {
|
|
446
|
+
didPointerDownOnItemRef.current = false;
|
|
447
|
+
return;
|
|
448
|
+
}
|
|
449
|
+
const disallowSelectedMouseUp = !selectionRef.current.allowSelectedMouseUp && selected;
|
|
450
|
+
const disallowUnselectedMouseUp = !selectionRef.current.allowUnselectedMouseUp && !selected;
|
|
451
|
+
if (disallowSelectedMouseUp || disallowUnselectedMouseUp) {
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
event.currentTarget.click();
|
|
455
|
+
};
|
|
310
456
|
const handleKeyDown = event => {
|
|
311
457
|
if (!readOnly) {
|
|
312
458
|
const validKeys = [' ', 'ArrowUp', 'ArrowDown',
|
|
@@ -380,7 +526,16 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
380
526
|
}
|
|
381
527
|
return /*#__PURE__*/React.cloneElement(child, {
|
|
382
528
|
'aria-selected': selected ? 'true' : 'false',
|
|
529
|
+
onMouseDown: event => {
|
|
530
|
+
didPointerDownOnItemRef.current = true;
|
|
531
|
+
child.props.onMouseDown?.(event);
|
|
532
|
+
},
|
|
533
|
+
onPointerDown: event => {
|
|
534
|
+
didPointerDownOnItemRef.current = true;
|
|
535
|
+
child.props.onPointerDown?.(event);
|
|
536
|
+
},
|
|
383
537
|
onClick: handleItemClick(child),
|
|
538
|
+
onMouseUp: handleItemMouseUp(child, selected),
|
|
384
539
|
onKeyUp: event => {
|
|
385
540
|
if (event.key === ' ') {
|
|
386
541
|
// otherwise our MenuItems dispatches a click event
|
|
@@ -399,6 +554,11 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
399
554
|
'data-value': child.props.value // Instead, we provide it as a data attribute.
|
|
400
555
|
});
|
|
401
556
|
});
|
|
557
|
+
|
|
558
|
+
// Keep the opening mouseup guard current without mutating refs during render.
|
|
559
|
+
useEnhancedEffect(() => {
|
|
560
|
+
hasSelectedItemInListRef.current = foundMatch;
|
|
561
|
+
}, [foundMatch]);
|
|
402
562
|
if (process.env.NODE_ENV !== 'production') {
|
|
403
563
|
// TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler
|
|
404
564
|
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
@@ -448,6 +608,7 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
448
608
|
};
|
|
449
609
|
const classes = useUtilityClasses(ownerState);
|
|
450
610
|
const menuPaperSlotProps = typeof MenuProps.slotProps?.paper === 'function' ? MenuProps.slotProps.paper(ownerState) : MenuProps.slotProps?.paper;
|
|
611
|
+
const handlePaperRef = useForkRef(menuPaperSlotProps?.ref, paperRef);
|
|
451
612
|
const menuListSlotProps = typeof MenuProps.slotProps?.list === 'function' ? MenuProps.slotProps.list(ownerState) : MenuProps.slotProps?.list;
|
|
452
613
|
const listboxId = useId();
|
|
453
614
|
const nativeInputId = useId();
|
|
@@ -462,7 +623,7 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
462
623
|
"aria-expanded": open ? 'true' : 'false',
|
|
463
624
|
"aria-haspopup": "listbox",
|
|
464
625
|
"aria-label": ariaLabel,
|
|
465
|
-
"aria-labelledby":
|
|
626
|
+
"aria-labelledby": labelId,
|
|
466
627
|
"aria-describedby": ariaDescribedby,
|
|
467
628
|
"aria-required": required ? 'true' : undefined,
|
|
468
629
|
"aria-invalid": error ? 'true' : undefined,
|
|
@@ -529,6 +690,7 @@ const SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, re
|
|
|
529
690
|
},
|
|
530
691
|
paper: {
|
|
531
692
|
...menuPaperSlotProps,
|
|
693
|
+
ref: handlePaperRef,
|
|
532
694
|
style: {
|
|
533
695
|
minWidth: menuMinWidth,
|
|
534
696
|
...menuPaperSlotProps?.style
|
package/Skeleton/Skeleton.d.mts
CHANGED
|
@@ -49,11 +49,11 @@ export interface SkeletonTypeMap<AdditionalProps = {}, RootComponent extends Rea
|
|
|
49
49
|
*
|
|
50
50
|
* Demos:
|
|
51
51
|
*
|
|
52
|
-
* - [Skeleton](https://
|
|
52
|
+
* - [Skeleton](https://mui.com/material-ui/react-skeleton/)
|
|
53
53
|
*
|
|
54
54
|
* API:
|
|
55
55
|
*
|
|
56
|
-
* - [Skeleton API](https://
|
|
56
|
+
* - [Skeleton API](https://mui.com/material-ui/api/skeleton/)
|
|
57
57
|
*/
|
|
58
58
|
declare const Skeleton: OverridableComponent<SkeletonTypeMap>;
|
|
59
59
|
export type SkeletonProps<RootComponent extends React.ElementType = SkeletonTypeMap['defaultComponent'], AdditionalProps = {}> = OverrideProps<SkeletonTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
|
package/Skeleton/Skeleton.d.ts
CHANGED
|
@@ -49,11 +49,11 @@ export interface SkeletonTypeMap<AdditionalProps = {}, RootComponent extends Rea
|
|
|
49
49
|
*
|
|
50
50
|
* Demos:
|
|
51
51
|
*
|
|
52
|
-
* - [Skeleton](https://
|
|
52
|
+
* - [Skeleton](https://mui.com/material-ui/react-skeleton/)
|
|
53
53
|
*
|
|
54
54
|
* API:
|
|
55
55
|
*
|
|
56
|
-
* - [Skeleton API](https://
|
|
56
|
+
* - [Skeleton API](https://mui.com/material-ui/api/skeleton/)
|
|
57
57
|
*/
|
|
58
58
|
declare const Skeleton: OverridableComponent<SkeletonTypeMap>;
|
|
59
59
|
export type SkeletonProps<RootComponent extends React.ElementType = SkeletonTypeMap['defaultComponent'], AdditionalProps = {}> = OverrideProps<SkeletonTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
|
package/Slide/Slide.d.mts
CHANGED
|
@@ -47,17 +47,17 @@ export interface SlideProps extends TransitionProps {
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
/**
|
|
50
|
-
* The Slide transition is used by the [Drawer](https://
|
|
50
|
+
* The Slide transition is used by the [Drawer](https://mui.com/material-ui/react-drawer/) component.
|
|
51
51
|
* It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.
|
|
52
52
|
*
|
|
53
53
|
* Demos:
|
|
54
54
|
*
|
|
55
|
-
* - [Dialog](https://
|
|
56
|
-
* - [Transitions](https://
|
|
55
|
+
* - [Dialog](https://mui.com/material-ui/react-dialog/)
|
|
56
|
+
* - [Transitions](https://mui.com/material-ui/transitions/)
|
|
57
57
|
*
|
|
58
58
|
* API:
|
|
59
59
|
*
|
|
60
|
-
* - [Slide API](https://
|
|
60
|
+
* - [Slide API](https://mui.com/material-ui/api/slide/)
|
|
61
61
|
* - inherits [Transition API](https://reactcommunity.org/react-transition-group/transition/#Transition-props)
|
|
62
62
|
*/
|
|
63
63
|
export default function Slide(props: SlideProps): React.JSX.Element;
|
package/Slide/Slide.d.ts
CHANGED
|
@@ -47,17 +47,17 @@ export interface SlideProps extends TransitionProps {
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
/**
|
|
50
|
-
* The Slide transition is used by the [Drawer](https://
|
|
50
|
+
* The Slide transition is used by the [Drawer](https://mui.com/material-ui/react-drawer/) component.
|
|
51
51
|
* It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.
|
|
52
52
|
*
|
|
53
53
|
* Demos:
|
|
54
54
|
*
|
|
55
|
-
* - [Dialog](https://
|
|
56
|
-
* - [Transitions](https://
|
|
55
|
+
* - [Dialog](https://mui.com/material-ui/react-dialog/)
|
|
56
|
+
* - [Transitions](https://mui.com/material-ui/transitions/)
|
|
57
57
|
*
|
|
58
58
|
* API:
|
|
59
59
|
*
|
|
60
|
-
* - [Slide API](https://
|
|
60
|
+
* - [Slide API](https://mui.com/material-ui/api/slide/)
|
|
61
61
|
* - inherits [Transition API](https://reactcommunity.org/react-transition-group/transition/#Transition-props)
|
|
62
62
|
*/
|
|
63
63
|
export default function Slide(props: SlideProps): React.JSX.Element;
|