GoScrobble/web/node_modules/@material-ui/styles/styled/styled.d.ts

40 lines
1.2 KiB
TypeScript

import { Omit, Overwrite } from '@material-ui/types';
import {
CreateCSSProperties,
StyledComponentProps,
WithStylesOptions,
} from '@material-ui/styles/withStyles';
import * as React from 'react';
import { DefaultTheme } from '../defaultTheme';
// We don't want a union type here (like React.ComponentType) in order to support mapped types.
export type StyledComponent<P extends {}> = (props: P) => React.ReactElement<P, any> | null;
/**
* @internal
*/
export type ComponentCreator<Component extends React.ElementType> = <
Theme = DefaultTheme,
Props extends {} = React.ComponentPropsWithoutRef<Component>
>(
styles:
| CreateCSSProperties<Props>
| ((props: { theme: Theme } & Props) => CreateCSSProperties<Props>),
options?: WithStylesOptions<Theme>
) => StyledComponent<
Omit<
JSX.LibraryManagedAttributes<Component, React.ComponentProps<Component>>,
'classes' | 'className'
> &
StyledComponentProps<'root'> &
Overwrite<Props, { className?: string; theme?: Theme }>
>;
export interface StyledProps {
className: string;
}
export default function styled<Component extends React.ElementType>(
Component: Component
): ComponentCreator<Component>;