Skip to content

Commit 9ce5662

Browse files
committed
[typescript] Generify props with component property
[Avatar] Generify AvatarProps [BottomNavigationAction] Generify BottomNavigationActionProps [Button] Allow omitting type parameter of ButtonTypeMap [ButtonBase] Generify ButtonBaseProps [Breadcrumbs] Generify BreadcrumbsProps [ButtonGroup] Generify ButtonGroupProps [CardActionArea] Generify CardActionAreaProps [Chip] Generify ChipProps [Divider] Generify DividerProps [ExpansionPanelSummary] Generify ExpansionPanelSummaryProps [Fab] Generify FabProps [FormControl] Generify FormControlProps [FormLabel] Generify FormLabelProps [IconButton] Generify IconButtonProps [Link] Generify LinkProps [List] Generify ListProps [StepButton] Generify StepButtonProps [Tab] Generify TabProps [TablePagination] Generify TablePaginationProps [TableSortLabel] Generify TableSortLabelProps [TabScrollButton] Generify TabScrollButtonProps [Tabs] Generify TabsProps [ToggleButton] Generify ToggleButtonProps
1 parent ed2ade1 commit 9ce5662

File tree

26 files changed

+334
-174
lines changed

26 files changed

+334
-174
lines changed

packages/material-ui-lab/src/ToggleButton/ToggleButton.d.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,29 @@
1-
import { ButtonBaseClassKey, ExtendButtonBase } from '@material-ui/core/ButtonBase';
2-
import { SimplifiedPropsOf } from '@material-ui/core/OverridableComponent';
1+
import {
2+
ButtonBaseClassKey,
3+
ExtendButtonBase,
4+
ExtendButtonBaseTypeMap,
5+
} from '@material-ui/core/ButtonBase';
6+
import { OverrideProps } from '@material-ui/core/OverridableComponent';
37

