zilly-ui
Version:
Zilly web react ui components
58 lines (46 loc) • 1.73 kB
text/typescript
/** @format */
import { StyledComponentProps } from "@material-ui/styles/withStyles";
export type Omit<T, K extends keyof any> = T extends any ? Pick<T, Exclude<keyof T, K>> : never;
export interface CommonStylePropTypes {
[propName: string]: any;
}
export type StandardProps<
C,
ClassKey extends string,
Removals extends keyof C = never,
AcceptsRef = true
> = Omit<C, "classes" | Removals> &
StyledComponentProps<ClassKey> & {
className?: string;
style?: React.CSSProperties;
} & {
ref?: AcceptsRef extends true
? C extends { ref?: infer RefType }
? RefType
: React.Ref<unknown>
: never;
};
export { StyledComponentProps };
export interface OverridableTypeMap {
props: {};
defaultComponent: React.ElementType;
classKey: string;
}
export interface CommonProps<M extends OverridableTypeMap>
extends StyledComponentProps<M["classKey"]> {
className?: string;
style?: React.CSSProperties;
}
export type BaseProps<M extends OverridableTypeMap> = M["props"] & CommonProps<M>;
export type DefaultComponentProps<M extends OverridableTypeMap> = BaseProps<M> &
Omit<React.ComponentPropsWithRef<M["defaultComponent"]>, keyof BaseProps<M>>;
export type OverrideProps<M extends OverridableTypeMap, C extends React.ElementType> = BaseProps<
M
> &
Omit<React.ComponentPropsWithRef<C>, keyof CommonProps<M>>;
export interface OverridableComponent<M extends OverridableTypeMap> {
<C extends React.ElementType>(props: { component: C } & OverrideProps<M, C>): JSX.Element;
(props: DefaultComponentProps<M>): JSX.Element;
}
export type Simplify<T> = T extends any ? { [K in keyof T]: T[K] } : never;
export type SimplifiedPropsOf<C extends React.ElementType> = Simplify<React.ComponentProps<C>>;