68 lines
1.8 KiB
TypeScript
68 lines
1.8 KiB
TypeScript
import * as React from 'react';
|
|
import { Omit } from '@material-ui/types';
|
|
import { StyledComponentProps } from './styles';
|
|
|
|
/**
|
|
* A component whose root component can be controlled via a `component` prop.
|
|
*
|
|
* Adjusts valid props based on the type of `component`.
|
|
*/
|
|
export interface OverridableComponent<M extends OverridableTypeMap> {
|
|
<C extends React.ElementType>(props: { component: C } & OverrideProps<M, C>): JSX.Element;
|
|
(props: DefaultComponentProps<M>): JSX.Element;
|
|
}
|
|
|
|
/**
|
|
* Props of the component if `component={Component}` is used.
|
|
*/
|
|
// prettier-ignore
|
|
export type OverrideProps<
|
|
M extends OverridableTypeMap,
|
|
C extends React.ElementType
|
|
> = (
|
|
& BaseProps<M>
|
|
& Omit<React.ComponentPropsWithRef<C>, keyof CommonProps<M>>
|
|
);
|
|
|
|
/**
|
|
* Props if `component={Component}` is NOT used.
|
|
*/
|
|
// prettier-ignore
|
|
export type DefaultComponentProps<M extends OverridableTypeMap> =
|
|
& BaseProps<M>
|
|
& Omit<React.ComponentPropsWithRef<M['defaultComponent']>, keyof BaseProps<M>>;
|
|
|
|
/**
|
|
* Props defined on the component (+ common material-ui props).
|
|
*/
|
|
// prettier-ignore
|
|
export type BaseProps<M extends OverridableTypeMap> =
|
|
& M['props']
|
|
& CommonProps<M>;
|
|
|
|
/**
|
|
* Props that are valid for material-ui components.
|
|
*/
|
|
export interface CommonProps<M extends OverridableTypeMap>
|
|
extends StyledComponentProps<M['classKey']> {
|
|
className?: string;
|
|
style?: React.CSSProperties;
|
|
}
|
|
|
|
export interface OverridableTypeMap {
|
|
props: {};
|
|
defaultComponent: React.ElementType;
|
|
classKey: string;
|
|
}
|
|
|
|
/**
|
|
* @deprecated Not used in this library.
|
|
*/
|
|
export type Simplify<T> = T extends any ? { [K in keyof T]: T[K] } : never;
|
|
|
|
/**
|
|
* @deprecated Not used in this library.
|
|
*/
|
|
// tslint:disable-next-line: deprecation
|
|
export type SimplifiedPropsOf<C extends React.ElementType> = Simplify<React.ComponentProps<C>>;
|