4-
declare const ToggleButton: ExtendButtonBase<{
5-
props: {
8+
export type ToggleButtonTypeMap<
9+
P = {},
10+
D extends React.ElementType = 'button'
11+
> = ExtendButtonBaseTypeMap<{
12+
props: P & {
613
disableFocusRipple?: boolean;
714
selected?: boolean;
815
value?: any;
916
};
10-
defaultComponent: 'button';
17+
defaultComponent: D;
1118
classKey: ToggleButtonClassKey;
1219
}>;
1320

14-
export type ToggleButtonProps = SimplifiedPropsOf<typeof ToggleButton>;
21+
declare const ToggleButton: ExtendButtonBase<ToggleButtonTypeMap>;
22+
23+
export type ToggleButtonProps<
24+
D extends React.ElementType = ToggleButtonTypeMap['defaultComponent'],
25+
P = {}
26+
> = OverrideProps<ToggleButtonTypeMap<P, D>, D>;
1527

1628
export type ToggleButtonClassKey = ButtonBaseClassKey | 'label' | 'selected';
1729

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
11
import * as React from 'react';
2-
import { OverridableComponent, SimplifiedPropsOf } from '../OverridableComponent';
2+
import { OverridableComponent, OverrideProps } from '../OverridableComponent';
33

4-
declare const Avatar: OverridableComponent<{
5-
props: {
4+
export interface AvatarTypeMap<P = {}, D extends React.ElementType = 'div'> {
5+
props: P & {
66
alt?: string;
77
childrenClassName?: string;
88
imgProps?: React.HtmlHTMLAttributes<HTMLImageElement>;
99
sizes?: string;
1010
src?: string;
1111
srcSet?: string;
1212
};
13-
defaultComponent: 'div';
13+
defaultComponent: D;
1414
classKey: AvatarClassKey;
15-
}>;
15+
}
16+
17+
declare const Avatar: OverridableComponent<AvatarTypeMap>;
1618

1719
export type AvatarClassKey = 'root' | 'colorDefault' | 'img';
1820

19-
export type AvatarProps = SimplifiedPropsOf<typeof Avatar>;
21+
export type AvatarProps<
22+
D extends React.ElementType = AvatarTypeMap['defaultComponent'],
23+
P = {}
24+
> = OverrideProps<AvatarTypeMap<P, D>, D>;
2025

2126
export default Avatar;
Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
import * as React from 'react';
2-
import { ButtonBaseTypeMap, ExtendButtonBase } from '../ButtonBase';
3-
import { SimplifiedPropsOf } from '../OverridableComponent';
2+
import { ButtonBaseTypeMap, ExtendButtonBase, ExtendButtonBaseTypeMap } from '../ButtonBase';
3+
import { OverrideProps } from '../OverridableComponent';
44

5-
declare const BottomNavigationAction: ExtendButtonBase<{
6-
props: {
5+
export type BottomNavigationActionTypeMap<
6+
P,
7+
D extends React.ElementType
8+
> = ExtendButtonBaseTypeMap<{
9+
props: P & {
710
icon?: string | React.ReactElement;
811
label?: React.ReactNode;
912
onChange?: (event: React.ChangeEvent<{}>, value: any) => void;
@@ -12,12 +15,19 @@ declare const BottomNavigationAction: ExtendButtonBase<{
1215
showLabel?: boolean;
1316
value?: any;
1417
};
15-
defaultComponent: ButtonBaseTypeMap['defaultComponent'];
18+
defaultComponent: D;
1619
classKey: BottomNavigationActionClassKey;
1720
}>;
1821

22+
declare const BottomNavigationAction: ExtendButtonBase<
23+
BottomNavigationActionTypeMap<{}, ButtonBaseTypeMap['defaultComponent']>
24+
>;
25+
1926
export type BottomNavigationActionClassKey = 'root' | 'selected' | 'iconOnly' | 'wrapper' | 'label';
2027

21-
export type BottomNavigationActionProps = SimplifiedPropsOf<typeof BottomNavigationAction>;
28+
export type BottomNavigationActionProps<
29+
D extends React.ElementType = ButtonBaseTypeMap['defaultComponent'],
30+
P = {}
31+
> = OverrideProps<BottomNavigationActionTypeMap<P, D>, D>;
2232

2333
export default BottomNavigationAction;
Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
11
import * as React from 'react';
2-
import { OverridableComponent, SimplifiedPropsOf } from '../OverridableComponent';
2+
import { OverridableComponent, OverrideProps } from '../OverridableComponent';
33

4-
declare const Breadcrumbs: OverridableComponent<{
5-
props: {
4+
export interface BreadcrumbsTypeMap<P = {}, D extends React.ElementType = 'nav'> {
5+
props: P & {
66
itemsAfterCollapse?: number;
77
itemsBeforeCollapse?: number;
88
maxItems?: number;
99
separator?: React.ReactNode;
1010
};
11-
defaultComponent: 'nav';
11+
defaultComponent: D;
1212
classKey: BreadcrumbsClassKey;
13-
}>;
13+
}
14+
15+
declare const Breadcrumbs: OverridableComponent<BreadcrumbsTypeMap>;
1416

1517
export type BreadcrumbsClassKey = 'root' | 'ol' | 'li' | 'separator';
1618

17-
export type BreadcrumbsProps = SimplifiedPropsOf<typeof Breadcrumbs>;
19+
export type BreadcrumbsProps<
20+
D extends React.ElementType = BreadcrumbsTypeMap['defaultComponent'],
21+
P = {}
22+
> = OverrideProps<BreadcrumbsTypeMap<P, D>, D>;
1823

1924
export default Breadcrumbs;

packages/material-ui/src/Button/Button.d.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@ import { PropTypes } from '..';
22
import { ExtendButtonBase, ExtendButtonBaseTypeMap } from '../ButtonBase';
33
import { OverrideProps } from '../OverridableComponent';
44

5-
export type ButtonTypeMap<P, D extends React.ElementType> = ExtendButtonBaseTypeMap<{
5+
export type ButtonTypeMap<
6+
P = {},
7+
D extends React.ElementType = 'button'
8+
> = ExtendButtonBaseTypeMap<{
69
props: P & {
710
color?: PropTypes.Color;
811
disableFocusRipple?: boolean;
@@ -15,12 +18,12 @@ export type ButtonTypeMap<P, D extends React.ElementType> = ExtendButtonBaseType
1518
classKey: ButtonClassKey;
1619
}>;
1720

18-
declare const Button: ExtendButtonBase<ButtonTypeMap<{}, 'button'>>;
21+
declare const Button: ExtendButtonBase<ButtonTypeMap>;
1922

20-
export type ButtonProps<D extends React.ElementType = 'button', P = {}> = OverrideProps<
21-
ButtonTypeMap<P, D>,
22-
D
23-
>;
23+
export type ButtonProps<
24+
D extends React.ElementType = ButtonTypeMap['defaultComponent'],
25+
P = {}
26+
> = OverrideProps<ButtonTypeMap<P, D>, D>;
2427

2528
export type ButtonClassKey =
2629
| 'root'

packages/material-ui/src/ButtonBase/ButtonBase.d.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
import * as React from 'react';
22
import { TouchRippleProps } from './TouchRipple';
3-
import {
4-
OverrideProps,
5-
OverridableComponent,
6-
SimplifiedPropsOf,
7-
OverridableTypeMap,
8-
} from '../OverridableComponent';
9-
10-
export interface ButtonBaseTypeMap {
11-
props: {
3+
import { OverrideProps, OverridableComponent, OverridableTypeMap } from '../OverridableComponent';
4+
5+
export interface ButtonBaseTypeMap<P = {}, D extends React.ElementType = 'button'> {
6+
props: P & {
127
action?: React.Ref<ButtonBaseActions>;
138
/**
149
* Prefer `ref` instead.
@@ -23,7 +18,7 @@ export interface ButtonBaseTypeMap {
2318
onFocusVisible?: React.FocusEventHandler<any>;
2419
TouchRippleProps?: Partial<TouchRippleProps>;
2520
};
26-
defaultComponent: 'button';
21+
defaultComponent: D;
2722
classKey: ButtonBaseClassKey;
2823
}
2924

@@ -45,7 +40,10 @@ export type ExtendButtonBase<M extends OverridableTypeMap> = ((
4540

4641
declare const ButtonBase: ExtendButtonBase<ButtonBaseTypeMap>;
4742

48-
export type ButtonBaseProps = SimplifiedPropsOf<typeof ButtonBase>;
43+
export type ButtonBaseProps<
44+
D extends React.ElementType = ButtonBaseTypeMap['defaultComponent'],
45+
P = {}
46+
> = OverrideProps<ButtonBaseTypeMap<P, D>, D>;
4947

5048
export type ButtonBaseClassKey = 'root' | 'disabled' | 'focusVisible';
5149

packages/material-ui/src/ButtonGroup/ButtonGroup.d.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import * as React from 'react';
22
import { PropTypes } from '..';
3-
import { OverridableComponent, SimplifiedPropsOf } from '../OverridableComponent';
3+
import { OverridableComponent, OverrideProps } from '../OverridableComponent';
44

5-
declare const ButtonGroup: OverridableComponent<{
6-
props: {
5+
export interface ButtonGroupTypeMap<P = {}, D extends React.ElementType = 'div'> {
6+
props: P & {
77
color?: PropTypes.Color;
88
disabled?: boolean;
99
disableFocusRipple?: boolean;
@@ -12,9 +12,11 @@ declare const ButtonGroup: OverridableComponent<{
1212
size?: 'small' | 'medium' | 'large';
1313
variant?: 'outlined' | 'contained';
1414
};
15-
defaultComponent: 'div';
15+
defaultComponent: D;
1616
classKey: ButtonGroupClassKey;
17-
}>;
17+
}
18+
19+
declare const ButtonGroup: OverridableComponent<ButtonGroupTypeMap>;
1820

1921
export type ButtonGroupClassKey =
2022
| 'root'
@@ -28,6 +30,9 @@ export type ButtonGroupClassKey =
2830
| 'groupedContainedPrimary'
2931
| 'groupedContainedSecondary';
3032

31-
export type ButtonGroupProps = SimplifiedPropsOf<typeof ButtonGroup>;
33+
export type ButtonGroupProps<
34+
D extends React.ElementType = ButtonGroupTypeMap['defaultComponent'],
35+
P = {}
36+
> = OverrideProps<ButtonGroupTypeMap<P, D>, D>;
3237

3338
export default ButtonGroup;
Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,23 @@
1-
import { ButtonBaseTypeMap, ExtendButtonBase } from '../ButtonBase';
2-
import { SimplifiedPropsOf } from '../OverridableComponent';
1+
import { ButtonBaseTypeMap, ExtendButtonBase, ExtendButtonBaseTypeMap } from '../ButtonBase';
2+
import { OverrideProps } from '../OverridableComponent';
33

4-
declare const CardActionArea: ExtendButtonBase<{
5-
props: {
4+
export type CardActionAreaTypeMap<P, D extends React.ElementType> = ExtendButtonBaseTypeMap<{
5+
props: P & {
66
focusVisibleClassName?: string;
77
};
8-
defaultComponent: ButtonBaseTypeMap['defaultComponent'];
8+
defaultComponent: D;
99
classKey: CardActionAreaClassKey;
1010
}>;
1111

12+
declare const CardActionArea: ExtendButtonBase<
13+
CardActionAreaTypeMap<{}, ButtonBaseTypeMap['defaultComponent']>
14+
>;
15+
1216
export type CardActionAreaClassKey = 'root' | 'focusVisible' | 'focusHighlight';
1317

14-
export type CardActionAreaProps = SimplifiedPropsOf<typeof CardActionArea>;
18+
export type CardActionAreaProps<
19+
D extends React.ElementType = ButtonBaseTypeMap['defaultComponent'],
20+
P = {}
21+
> = OverrideProps<CardActionAreaTypeMap<P, D>, D>;
1522

1623
export default CardActionArea;

packages/material-ui/src/Chip/Chip.d.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import * as React from 'react';
22
import { PropTypes } from '..';
3-
import { OverridableComponent, SimplifiedPropsOf } from '../OverridableComponent';
3+
import { OverridableComponent, OverrideProps } from '../OverridableComponent';
44

5-
declare const Chip: OverridableComponent<{
6-
props: {
5+
export interface ChipTypeMap<P = {}, D extends React.ElementType = 'div'> {
6+
props: P & {
77
avatar?: React.ReactElement;
88
clickable?: boolean;
99
color?: PropTypes.Color;
@@ -14,9 +14,11 @@ declare const Chip: OverridableComponent<{
1414
size?: 'small' | 'medium';
1515
variant?: 'default' | 'outlined';
1616
};
17-
defaultComponent: 'div';
17+
defaultComponent: D;
1818
classKey: ChipClassKey;
19-
}>;
19+
}
20+
21+
declare const Chip: OverridableComponent<ChipTypeMap>;
2022

2123
export type ChipClassKey =
2224
| 'root'
@@ -50,6 +52,9 @@ export type ChipClassKey =
5052
| 'deleteIconOutlinedColorPrimary'
5153
| 'deleteIconOutlinedColorSecondary';
5254

53-
export type ChipProps = SimplifiedPropsOf<typeof Chip>;
55+
export type ChipProps<
56+
D extends React.ElementType = ChipTypeMap['defaultComponent'],
57+
P = {}
58+
> = OverrideProps<ChipTypeMap<P, D>, D>;
5459

5560
export default Chip;
Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
1-
import { OverridableComponent, SimplifiedPropsOf } from '../OverridableComponent';
1+
import { OverridableComponent, OverrideProps } from '../OverridableComponent';
22

3-
declare const Divider: OverridableComponent<{
4-
props: {
3+
export interface DividerTypeMap<P = {}, D extends React.ElementType = 'hr'> {
4+
props: P & {
55
absolute?: boolean;
66
light?: boolean;
77
variant?: 'fullWidth' | 'inset' | 'middle';
88
};
9-
defaultComponent: 'hr';
9+
defaultComponent: D;
1010
classKey: DividerClassKey;
11-
}>;
11+
}
12+
13+
declare const Divider: OverridableComponent<DividerTypeMap>;
1214

1315
export type DividerClassKey = 'root' | 'absolute' | 'inset' | 'light' | 'middle';
1416

15-
export type DividerProps = SimplifiedPropsOf<typeof Divider>;
17+
export type DividerProps<
18+
D extends React.ElementType = DividerTypeMap['defaultComponent'],
19+
P = {}
20+
> = OverrideProps<DividerTypeMap<P, D>, D>;
1621

1722
export default Divider;
Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
import * as React from 'react';
2-
import { ExtendButtonBase } from '../ButtonBase';
2+
import { ExtendButtonBase, ExtendButtonBaseTypeMap } from '../ButtonBase';
33
import { IconButtonProps } from '../IconButton';
4-
import { SimplifiedPropsOf } from '../OverridableComponent';
4+
import { OverrideProps } from '../OverridableComponent';
55

6-
declare const ExpansionPanelSummary: ExtendButtonBase<{
7-
props: {
6+
export type ExpansionPanelSummaryTypeMap<
7+
P = {},
8+
D extends React.ElementType = 'div'
9+
> = ExtendButtonBaseTypeMap<{
10+
props: P & {
811
disabled?: boolean;
912
expanded?: boolean;
1013
expandIcon?: React.ReactNode;
1114
IconButtonProps?: Partial<IconButtonProps>;
1215
onChange?: React.ReactEventHandler<{}>;
1316
};
14-
defaultComponent: 'div';
17+
defaultComponent: D;
1518
classKey: ExpansionPanelSummaryClassKey;
1619
}>;
1720

21+
declare const ExpansionPanelSummary: ExtendButtonBase<ExpansionPanelSummaryTypeMap>;
22+
1823
export type ExpansionPanelSummaryClassKey =
1924
| 'root'
2025
| 'expanded'
@@ -23,6 +28,9 @@ export type ExpansionPanelSummaryClassKey =
2328
| 'content'
2429
| 'expandIcon';
2530

26-
export type ExpansionPanelSummaryProps = SimplifiedPropsOf<typeof ExpansionPanelSummary>;
31+
export type ExpansionPanelSummaryProps<
32+
D extends React.ElementType = ExpansionPanelSummaryTypeMap['defaultComponent'],
33+
P = {}
34+
> = OverrideProps<ExpansionPanelSummaryTypeMap<P, D>, D>;
2735

2836
export default ExpansionPanelSummary;

0 commit comments

Comments
 (0)