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>(
|
12 | props: {
|
13 | |
14 |
|
15 |
|
16 |
|
17 | component: C;
|
18 | } & OverrideProps<M, C>
|
19 | ): JSX.Element;
|
20 | (props: DefaultComponentProps<M>): JSX.Element;
|
21 | }
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 | export type OverrideProps<
|
28 | M extends OverridableTypeMap,
|
29 | C extends React.ElementType
|
30 | > = (
|
31 | & BaseProps<M>
|
32 | & Omit<React.ComponentPropsWithRef<C>, keyof CommonProps<M>>
|
33 | );
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 | export type DefaultComponentProps<M extends OverridableTypeMap> =
|
40 | & BaseProps<M>
|
41 | & Omit<React.ComponentPropsWithRef<M['defaultComponent']>, keyof BaseProps<M>>;
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 | export type BaseProps<M extends OverridableTypeMap> =
|
48 | & M['props']
|
49 | & CommonProps<M>;
|
50 |
|
51 |
|
52 |
|
53 |
|
54 | export interface CommonProps<M extends OverridableTypeMap>
|
55 | extends StyledComponentProps<M['classKey']> {
|
56 | className?: string;
|
57 | style?: React.CSSProperties;
|
58 | }
|
59 |
|
60 | export interface OverridableTypeMap {
|
61 | props: {};
|
62 | defaultComponent: React.ElementType;
|
63 | classKey: string;
|
64 | }
|
65 |
|
66 |
|
67 |
|
68 |
|
69 | export type Simplify<T> = T extends any ? { [K in keyof T]: T[K] } : never;
|
70 |
|
71 |
|
72 |
|
73 |
|
74 |
|
75 | export type SimplifiedPropsOf<C extends React.ElementType> = Simplify<React.ComponentProps<C>>;
|