@mui/material 9.0.0-beta.0 → 9.0.0-beta.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 +1 -1
- package/Accordion/Accordion.d.ts +1 -1
- package/AccordionSummary/AccordionSummary.js +1 -0
- package/AccordionSummary/AccordionSummary.mjs +1 -0
- package/Backdrop/Backdrop.d.mts +1 -1
- package/Backdrop/Backdrop.d.ts +1 -1
- package/BottomNavigationAction/BottomNavigationAction.js +1 -0
- package/BottomNavigationAction/BottomNavigationAction.mjs +1 -0
- package/Breadcrumbs/BreadcrumbCollapsed.js +5 -1
- package/Breadcrumbs/BreadcrumbCollapsed.mjs +5 -1
- package/Button/Button.js +1 -0
- package/Button/Button.mjs +1 -0
- package/ButtonBase/ButtonBase.d.mts +5 -0
- package/ButtonBase/ButtonBase.d.ts +5 -0
- package/ButtonBase/ButtonBase.js +84 -85
- package/ButtonBase/ButtonBase.mjs +84 -85
- package/ButtonBase/useButtonBase.d.mts +91 -0
- package/ButtonBase/useButtonBase.d.ts +91 -0
- package/ButtonBase/useButtonBase.js +174 -0
- package/ButtonBase/useButtonBase.mjs +167 -0
- package/CHANGELOG.md +48 -0
- package/CardActionArea/CardActionArea.js +1 -0
- package/CardActionArea/CardActionArea.mjs +1 -0
- package/Chip/Chip.d.mts +7 -0
- package/Chip/Chip.d.ts +7 -0
- package/Chip/Chip.js +18 -1
- package/Chip/Chip.mjs +18 -1
- package/Dialog/Dialog.d.mts +8 -1
- package/Dialog/Dialog.d.ts +8 -1
- package/Dialog/Dialog.js +9 -1
- package/Dialog/Dialog.mjs +9 -1
- package/Divider/Divider.js +0 -8
- package/Divider/Divider.mjs +0 -8
- package/Drawer/Drawer.d.mts +1 -1
- package/Drawer/Drawer.d.ts +1 -1
- package/Fab/Fab.js +1 -0
- package/Fab/Fab.mjs +1 -0
- package/FilledInput/FilledInput.js +1 -1
- package/FilledInput/FilledInput.mjs +1 -1
- package/Grid/Grid.d.mts +8 -3
- package/Grid/Grid.d.ts +8 -3
- package/Grid/Grid.js +8 -3
- package/Grid/Grid.mjs +8 -3
- package/Grid/gridClasses.js +1 -1
- package/Grid/gridClasses.mjs +1 -1
- package/IconButton/IconButton.js +1 -0
- package/IconButton/IconButton.mjs +1 -0
- package/Input/Input.js +1 -1
- package/Input/Input.mjs +1 -1
- package/InputAdornment/inputAdornmentClasses.d.mts +2 -2
- package/InputAdornment/inputAdornmentClasses.d.ts +2 -2
- package/ListItemButton/ListItemButton.js +1 -0
- package/ListItemButton/ListItemButton.mjs +1 -0
- package/ListItemIcon/ListItemIcon.js +1 -1
- package/ListItemIcon/ListItemIcon.mjs +1 -1
- package/ListSubheader/ListSubheader.js +0 -3
- package/ListSubheader/ListSubheader.mjs +0 -3
- package/Menu/Menu.d.mts +1 -1
- package/Menu/Menu.d.ts +1 -1
- package/Menu/Menu.js +15 -32
- package/Menu/Menu.mjs +15 -32
- package/MenuItem/MenuItem.js +36 -26
- package/MenuItem/MenuItem.mjs +34 -26
- package/MenuList/MenuList.js +136 -101
- package/MenuList/MenuList.mjs +135 -100
- package/MenuList/MenuListContext.d.mts +11 -0
- package/MenuList/MenuListContext.d.ts +11 -0
- package/MenuList/MenuListContext.js +25 -0
- package/MenuList/MenuListContext.mjs +19 -0
- package/PaginationItem/PaginationItem.d.mts +5 -0
- package/PaginationItem/PaginationItem.d.ts +5 -0
- package/PaginationItem/PaginationItem.js +6 -0
- package/PaginationItem/PaginationItem.mjs +6 -0
- package/PigmentGrid/PigmentGrid.d.mts +1 -1
- package/PigmentGrid/PigmentGrid.d.ts +1 -1
- package/PigmentGrid/PigmentGrid.js +1 -1
- package/PigmentGrid/PigmentGrid.mjs +1 -1
- package/Popover/Popover.d.mts +1 -1
- package/Popover/Popover.d.ts +1 -1
- package/Popover/Popover.js +19 -7
- package/Popover/Popover.mjs +18 -6
- package/Snackbar/Snackbar.d.mts +1 -1
- package/Snackbar/Snackbar.d.ts +1 -1
- package/SpeedDial/SpeedDial.d.mts +1 -1
- package/SpeedDial/SpeedDial.d.ts +1 -1
- package/StepButton/StepButton.js +44 -14
- package/StepButton/StepButton.mjs +44 -14
- package/StepContent/StepContent.d.mts +1 -1
- package/StepContent/StepContent.d.ts +1 -1
- package/Stepper/Stepper.js +54 -22
- package/Stepper/Stepper.mjs +54 -22
- package/Stepper/StepperContext.d.mts +0 -5
- package/Stepper/StepperContext.d.ts +0 -5
- package/Stepper/StepperContext.js +1 -2
- package/Stepper/StepperContext.mjs +0 -1
- package/Tab/Tab.js +17 -1
- package/Tab/Tab.mjs +17 -1
- package/TabScrollButton/TabScrollButton.d.mts +1 -1
- package/TabScrollButton/TabScrollButton.d.ts +1 -1
- package/TabScrollButton/TabScrollButton.js +6 -2
- package/TabScrollButton/TabScrollButton.mjs +6 -2
- package/TableSortLabel/TableSortLabel.js +4 -1
- package/TableSortLabel/TableSortLabel.mjs +4 -1
- package/Tabs/Tabs.js +30 -21
- package/Tabs/Tabs.mjs +29 -20
- package/ToggleButton/ToggleButton.js +1 -0
- package/ToggleButton/ToggleButton.mjs +1 -0
- package/Tooltip/Tooltip.d.mts +1 -1
- package/Tooltip/Tooltip.d.ts +1 -1
- package/index.js +1 -1
- package/index.mjs +1 -1
- package/internal/SwitchBase.d.mts +2 -2
- package/internal/SwitchBase.d.ts +2 -2
- package/internal/SwitchBase.js +5 -1
- package/internal/SwitchBase.mjs +5 -1
- package/locale/psAF.js +1 -1
- package/locale/psAF.mjs +1 -1
- package/package.json +5 -5
- package/styles/createThemeWithVars.js +9 -9
- package/styles/createThemeWithVars.mjs +9 -9
- package/useAutocomplete/useAutocomplete.js +8 -0
- package/useAutocomplete/useAutocomplete.mjs +8 -0
- package/utils/focusWithVisible.js +24 -0
- package/utils/focusWithVisible.mjs +19 -0
- package/utils/index.d.mts +0 -1
- package/utils/index.d.ts +0 -1
- package/utils/index.js +0 -7
- package/utils/index.mjs +0 -1
- package/utils/useFocusableWhenDisabled.d.mts +30 -0
- package/utils/useFocusableWhenDisabled.d.ts +30 -0
- package/utils/useFocusableWhenDisabled.js +47 -0
- package/utils/useFocusableWhenDisabled.mjs +41 -0
- package/utils/useRovingTabIndex.d.mts +1 -2
- package/utils/useRovingTabIndex.d.ts +1 -2
- package/utils/useRovingTabIndex.js +25 -4
- package/utils/useRovingTabIndex.mjs +1 -2
- package/version/index.js +2 -2
- package/version/index.mjs +2 -2
package/Tabs/Tabs.mjs
CHANGED
|
@@ -20,7 +20,10 @@ import tabsClasses, { getTabsUtilityClass } from "./tabsClasses.mjs";
|
|
|
20
20
|
import ownerWindow from "../utils/ownerWindow.mjs";
|
|
21
21
|
import isLayoutSupported from "../utils/isLayoutSupported.mjs";
|
|
22
22
|
import useSlot from "../utils/useSlot.mjs";
|
|
23
|
-
import
|
|
23
|
+
import getActiveElement from "../utils/getActiveElement.mjs";
|
|
24
|
+
import ownerDocument from "../utils/ownerDocument.mjs";
|
|
25
|
+
import useForkRef from "../utils/useForkRef.mjs";
|
|
26
|
+
import { RovingTabIndexContext, useRovingTabIndexRoot } from "../utils/useRovingTabIndex.mjs";
|
|
24
27
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
25
28
|
const useUtilityClasses = ownerState => {
|
|
26
29
|
const {
|
|
@@ -287,6 +290,10 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
287
290
|
const [displayStartScroll, setDisplayStartScroll] = React.useState(false);
|
|
288
291
|
const [displayEndScroll, setDisplayEndScroll] = React.useState(false);
|
|
289
292
|
const [updateScrollObserver, setUpdateScrollObserver] = React.useState(false);
|
|
293
|
+
const selectedValue = value === false ? null : value;
|
|
294
|
+
// Tracks whether DOM focus is currently inside the tab list. When it is, roving focus
|
|
295
|
+
// should follow in-list keyboard movement instead of snapping back to `selectedValue`.
|
|
296
|
+
const [isFocusWithinList, setIsFocusWithinList] = React.useState(false);
|
|
290
297
|
const [scrollerStyle, setScrollerStyle] = React.useState({
|
|
291
298
|
overflow: 'hidden',
|
|
292
299
|
scrollbarWidth: 0
|
|
@@ -614,6 +621,12 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
614
621
|
const indicator = /*#__PURE__*/_jsx(IndicatorSlot, {
|
|
615
622
|
...indicatorSlotProps
|
|
616
623
|
});
|
|
624
|
+
const rovingContainer = useRovingTabIndexRoot({
|
|
625
|
+
activeItemId: isFocusWithinList ? undefined : selectedValue,
|
|
626
|
+
orientation,
|
|
627
|
+
isRtl
|
|
628
|
+
});
|
|
629
|
+
const rovingContainerProps = rovingContainer.getContainerProps();
|
|
617
630
|
const validChildren = React.Children.toArray(childrenProp).filter(React.isValidElement).map((child, index) => {
|
|
618
631
|
const childValue = child.props.value === undefined ? index : child.props.value;
|
|
619
632
|
if (process.env.NODE_ENV !== 'production') {
|
|
@@ -628,23 +641,11 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
628
641
|
childValue
|
|
629
642
|
};
|
|
630
643
|
});
|
|
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
644
|
const children = validChildren.map(({
|
|
642
645
|
child,
|
|
643
|
-
index,
|
|
644
646
|
childValue
|
|
645
647
|
}) => {
|
|
646
648
|
const selected = childValue === value;
|
|
647
|
-
const rovingTabIndexItemProps = getItemProps(index, child.ref);
|
|
648
649
|
return /*#__PURE__*/React.cloneElement(child, {
|
|
649
650
|
fullWidth: variant === 'fullWidth',
|
|
650
651
|
indicator: selected && !mounted && indicator,
|
|
@@ -652,9 +653,7 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
652
653
|
selectionFollowsFocus,
|
|
653
654
|
onChange,
|
|
654
655
|
textColor,
|
|
655
|
-
value: childValue
|
|
656
|
-
ref: rovingTabIndexItemProps.ref,
|
|
657
|
-
tabIndex: child.props.tabIndex ?? rovingTabIndexItemProps.tabIndex
|
|
656
|
+
value: childValue
|
|
658
657
|
});
|
|
659
658
|
});
|
|
660
659
|
const conditionalElements = getConditionalElements();
|
|
@@ -682,7 +681,7 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
682
681
|
}
|
|
683
682
|
}
|
|
684
683
|
});
|
|
685
|
-
const mergedRef = useForkRef(
|
|
684
|
+
const mergedRef = useForkRef(rovingContainerProps.ref, tabListRef);
|
|
686
685
|
const handleKeyDown = event => {
|
|
687
686
|
const list = tabListRef.current;
|
|
688
687
|
const currentFocus = getActiveElement(ownerDocument(list));
|
|
@@ -693,7 +692,7 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
693
692
|
if (role !== 'tab') {
|
|
694
693
|
return;
|
|
695
694
|
}
|
|
696
|
-
|
|
695
|
+
rovingContainerProps.onKeyDown(event);
|
|
697
696
|
};
|
|
698
697
|
const [ListSlot, listSlotProps] = useSlot('list', {
|
|
699
698
|
ref: mergedRef,
|
|
@@ -703,12 +702,19 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
703
702
|
ownerState,
|
|
704
703
|
getSlotProps: handlers => ({
|
|
705
704
|
...handlers,
|
|
705
|
+
onBlur: event => {
|
|
706
|
+
if (!event.currentTarget.contains(event.relatedTarget)) {
|
|
707
|
+
setIsFocusWithinList(false);
|
|
708
|
+
}
|
|
709
|
+
handlers.onBlur?.(event);
|
|
710
|
+
},
|
|
706
711
|
onKeyDown: event => {
|
|
707
712
|
handleKeyDown(event);
|
|
708
713
|
handlers.onKeyDown?.(event);
|
|
709
714
|
},
|
|
710
715
|
onFocus: event => {
|
|
711
|
-
|
|
716
|
+
setIsFocusWithinList(true);
|
|
717
|
+
rovingContainerProps.onFocus(event);
|
|
712
718
|
handlers.onFocus?.(event);
|
|
713
719
|
}
|
|
714
720
|
})
|
|
@@ -723,7 +729,10 @@ const Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {
|
|
|
723
729
|
"aria-orientation": orientation === 'vertical' ? 'vertical' : null,
|
|
724
730
|
role: "tablist",
|
|
725
731
|
...listSlotProps,
|
|
726
|
-
children:
|
|
732
|
+
children: /*#__PURE__*/_jsx(RovingTabIndexContext.Provider, {
|
|
733
|
+
value: rovingContainer,
|
|
734
|
+
children: children
|
|
735
|
+
})
|
|
727
736
|
}), mounted && indicator]
|
|
728
737
|
}), conditionalElements.scrollButtonEnd]
|
|
729
738
|
});
|
|
@@ -178,6 +178,7 @@ const ToggleButton = /*#__PURE__*/React.forwardRef(function ToggleButton(inProps
|
|
|
178
178
|
const positionClassName = toggleButtonGroupButtonContextPositionClassName || '';
|
|
179
179
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(ToggleButtonRoot, {
|
|
180
180
|
className: (0, _clsx.default)(contextProps.className, classes.root, className, positionClassName),
|
|
181
|
+
internalNativeButton: true,
|
|
181
182
|
disabled: disabled,
|
|
182
183
|
focusRipple: !disableFocusRipple,
|
|
183
184
|
ref: ref,
|
|
@@ -171,6 +171,7 @@ const ToggleButton = /*#__PURE__*/React.forwardRef(function ToggleButton(inProps
|
|
|
171
171
|
const positionClassName = toggleButtonGroupButtonContextPositionClassName || '';
|
|
172
172
|
return /*#__PURE__*/_jsx(ToggleButtonRoot, {
|
|
173
173
|
className: clsx(contextProps.className, classes.root, className, positionClassName),
|
|
174
|
+
internalNativeButton: true,
|
|
174
175
|
disabled: disabled,
|
|
175
176
|
focusRipple: !disableFocusRipple,
|
|
176
177
|
ref: ref,
|
package/Tooltip/Tooltip.d.mts
CHANGED
|
@@ -41,7 +41,7 @@ export type TooltipSlotsAndSlotProps = CreateSlotsAndSlotProps<TooltipSlots, {
|
|
|
41
41
|
* Props forwarded to the transition slot.
|
|
42
42
|
* By default, the available props are based on the [Grow](https://mui.com/material-ui/api/grow/#props) component.
|
|
43
43
|
*/
|
|
44
|
-
transition: SlotProps<React.ElementType
|
|
44
|
+
transition: SlotProps<React.ElementType<TransitionProps>, TransitionProps & TooltipTransitionSlotPropsOverrides, TooltipOwnerState>;
|
|
45
45
|
/**
|
|
46
46
|
* Props forwarded to the tooltip slot.
|
|
47
47
|
* By default, the available props are based on the div element.
|
package/Tooltip/Tooltip.d.ts
CHANGED
|
@@ -41,7 +41,7 @@ export type TooltipSlotsAndSlotProps = CreateSlotsAndSlotProps<TooltipSlots, {
|
|
|
41
41
|
* Props forwarded to the transition slot.
|
|
42
42
|
* By default, the available props are based on the [Grow](https://mui.com/material-ui/api/grow/#props) component.
|
|
43
43
|
*/
|
|
44
|
-
transition: SlotProps<React.ElementType
|
|
44
|
+
transition: SlotProps<React.ElementType<TransitionProps>, TransitionProps & TooltipTransitionSlotPropsOverrides, TooltipOwnerState>;
|
|
45
45
|
/**
|
|
46
46
|
* Props forwarded to the tooltip slot.
|
|
47
47
|
* By default, the available props are based on the div element.
|
package/index.js
CHANGED
package/index.mjs
CHANGED
|
@@ -20,13 +20,13 @@ type SwitchBaseSlotsAndSlotProps = CreateSlotsAndSlotProps<SwitchBaseSlots, {
|
|
|
20
20
|
* Props forwarded to the root slot.
|
|
21
21
|
* By default, the available props are based on the [ButtonBase](https://mui.com/material-ui/api/button-base/#props) component.
|
|
22
22
|
*/
|
|
23
|
-
root: SlotProps<React.ElementType<ButtonBaseProps
|
|
23
|
+
root: SlotProps<React.ElementType<Omit<ButtonBaseProps, 'nativeButton'>>, {}, SwitchBaseOwnerState>;
|
|
24
24
|
/**
|
|
25
25
|
* Props forwarded to the input slot.
|
|
26
26
|
*/
|
|
27
27
|
input: SlotProps<'input', {}, SwitchBaseOwnerState>;
|
|
28
28
|
}>;
|
|
29
|
-
export interface SwitchBaseProps extends StandardProps<ButtonBaseProps, 'children' | 'onChange' | 'type' | 'value'>, SwitchBaseSlotsAndSlotProps {
|
|
29
|
+
export interface SwitchBaseProps extends StandardProps<Omit<ButtonBaseProps, 'nativeButton'>, 'children' | 'onChange' | 'type' | 'value'>, SwitchBaseSlotsAndSlotProps {
|
|
30
30
|
autoFocus?: boolean | undefined;
|
|
31
31
|
/**
|
|
32
32
|
* If `true`, the component is checked.
|
package/internal/SwitchBase.d.ts
CHANGED
|
@@ -20,13 +20,13 @@ type SwitchBaseSlotsAndSlotProps = CreateSlotsAndSlotProps<SwitchBaseSlots, {
|
|
|
20
20
|
* Props forwarded to the root slot.
|
|
21
21
|
* By default, the available props are based on the [ButtonBase](https://mui.com/material-ui/api/button-base/#props) component.
|
|
22
22
|
*/
|
|
23
|
-
root: SlotProps<React.ElementType<ButtonBaseProps
|
|
23
|
+
root: SlotProps<React.ElementType<Omit<ButtonBaseProps, 'nativeButton'>>, {}, SwitchBaseOwnerState>;
|
|
24
24
|
/**
|
|
25
25
|
* Props forwarded to the input slot.
|
|
26
26
|
*/
|
|
27
27
|
input: SlotProps<'input', {}, SwitchBaseOwnerState>;
|
|
28
28
|
}>;
|
|
29
|
-
export interface SwitchBaseProps extends StandardProps<ButtonBaseProps, 'children' | 'onChange' | 'type' | 'value'>, SwitchBaseSlotsAndSlotProps {
|
|
29
|
+
export interface SwitchBaseProps extends StandardProps<Omit<ButtonBaseProps, 'nativeButton'>, 'children' | 'onChange' | 'type' | 'value'>, SwitchBaseSlotsAndSlotProps {
|
|
30
30
|
autoFocus?: boolean | undefined;
|
|
31
31
|
/**
|
|
32
32
|
* If `true`, the component is checked.
|
package/internal/SwitchBase.js
CHANGED
|
@@ -114,6 +114,10 @@ const SwitchBase = /*#__PURE__*/React.forwardRef(function SwitchBase(props, ref)
|
|
|
114
114
|
slotProps = {},
|
|
115
115
|
...other
|
|
116
116
|
} = props;
|
|
117
|
+
const {
|
|
118
|
+
nativeButton,
|
|
119
|
+
...buttonBaseProps
|
|
120
|
+
} = other;
|
|
117
121
|
const [checked, setCheckedState] = (0, _useControlled.default)({
|
|
118
122
|
controlled: checkedProp,
|
|
119
123
|
default: Boolean(defaultChecked),
|
|
@@ -176,7 +180,7 @@ const SwitchBase = /*#__PURE__*/React.forwardRef(function SwitchBase(props, ref)
|
|
|
176
180
|
externalForwardedProps: {
|
|
177
181
|
...externalForwardedProps,
|
|
178
182
|
component: 'span',
|
|
179
|
-
...
|
|
183
|
+
...buttonBaseProps
|
|
180
184
|
},
|
|
181
185
|
getSlotProps: handlers => ({
|
|
182
186
|
...handlers,
|
package/internal/SwitchBase.mjs
CHANGED
|
@@ -107,6 +107,10 @@ const SwitchBase = /*#__PURE__*/React.forwardRef(function SwitchBase(props, ref)
|
|
|
107
107
|
slotProps = {},
|
|
108
108
|
...other
|
|
109
109
|
} = props;
|
|
110
|
+
const {
|
|
111
|
+
nativeButton,
|
|
112
|
+
...buttonBaseProps
|
|
113
|
+
} = other;
|
|
110
114
|
const [checked, setCheckedState] = useControlled({
|
|
111
115
|
controlled: checkedProp,
|
|
112
116
|
default: Boolean(defaultChecked),
|
|
@@ -169,7 +173,7 @@ const SwitchBase = /*#__PURE__*/React.forwardRef(function SwitchBase(props, ref)
|
|
|
169
173
|
externalForwardedProps: {
|
|
170
174
|
...externalForwardedProps,
|
|
171
175
|
component: 'span',
|
|
172
|
-
...
|
|
176
|
+
...buttonBaseProps
|
|
173
177
|
},
|
|
174
178
|
getSlotProps: handlers => ({
|
|
175
179
|
...handlers,
|
package/locale/psAF.js
CHANGED
package/locale/psAF.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mui/material",
|
|
3
|
-
"version": "9.0.0-beta.
|
|
3
|
+
"version": "9.0.0-beta.1",
|
|
4
4
|
"author": "MUI Team",
|
|
5
5
|
"description": "Material UI is an open-source React component library that implements Google's Material Design. It's comprehensive and can be used in production out of the box.",
|
|
6
6
|
"keywords": [
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
"prop-types": "^15.8.1",
|
|
34
34
|
"react-is": "^19.2.4",
|
|
35
35
|
"react-transition-group": "^4.4.5",
|
|
36
|
+
"@mui/system": "9.0.0-beta.1",
|
|
37
|
+
"@mui/utils": "9.0.0-beta.1",
|
|
36
38
|
"@mui/types": "^9.0.0-beta.0",
|
|
37
|
-
"@mui/core-downloads-tracker": "^9.0.0-beta.
|
|
38
|
-
"@mui/system": "9.0.0-beta.0",
|
|
39
|
-
"@mui/utils": "9.0.0-beta.0"
|
|
39
|
+
"@mui/core-downloads-tracker": "^9.0.0-beta.1"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"@emotion/react": "^11.5.0",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
45
45
|
"react": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
46
46
|
"react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0",
|
|
47
|
-
"@mui/material-pigment-css": "9.0.0-beta.
|
|
47
|
+
"@mui/material-pigment-css": "9.0.0-beta.1"
|
|
48
48
|
},
|
|
49
49
|
"peerDependenciesMeta": {
|
|
50
50
|
"@types/react": {
|
|
@@ -339,21 +339,21 @@ function createThemeWithVars(options = {}, ...args) {
|
|
|
339
339
|
setColor(palette.TableCell, 'border', colorMix(_colorManipulator.private_safeDarken, (0, _colorManipulator.private_safeAlpha)(nativeColor ? getCssVar('palette-divider') : palette.divider, 1), 0.68));
|
|
340
340
|
setColor(palette.Tooltip, 'bg', colorMix(_colorManipulator.private_safeAlpha, nativeColor ? getCssVar('palette-grey-700') : palette.grey[700], 0.92));
|
|
341
341
|
}
|
|
342
|
+
if (!nativeColor) {
|
|
343
|
+
setColorChannel(palette.background, 'default');
|
|
342
344
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
setColorChannel(palette.common, 'onBackground');
|
|
350
|
-
setColorChannel(palette, 'divider');
|
|
345
|
+
// added for consistency with the `background.default` token
|
|
346
|
+
setColorChannel(palette.background, 'paper');
|
|
347
|
+
setColorChannel(palette.common, 'background');
|
|
348
|
+
setColorChannel(palette.common, 'onBackground');
|
|
349
|
+
setColorChannel(palette, 'divider');
|
|
350
|
+
}
|
|
351
351
|
Object.keys(palette).forEach(color => {
|
|
352
352
|
const colors = palette[color];
|
|
353
353
|
|
|
354
354
|
// The default palettes (primary, secondary, error, info, success, and warning) errors are handled by the above `createTheme(...)`.
|
|
355
355
|
|
|
356
|
-
if (color !== 'tonalOffset' && colors && typeof colors === 'object') {
|
|
356
|
+
if (color !== 'tonalOffset' && !nativeColor && colors && typeof colors === 'object') {
|
|
357
357
|
// Silent the error for custom palettes.
|
|
358
358
|
if (colors.main) {
|
|
359
359
|
setColor(palette[color], 'mainChannel', (0, _colorManipulator.private_safeColorChannel)(toRgb(colors.main)));
|
|
@@ -329,21 +329,21 @@ export default function createThemeWithVars(options = {}, ...args) {
|
|
|
329
329
|
setColor(palette.TableCell, 'border', colorMix(safeDarken, safeAlpha(nativeColor ? getCssVar('palette-divider') : palette.divider, 1), 0.68));
|
|
330
330
|
setColor(palette.Tooltip, 'bg', colorMix(safeAlpha, nativeColor ? getCssVar('palette-grey-700') : palette.grey[700], 0.92));
|
|
331
331
|
}
|
|
332
|
+
if (!nativeColor) {
|
|
333
|
+
setColorChannel(palette.background, 'default');
|
|
332
334
|
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
setColorChannel(palette.common, 'onBackground');
|
|
340
|
-
setColorChannel(palette, 'divider');
|
|
335
|
+
// added for consistency with the `background.default` token
|
|
336
|
+
setColorChannel(palette.background, 'paper');
|
|
337
|
+
setColorChannel(palette.common, 'background');
|
|
338
|
+
setColorChannel(palette.common, 'onBackground');
|
|
339
|
+
setColorChannel(palette, 'divider');
|
|
340
|
+
}
|
|
341
341
|
Object.keys(palette).forEach(color => {
|
|
342
342
|
const colors = palette[color];
|
|
343
343
|
|
|
344
344
|
// The default palettes (primary, secondary, error, info, success, and warning) errors are handled by the above `createTheme(...)`.
|
|
345
345
|
|
|
346
|
-
if (color !== 'tonalOffset' && colors && typeof colors === 'object') {
|
|
346
|
+
if (color !== 'tonalOffset' && !nativeColor && colors && typeof colors === 'object') {
|
|
347
347
|
// Silent the error for custom palettes.
|
|
348
348
|
if (colors.main) {
|
|
349
349
|
setColor(palette[color], 'mainChannel', safeColorChannel(toRgb(colors.main)));
|
|
@@ -965,6 +965,10 @@ function useAutocomplete(props) {
|
|
|
965
965
|
if (!event.currentTarget.contains(event.target)) {
|
|
966
966
|
return;
|
|
967
967
|
}
|
|
968
|
+
// Don't interfere with interactions outside the input area (e.g. helper text)
|
|
969
|
+
if (anchorEl && !anchorEl.contains(event.target)) {
|
|
970
|
+
return;
|
|
971
|
+
}
|
|
968
972
|
if (event.target.getAttribute('id') !== id) {
|
|
969
973
|
event.preventDefault();
|
|
970
974
|
}
|
|
@@ -976,6 +980,10 @@ function useAutocomplete(props) {
|
|
|
976
980
|
if (!event.currentTarget.contains(event.target)) {
|
|
977
981
|
return;
|
|
978
982
|
}
|
|
983
|
+
// Don't interfere with interactions outside the input area (e.g. helper text)
|
|
984
|
+
if (anchorEl && !anchorEl.contains(event.target)) {
|
|
985
|
+
return;
|
|
986
|
+
}
|
|
979
987
|
inputRef.current.focus();
|
|
980
988
|
if (selectOnFocus && firstFocus.current && inputRef.current.selectionEnd - inputRef.current.selectionStart === 0) {
|
|
981
989
|
inputRef.current.select();
|
|
@@ -957,6 +957,10 @@ function useAutocomplete(props) {
|
|
|
957
957
|
if (!event.currentTarget.contains(event.target)) {
|
|
958
958
|
return;
|
|
959
959
|
}
|
|
960
|
+
// Don't interfere with interactions outside the input area (e.g. helper text)
|
|
961
|
+
if (anchorEl && !anchorEl.contains(event.target)) {
|
|
962
|
+
return;
|
|
963
|
+
}
|
|
960
964
|
if (event.target.getAttribute('id') !== id) {
|
|
961
965
|
event.preventDefault();
|
|
962
966
|
}
|
|
@@ -968,6 +972,10 @@ function useAutocomplete(props) {
|
|
|
968
972
|
if (!event.currentTarget.contains(event.target)) {
|
|
969
973
|
return;
|
|
970
974
|
}
|
|
975
|
+
// Don't interfere with interactions outside the input area (e.g. helper text)
|
|
976
|
+
if (anchorEl && !anchorEl.contains(event.target)) {
|
|
977
|
+
return;
|
|
978
|
+
}
|
|
971
979
|
inputRef.current.focus();
|
|
972
980
|
if (selectOnFocus && firstFocus.current && inputRef.current.selectionEnd - inputRef.current.selectionStart === 0) {
|
|
973
981
|
inputRef.current.select();
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* If `focusSource` is present, attempt to pass `focusVisible` through `focus()` options.
|
|
6
|
+
* Fall back to a plain focus call when the browser does not support it.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", {
|
|
9
|
+
value: true
|
|
10
|
+
});
|
|
11
|
+
exports.default = focusWithVisible;
|
|
12
|
+
function focusWithVisible(element, focusSource) {
|
|
13
|
+
if (focusSource == null) {
|
|
14
|
+
element.focus();
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
element.focus({
|
|
19
|
+
focusVisible: focusSource === 'keyboard'
|
|
20
|
+
});
|
|
21
|
+
} catch (error) {
|
|
22
|
+
element.focus();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* If `focusSource` is present, attempt to pass `focusVisible` through `focus()` options.
|
|
5
|
+
* Fall back to a plain focus call when the browser does not support it.
|
|
6
|
+
*/
|
|
7
|
+
export default function focusWithVisible(element, focusSource) {
|
|
8
|
+
if (focusSource == null) {
|
|
9
|
+
element.focus();
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
try {
|
|
13
|
+
element.focus({
|
|
14
|
+
focusVisible: focusSource === 'keyboard'
|
|
15
|
+
});
|
|
16
|
+
} catch (error) {
|
|
17
|
+
element.focus();
|
|
18
|
+
}
|
|
19
|
+
}
|
package/utils/index.d.mts
CHANGED
|
@@ -16,7 +16,6 @@ export { default as unstable_useId } from "./useId.mjs";
|
|
|
16
16
|
export { default as unsupportedProp } from "./unsupportedProp.mjs";
|
|
17
17
|
export { default as useControlled } from "./useControlled.mjs";
|
|
18
18
|
export { default as useEventCallback } from "./useEventCallback.mjs";
|
|
19
|
-
export { default as useRovingTabIndex } from "./useRovingTabIndex.mjs";
|
|
20
19
|
export { default as useForkRef } from "./useForkRef.mjs";
|
|
21
20
|
export { default as mergeSlotProps } from "./mergeSlotProps.mjs";
|
|
22
21
|
export * from "./types.mjs";
|
package/utils/index.d.ts
CHANGED
|
@@ -16,7 +16,6 @@ export { default as unstable_useId } from "./useId.js";
|
|
|
16
16
|
export { default as unsupportedProp } from "./unsupportedProp.js";
|
|
17
17
|
export { default as useControlled } from "./useControlled.js";
|
|
18
18
|
export { default as useEventCallback } from "./useEventCallback.js";
|
|
19
|
-
export { default as useRovingTabIndex } from "./useRovingTabIndex.js";
|
|
20
19
|
export { default as useForkRef } from "./useForkRef.js";
|
|
21
20
|
export { default as mergeSlotProps } from "./mergeSlotProps.js";
|
|
22
21
|
export * from "./types.js";
|
package/utils/index.js
CHANGED
|
@@ -120,12 +120,6 @@ Object.defineProperty(exports, "useForkRef", {
|
|
|
120
120
|
return _useForkRef.default;
|
|
121
121
|
}
|
|
122
122
|
});
|
|
123
|
-
Object.defineProperty(exports, "useRovingTabIndex", {
|
|
124
|
-
enumerable: true,
|
|
125
|
-
get: function () {
|
|
126
|
-
return _useRovingTabIndex.default;
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
123
|
var _ClassNameGenerator = _interopRequireDefault(require("@mui/utils/ClassNameGenerator"));
|
|
130
124
|
var _capitalize = _interopRequireDefault(require("./capitalize"));
|
|
131
125
|
var _createChainedFunction = _interopRequireDefault(require("./createChainedFunction"));
|
|
@@ -144,7 +138,6 @@ var _useId = _interopRequireDefault(require("./useId"));
|
|
|
144
138
|
var _unsupportedProp = _interopRequireDefault(require("./unsupportedProp"));
|
|
145
139
|
var _useControlled = _interopRequireDefault(require("./useControlled"));
|
|
146
140
|
var _useEventCallback = _interopRequireDefault(require("./useEventCallback"));
|
|
147
|
-
var _useRovingTabIndex = _interopRequireDefault(require("./useRovingTabIndex"));
|
|
148
141
|
var _useForkRef = _interopRequireDefault(require("./useForkRef"));
|
|
149
142
|
var _mergeSlotProps = _interopRequireDefault(require("./mergeSlotProps"));
|
|
150
143
|
// TODO: remove this export once ClassNameGenerator is stable
|
package/utils/index.mjs
CHANGED
|
@@ -18,7 +18,6 @@ export { default as unstable_useId } from "./useId.mjs";
|
|
|
18
18
|
export { default as unsupportedProp } from "./unsupportedProp.mjs";
|
|
19
19
|
export { default as useControlled } from "./useControlled.mjs";
|
|
20
20
|
export { default as useEventCallback } from "./useEventCallback.mjs";
|
|
21
|
-
export { default as useRovingTabIndex } from "./useRovingTabIndex.mjs";
|
|
22
21
|
export { default as useForkRef } from "./useForkRef.mjs";
|
|
23
22
|
export { default as mergeSlotProps } from "./mergeSlotProps.mjs";
|
|
24
23
|
// TODO: remove this export once ClassNameGenerator is stable
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface UseFocusableWhenDisabledParameters {
|
|
3
|
+
/**
|
|
4
|
+
* Whether the component should be focusable when disabled.
|
|
5
|
+
* When `undefined`, composite items are focusable when disabled by default.
|
|
6
|
+
*/
|
|
7
|
+
focusableWhenDisabled?: boolean | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* The disabled state of the component.
|
|
10
|
+
*/
|
|
11
|
+
disabled: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Whether this is a composite item or not.
|
|
14
|
+
* @default false
|
|
15
|
+
*/
|
|
16
|
+
composite?: boolean | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* @default 0
|
|
19
|
+
*/
|
|
20
|
+
tabIndex?: number | undefined;
|
|
21
|
+
isNativeButton: boolean;
|
|
22
|
+
}
|
|
23
|
+
interface FocusableWhenDisabledProps {
|
|
24
|
+
'aria-disabled'?: boolean | undefined;
|
|
25
|
+
disabled?: boolean | undefined;
|
|
26
|
+
onKeyDown: (event: React.KeyboardEvent) => void;
|
|
27
|
+
tabIndex?: number | undefined;
|
|
28
|
+
}
|
|
29
|
+
export default function useFocusableWhenDisabled(parameters: UseFocusableWhenDisabledParameters): FocusableWhenDisabledProps;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface UseFocusableWhenDisabledParameters {
|
|
3
|
+
/**
|
|
4
|
+
* Whether the component should be focusable when disabled.
|
|
5
|
+
* When `undefined`, composite items are focusable when disabled by default.
|
|
6
|
+
*/
|
|
7
|
+
focusableWhenDisabled?: boolean | undefined;
|
|
8
|
+
/**
|
|
9
|
+
* The disabled state of the component.
|
|
10
|
+
*/
|
|
11
|
+
disabled: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Whether this is a composite item or not.
|
|
14
|
+
* @default false
|
|
15
|
+
*/
|
|
16
|
+
composite?: boolean | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* @default 0
|
|
19
|
+
*/
|
|
20
|
+
tabIndex?: number | undefined;
|
|
21
|
+
isNativeButton: boolean;
|
|
22
|
+
}
|
|
23
|
+
interface FocusableWhenDisabledProps {
|
|
24
|
+
'aria-disabled'?: boolean | undefined;
|
|
25
|
+
disabled?: boolean | undefined;
|
|
26
|
+
onKeyDown: (event: React.KeyboardEvent) => void;
|
|
27
|
+
tabIndex?: number | undefined;
|
|
28
|
+
}
|
|
29
|
+
export default function useFocusableWhenDisabled(parameters: UseFocusableWhenDisabledParameters): FocusableWhenDisabledProps;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = useFocusableWhenDisabled;
|
|
9
|
+
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
function useFocusableWhenDisabled(parameters) {
|
|
11
|
+
const {
|
|
12
|
+
focusableWhenDisabled,
|
|
13
|
+
disabled,
|
|
14
|
+
composite = false,
|
|
15
|
+
tabIndex: tabIndexProp = 0,
|
|
16
|
+
isNativeButton
|
|
17
|
+
} = parameters;
|
|
18
|
+
const isFocusableComposite = composite && focusableWhenDisabled !== false;
|
|
19
|
+
const isNonFocusableComposite = composite && focusableWhenDisabled === false;
|
|
20
|
+
|
|
21
|
+
// we can't explicitly assign `undefined` to any of these props because it
|
|
22
|
+
// would otherwise prevent subsequently merged props from setting them
|
|
23
|
+
const props = React.useMemo(() => {
|
|
24
|
+
const additionalProps = {
|
|
25
|
+
// allow Tabbing away from focusableWhenDisabled elements
|
|
26
|
+
onKeyDown(event) {
|
|
27
|
+
if (disabled && focusableWhenDisabled && event.key !== 'Tab') {
|
|
28
|
+
event.preventDefault();
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
if (!composite) {
|
|
33
|
+
additionalProps.tabIndex = tabIndexProp;
|
|
34
|
+
if (!isNativeButton && disabled) {
|
|
35
|
+
additionalProps.tabIndex = focusableWhenDisabled ? tabIndexProp : -1;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (isNativeButton && (focusableWhenDisabled || isFocusableComposite) || !isNativeButton && disabled) {
|
|
39
|
+
additionalProps['aria-disabled'] = disabled;
|
|
40
|
+
}
|
|
41
|
+
if (isNativeButton && (!focusableWhenDisabled || isNonFocusableComposite)) {
|
|
42
|
+
additionalProps.disabled = disabled;
|
|
43
|
+
}
|
|
44
|
+
return additionalProps;
|
|
45
|
+
}, [composite, disabled, focusableWhenDisabled, isFocusableComposite, isNonFocusableComposite, isNativeButton, tabIndexProp]);
|
|
46
|
+
return props;
|
|
47
|
+
}
|