GoScrobble/web/node_modules/@material-ui/core/OverridableComponent.d.ts

76 lines
1.9 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: {
/**
* The component used for the root node.
* Either a string to use a HTML element or a component.
*/
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>>;