@mui/material 9.0.0-alpha.2 → 9.0.0-alpha.4
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 +0 -14
- package/Accordion/Accordion.d.ts +0 -14
- package/Accordion/Accordion.js +3 -25
- package/Accordion/Accordion.mjs +3 -25
- package/AccordionSummary/AccordionSummary.js +1 -1
- package/AccordionSummary/AccordionSummary.mjs +1 -1
- package/AccordionSummary/accordionSummaryClasses.d.mts +0 -5
- package/AccordionSummary/accordionSummaryClasses.d.ts +0 -5
- package/AccordionSummary/accordionSummaryClasses.js +1 -1
- package/AccordionSummary/accordionSummaryClasses.mjs +1 -1
- package/Alert/Alert.d.mts +0 -23
- package/Alert/Alert.d.ts +0 -23
- package/Alert/Alert.js +4 -36
- package/Alert/Alert.mjs +4 -36
- package/Alert/alertClasses.d.mts +0 -72
- package/Alert/alertClasses.d.ts +0 -72
- package/Alert/alertClasses.js +1 -1
- package/Alert/alertClasses.mjs +1 -1
- package/Autocomplete/Autocomplete.d.mts +26 -60
- package/Autocomplete/Autocomplete.d.ts +26 -60
- package/Autocomplete/Autocomplete.js +76 -119
- package/Autocomplete/Autocomplete.mjs +76 -119
- package/Avatar/Avatar.d.mts +0 -8
- package/Avatar/Avatar.d.ts +0 -8
- package/Avatar/Avatar.js +13 -35
- package/Avatar/Avatar.mjs +13 -35
- package/AvatarGroup/AvatarGroup.d.mts +0 -15
- package/AvatarGroup/AvatarGroup.d.ts +0 -15
- package/AvatarGroup/AvatarGroup.js +1 -18
- package/AvatarGroup/AvatarGroup.mjs +1 -18
- package/Backdrop/Backdrop.d.mts +1 -31
- package/Backdrop/Backdrop.d.ts +1 -31
- package/Backdrop/Backdrop.js +2 -42
- package/Backdrop/Backdrop.mjs +2 -42
- package/Badge/Badge.d.mts +0 -20
- package/Badge/Badge.d.ts +0 -20
- package/Badge/Badge.js +2 -35
- package/Badge/Badge.mjs +2 -35
- package/Box/Box.d.mts +1 -0
- package/Box/Box.d.ts +1 -0
- package/Button/Button.d.mts +1 -0
- package/Button/Button.d.ts +1 -0
- package/Button/Button.js +6 -6
- package/Button/Button.mjs +6 -6
- package/Button/buttonClasses.d.mts +0 -132
- package/Button/buttonClasses.d.ts +0 -132
- package/Button/buttonClasses.js +1 -1
- package/Button/buttonClasses.mjs +1 -1
- package/ButtonBase/ButtonBase.js +16 -2
- package/ButtonBase/ButtonBase.mjs +16 -2
- package/CHANGELOG.md +191 -0
- package/CardHeader/CardHeader.js +5 -1
- package/CardHeader/CardHeader.mjs +5 -1
- package/CircularProgress/CircularProgress.js +2 -2
- package/CircularProgress/CircularProgress.mjs +2 -2
- package/CircularProgress/circularProgressClasses.d.mts +0 -8
- package/CircularProgress/circularProgressClasses.d.ts +0 -8
- package/CircularProgress/circularProgressClasses.js +1 -1
- package/CircularProgress/circularProgressClasses.mjs +1 -1
- package/Divider/Divider.d.mts +1 -6
- package/Divider/Divider.d.ts +1 -6
- package/Divider/Divider.js +2 -18
- package/Divider/Divider.mjs +2 -18
- package/Divider/dividerClasses.d.mts +0 -4
- package/Divider/dividerClasses.d.ts +0 -4
- package/Divider/dividerClasses.js +1 -1
- package/Divider/dividerClasses.mjs +1 -1
- package/FormControlLabel/FormControlLabel.d.mts +1 -14
- package/FormControlLabel/FormControlLabel.d.ts +1 -14
- package/FormControlLabel/FormControlLabel.js +1 -13
- package/FormControlLabel/FormControlLabel.mjs +1 -13
- package/Input/Input.js +2 -1
- package/Input/Input.mjs +2 -1
- package/List/List.d.mts +1 -0
- package/List/List.d.ts +1 -0
- package/ListItemButton/ListItemButton.d.mts +1 -0
- package/ListItemButton/ListItemButton.d.ts +1 -0
- package/ListItemIcon/ListItemIcon.d.mts +1 -0
- package/ListItemIcon/ListItemIcon.d.ts +1 -0
- package/ListItemText/ListItemText.d.mts +1 -0
- package/ListItemText/ListItemText.d.ts +1 -0
- package/ListItemText/ListItemText.js +5 -1
- package/ListItemText/ListItemText.mjs +5 -1
- package/ListSubheader/ListSubheader.d.mts +1 -0
- package/ListSubheader/ListSubheader.d.ts +1 -0
- package/Menu/Menu.d.mts +0 -13
- package/Menu/Menu.d.ts +0 -13
- package/Menu/Menu.js +5 -44
- package/Menu/Menu.mjs +5 -44
- package/MenuItem/MenuItem.js +21 -1
- package/MenuItem/MenuItem.mjs +23 -1
- package/MenuList/MenuList.js +77 -109
- package/MenuList/MenuList.mjs +77 -109
- package/MobileStepper/MobileStepper.d.mts +0 -5
- package/MobileStepper/MobileStepper.d.ts +0 -5
- package/MobileStepper/MobileStepper.js +1 -10
- package/MobileStepper/MobileStepper.mjs +1 -10
- package/Paper/Paper.d.mts +1 -0
- package/Paper/Paper.d.ts +1 -0
- package/Popover/Popover.d.mts +4 -48
- package/Popover/Popover.d.ts +4 -48
- package/Popover/Popover.js +4 -64
- package/Popover/Popover.mjs +4 -64
- package/Popper/Popper.d.mts +0 -17
- package/Popper/Popper.d.ts +0 -17
- package/Popper/Popper.js +2 -26
- package/Popper/Popper.mjs +2 -26
- package/Popper/index.d.mts +1 -0
- package/Popper/index.d.ts +1 -0
- package/Popper/index.js +11 -2
- package/Popper/index.mjs +1 -0
- package/Select/SelectInput.js +50 -55
- package/Select/SelectInput.mjs +47 -52
- package/Select/index.d.mts +1 -0
- package/Select/index.d.ts +1 -0
- package/Select/index.js +12 -0
- package/Select/index.mjs +1 -0
- package/Select/utils/SelectFocusSourceContext.d.mts +4 -0
- package/Select/utils/SelectFocusSourceContext.d.ts +4 -0
- package/Select/utils/SelectFocusSourceContext.js +19 -0
- package/Select/utils/SelectFocusSourceContext.mjs +13 -0
- package/Select/utils/areEqualValues.d.mts +1 -0
- package/Select/utils/areEqualValues.d.ts +1 -0
- package/Select/utils/areEqualValues.js +14 -0
- package/Select/utils/areEqualValues.mjs +8 -0
- package/Select/utils/getOpenInteractionType.d.mts +1 -0
- package/Select/utils/getOpenInteractionType.d.ts +1 -0
- package/Select/utils/getOpenInteractionType.js +18 -0
- package/Select/utils/getOpenInteractionType.mjs +12 -0
- package/Select/utils/index.d.mts +4 -0
- package/Select/utils/index.d.ts +4 -0
- package/Select/utils/index.js +40 -0
- package/Select/utils/index.mjs +4 -0
- package/Select/utils/isEmpty.d.mts +1 -0
- package/Select/utils/isEmpty.d.ts +1 -0
- package/Select/utils/isEmpty.js +9 -0
- package/Select/utils/isEmpty.mjs +3 -0
- package/Slider/Slider.d.mts +109 -77
- package/Slider/Slider.d.ts +109 -77
- package/Slider/Slider.js +42 -119
- package/Slider/Slider.mjs +42 -119
- package/Slider/sliderClasses.d.mts +7 -7
- package/Slider/sliderClasses.d.ts +7 -7
- package/Slider/useSlider.js +50 -14
- package/Slider/useSlider.mjs +50 -14
- package/Snackbar/Snackbar.d.mts +1 -27
- package/Snackbar/Snackbar.d.ts +1 -27
- package/Snackbar/Snackbar.js +5 -58
- package/Snackbar/Snackbar.mjs +5 -58
- package/SpeedDial/SpeedDial.d.mts +0 -13
- package/SpeedDial/SpeedDial.d.ts +0 -13
- package/SpeedDial/SpeedDial.js +15 -40
- package/SpeedDial/SpeedDial.mjs +15 -40
- package/SpeedDialAction/SpeedDialAction.d.mts +0 -28
- package/SpeedDialAction/SpeedDialAction.d.ts +0 -28
- package/SpeedDialAction/SpeedDialAction.js +5 -46
- package/SpeedDialAction/SpeedDialAction.mjs +5 -46
- package/Step/Step.js +7 -5
- package/Step/Step.mjs +7 -5
- package/StepButton/StepButton.js +16 -6
- package/StepButton/StepButton.mjs +16 -6
- package/StepConnector/StepConnector.js +2 -2
- package/StepConnector/StepConnector.mjs +2 -2
- package/StepContent/StepContent.js +2 -2
- package/StepContent/StepContent.mjs +2 -2
- package/StepLabel/StepLabel.js +2 -2
- package/StepLabel/StepLabel.mjs +2 -2
- package/Stepper/Stepper.js +44 -7
- package/Stepper/Stepper.mjs +44 -7
- package/Stepper/StepperContext.d.mts +7 -0
- package/Stepper/StepperContext.d.ts +7 -0
- package/Stepper/StepperContext.js +2 -1
- package/Stepper/StepperContext.mjs +1 -0
- package/Stepper/index.d.mts +0 -1
- package/Stepper/index.d.ts +0 -1
- package/Tab/Tab.js +0 -1
- package/Tab/Tab.mjs +0 -1
- package/TablePagination/TablePagination.d.mts +1 -1
- package/TablePagination/TablePagination.d.ts +1 -1
- package/TablePagination/TablePagination.js +4 -2
- package/TablePagination/TablePagination.mjs +4 -2
- package/Tabs/Tabs.d.mts +2 -33
- package/Tabs/Tabs.d.ts +2 -33
- package/Tabs/Tabs.js +54 -135
- package/Tabs/Tabs.mjs +54 -135
- package/TextField/TextField.d.mts +6 -49
- package/TextField/TextField.d.ts +6 -49
- package/TextField/TextField.js +18 -53
- package/TextField/TextField.mjs +18 -53
- package/Tooltip/Tooltip.d.mts +1 -55
- package/Tooltip/Tooltip.d.ts +1 -55
- package/Tooltip/Tooltip.js +9 -87
- package/Tooltip/Tooltip.mjs +9 -87
- package/Typography/Typography.d.mts +1 -6
- package/Typography/Typography.d.ts +1 -6
- package/Typography/Typography.js +3 -19
- package/Typography/Typography.mjs +3 -19
- package/Typography/typographyClasses.d.mts +0 -5
- package/Typography/typographyClasses.d.ts +0 -5
- package/Typography/typographyClasses.js +1 -1
- package/Typography/typographyClasses.mjs +1 -1
- package/index.d.mts +0 -2
- package/index.d.ts +0 -2
- package/index.js +1 -9
- package/index.mjs +1 -2
- package/locale/amET.js +4 -1
- package/locale/amET.mjs +3 -1
- package/locale/arEG.js +4 -1
- package/locale/arEG.mjs +3 -1
- package/locale/arSA.js +4 -1
- package/locale/arSA.mjs +3 -1
- package/locale/arSD.js +4 -1
- package/locale/arSD.mjs +3 -1
- package/locale/beBY.js +4 -1
- package/locale/beBY.mjs +3 -1
- package/locale/bnBD.js +4 -1
- package/locale/bnBD.mjs +3 -1
- package/locale/caES.js +4 -1
- package/locale/caES.mjs +3 -1
- package/locale/csCZ.js +4 -1
- package/locale/csCZ.mjs +3 -1
- package/locale/daDK.js +4 -1
- package/locale/daDK.mjs +3 -1
- package/locale/deDE.js +4 -1
- package/locale/deDE.mjs +3 -1
- package/locale/elGR.js +4 -1
- package/locale/elGR.mjs +3 -1
- package/locale/esES.js +4 -1
- package/locale/esES.mjs +3 -1
- package/locale/etEE.js +4 -1
- package/locale/etEE.mjs +3 -1
- package/locale/faIR.js +4 -1
- package/locale/faIR.mjs +3 -1
- package/locale/fiFI.js +4 -1
- package/locale/fiFI.mjs +3 -1
- package/locale/frFR.js +4 -1
- package/locale/frFR.mjs +3 -1
- package/locale/heIL.js +4 -1
- package/locale/heIL.mjs +3 -1
- package/locale/hiIN.js +4 -1
- package/locale/hiIN.mjs +3 -1
- package/locale/hrHR.js +5 -1
- package/locale/hrHR.mjs +4 -1
- package/locale/isIS.js +4 -1
- package/locale/isIS.mjs +3 -1
- package/locale/itIT.js +4 -1
- package/locale/itIT.mjs +3 -1
- package/locale/jaJP.js +4 -1
- package/locale/jaJP.mjs +3 -1
- package/locale/khKH.js +4 -1
- package/locale/khKH.mjs +3 -1
- package/locale/kkKZ.js +4 -1
- package/locale/kkKZ.mjs +3 -1
- package/locale/koKR.js +4 -1
- package/locale/koKR.mjs +3 -1
- package/locale/kuCKB.js +4 -1
- package/locale/kuCKB.mjs +3 -1
- package/locale/kuLatn.js +4 -1
- package/locale/kuLatn.mjs +3 -1
- package/locale/mkMK.js +5 -1
- package/locale/mkMK.mjs +4 -1
- package/locale/msMS.js +5 -1
- package/locale/msMS.mjs +4 -1
- package/locale/myMY.js +5 -1
- package/locale/myMY.mjs +4 -1
- package/locale/nbNO.js +4 -1
- package/locale/nbNO.mjs +3 -1
- package/locale/neNP.js +5 -1
- package/locale/neNP.mjs +4 -1
- package/locale/nlNL.js +4 -1
- package/locale/nlNL.mjs +3 -1
- package/locale/nnNO.js +4 -1
- package/locale/nnNO.mjs +3 -1
- package/locale/plPL.js +4 -1
- package/locale/plPL.mjs +3 -1
- package/locale/psAF.js +4 -1
- package/locale/psAF.mjs +3 -1
- package/locale/ptBR.js +4 -1
- package/locale/ptBR.mjs +3 -1
- package/locale/ptPT.js +4 -1
- package/locale/ptPT.mjs +3 -1
- package/locale/roRO.js +4 -1
- package/locale/roRO.mjs +3 -1
- package/locale/ruRU.js +4 -1
- package/locale/ruRU.mjs +3 -1
- package/locale/siLK.js +4 -1
- package/locale/siLK.mjs +3 -1
- package/locale/skSK.js +4 -1
- package/locale/skSK.mjs +3 -1
- package/locale/srRS.js +5 -1
- package/locale/srRS.mjs +4 -1
- package/locale/svSE.js +4 -1
- package/locale/svSE.mjs +3 -1
- package/locale/thTH.js +4 -1
- package/locale/thTH.mjs +3 -1
- package/locale/tlTL.js +5 -1
- package/locale/tlTL.mjs +4 -1
- package/locale/trTR.js +4 -1
- package/locale/trTR.mjs +3 -1
- package/locale/ukUA.js +4 -1
- package/locale/ukUA.mjs +3 -1
- package/locale/urPK.js +4 -1
- package/locale/urPK.mjs +3 -1
- package/locale/utils/buildFormatNumber.d.mts +2 -0
- package/locale/utils/buildFormatNumber.d.ts +2 -0
- package/locale/utils/buildFormatNumber.js +23 -0
- package/locale/utils/buildFormatNumber.mjs +17 -0
- package/locale/viVN.js +4 -1
- package/locale/viVN.mjs +3 -1
- package/locale/zhCN.js +4 -1
- package/locale/zhCN.mjs +3 -1
- package/locale/zhHK.js +4 -1
- package/locale/zhHK.mjs +3 -1
- package/locale/zhTW.js +4 -1
- package/locale/zhTW.mjs +3 -1
- package/package.json +236 -236
- package/styles/components.d.mts +0 -5
- package/styles/components.d.ts +0 -5
- package/styles/overrides.d.mts +0 -2
- package/styles/overrides.d.ts +0 -2
- package/styles/props.d.mts +0 -2
- package/styles/props.d.ts +0 -2
- package/themeCssVarsAugmentation/index.js +5 -0
- package/themeCssVarsAugmentation/index.mjs +5 -0
- package/useAutocomplete/useAutocomplete.d.mts +0 -12
- package/useAutocomplete/useAutocomplete.d.ts +0 -12
- package/useAutocomplete/useAutocomplete.js +53 -28
- package/useAutocomplete/useAutocomplete.mjs +53 -28
- package/utils/index.d.mts +2 -0
- package/utils/index.d.ts +2 -0
- package/utils/index.js +14 -0
- package/utils/index.mjs +2 -0
- package/utils/useRovingTabIndex.d.mts +2 -0
- package/utils/useRovingTabIndex.d.ts +2 -0
- package/utils/useRovingTabIndex.js +9 -0
- package/utils/useRovingTabIndex.mjs +2 -0
- package/version/index.js +2 -2
- package/version/index.mjs +2 -2
- package/GridLegacy/GridLegacy.d.mts +0 -160
- package/GridLegacy/GridLegacy.d.ts +0 -160
- package/GridLegacy/GridLegacy.js +0 -601
- package/GridLegacy/GridLegacy.mjs +0 -588
- package/GridLegacy/GridLegacyContext.js +0 -17
- package/GridLegacy/GridLegacyContext.mjs +0 -12
- package/GridLegacy/gridLegacyClasses.d.mts +0 -48
- package/GridLegacy/gridLegacyClasses.d.ts +0 -48
- package/GridLegacy/gridLegacyClasses.js +0 -27
- package/GridLegacy/gridLegacyClasses.mjs +0 -19
- package/GridLegacy/index.d.mts +0 -4
- package/GridLegacy/index.d.ts +0 -4
- package/GridLegacy/index.js +0 -35
- package/GridLegacy/index.mjs +0 -3
package/Menu/Menu.d.mts
CHANGED
|
@@ -101,12 +101,6 @@ export interface MenuProps extends StandardProps<Omit<PopoverProps, 'slots' | 's
|
|
|
101
101
|
* @default false
|
|
102
102
|
*/
|
|
103
103
|
disableAutoFocusItem?: boolean | undefined;
|
|
104
|
-
/**
|
|
105
|
-
* Props applied to the [`MenuList`](https://mui.com/material-ui/api/menu-list/) element.
|
|
106
|
-
* @deprecated use the `slotProps.list` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.
|
|
107
|
-
* @default {}
|
|
108
|
-
*/
|
|
109
|
-
MenuListProps?: Partial<MenuListProps> | undefined;
|
|
110
104
|
/**
|
|
111
105
|
* Callback fired when the component requests to be closed.
|
|
112
106
|
*
|
|
@@ -131,13 +125,6 @@ export interface MenuProps extends StandardProps<Omit<PopoverProps, 'slots' | 's
|
|
|
131
125
|
* @default 'auto'
|
|
132
126
|
*/
|
|
133
127
|
transitionDuration?: TransitionProps['timeout'] | 'auto' | undefined;
|
|
134
|
-
/**
|
|
135
|
-
* Props applied to the transition element.
|
|
136
|
-
* By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.
|
|
137
|
-
* @deprecated use the `slotProps.transition` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.
|
|
138
|
-
* @default {}
|
|
139
|
-
*/
|
|
140
|
-
TransitionProps?: TransitionProps | undefined;
|
|
141
128
|
/**
|
|
142
129
|
* The variant to use. Use `menu` to prevent selected items from impacting the initial focus.
|
|
143
130
|
* @default 'selectedMenu'
|
package/Menu/Menu.d.ts
CHANGED
|
@@ -101,12 +101,6 @@ export interface MenuProps extends StandardProps<Omit<PopoverProps, 'slots' | 's
|
|
|
101
101
|
* @default false
|
|
102
102
|
*/
|
|
103
103
|
disableAutoFocusItem?: boolean | undefined;
|
|
104
|
-
/**
|
|
105
|
-
* Props applied to the [`MenuList`](https://mui.com/material-ui/api/menu-list/) element.
|
|
106
|
-
* @deprecated use the `slotProps.list` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.
|
|
107
|
-
* @default {}
|
|
108
|
-
*/
|
|
109
|
-
MenuListProps?: Partial<MenuListProps> | undefined;
|
|
110
104
|
/**
|
|
111
105
|
* Callback fired when the component requests to be closed.
|
|
112
106
|
*
|
|
@@ -131,13 +125,6 @@ export interface MenuProps extends StandardProps<Omit<PopoverProps, 'slots' | 's
|
|
|
131
125
|
* @default 'auto'
|
|
132
126
|
*/
|
|
133
127
|
transitionDuration?: TransitionProps['timeout'] | 'auto' | undefined;
|
|
134
|
-
/**
|
|
135
|
-
* Props applied to the transition element.
|
|
136
|
-
* By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.
|
|
137
|
-
* @deprecated use the `slotProps.transition` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.
|
|
138
|
-
* @default {}
|
|
139
|
-
*/
|
|
140
|
-
TransitionProps?: TransitionProps | undefined;
|
|
141
128
|
/**
|
|
142
129
|
* The variant to use. Use `menu` to prevent selected items from impacting the initial focus.
|
|
143
130
|
* @default 'selectedMenu'
|
package/Menu/Menu.js
CHANGED
|
@@ -10,7 +10,6 @@ exports.default = exports.MenuPaper = void 0;
|
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _reactIs = require("react-is");
|
|
12
12
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
|
-
var _clsx = _interopRequireDefault(require("clsx"));
|
|
14
13
|
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
|
|
15
14
|
var _HTMLElementType = _interopRequireDefault(require("@mui/utils/HTMLElementType"));
|
|
16
15
|
var _RtlProvider = require("@mui/system/RtlProvider");
|
|
@@ -75,16 +74,10 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {
|
|
|
75
74
|
children,
|
|
76
75
|
className,
|
|
77
76
|
disableAutoFocusItem = false,
|
|
78
|
-
MenuListProps = {},
|
|
79
77
|
onClose,
|
|
80
78
|
open,
|
|
81
|
-
PaperProps = {},
|
|
82
79
|
PopoverClasses,
|
|
83
80
|
transitionDuration = 'auto',
|
|
84
|
-
TransitionProps: {
|
|
85
|
-
onEntering,
|
|
86
|
-
...TransitionProps
|
|
87
|
-
} = {},
|
|
88
81
|
variant = 'selectedMenu',
|
|
89
82
|
slots = {},
|
|
90
83
|
slotProps = {},
|
|
@@ -95,25 +88,18 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {
|
|
|
95
88
|
...props,
|
|
96
89
|
autoFocus,
|
|
97
90
|
disableAutoFocusItem,
|
|
98
|
-
MenuListProps,
|
|
99
|
-
onEntering,
|
|
100
|
-
PaperProps,
|
|
101
91
|
transitionDuration,
|
|
102
|
-
TransitionProps,
|
|
103
92
|
variant
|
|
104
93
|
};
|
|
105
94
|
const classes = useUtilityClasses(ownerState);
|
|
106
95
|
const autoFocusItem = autoFocus && !disableAutoFocusItem && open;
|
|
107
96
|
const menuListActionsRef = React.useRef(null);
|
|
108
|
-
const handleEntering = (element,
|
|
97
|
+
const handleEntering = (element, _isAppearing) => {
|
|
109
98
|
if (menuListActionsRef.current) {
|
|
110
99
|
menuListActionsRef.current.adjustStyleForScrollbar(element, {
|
|
111
100
|
direction: isRtl ? 'rtl' : 'ltr'
|
|
112
101
|
});
|
|
113
102
|
}
|
|
114
|
-
if (onEntering) {
|
|
115
|
-
onEntering(element, isAppearing);
|
|
116
|
-
}
|
|
117
103
|
};
|
|
118
104
|
const handleListKeyDown = event => {
|
|
119
105
|
if (event.key === 'Tab') {
|
|
@@ -152,12 +138,7 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {
|
|
|
152
138
|
});
|
|
153
139
|
const externalForwardedProps = {
|
|
154
140
|
slots,
|
|
155
|
-
slotProps
|
|
156
|
-
list: MenuListProps,
|
|
157
|
-
transition: TransitionProps,
|
|
158
|
-
paper: PaperProps,
|
|
159
|
-
...slotProps
|
|
160
|
-
}
|
|
141
|
+
slotProps
|
|
161
142
|
};
|
|
162
143
|
const rootSlotProps = (0, _useSlotProps.default)({
|
|
163
144
|
elementType: slots.root,
|
|
@@ -173,7 +154,7 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {
|
|
|
173
154
|
ownerState
|
|
174
155
|
});
|
|
175
156
|
const [ListSlot, listSlotProps] = (0, _useSlot.default)('list', {
|
|
176
|
-
className:
|
|
157
|
+
className: classes.list,
|
|
177
158
|
elementType: MenuMenuList,
|
|
178
159
|
shouldForwardComponentProp: true,
|
|
179
160
|
externalForwardedProps,
|
|
@@ -186,7 +167,7 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {
|
|
|
186
167
|
}),
|
|
187
168
|
ownerState
|
|
188
169
|
});
|
|
189
|
-
const resolvedTransitionProps = typeof
|
|
170
|
+
const resolvedTransitionProps = typeof slotProps.transition === 'function' ? slotProps.transition(ownerState) : slotProps.transition;
|
|
190
171
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(MenuRoot, {
|
|
191
172
|
onClose: onClose,
|
|
192
173
|
anchorOrigin: {
|
|
@@ -198,10 +179,7 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {
|
|
|
198
179
|
root: slots.root,
|
|
199
180
|
paper: PaperSlot,
|
|
200
181
|
backdrop: slots.backdrop,
|
|
201
|
-
|
|
202
|
-
// TODO: pass `slots.transition` directly once `TransitionComponent` is removed from Popover
|
|
203
|
-
transition: slots.transition
|
|
204
|
-
})
|
|
182
|
+
transition: slots.transition
|
|
205
183
|
},
|
|
206
184
|
slotProps: {
|
|
207
185
|
root: rootSlotProps,
|
|
@@ -269,12 +247,6 @@ process.env.NODE_ENV !== "production" ? Menu.propTypes /* remove-proptypes */ =
|
|
|
269
247
|
* @default false
|
|
270
248
|
*/
|
|
271
249
|
disableAutoFocusItem: _propTypes.default.bool,
|
|
272
|
-
/**
|
|
273
|
-
* Props applied to the [`MenuList`](https://mui.com/material-ui/api/menu-list/) element.
|
|
274
|
-
* @deprecated use the `slotProps.list` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.
|
|
275
|
-
* @default {}
|
|
276
|
-
*/
|
|
277
|
-
MenuListProps: _propTypes.default.object,
|
|
278
250
|
/**
|
|
279
251
|
* Callback fired when the component requests to be closed.
|
|
280
252
|
*
|
|
@@ -286,10 +258,6 @@ process.env.NODE_ENV !== "production" ? Menu.propTypes /* remove-proptypes */ =
|
|
|
286
258
|
* If `true`, the component is shown.
|
|
287
259
|
*/
|
|
288
260
|
open: _propTypes.default.bool.isRequired,
|
|
289
|
-
/**
|
|
290
|
-
* @ignore
|
|
291
|
-
*/
|
|
292
|
-
PaperProps: _propTypes.default.object,
|
|
293
261
|
/**
|
|
294
262
|
* `classes` prop applied to the [`Popover`](https://mui.com/material-ui/api/popover/) element.
|
|
295
263
|
*/
|
|
@@ -329,13 +297,6 @@ process.env.NODE_ENV !== "production" ? Menu.propTypes /* remove-proptypes */ =
|
|
|
329
297
|
enter: _propTypes.default.number,
|
|
330
298
|
exit: _propTypes.default.number
|
|
331
299
|
})]),
|
|
332
|
-
/**
|
|
333
|
-
* Props applied to the transition element.
|
|
334
|
-
* By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.
|
|
335
|
-
* @deprecated use the `slotProps.transition` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.
|
|
336
|
-
* @default {}
|
|
337
|
-
*/
|
|
338
|
-
TransitionProps: _propTypes.default.object,
|
|
339
300
|
/**
|
|
340
301
|
* The variant to use. Use `menu` to prevent selected items from impacting the initial focus.
|
|
341
302
|
* @default 'selectedMenu'
|
package/Menu/Menu.mjs
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { isFragment } from 'react-is';
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
|
-
import clsx from 'clsx';
|
|
7
6
|
import composeClasses from '@mui/utils/composeClasses';
|
|
8
7
|
import HTMLElementType from '@mui/utils/HTMLElementType';
|
|
9
8
|
import { useRtl } from '@mui/system/RtlProvider';
|
|
@@ -68,16 +67,10 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {
|
|
|
68
67
|
children,
|
|
69
68
|
className,
|
|
70
69
|
disableAutoFocusItem = false,
|
|
71
|
-
MenuListProps = {},
|
|
72
70
|
onClose,
|
|
73
71
|
open,
|
|
74
|
-
PaperProps = {},
|
|
75
72
|
PopoverClasses,
|
|
76
73
|
transitionDuration = 'auto',
|
|
77
|
-
TransitionProps: {
|
|
78
|
-
onEntering,
|
|
79
|
-
...TransitionProps
|
|
80
|
-
} = {},
|
|
81
74
|
variant = 'selectedMenu',
|
|
82
75
|
slots = {},
|
|
83
76
|
slotProps = {},
|
|
@@ -88,25 +81,18 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {
|
|
|
88
81
|
...props,
|
|
89
82
|
autoFocus,
|
|
90
83
|
disableAutoFocusItem,
|
|
91
|
-
MenuListProps,
|
|
92
|
-
onEntering,
|
|
93
|
-
PaperProps,
|
|
94
84
|
transitionDuration,
|
|
95
|
-
TransitionProps,
|
|
96
85
|
variant
|
|
97
86
|
};
|
|
98
87
|
const classes = useUtilityClasses(ownerState);
|
|
99
88
|
const autoFocusItem = autoFocus && !disableAutoFocusItem && open;
|
|
100
89
|
const menuListActionsRef = React.useRef(null);
|
|
101
|
-
const handleEntering = (element,
|
|
90
|
+
const handleEntering = (element, _isAppearing) => {
|
|
102
91
|
if (menuListActionsRef.current) {
|
|
103
92
|
menuListActionsRef.current.adjustStyleForScrollbar(element, {
|
|
104
93
|
direction: isRtl ? 'rtl' : 'ltr'
|
|
105
94
|
});
|
|
106
95
|
}
|
|
107
|
-
if (onEntering) {
|
|
108
|
-
onEntering(element, isAppearing);
|
|
109
|
-
}
|
|
110
96
|
};
|
|
111
97
|
const handleListKeyDown = event => {
|
|
112
98
|
if (event.key === 'Tab') {
|
|
@@ -145,12 +131,7 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {
|
|
|
145
131
|
});
|
|
146
132
|
const externalForwardedProps = {
|
|
147
133
|
slots,
|
|
148
|
-
slotProps
|
|
149
|
-
list: MenuListProps,
|
|
150
|
-
transition: TransitionProps,
|
|
151
|
-
paper: PaperProps,
|
|
152
|
-
...slotProps
|
|
153
|
-
}
|
|
134
|
+
slotProps
|
|
154
135
|
};
|
|
155
136
|
const rootSlotProps = useSlotProps({
|
|
156
137
|
elementType: slots.root,
|
|
@@ -166,7 +147,7 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {
|
|
|
166
147
|
ownerState
|
|
167
148
|
});
|
|
168
149
|
const [ListSlot, listSlotProps] = useSlot('list', {
|
|
169
|
-
className:
|
|
150
|
+
className: classes.list,
|
|
170
151
|
elementType: MenuMenuList,
|
|
171
152
|
shouldForwardComponentProp: true,
|
|
172
153
|
externalForwardedProps,
|
|
@@ -179,7 +160,7 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {
|
|
|
179
160
|
}),
|
|
180
161
|
ownerState
|
|
181
162
|
});
|
|
182
|
-
const resolvedTransitionProps = typeof
|
|
163
|
+
const resolvedTransitionProps = typeof slotProps.transition === 'function' ? slotProps.transition(ownerState) : slotProps.transition;
|
|
183
164
|
return /*#__PURE__*/_jsx(MenuRoot, {
|
|
184
165
|
onClose: onClose,
|
|
185
166
|
anchorOrigin: {
|
|
@@ -191,10 +172,7 @@ const Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {
|
|
|
191
172
|
root: slots.root,
|
|
192
173
|
paper: PaperSlot,
|
|
193
174
|
backdrop: slots.backdrop,
|
|
194
|
-
|
|
195
|
-
// TODO: pass `slots.transition` directly once `TransitionComponent` is removed from Popover
|
|
196
|
-
transition: slots.transition
|
|
197
|
-
})
|
|
175
|
+
transition: slots.transition
|
|
198
176
|
},
|
|
199
177
|
slotProps: {
|
|
200
178
|
root: rootSlotProps,
|
|
@@ -262,12 +240,6 @@ process.env.NODE_ENV !== "production" ? Menu.propTypes /* remove-proptypes */ =
|
|
|
262
240
|
* @default false
|
|
263
241
|
*/
|
|
264
242
|
disableAutoFocusItem: PropTypes.bool,
|
|
265
|
-
/**
|
|
266
|
-
* Props applied to the [`MenuList`](https://mui.com/material-ui/api/menu-list/) element.
|
|
267
|
-
* @deprecated use the `slotProps.list` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.
|
|
268
|
-
* @default {}
|
|
269
|
-
*/
|
|
270
|
-
MenuListProps: PropTypes.object,
|
|
271
243
|
/**
|
|
272
244
|
* Callback fired when the component requests to be closed.
|
|
273
245
|
*
|
|
@@ -279,10 +251,6 @@ process.env.NODE_ENV !== "production" ? Menu.propTypes /* remove-proptypes */ =
|
|
|
279
251
|
* If `true`, the component is shown.
|
|
280
252
|
*/
|
|
281
253
|
open: PropTypes.bool.isRequired,
|
|
282
|
-
/**
|
|
283
|
-
* @ignore
|
|
284
|
-
*/
|
|
285
|
-
PaperProps: PropTypes.object,
|
|
286
254
|
/**
|
|
287
255
|
* `classes` prop applied to the [`Popover`](https://mui.com/material-ui/api/popover/) element.
|
|
288
256
|
*/
|
|
@@ -322,13 +290,6 @@ process.env.NODE_ENV !== "production" ? Menu.propTypes /* remove-proptypes */ =
|
|
|
322
290
|
enter: PropTypes.number,
|
|
323
291
|
exit: PropTypes.number
|
|
324
292
|
})]),
|
|
325
|
-
/**
|
|
326
|
-
* Props applied to the transition element.
|
|
327
|
-
* By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.
|
|
328
|
-
* @deprecated use the `slotProps.transition` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.
|
|
329
|
-
* @default {}
|
|
330
|
-
*/
|
|
331
|
-
TransitionProps: PropTypes.object,
|
|
332
293
|
/**
|
|
333
294
|
* The variant to use. Use `menu` to prevent selected items from impacting the initial focus.
|
|
334
295
|
* @default 'selectedMenu'
|
package/MenuItem/MenuItem.js
CHANGED
|
@@ -23,7 +23,25 @@ var _Divider = require("../Divider");
|
|
|
23
23
|
var _ListItemIcon = require("../ListItemIcon");
|
|
24
24
|
var _ListItemText = require("../ListItemText");
|
|
25
25
|
var _menuItemClasses = _interopRequireWildcard(require("./menuItemClasses"));
|
|
26
|
+
var _Select = require("../Select");
|
|
26
27
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
28
|
+
/**
|
|
29
|
+
* If autoFocus is an object, it will attempt to call `element.focus()` with the options argument.
|
|
30
|
+
* If the browser doesn't support the options argument, it will fall back to a simple `element.focus()` call.
|
|
31
|
+
*/function focusWithVisible(element, focusSource) {
|
|
32
|
+
if (focusSource == null) {
|
|
33
|
+
element.focus();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
element.focus({
|
|
38
|
+
focusVisible: focusSource === 'keyboard'
|
|
39
|
+
});
|
|
40
|
+
} catch (error) {
|
|
41
|
+
// If the browser doesn't support the focus options argument, fall back to a simple focus call.
|
|
42
|
+
element.focus();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
27
45
|
const overridesResolver = (props, styles) => {
|
|
28
46
|
const {
|
|
29
47
|
ownerState
|
|
@@ -170,6 +188,7 @@ const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(inProps, ref) {
|
|
|
170
188
|
className,
|
|
171
189
|
...other
|
|
172
190
|
} = props;
|
|
191
|
+
const focusSource = (0, _Select.useSelectFocusSource)();
|
|
173
192
|
const context = React.useContext(_ListContext.default);
|
|
174
193
|
const childContext = React.useMemo(() => ({
|
|
175
194
|
dense: dense || context.dense || false,
|
|
@@ -179,11 +198,12 @@ const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(inProps, ref) {
|
|
|
179
198
|
(0, _useEnhancedEffect.default)(() => {
|
|
180
199
|
if (autoFocus) {
|
|
181
200
|
if (menuItemRef.current) {
|
|
182
|
-
menuItemRef.current
|
|
201
|
+
focusWithVisible(menuItemRef.current, focusSource);
|
|
183
202
|
} else if (process.env.NODE_ENV !== 'production') {
|
|
184
203
|
console.error('MUI: Unable to set focus to a MenuItem whose component has not been rendered.');
|
|
185
204
|
}
|
|
186
205
|
}
|
|
206
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
187
207
|
}, [autoFocus]);
|
|
188
208
|
const ownerState = {
|
|
189
209
|
...props,
|
package/MenuItem/MenuItem.mjs
CHANGED
|
@@ -16,7 +16,27 @@ import { dividerClasses } from "../Divider/index.mjs";
|
|
|
16
16
|
import { listItemIconClasses } from "../ListItemIcon/index.mjs";
|
|
17
17
|
import { listItemTextClasses } from "../ListItemText/index.mjs";
|
|
18
18
|
import menuItemClasses, { getMenuItemUtilityClass } from "./menuItemClasses.mjs";
|
|
19
|
+
import { useSelectFocusSource } from "../Select/index.mjs";
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* If autoFocus is an object, it will attempt to call `element.focus()` with the options argument.
|
|
23
|
+
* If the browser doesn't support the options argument, it will fall back to a simple `element.focus()` call.
|
|
24
|
+
*/
|
|
19
25
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
26
|
+
function focusWithVisible(element, focusSource) {
|
|
27
|
+
if (focusSource == null) {
|
|
28
|
+
element.focus();
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
element.focus({
|
|
33
|
+
focusVisible: focusSource === 'keyboard'
|
|
34
|
+
});
|
|
35
|
+
} catch (error) {
|
|
36
|
+
// If the browser doesn't support the focus options argument, fall back to a simple focus call.
|
|
37
|
+
element.focus();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
20
40
|
export const overridesResolver = (props, styles) => {
|
|
21
41
|
const {
|
|
22
42
|
ownerState
|
|
@@ -162,6 +182,7 @@ const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(inProps, ref) {
|
|
|
162
182
|
className,
|
|
163
183
|
...other
|
|
164
184
|
} = props;
|
|
185
|
+
const focusSource = useSelectFocusSource();
|
|
165
186
|
const context = React.useContext(ListContext);
|
|
166
187
|
const childContext = React.useMemo(() => ({
|
|
167
188
|
dense: dense || context.dense || false,
|
|
@@ -171,11 +192,12 @@ const MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(inProps, ref) {
|
|
|
171
192
|
useEnhancedEffect(() => {
|
|
172
193
|
if (autoFocus) {
|
|
173
194
|
if (menuItemRef.current) {
|
|
174
|
-
menuItemRef.current
|
|
195
|
+
focusWithVisible(menuItemRef.current, focusSource);
|
|
175
196
|
} else if (process.env.NODE_ENV !== 'production') {
|
|
176
197
|
console.error('MUI: Unable to set focus to a MenuItem whose component has not been rendered.');
|
|
177
198
|
}
|
|
178
199
|
}
|
|
200
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
179
201
|
}, [autoFocus]);
|
|
180
202
|
const ownerState = {
|
|
181
203
|
...props,
|
package/MenuList/MenuList.js
CHANGED
|
@@ -10,6 +10,7 @@ exports.default = void 0;
|
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _reactIs = require("react-is");
|
|
12
12
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
|
+
var _useRovingTabIndex = _interopRequireDefault(require("../utils/useRovingTabIndex"));
|
|
13
14
|
var _ownerDocument = _interopRequireDefault(require("../utils/ownerDocument"));
|
|
14
15
|
var _List = _interopRequireDefault(require("../List"));
|
|
15
16
|
var _getActiveElement = _interopRequireDefault(require("../utils/getActiveElement"));
|
|
@@ -18,24 +19,6 @@ var _useForkRef = _interopRequireDefault(require("../utils/useForkRef"));
|
|
|
18
19
|
var _useEnhancedEffect = _interopRequireDefault(require("../utils/useEnhancedEffect"));
|
|
19
20
|
var _utils = require("../utils");
|
|
20
21
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
21
|
-
function nextItem(list, item, disableListWrap) {
|
|
22
|
-
if (list === item) {
|
|
23
|
-
return list.firstChild;
|
|
24
|
-
}
|
|
25
|
-
if (item && item.nextElementSibling) {
|
|
26
|
-
return item.nextElementSibling;
|
|
27
|
-
}
|
|
28
|
-
return disableListWrap ? null : list.firstChild;
|
|
29
|
-
}
|
|
30
|
-
function previousItem(list, item, disableListWrap) {
|
|
31
|
-
if (list === item) {
|
|
32
|
-
return disableListWrap ? list.firstChild : list.lastChild;
|
|
33
|
-
}
|
|
34
|
-
if (item && item.previousElementSibling) {
|
|
35
|
-
return item.previousElementSibling;
|
|
36
|
-
}
|
|
37
|
-
return disableListWrap ? null : list.lastChild;
|
|
38
|
-
}
|
|
39
22
|
function textCriteriaMatches(nextFocus, textCriteria) {
|
|
40
23
|
if (textCriteria === undefined) {
|
|
41
24
|
return true;
|
|
@@ -54,29 +37,20 @@ function textCriteriaMatches(nextFocus, textCriteria) {
|
|
|
54
37
|
}
|
|
55
38
|
return text.startsWith(textCriteria.keys.join(''));
|
|
56
39
|
}
|
|
57
|
-
function
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
// Same logic as useAutocomplete.js
|
|
70
|
-
const nextFocusDisabled = disabledItemsFocusable ? false : nextFocus.disabled || nextFocus.getAttribute('aria-disabled') === 'true';
|
|
71
|
-
if (!nextFocus.hasAttribute('tabindex') || !textCriteriaMatches(nextFocus, textCriteria) || nextFocusDisabled) {
|
|
72
|
-
// Move to the next element.
|
|
73
|
-
nextFocus = traversalFunction(list, nextFocus, disableListWrap);
|
|
74
|
-
} else {
|
|
75
|
-
nextFocus.focus();
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
40
|
+
function shouldFocusWithTextCriteria(element, criteria, disabledItemsFocusable) {
|
|
41
|
+
if (!textCriteriaMatches(element, criteria)) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
return shouldFocus(element, disabledItemsFocusable);
|
|
45
|
+
}
|
|
46
|
+
function shouldFocus(element, disabledItemsFocusable) {
|
|
47
|
+
if (!element || !element.hasAttribute('tabindex')) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
if (disabledItemsFocusable) {
|
|
51
|
+
return true;
|
|
78
52
|
}
|
|
79
|
-
return
|
|
53
|
+
return !element.disabled && element.getAttribute('aria-disabled') !== 'true';
|
|
80
54
|
}
|
|
81
55
|
|
|
82
56
|
/**
|
|
@@ -127,65 +101,6 @@ const MenuList = /*#__PURE__*/React.forwardRef(function MenuList(props, ref) {
|
|
|
127
101
|
return listRef.current;
|
|
128
102
|
}
|
|
129
103
|
}), []);
|
|
130
|
-
const handleKeyDown = event => {
|
|
131
|
-
const list = listRef.current;
|
|
132
|
-
const key = event.key;
|
|
133
|
-
const isModifierKeyPressed = event.ctrlKey || event.metaKey || event.altKey;
|
|
134
|
-
if (isModifierKeyPressed) {
|
|
135
|
-
if (onKeyDown) {
|
|
136
|
-
onKeyDown(event);
|
|
137
|
-
}
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* @type {Element} - will always be defined since we are in a keydown handler
|
|
143
|
-
* attached to an element. A keydown event is either dispatched to the activeElement
|
|
144
|
-
* or document.body or document.documentElement. Only the first case will
|
|
145
|
-
* trigger this specific handler.
|
|
146
|
-
*/
|
|
147
|
-
const currentFocus = (0, _getActiveElement.default)((0, _ownerDocument.default)(list));
|
|
148
|
-
if (key === 'ArrowDown') {
|
|
149
|
-
// Prevent scroll of the page
|
|
150
|
-
event.preventDefault();
|
|
151
|
-
moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, nextItem);
|
|
152
|
-
} else if (key === 'ArrowUp') {
|
|
153
|
-
event.preventDefault();
|
|
154
|
-
moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, previousItem);
|
|
155
|
-
} else if (key === 'Home') {
|
|
156
|
-
event.preventDefault();
|
|
157
|
-
moveFocus(list, null, disableListWrap, disabledItemsFocusable, nextItem);
|
|
158
|
-
} else if (key === 'End') {
|
|
159
|
-
event.preventDefault();
|
|
160
|
-
moveFocus(list, null, disableListWrap, disabledItemsFocusable, previousItem);
|
|
161
|
-
} else if (key.length === 1) {
|
|
162
|
-
const criteria = textCriteriaRef.current;
|
|
163
|
-
const lowerKey = key.toLowerCase();
|
|
164
|
-
const currTime = performance.now();
|
|
165
|
-
if (criteria.keys.length > 0) {
|
|
166
|
-
// Reset
|
|
167
|
-
if (currTime - criteria.lastTime > 500) {
|
|
168
|
-
criteria.keys = [];
|
|
169
|
-
criteria.repeating = true;
|
|
170
|
-
criteria.previousKeyMatched = true;
|
|
171
|
-
} else if (criteria.repeating && lowerKey !== criteria.keys[0]) {
|
|
172
|
-
criteria.repeating = false;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
criteria.lastTime = currTime;
|
|
176
|
-
criteria.keys.push(lowerKey);
|
|
177
|
-
const keepFocusOnCurrent = currentFocus && !criteria.repeating && textCriteriaMatches(currentFocus, criteria);
|
|
178
|
-
if (criteria.previousKeyMatched && (keepFocusOnCurrent || moveFocus(list, currentFocus, false, disabledItemsFocusable, nextItem, criteria))) {
|
|
179
|
-
event.preventDefault();
|
|
180
|
-
} else {
|
|
181
|
-
criteria.previousKeyMatched = false;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
if (onKeyDown) {
|
|
185
|
-
onKeyDown(event);
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
|
-
const handleRef = (0, _useForkRef.default)(listRef, ref);
|
|
189
104
|
|
|
190
105
|
/**
|
|
191
106
|
* the index of the item should receive focus
|
|
@@ -227,25 +142,78 @@ const MenuList = /*#__PURE__*/React.forwardRef(function MenuList(props, ref) {
|
|
|
227
142
|
}
|
|
228
143
|
}
|
|
229
144
|
});
|
|
145
|
+
const {
|
|
146
|
+
focusNext,
|
|
147
|
+
getContainerProps,
|
|
148
|
+
getItemProps
|
|
149
|
+
} = (0, _useRovingTabIndex.default)({
|
|
150
|
+
focusableIndex: activeItemIndex,
|
|
151
|
+
orientation: 'vertical',
|
|
152
|
+
shouldWrap: !disableListWrap,
|
|
153
|
+
shouldFocus: element => shouldFocus(element, disabledItemsFocusable)
|
|
154
|
+
});
|
|
155
|
+
const rovingTabIndexContainerProps = getContainerProps();
|
|
156
|
+
const handleRef = (0, _useForkRef.default)(listRef, rovingTabIndexContainerProps.ref, ref);
|
|
157
|
+
let focusableIndex = 0;
|
|
230
158
|
const items = React.Children.map(children, (child, index) => {
|
|
231
|
-
if (
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
159
|
+
if (! /*#__PURE__*/React.isValidElement(child) || child.props.muiSkipListHighlight || child.type.muiSkipListHighlight) {
|
|
160
|
+
return child;
|
|
161
|
+
}
|
|
162
|
+
const rovingTabIndexItemProps = getItemProps(focusableIndex, child.ref);
|
|
163
|
+
const newChildProps = {
|
|
164
|
+
ref: rovingTabIndexItemProps.ref
|
|
165
|
+
};
|
|
166
|
+
if (child.props.tabIndex === undefined && variant === 'selectedMenu') {
|
|
167
|
+
newChildProps.tabIndex = rovingTabIndexItemProps.tabIndex;
|
|
168
|
+
}
|
|
169
|
+
if (index === activeItemIndex && autoFocusItem) {
|
|
170
|
+
newChildProps.autoFocus = true;
|
|
171
|
+
}
|
|
172
|
+
focusableIndex += 1;
|
|
173
|
+
return /*#__PURE__*/React.cloneElement(child, newChildProps);
|
|
174
|
+
});
|
|
175
|
+
const handleKeyDown = event => {
|
|
176
|
+
const isModifierKeyPressed = event.ctrlKey || event.metaKey || event.altKey;
|
|
177
|
+
if (isModifierKeyPressed && onKeyDown) {
|
|
178
|
+
onKeyDown(event);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
rovingTabIndexContainerProps.onKeyDown(event);
|
|
182
|
+
if (event.key.length === 1) {
|
|
183
|
+
const criteria = textCriteriaRef.current;
|
|
184
|
+
const lowerKey = event.key.toLowerCase();
|
|
185
|
+
const currTime = performance.now();
|
|
186
|
+
if (criteria.keys.length > 0) {
|
|
187
|
+
// Reset
|
|
188
|
+
if (currTime - criteria.lastTime > 500) {
|
|
189
|
+
criteria.keys = [];
|
|
190
|
+
criteria.repeating = true;
|
|
191
|
+
criteria.previousKeyMatched = true;
|
|
192
|
+
} else if (criteria.repeating && lowerKey !== criteria.keys[0]) {
|
|
193
|
+
criteria.repeating = false;
|
|
194
|
+
}
|
|
235
195
|
}
|
|
236
|
-
|
|
237
|
-
|
|
196
|
+
criteria.lastTime = currTime;
|
|
197
|
+
criteria.keys.push(lowerKey);
|
|
198
|
+
const currentFocus = (0, _getActiveElement.default)((0, _ownerDocument.default)(listRef.current));
|
|
199
|
+
const keepFocusOnCurrent = currentFocus && !criteria.repeating && textCriteriaMatches(currentFocus, criteria);
|
|
200
|
+
if (criteria.previousKeyMatched && (keepFocusOnCurrent || focusNext(element => shouldFocusWithTextCriteria(element, criteria, disabledItemsFocusable)) !== -1)) {
|
|
201
|
+
event.preventDefault();
|
|
202
|
+
} else {
|
|
203
|
+
criteria.previousKeyMatched = false;
|
|
238
204
|
}
|
|
239
|
-
return /*#__PURE__*/React.cloneElement(child, newChildProps);
|
|
240
205
|
}
|
|
241
|
-
|
|
242
|
-
|
|
206
|
+
if (onKeyDown) {
|
|
207
|
+
onKeyDown(event);
|
|
208
|
+
}
|
|
209
|
+
};
|
|
243
210
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_List.default, {
|
|
244
211
|
role: "menu",
|
|
245
212
|
ref: handleRef,
|
|
246
213
|
className: className,
|
|
247
214
|
onKeyDown: handleKeyDown,
|
|
248
|
-
|
|
215
|
+
onFocus: rovingTabIndexContainerProps.onFocus,
|
|
216
|
+
tabIndex: -1,
|
|
249
217
|
...other,
|
|
250
218
|
children: items
|
|
251
219
|
});
|