mirror of
https://github.com/idanoo/GoScrobble.git
synced 2024-11-24 09:25:15 +00:00
76 lines
1.9 KiB
TypeScript
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>>;
|