1 | import * as React from 'react';
|
2 | import { Omit } from '@material-ui/types';
|
3 | import { StyledComponentProps } from './styles';
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | export interface OverridableComponent<M extends OverridableTypeMap> {
|
11 | <C extends React.ElementType>(props: { component: C } & OverrideProps<M, C>): JSX.Element;
|
12 | (props: DefaultComponentProps<M>): JSX.Element;
|
13 | }
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 | export type OverrideProps<
|
20 | M extends OverridableTypeMap,
|
21 | C extends React.ElementType
|
22 | > = (
|
23 | & BaseProps<M>
|
24 | & Omit<React.ComponentPropsWithRef<C>, keyof CommonProps<M>>
|
25 | );
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | export type DefaultComponentProps<M extends OverridableTypeMap> =
|
32 | & BaseProps<M>
|
33 | & Omit<React.ComponentPropsWithRef<M['defaultComponent']>, keyof BaseProps<M>>;
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 | export type BaseProps<M extends OverridableTypeMap> =
|
40 | & M['props']
|
41 | & CommonProps<M>;
|
42 |
|
43 |
|
44 |
|
45 |
|
46 | export interface CommonProps<M extends OverridableTypeMap>
|
47 | extends StyledComponentProps<M['classKey']> {
|
48 | className?: string;
|
49 | style?: React.CSSProperties;
|
50 | }
|
51 |
|
52 | export interface OverridableTypeMap {
|
53 | props: {};
|
54 | defaultComponent: React.ElementType;
|
55 | classKey: string;
|
56 | }
|
57 |
|
58 |
|
59 |
|
60 |
|
61 | export type Simplify<T> = T extends any ? { [K in keyof T]: T[K] } : never;
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 | export type SimplifiedPropsOf<C extends React.ElementType> = Simplify<React.ComponentProps<C>>;
|