@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/Tabs/Tabs.js
CHANGED
|
@@ -24,53 +24,11 @@ var _ScrollbarSize = _interopRequireDefault(require("./ScrollbarSize"));
|
|
|
24
24
|
var _TabScrollButton = _interopRequireDefault(require("../TabScrollButton"));
|
|
25
25
|
var _useEventCallback = _interopRequireDefault(require("../utils/useEventCallback"));
|
|
26
26
|
var _tabsClasses = _interopRequireWildcard(require("./tabsClasses"));
|
|
27
|
-
var _ownerDocument = _interopRequireDefault(require("../utils/ownerDocument"));
|
|
28
27
|
var _ownerWindow = _interopRequireDefault(require("../utils/ownerWindow"));
|
|
29
|
-
var _getActiveElement = _interopRequireDefault(require("../utils/getActiveElement"));
|
|
30
28
|
var _isLayoutSupported = _interopRequireDefault(require("../utils/isLayoutSupported"));
|
|
31
29
|
var _useSlot = _interopRequireDefault(require("../utils/useSlot"));
|
|
30
|
+
var _utils = require("../utils");
|
|
32
31
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
33
|
-
const nextItem = (list, item) => {
|
|
34
|
-
if (list === item) {
|
|
35
|
-
return list.firstChild;
|
|
36
|
-
}
|
|
37
|
-
if (item && item.nextElementSibling) {
|
|
38
|
-
return item.nextElementSibling;
|
|
39
|
-
}
|
|
40
|
-
return list.firstChild;
|
|
41
|
-
};
|
|
42
|
-
const previousItem = (list, item) => {
|
|
43
|
-
if (list === item) {
|
|
44
|
-
return list.lastChild;
|
|
45
|
-
}
|
|
46
|
-
if (item && item.previousElementSibling) {
|
|
47
|
-
return item.previousElementSibling;
|
|
48
|
-
}
|
|
49
|
-
return list.lastChild;
|
|
50
|
-
};
|
|
51
|
-
const moveFocus = (list, currentFocus, traversalFunction) => {
|
|
52
|
-
let wrappedOnce = false;
|
|
53
|
-
let nextFocus = traversalFunction(list, currentFocus);
|
|
54
|
-
while (nextFocus) {
|
|
55
|
-
// Prevent infinite loop.
|
|
56
|
-
if (nextFocus === list.firstChild) {
|
|
57
|
-
if (wrappedOnce) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
wrappedOnce = true;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// Same logic as useAutocomplete.js
|
|
64
|
-
const nextFocusDisabled = nextFocus.disabled || nextFocus.getAttribute('aria-disabled') === 'true';
|
|
65
|
-
if (!nextFocus.hasAttribute('tabindex') || nextFocusDisabled) {
|
|
66
|
-
// Move to the next element.
|
|
67
|
-
nextFocus = traversalFunction(list, nextFocus);
|
|
68
|
-
} else {
|
|
69
|
-
nextFocus.focus();
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
32
|
const useUtilityClasses = ownerState => {
|
|
75
33
|
const {
|
|
76
34
|
vertical,
|
|
@@ -280,16 +238,10 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
280
238
|
indicatorColor = 'primary',
|
|
281
239
|
onChange,
|
|
282
240
|
orientation = 'horizontal',
|
|
283
|
-
ScrollButtonComponent,
|
|
284
|
-
// TODO: remove in v7 (deprecated in v6)
|
|
285
241
|
scrollButtons = 'auto',
|
|
286
242
|
selectionFollowsFocus,
|
|
287
243
|
slots = {},
|
|
288
244
|
slotProps = {},
|
|
289
|
-
TabIndicatorProps = {},
|
|
290
|
-
// TODO: remove in v7 (deprecated in v6)
|
|
291
|
-
TabScrollButtonProps = {},
|
|
292
|
-
// TODO: remove in v7 (deprecated in v6)
|
|
293
245
|
textColor = 'primary',
|
|
294
246
|
value,
|
|
295
247
|
variant = 'standard',
|
|
@@ -323,12 +275,12 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
323
275
|
};
|
|
324
276
|
const classes = useUtilityClasses(ownerState);
|
|
325
277
|
const startScrollButtonIconProps = (0, _useSlotProps.default)({
|
|
326
|
-
elementType: slots.
|
|
278
|
+
elementType: slots.startScrollButtonIcon,
|
|
327
279
|
externalSlotProps: slotProps.startScrollButtonIcon,
|
|
328
280
|
ownerState
|
|
329
281
|
});
|
|
330
282
|
const endScrollButtonIconProps = (0, _useSlotProps.default)({
|
|
331
|
-
elementType: slots.
|
|
283
|
+
elementType: slots.endScrollButtonIcon,
|
|
332
284
|
externalSlotProps: slotProps.endScrollButtonIcon,
|
|
333
285
|
ownerState
|
|
334
286
|
});
|
|
@@ -351,11 +303,7 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
351
303
|
const tabListRef = React.useRef(null);
|
|
352
304
|
const externalForwardedProps = {
|
|
353
305
|
slots,
|
|
354
|
-
slotProps
|
|
355
|
-
indicator: TabIndicatorProps,
|
|
356
|
-
scrollButtons: TabScrollButtonProps,
|
|
357
|
-
...slotProps
|
|
358
|
-
}
|
|
306
|
+
slotProps
|
|
359
307
|
};
|
|
360
308
|
const getTabsMeta = () => {
|
|
361
309
|
const tabsNode = tabsRef.current;
|
|
@@ -499,15 +447,15 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
499
447
|
});
|
|
500
448
|
}, [scrollbarOnChange]);
|
|
501
449
|
const [ScrollButtonsSlot, scrollButtonSlotProps] = (0, _useSlot.default)('scrollButtons', {
|
|
502
|
-
className:
|
|
450
|
+
className: classes.scrollButtons,
|
|
503
451
|
elementType: _TabScrollButton.default,
|
|
504
452
|
externalForwardedProps,
|
|
505
453
|
ownerState,
|
|
506
454
|
additionalProps: {
|
|
507
455
|
orientation,
|
|
508
456
|
slots: {
|
|
509
|
-
StartScrollButtonIcon: slots.startScrollButtonIcon
|
|
510
|
-
EndScrollButtonIcon: slots.endScrollButtonIcon
|
|
457
|
+
StartScrollButtonIcon: slots.startScrollButtonIcon,
|
|
458
|
+
EndScrollButtonIcon: slots.endScrollButtonIcon
|
|
511
459
|
},
|
|
512
460
|
slotProps: {
|
|
513
461
|
startScrollButtonIcon: startScrollButtonIconProps,
|
|
@@ -662,7 +610,7 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
662
610
|
updateScrollButtons: updateScrollButtonState
|
|
663
611
|
}), [updateIndicatorState, updateScrollButtonState]);
|
|
664
612
|
const [IndicatorSlot, indicatorSlotProps] = (0, _useSlot.default)('indicator', {
|
|
665
|
-
className:
|
|
613
|
+
className: classes.indicator,
|
|
666
614
|
elementType: TabsIndicator,
|
|
667
615
|
externalForwardedProps,
|
|
668
616
|
ownerState,
|
|
@@ -673,20 +621,37 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
673
621
|
const indicator = /*#__PURE__*/(0, _jsxRuntime.jsx)(IndicatorSlot, {
|
|
674
622
|
...indicatorSlotProps
|
|
675
623
|
});
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
if (! /*#__PURE__*/React.isValidElement(child)) {
|
|
679
|
-
return null;
|
|
680
|
-
}
|
|
624
|
+
const validChildren = React.Children.toArray(childrenProp).filter(React.isValidElement).map((child, index) => {
|
|
625
|
+
const childValue = child.props.value === undefined ? index : child.props.value;
|
|
681
626
|
if (process.env.NODE_ENV !== 'production') {
|
|
682
627
|
if ((0, _reactIs.isFragment)(child)) {
|
|
683
628
|
console.error(["MUI: The Tabs component doesn't accept a Fragment as a child.", 'Consider providing an array instead.'].join('\n'));
|
|
684
629
|
}
|
|
685
630
|
}
|
|
686
|
-
|
|
687
|
-
|
|
631
|
+
valueToIndex.set(childValue, index);
|
|
632
|
+
return {
|
|
633
|
+
child,
|
|
634
|
+
index,
|
|
635
|
+
childValue
|
|
636
|
+
};
|
|
637
|
+
});
|
|
638
|
+
const focusableIndex = valueToIndex.get(value);
|
|
639
|
+
const {
|
|
640
|
+
getContainerProps,
|
|
641
|
+
getItemProps
|
|
642
|
+
} = (0, _utils.useRovingTabIndex)({
|
|
643
|
+
focusableIndex,
|
|
644
|
+
orientation,
|
|
645
|
+
isRtl
|
|
646
|
+
});
|
|
647
|
+
const rovingTabIndexContainerProps = getContainerProps();
|
|
648
|
+
const children = validChildren.map(({
|
|
649
|
+
child,
|
|
650
|
+
index,
|
|
651
|
+
childValue
|
|
652
|
+
}) => {
|
|
688
653
|
const selected = childValue === value;
|
|
689
|
-
|
|
654
|
+
const rovingTabIndexItemProps = getItemProps(index, child.ref);
|
|
690
655
|
return /*#__PURE__*/React.cloneElement(child, {
|
|
691
656
|
fullWidth: variant === 'fullWidth',
|
|
692
657
|
indicator: selected && !mounted && indicator,
|
|
@@ -695,53 +660,10 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
695
660
|
onChange,
|
|
696
661
|
textColor,
|
|
697
662
|
value: childValue,
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
} : {})
|
|
663
|
+
ref: rovingTabIndexItemProps.ref,
|
|
664
|
+
tabIndex: child.props.tabIndex ?? rovingTabIndexItemProps.tabIndex
|
|
701
665
|
});
|
|
702
666
|
});
|
|
703
|
-
const handleKeyDown = event => {
|
|
704
|
-
// Check if a modifier key (Alt, Shift, Ctrl, Meta) is pressed
|
|
705
|
-
if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) {
|
|
706
|
-
return;
|
|
707
|
-
}
|
|
708
|
-
const list = tabListRef.current;
|
|
709
|
-
const currentFocus = (0, _getActiveElement.default)((0, _ownerDocument.default)(list));
|
|
710
|
-
// Keyboard navigation assumes that [role="tab"] are siblings
|
|
711
|
-
// though we might warn in the future about nested, interactive elements
|
|
712
|
-
// as a a11y violation
|
|
713
|
-
const role = currentFocus?.getAttribute('role');
|
|
714
|
-
if (role !== 'tab') {
|
|
715
|
-
return;
|
|
716
|
-
}
|
|
717
|
-
let previousItemKey = orientation === 'horizontal' ? 'ArrowLeft' : 'ArrowUp';
|
|
718
|
-
let nextItemKey = orientation === 'horizontal' ? 'ArrowRight' : 'ArrowDown';
|
|
719
|
-
if (orientation === 'horizontal' && isRtl) {
|
|
720
|
-
// swap previousItemKey with nextItemKey
|
|
721
|
-
previousItemKey = 'ArrowRight';
|
|
722
|
-
nextItemKey = 'ArrowLeft';
|
|
723
|
-
}
|
|
724
|
-
switch (event.key) {
|
|
725
|
-
case previousItemKey:
|
|
726
|
-
event.preventDefault();
|
|
727
|
-
moveFocus(list, currentFocus, previousItem);
|
|
728
|
-
break;
|
|
729
|
-
case nextItemKey:
|
|
730
|
-
event.preventDefault();
|
|
731
|
-
moveFocus(list, currentFocus, nextItem);
|
|
732
|
-
break;
|
|
733
|
-
case 'Home':
|
|
734
|
-
event.preventDefault();
|
|
735
|
-
moveFocus(list, null, nextItem);
|
|
736
|
-
break;
|
|
737
|
-
case 'End':
|
|
738
|
-
event.preventDefault();
|
|
739
|
-
moveFocus(list, null, previousItem);
|
|
740
|
-
break;
|
|
741
|
-
default:
|
|
742
|
-
break;
|
|
743
|
-
}
|
|
744
|
-
};
|
|
745
667
|
const conditionalElements = getConditionalElements();
|
|
746
668
|
const [RootSlot, rootSlotProps] = (0, _useSlot.default)('root', {
|
|
747
669
|
ref,
|
|
@@ -767,8 +689,21 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
767
689
|
}
|
|
768
690
|
}
|
|
769
691
|
});
|
|
692
|
+
const mergedRef = (0, _utils.useForkRef)(rovingTabIndexContainerProps.ref, tabListRef);
|
|
693
|
+
const handleKeyDown = event => {
|
|
694
|
+
const list = tabListRef.current;
|
|
695
|
+
const currentFocus = (0, _utils.getActiveElement)((0, _utils.ownerDocument)(list));
|
|
696
|
+
// Keyboard navigation assumes that [role="tab"] are siblings
|
|
697
|
+
// though we might warn in the future about nested, interactive elements
|
|
698
|
+
// as a a11y violation
|
|
699
|
+
const role = currentFocus?.getAttribute('role');
|
|
700
|
+
if (role !== 'tab') {
|
|
701
|
+
return;
|
|
702
|
+
}
|
|
703
|
+
rovingTabIndexContainerProps.onKeyDown(event);
|
|
704
|
+
};
|
|
770
705
|
const [ListSlot, listSlotProps] = (0, _useSlot.default)('list', {
|
|
771
|
-
ref:
|
|
706
|
+
ref: mergedRef,
|
|
772
707
|
className: (0, _clsx.default)(classes.list, classes.flexContainer),
|
|
773
708
|
elementType: List,
|
|
774
709
|
externalForwardedProps,
|
|
@@ -778,6 +713,10 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
778
713
|
onKeyDown: event => {
|
|
779
714
|
handleKeyDown(event);
|
|
780
715
|
handlers.onKeyDown?.(event);
|
|
716
|
+
},
|
|
717
|
+
onFocus: event => {
|
|
718
|
+
rovingTabIndexContainerProps.onFocus(event);
|
|
719
|
+
handlers.onFocus?.(event);
|
|
781
720
|
}
|
|
782
721
|
})
|
|
783
722
|
});
|
|
@@ -864,12 +803,6 @@ process.env.NODE_ENV !== "production" ? Tabs.propTypes /* remove-proptypes */ =
|
|
|
864
803
|
* @default 'horizontal'
|
|
865
804
|
*/
|
|
866
805
|
orientation: _propTypes.default.oneOf(['horizontal', 'vertical']),
|
|
867
|
-
/**
|
|
868
|
-
* The component used to render the scroll buttons.
|
|
869
|
-
* @deprecated use the `slots.scrollButtons` 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.
|
|
870
|
-
* @default TabScrollButton
|
|
871
|
-
*/
|
|
872
|
-
ScrollButtonComponent: _propTypes.default.elementType,
|
|
873
806
|
/**
|
|
874
807
|
* Determine behavior of scroll buttons when tabs are set to scroll:
|
|
875
808
|
*
|
|
@@ -907,32 +840,18 @@ process.env.NODE_ENV !== "production" ? Tabs.propTypes /* remove-proptypes */ =
|
|
|
907
840
|
*/
|
|
908
841
|
slots: _propTypes.default.shape({
|
|
909
842
|
endScrollButtonIcon: _propTypes.default.elementType,
|
|
910
|
-
EndScrollButtonIcon: _propTypes.default.elementType,
|
|
911
843
|
indicator: _propTypes.default.elementType,
|
|
912
844
|
list: _propTypes.default.elementType,
|
|
913
845
|
root: _propTypes.default.elementType,
|
|
914
846
|
scrollbar: _propTypes.default.elementType,
|
|
915
847
|
scrollButtons: _propTypes.default.elementType,
|
|
916
848
|
scroller: _propTypes.default.elementType,
|
|
917
|
-
startScrollButtonIcon: _propTypes.default.elementType
|
|
918
|
-
StartScrollButtonIcon: _propTypes.default.elementType
|
|
849
|
+
startScrollButtonIcon: _propTypes.default.elementType
|
|
919
850
|
}),
|
|
920
851
|
/**
|
|
921
852
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
922
853
|
*/
|
|
923
854
|
sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object]),
|
|
924
|
-
/**
|
|
925
|
-
* Props applied to the tab indicator element.
|
|
926
|
-
* @deprecated use the `slotProps.indicator` 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.
|
|
927
|
-
* @default {}
|
|
928
|
-
*/
|
|
929
|
-
TabIndicatorProps: _propTypes.default.object,
|
|
930
|
-
/**
|
|
931
|
-
* Props applied to the [`TabScrollButton`](https://mui.com/material-ui/api/tab-scroll-button/) element.
|
|
932
|
-
* @deprecated use the `slotProps.scrollButtons` 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.
|
|
933
|
-
* @default {}
|
|
934
|
-
*/
|
|
935
|
-
TabScrollButtonProps: _propTypes.default.object,
|
|
936
855
|
/**
|
|
937
856
|
* Determines the color of the `Tab`.
|
|
938
857
|
* @default 'primary'
|
package/Tabs/Tabs.mjs
CHANGED
|
@@ -17,53 +17,11 @@ import ScrollbarSize from "./ScrollbarSize.mjs";
|
|
|
17
17
|
import TabScrollButton from "../TabScrollButton/index.mjs";
|
|
18
18
|
import useEventCallback from "../utils/useEventCallback.mjs";
|
|
19
19
|
import tabsClasses, { getTabsUtilityClass } from "./tabsClasses.mjs";
|
|
20
|
-
import ownerDocument from "../utils/ownerDocument.mjs";
|
|
21
20
|
import ownerWindow from "../utils/ownerWindow.mjs";
|
|
22
|
-
import getActiveElement from "../utils/getActiveElement.mjs";
|
|
23
21
|
import isLayoutSupported from "../utils/isLayoutSupported.mjs";
|
|
24
22
|
import useSlot from "../utils/useSlot.mjs";
|
|
23
|
+
import { ownerDocument, useForkRef, getActiveElement, useRovingTabIndex } from "../utils/index.mjs";
|
|
25
24
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
26
|
-
const nextItem = (list, item) => {
|
|
27
|
-
if (list === item) {
|
|
28
|
-
return list.firstChild;
|
|
29
|
-
}
|
|
30
|
-
if (item && item.nextElementSibling) {
|
|
31
|
-
return item.nextElementSibling;
|
|
32
|
-
}
|
|
33
|
-
return list.firstChild;
|
|
34
|
-
};
|
|
35
|
-
const previousItem = (list, item) => {
|
|
36
|
-
if (list === item) {
|
|
37
|
-
return list.lastChild;
|
|
38
|
-
}
|
|
39
|
-
if (item && item.previousElementSibling) {
|
|
40
|
-
return item.previousElementSibling;
|
|
41
|
-
}
|
|
42
|
-
return list.lastChild;
|
|
43
|
-
};
|
|
44
|
-
const moveFocus = (list, currentFocus, traversalFunction) => {
|
|
45
|
-
let wrappedOnce = false;
|
|
46
|
-
let nextFocus = traversalFunction(list, currentFocus);
|
|
47
|
-
while (nextFocus) {
|
|
48
|
-
// Prevent infinite loop.
|
|
49
|
-
if (nextFocus === list.firstChild) {
|
|
50
|
-
if (wrappedOnce) {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
wrappedOnce = true;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Same logic as useAutocomplete.js
|
|
57
|
-
const nextFocusDisabled = nextFocus.disabled || nextFocus.getAttribute('aria-disabled') === 'true';
|
|
58
|
-
if (!nextFocus.hasAttribute('tabindex') || nextFocusDisabled) {
|
|
59
|
-
// Move to the next element.
|
|
60
|
-
nextFocus = traversalFunction(list, nextFocus);
|
|
61
|
-
} else {
|
|
62
|
-
nextFocus.focus();
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
25
|
const useUtilityClasses = ownerState => {
|
|
68
26
|
const {
|
|
69
27
|
vertical,
|
|
@@ -273,16 +231,10 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
273
231
|
indicatorColor = 'primary',
|
|
274
232
|
onChange,
|
|
275
233
|
orientation = 'horizontal',
|
|
276
|
-
ScrollButtonComponent,
|
|
277
|
-
// TODO: remove in v7 (deprecated in v6)
|
|
278
234
|
scrollButtons = 'auto',
|
|
279
235
|
selectionFollowsFocus,
|
|
280
236
|
slots = {},
|
|
281
237
|
slotProps = {},
|
|
282
|
-
TabIndicatorProps = {},
|
|
283
|
-
// TODO: remove in v7 (deprecated in v6)
|
|
284
|
-
TabScrollButtonProps = {},
|
|
285
|
-
// TODO: remove in v7 (deprecated in v6)
|
|
286
238
|
textColor = 'primary',
|
|
287
239
|
value,
|
|
288
240
|
variant = 'standard',
|
|
@@ -316,12 +268,12 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
316
268
|
};
|
|
317
269
|
const classes = useUtilityClasses(ownerState);
|
|
318
270
|
const startScrollButtonIconProps = useSlotProps({
|
|
319
|
-
elementType: slots.
|
|
271
|
+
elementType: slots.startScrollButtonIcon,
|
|
320
272
|
externalSlotProps: slotProps.startScrollButtonIcon,
|
|
321
273
|
ownerState
|
|
322
274
|
});
|
|
323
275
|
const endScrollButtonIconProps = useSlotProps({
|
|
324
|
-
elementType: slots.
|
|
276
|
+
elementType: slots.endScrollButtonIcon,
|
|
325
277
|
externalSlotProps: slotProps.endScrollButtonIcon,
|
|
326
278
|
ownerState
|
|
327
279
|
});
|
|
@@ -344,11 +296,7 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
344
296
|
const tabListRef = React.useRef(null);
|
|
345
297
|
const externalForwardedProps = {
|
|
346
298
|
slots,
|
|
347
|
-
slotProps
|
|
348
|
-
indicator: TabIndicatorProps,
|
|
349
|
-
scrollButtons: TabScrollButtonProps,
|
|
350
|
-
...slotProps
|
|
351
|
-
}
|
|
299
|
+
slotProps
|
|
352
300
|
};
|
|
353
301
|
const getTabsMeta = () => {
|
|
354
302
|
const tabsNode = tabsRef.current;
|
|
@@ -492,15 +440,15 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
492
440
|
});
|
|
493
441
|
}, [scrollbarOnChange]);
|
|
494
442
|
const [ScrollButtonsSlot, scrollButtonSlotProps] = useSlot('scrollButtons', {
|
|
495
|
-
className:
|
|
443
|
+
className: classes.scrollButtons,
|
|
496
444
|
elementType: TabScrollButton,
|
|
497
445
|
externalForwardedProps,
|
|
498
446
|
ownerState,
|
|
499
447
|
additionalProps: {
|
|
500
448
|
orientation,
|
|
501
449
|
slots: {
|
|
502
|
-
StartScrollButtonIcon: slots.startScrollButtonIcon
|
|
503
|
-
EndScrollButtonIcon: slots.endScrollButtonIcon
|
|
450
|
+
StartScrollButtonIcon: slots.startScrollButtonIcon,
|
|
451
|
+
EndScrollButtonIcon: slots.endScrollButtonIcon
|
|
504
452
|
},
|
|
505
453
|
slotProps: {
|
|
506
454
|
startScrollButtonIcon: startScrollButtonIconProps,
|
|
@@ -655,7 +603,7 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
655
603
|
updateScrollButtons: updateScrollButtonState
|
|
656
604
|
}), [updateIndicatorState, updateScrollButtonState]);
|
|
657
605
|
const [IndicatorSlot, indicatorSlotProps] = useSlot('indicator', {
|
|
658
|
-
className:
|
|
606
|
+
className: classes.indicator,
|
|
659
607
|
elementType: TabsIndicator,
|
|
660
608
|
externalForwardedProps,
|
|
661
609
|
ownerState,
|
|
@@ -666,20 +614,37 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
666
614
|
const indicator = /*#__PURE__*/_jsx(IndicatorSlot, {
|
|
667
615
|
...indicatorSlotProps
|
|
668
616
|
});
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
if (! /*#__PURE__*/React.isValidElement(child)) {
|
|
672
|
-
return null;
|
|
673
|
-
}
|
|
617
|
+
const validChildren = React.Children.toArray(childrenProp).filter(React.isValidElement).map((child, index) => {
|
|
618
|
+
const childValue = child.props.value === undefined ? index : child.props.value;
|
|
674
619
|
if (process.env.NODE_ENV !== 'production') {
|
|
675
620
|
if (isFragment(child)) {
|
|
676
621
|
console.error(["MUI: The Tabs component doesn't accept a Fragment as a child.", 'Consider providing an array instead.'].join('\n'));
|
|
677
622
|
}
|
|
678
623
|
}
|
|
679
|
-
|
|
680
|
-
|
|
624
|
+
valueToIndex.set(childValue, index);
|
|
625
|
+
return {
|
|
626
|
+
child,
|
|
627
|
+
index,
|
|
628
|
+
childValue
|
|
629
|
+
};
|
|
630
|
+
});
|
|
631
|
+
const focusableIndex = valueToIndex.get(value);
|
|
632
|
+
const {
|
|
633
|
+
getContainerProps,
|
|
634
|
+
getItemProps
|
|
635
|
+
} = useRovingTabIndex({
|
|
636
|
+
focusableIndex,
|
|
637
|
+
orientation,
|
|
638
|
+
isRtl
|
|
639
|
+
});
|
|
640
|
+
const rovingTabIndexContainerProps = getContainerProps();
|
|
641
|
+
const children = validChildren.map(({
|
|
642
|
+
child,
|
|
643
|
+
index,
|
|
644
|
+
childValue
|
|
645
|
+
}) => {
|
|
681
646
|
const selected = childValue === value;
|
|
682
|
-
|
|
647
|
+
const rovingTabIndexItemProps = getItemProps(index, child.ref);
|
|
683
648
|
return /*#__PURE__*/React.cloneElement(child, {
|
|
684
649
|
fullWidth: variant === 'fullWidth',
|
|
685
650
|
indicator: selected && !mounted && indicator,
|
|
@@ -688,53 +653,10 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
688
653
|
onChange,
|
|
689
654
|
textColor,
|
|
690
655
|
value: childValue,
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
} : {})
|
|
656
|
+
ref: rovingTabIndexItemProps.ref,
|
|
657
|
+
tabIndex: child.props.tabIndex ?? rovingTabIndexItemProps.tabIndex
|
|
694
658
|
});
|
|
695
659
|
});
|
|
696
|
-
const handleKeyDown = event => {
|
|
697
|
-
// Check if a modifier key (Alt, Shift, Ctrl, Meta) is pressed
|
|
698
|
-
if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) {
|
|
699
|
-
return;
|
|
700
|
-
}
|
|
701
|
-
const list = tabListRef.current;
|
|
702
|
-
const currentFocus = getActiveElement(ownerDocument(list));
|
|
703
|
-
// Keyboard navigation assumes that [role="tab"] are siblings
|
|
704
|
-
// though we might warn in the future about nested, interactive elements
|
|
705
|
-
// as a a11y violation
|
|
706
|
-
const role = currentFocus?.getAttribute('role');
|
|
707
|
-
if (role !== 'tab') {
|
|
708
|
-
return;
|
|
709
|
-
}
|
|
710
|
-
let previousItemKey = orientation === 'horizontal' ? 'ArrowLeft' : 'ArrowUp';
|
|
711
|
-
let nextItemKey = orientation === 'horizontal' ? 'ArrowRight' : 'ArrowDown';
|
|
712
|
-
if (orientation === 'horizontal' && isRtl) {
|
|
713
|
-
// swap previousItemKey with nextItemKey
|
|
714
|
-
previousItemKey = 'ArrowRight';
|
|
715
|
-
nextItemKey = 'ArrowLeft';
|
|
716
|
-
}
|
|
717
|
-
switch (event.key) {
|
|
718
|
-
case previousItemKey:
|
|
719
|
-
event.preventDefault();
|
|
720
|
-
moveFocus(list, currentFocus, previousItem);
|
|
721
|
-
break;
|
|
722
|
-
case nextItemKey:
|
|
723
|
-
event.preventDefault();
|
|
724
|
-
moveFocus(list, currentFocus, nextItem);
|
|
725
|
-
break;
|
|
726
|
-
case 'Home':
|
|
727
|
-
event.preventDefault();
|
|
728
|
-
moveFocus(list, null, nextItem);
|
|
729
|
-
break;
|
|
730
|
-
case 'End':
|
|
731
|
-
event.preventDefault();
|
|
732
|
-
moveFocus(list, null, previousItem);
|
|
733
|
-
break;
|
|
734
|
-
default:
|
|
735
|
-
break;
|
|
736
|
-
}
|
|
737
|
-
};
|
|
738
660
|
const conditionalElements = getConditionalElements();
|
|
739
661
|
const [RootSlot, rootSlotProps] = useSlot('root', {
|
|
740
662
|
ref,
|
|
@@ -760,8 +682,21 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
760
682
|
}
|
|
761
683
|
}
|
|
762
684
|
});
|
|
685
|
+
const mergedRef = useForkRef(rovingTabIndexContainerProps.ref, tabListRef);
|
|
686
|
+
const handleKeyDown = event => {
|
|
687
|
+
const list = tabListRef.current;
|
|
688
|
+
const currentFocus = getActiveElement(ownerDocument(list));
|
|
689
|
+
// Keyboard navigation assumes that [role="tab"] are siblings
|
|
690
|
+
// though we might warn in the future about nested, interactive elements
|
|
691
|
+
// as a a11y violation
|
|
692
|
+
const role = currentFocus?.getAttribute('role');
|
|
693
|
+
if (role !== 'tab') {
|
|
694
|
+
return;
|
|
695
|
+
}
|
|
696
|
+
rovingTabIndexContainerProps.onKeyDown(event);
|
|
697
|
+
};
|
|
763
698
|
const [ListSlot, listSlotProps] = useSlot('list', {
|
|
764
|
-
ref:
|
|
699
|
+
ref: mergedRef,
|
|
765
700
|
className: clsx(classes.list, classes.flexContainer),
|
|
766
701
|
elementType: List,
|
|
767
702
|
externalForwardedProps,
|
|
@@ -771,6 +706,10 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
771
706
|
onKeyDown: event => {
|
|
772
707
|
handleKeyDown(event);
|
|
773
708
|
handlers.onKeyDown?.(event);
|
|
709
|
+
},
|
|
710
|
+
onFocus: event => {
|
|
711
|
+
rovingTabIndexContainerProps.onFocus(event);
|
|
712
|
+
handlers.onFocus?.(event);
|
|
774
713
|
}
|
|
775
714
|
})
|
|
776
715
|
});
|
|
@@ -857,12 +796,6 @@ process.env.NODE_ENV !== "production" ? Tabs.propTypes /* remove-proptypes */ =
|
|
|
857
796
|
* @default 'horizontal'
|
|
858
797
|
*/
|
|
859
798
|
orientation: PropTypes.oneOf(['horizontal', 'vertical']),
|
|
860
|
-
/**
|
|
861
|
-
* The component used to render the scroll buttons.
|
|
862
|
-
* @deprecated use the `slots.scrollButtons` 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.
|
|
863
|
-
* @default TabScrollButton
|
|
864
|
-
*/
|
|
865
|
-
ScrollButtonComponent: PropTypes.elementType,
|
|
866
799
|
/**
|
|
867
800
|
* Determine behavior of scroll buttons when tabs are set to scroll:
|
|
868
801
|
*
|
|
@@ -900,32 +833,18 @@ process.env.NODE_ENV !== "production" ? Tabs.propTypes /* remove-proptypes */ =
|
|
|
900
833
|
*/
|
|
901
834
|
slots: PropTypes.shape({
|
|
902
835
|
endScrollButtonIcon: PropTypes.elementType,
|
|
903
|
-
EndScrollButtonIcon: PropTypes.elementType,
|
|
904
836
|
indicator: PropTypes.elementType,
|
|
905
837
|
list: PropTypes.elementType,
|
|
906
838
|
root: PropTypes.elementType,
|
|
907
839
|
scrollbar: PropTypes.elementType,
|
|
908
840
|
scrollButtons: PropTypes.elementType,
|
|
909
841
|
scroller: PropTypes.elementType,
|
|
910
|
-
startScrollButtonIcon: PropTypes.elementType
|
|
911
|
-
StartScrollButtonIcon: PropTypes.elementType
|
|
842
|
+
startScrollButtonIcon: PropTypes.elementType
|
|
912
843
|
}),
|
|
913
844
|
/**
|
|
914
845
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
915
846
|
*/
|
|
916
847
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),
|
|
917
|
-
/**
|
|
918
|
-
* Props applied to the tab indicator element.
|
|
919
|
-
* @deprecated use the `slotProps.indicator` 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.
|
|
920
|
-
* @default {}
|
|
921
|
-
*/
|
|
922
|
-
TabIndicatorProps: PropTypes.object,
|
|
923
|
-
/**
|
|
924
|
-
* Props applied to the [`TabScrollButton`](https://mui.com/material-ui/api/tab-scroll-button/) element.
|
|
925
|
-
* @deprecated use the `slotProps.scrollButtons` 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.
|
|
926
|
-
* @default {}
|
|
927
|
-
*/
|
|
928
|
-
TabScrollButtonProps: PropTypes.object,
|
|
929
848
|
/**
|
|
930
849
|
* Determines the color of the `Tab`.
|
|
931
850
|
* @default 'primary'
|