Skip to content

Commit 0436605

Browse files
[pickers] Enable the sx props on all components (mui#30749)
1 parent c987cfb commit 0436605

32 files changed

+133
-151
lines changed

TYPESCRIPT_CONVENTION.md

+5-6
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@
44

55
> **Public components** are considered all components exported from `@mui/material` or `@mui/lab`.
66
>
7-
> **Internal components** are considered all components that are not exported from the packages, but only used in some public component. There is no need to have `sx` prop on these components
7+
> **Internal components** are considered all components that are not exported from the packages, but only used in some public component.
88
99
### `Props Interface`
1010

1111
- export interface `{ComponentName}classes` from `{component}Classes.ts` and add comment for generating api docs (for internal components, may or may not expose classes but don't need comment)
1212
- export interface `{ComponentName}Props`
1313
- always export props interface (use `interface` over `type`) from the component file
14-
- provide `sx` only for public component
1514

1615
<details>
1716
<summary>Public component</summary>
@@ -64,6 +63,7 @@ export interface BarClasses {
6463

6564
export interface BarProps {
6665
classes?: Partial<BarClasses>;
66+
sx?: SxProps<Theme>;
6767
}
6868
```
6969

@@ -127,7 +127,6 @@ const classes = generateUtilityClasses('PrivateBar', ['root', 'bar']);
127127
### `StyledComponent`
128128

129129
- naming using slot `{ComponentName}{Slot}`
130-
- use `skipSx` for internal component without specifying `name`, `slot` and `overridesResolver`
131130
- to extend interface of the styled component, pass argument to generic
132131

133132
<details>
@@ -148,7 +147,7 @@ const FooRoot = styled(Typography, {
148147
<summary>internal component</summary>
149148

150149
```ts
151-
const BarRoot = styled(Typography, { skipSx: true })({
150+
const BarRoot = styled(Typography)({
152151
// styling
153152
});
154153
```
@@ -158,7 +157,7 @@ const BarRoot = styled(Typography, { skipSx: true })({
158157
<summary>extends interface</summary>
159158

160159
```ts
161-
const BarRoot = styled(Typography, { skipSx: true })<{
160+
const BarRoot = styled(Typography)<{
162161
component?: React.ElementType;
163162
ownerState: BarProps;
164163
}>(({ theme, ownerState }) => ({
@@ -215,7 +214,7 @@ const Foo = React.forwardRef<HTMLSpanElement, FooProps>(function Foo(inProps, re
215214
```ts
216215
const classes = generateUtilityClasses('PrivateBar', ['selected']);
217216

218-
const BarRoot = styled('div', { skipSx: true })(({ theme }) => ({
217+
const BarRoot = styled('div')(({ theme }) => ({
219218
[`&.${classes.selected}`]: {
220219
color: theme.palette.text.primary,
221220
},

packages/mui-lab/src/CalendarPicker/PickersCalendar.tsx

+6-6
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,13 @@ export interface PickersCalendarProps<TDate> extends ExportedCalendarProps<TDate
5858

5959
const weeksContainerHeight = (DAY_SIZE + DAY_MARGIN * 4) * 6;
6060

61-
const PickersCalendarDayHeader = styled('div', { skipSx: true })({
61+
const PickersCalendarDayHeader = styled('div')({
6262
display: 'flex',
6363
justifyContent: 'center',
6464
alignItems: 'center',
6565
});
6666

67-
const PickersCalendarWeekDayLabel = styled(Typography, { skipSx: true })(({ theme }) => ({
67+
const PickersCalendarWeekDayLabel = styled(Typography)(({ theme }) => ({
6868
width: 36,
6969
height: 40,
7070
margin: '0 2px',
@@ -75,20 +75,20 @@ const PickersCalendarWeekDayLabel = styled(Typography, { skipSx: true })(({ them
7575
color: theme.palette.text.secondary,
7676
}));
7777

78-
const PickersCalendarLoadingContainer = styled('div', { skipSx: true })({
78+
const PickersCalendarLoadingContainer = styled('div')({
7979
display: 'flex',
8080
justifyContent: 'center',
8181
alignItems: 'center',
8282
minHeight: weeksContainerHeight,
8383
});
8484

85-
const PickersCalendarSlideTransition = styled(SlideTransition, { skipSx: true })({
85+
const PickersCalendarSlideTransition = styled(SlideTransition)({
8686
minHeight: weeksContainerHeight,
8787
});
8888

89-
const PickersCalendarWeekContainer = styled('div', { skipSx: true })({ overflow: 'hidden' });
89+
const PickersCalendarWeekContainer = styled('div')({ overflow: 'hidden' });
9090

91-
const PickersCalendarWeek = styled('div', { skipSx: true })({
91+
const PickersCalendarWeek = styled('div')({
9292
margin: `${DAY_MARGIN}px 0`,
9393
display: 'flex',
9494
justifyContent: 'center',

packages/mui-lab/src/CalendarPicker/PickersCalendarHeader.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ export interface PickersCalendarHeaderProps<TDate>
6161
onViewChange?: (view: CalendarPickerView) => void;
6262
}
6363

64-
const PickersCalendarHeaderRoot = styled('div', { skipSx: true })<{
64+
const PickersCalendarHeaderRoot = styled('div')<{
6565
ownerState: PickersCalendarHeaderProps<any>;
6666
}>({
6767
display: 'flex',
@@ -75,7 +75,7 @@ const PickersCalendarHeaderRoot = styled('div', { skipSx: true })<{
7575
minHeight: 30,
7676
});
7777

78-
const PickersCalendarHeaderLabel = styled('div', { skipSx: true })<{
78+
const PickersCalendarHeaderLabel = styled('div')<{
7979
ownerState: PickersCalendarHeaderProps<any>;
8080
}>(({ theme }) => ({
8181
display: 'flex',
@@ -88,17 +88,17 @@ const PickersCalendarHeaderLabel = styled('div', { skipSx: true })<{
8888
fontWeight: theme.typography.fontWeightMedium,
8989
}));
9090

91-
const PickersCalendarHeaderLabelItem = styled('div', { skipSx: true })<{
91+
const PickersCalendarHeaderLabelItem = styled('div')<{
9292
ownerState: PickersCalendarHeaderProps<any>;
9393
}>({
9494
marginRight: 6,
9595
});
9696

97-
const PickersCalendarHeaderSwitchViewButton = styled(IconButton, { skipSx: true })({
97+
const PickersCalendarHeaderSwitchViewButton = styled(IconButton)({
9898
marginRight: 'auto',
9999
});
100100

101-
const PickersCalendarHeaderSwitchView = styled(ArrowDropDownIcon, { skipSx: true })<{
101+
const PickersCalendarHeaderSwitchView = styled(ArrowDropDownIcon)<{
102102
ownerState: PickersCalendarHeaderProps<any>;
103103
}>(({ theme, ownerState }) => ({
104104
willChange: 'transform',

packages/mui-lab/src/CalendarPicker/PickersFadeTransitionGroup.tsx

+1-3
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@ const classes = generateUtilityClasses('PrivatePickersFadeTransitionGroup', ['ro
1616

1717
const animationDuration = 500;
1818

19-
const PickersFadeTransitionGroupRoot = styled(TransitionGroup, {
20-
skipSx: true,
21-
})({
19+
const PickersFadeTransitionGroupRoot = styled(TransitionGroup)({
2220
display: 'block',
2321
position: 'relative',
2422
});

packages/mui-lab/src/CalendarPicker/PickersSlideTransition.tsx

+46-48
Original file line numberDiff line numberDiff line change
@@ -28,54 +28,52 @@ const classes = generateUtilityClasses('PrivatePickersSlideTransition', [
2828

2929
export const slideAnimationDuration = 350;
3030

31-
const PickersSlideTransitionRoot = styled(TransitionGroup, { skipSx: true })<TransitionGroupProps>(
32-
({ theme }) => {
33-
const slideTransition = theme.transitions.create('transform', {
34-
duration: slideAnimationDuration,
35-
easing: 'cubic-bezier(0.35, 0.8, 0.4, 1)',
36-
});
37-
return {
38-
display: 'block',
39-
position: 'relative',
40-
overflowX: 'hidden',
41-
'& > *': {
42-
position: 'absolute',
43-
top: 0,
44-
right: 0,
45-
left: 0,
46-
},
47-
[`& .${classes['slideEnter-left']}`]: {
48-
willChange: 'transform',
49-
transform: 'translate(100%)',
50-
zIndex: 1,
51-
},
52-
[`& .${classes['slideEnter-right']}`]: {
53-
willChange: 'transform',
54-
transform: 'translate(-100%)',
55-
zIndex: 1,
56-
},
57-
[`& .${classes.slideEnterActive}`]: {
58-
transform: 'translate(0%)',
59-
transition: slideTransition,
60-
},
61-
[`& .${classes.slideExit}`]: {
62-
transform: 'translate(0%)',
63-
},
64-
[`& .${classes['slideExitActiveLeft-left']}`]: {
65-
willChange: 'transform',
66-
transform: 'translate(-100%)',
67-
transition: slideTransition,
68-
zIndex: 0,
69-
},
70-
[`& .${classes['slideExitActiveLeft-right']}`]: {
71-
willChange: 'transform',
72-
transform: 'translate(100%)',
73-
transition: slideTransition,
74-
zIndex: 0,
75-
},
76-
};
77-
},
78-
);
31+
const PickersSlideTransitionRoot = styled(TransitionGroup)<TransitionGroupProps>(({ theme }) => {
32+
const slideTransition = theme.transitions.create('transform', {
33+
duration: slideAnimationDuration,
34+
easing: 'cubic-bezier(0.35, 0.8, 0.4, 1)',
35+
});
36+
return {
37+
display: 'block',
38+
position: 'relative',
39+
overflowX: 'hidden',
40+
'& > *': {
41+
position: 'absolute',
42+
top: 0,
43+
right: 0,
44+
left: 0,
45+
},
46+
[`& .${classes['slideEnter-left']}`]: {
47+
willChange: 'transform',
48+
transform: 'translate(100%)',
49+
zIndex: 1,
50+
},
51+
[`& .${classes['slideEnter-right']}`]: {
52+
willChange: 'transform',
53+
transform: 'translate(-100%)',
54+
zIndex: 1,
55+
},
56+
[`& .${classes.slideEnterActive}`]: {
57+
transform: 'translate(0%)',
58+
transition: slideTransition,
59+
},
60+
[`& .${classes.slideExit}`]: {
61+
transform: 'translate(0%)',
62+
},
63+
[`& .${classes['slideExitActiveLeft-left']}`]: {
64+
willChange: 'transform',
65+
transform: 'translate(-100%)',
66+
transition: slideTransition,
67+
zIndex: 0,
68+
},
69+
[`& .${classes['slideExitActiveLeft-right']}`]: {
70+
willChange: 'transform',
71+
transform: 'translate(100%)',
72+
transition: slideTransition,
73+
zIndex: 0,
74+
},
75+
};
76+
});
7977

8078
/**
8179
* @ignore - do not document.

packages/mui-lab/src/ClockPicker/Clock.tsx

+6-6
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ export interface ClockProps<TDate> extends ReturnType<typeof useMeridiemMode> {
3333
value: number;
3434
}
3535

36-
const ClockRoot = styled('div', { skipSx: true })(({ theme }) => ({
36+
const ClockRoot = styled('div')(({ theme }) => ({
3737
display: 'flex',
3838
justifyContent: 'center',
3939
alignItems: 'center',
4040
margin: theme.spacing(2),
4141
}));
4242

43-
const ClockClock = styled('div', { skipSx: true })({
43+
const ClockClock = styled('div')({
4444
backgroundColor: 'rgba(0,0,0,.07)',
4545
borderRadius: '50%',
4646
height: 220,
@@ -50,7 +50,7 @@ const ClockClock = styled('div', { skipSx: true })({
5050
pointerEvents: 'none',
5151
});
5252

53-
const ClockSquareMask = styled('div', { skipSx: true })({
53+
const ClockSquareMask = styled('div')({
5454
width: '100%',
5555
height: '100%',
5656
position: 'absolute',
@@ -68,7 +68,7 @@ const ClockSquareMask = styled('div', { skipSx: true })({
6868
},
6969
});
7070

71-
const ClockPin = styled('div', { skipSx: true })(({ theme }) => ({
71+
const ClockPin = styled('div')(({ theme }) => ({
7272
width: 6,
7373
height: 6,
7474
borderRadius: '50%',
@@ -79,7 +79,7 @@ const ClockPin = styled('div', { skipSx: true })(({ theme }) => ({
7979
transform: 'translate(-50%, -50%)',
8080
}));
8181

82-
const ClockAmButton = styled(IconButton, { skipSx: true })<{ ownerState: ClockProps<any> }>(
82+
const ClockAmButton = styled(IconButton)<{ ownerState: ClockProps<any> }>(
8383
({ theme, ownerState }) => ({
8484
zIndex: 1,
8585
position: 'absolute',
@@ -95,7 +95,7 @@ const ClockAmButton = styled(IconButton, { skipSx: true })<{ ownerState: ClockPr
9595
}),
9696
);
9797

98-
const ClockPmButton = styled(IconButton, { skipSx: true })<{ ownerState: ClockProps<any> }>(
98+
const ClockPmButton = styled(IconButton)<{ ownerState: ClockProps<any> }>(
9999
({ theme, ownerState }) => ({
100100
zIndex: 1,
101101
position: 'absolute',

packages/mui-lab/src/ClockPicker/ClockNumber.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export interface ClockNumberProps extends React.HTMLAttributes<HTMLSpanElement>
1919

2020
export const classes = generateUtilityClasses('PrivateClockNumber', ['selected', 'disabled']);
2121

22-
const ClockNumberRoot = styled('span', { skipSx: true })<{ ownerState: ClockNumberProps }>(
22+
const ClockNumberRoot = styled('span')<{ ownerState: ClockNumberProps }>(
2323
({ theme, ownerState }) => ({
2424
height: CLOCK_HOUR_WIDTH,
2525
width: CLOCK_HOUR_WIDTH,

packages/mui-lab/src/ClockPicker/ClockPointer.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ export interface ClockPointerProps extends React.HTMLAttributes<HTMLDivElement>
99
value: number;
1010
}
1111

12-
const ClockPointerRoot = styled('div', { skipSx: true })<{
12+
const ClockPointerRoot = styled('div')<{
1313
ownerState: ClockPointerProps & ClockPointer['state'];
1414
}>(({ theme, ownerState }) => ({
1515
width: 2,
@@ -23,7 +23,7 @@ const ClockPointerRoot = styled('div', { skipSx: true })<{
2323
}),
2424
}));
2525

26-
const ClockPointerThumb = styled('div', { skipSx: true })<{
26+
const ClockPointerThumb = styled('div')<{
2727
ownerState: ClockPointerProps & ClockPointer['state'];
2828
}>(({ theme, ownerState }) => ({
2929
width: 4,

packages/mui-lab/src/DatePicker/DatePickerToolbar.tsx

+5-7
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,18 @@ import { CalendarPickerView } from '../CalendarPicker';
1010

1111
const classes = generateUtilityClasses('PrivateDatePickerToolbar', ['penIcon']);
1212

13-
const DatePickerToolbarRoot = styled(PickersToolbar, { skipSx: true })<{ ownerState: any }>({
13+
const DatePickerToolbarRoot = styled(PickersToolbar)<{ ownerState: any }>({
1414
[`& .${classes.penIcon}`]: {
1515
position: 'relative',
1616
top: 4,
1717
},
1818
});
1919

20-
const DatePickerToolbarTitle = styled(Typography, { skipSx: true })<{ ownerState: any }>(
21-
({ ownerState }) => ({
22-
...(ownerState.isLandscape && {
23-
margin: 'auto 16px auto auto',
24-
}),
20+
const DatePickerToolbarTitle = styled(Typography)<{ ownerState: any }>(({ ownerState }) => ({
21+
...(ownerState.isLandscape && {
22+
margin: 'auto 16px auto auto',
2523
}),
26-
);
24+
}));
2725

2826
/**
2927
* @ignore - internal component.

packages/mui-lab/src/DateRangePicker/DateRangePickerInput.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
MuiTextFieldProps,
1313
} from '../internal/pickers/PureDateInput';
1414

15-
const DateRangePickerInputRoot = styled('div', { skipSx: true })(({ theme }) => ({
15+
const DateRangePickerInputRoot = styled('div')(({ theme }) => ({
1616
display: 'flex',
1717
alignItems: 'baseline',
1818
[theme.breakpoints.down('xs')]: {

packages/mui-lab/src/DateRangePicker/DateRangePickerToolbar.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ interface DateRangePickerToolbarProps
2323
setCurrentlySelectingRangeEnd: (newSelectingEnd: 'start' | 'end') => void;
2424
}
2525

26-
const DateRangePickerToolbarRoot = styled(PickersToolbar, { skipSx: true })({
26+
const DateRangePickerToolbarRoot = styled(PickersToolbar)({
2727
[`& .${classes.penIcon}`]: {
2828
position: 'relative',
2929
top: 4,
3030
},
3131
});
3232

33-
const DateRangePickerToolbarContainer = styled('div', { skipSx: true })({
33+
const DateRangePickerToolbarContainer = styled('div')({
3434
display: 'flex',
3535
});
3636

0 commit comments

Comments
 (0)