@radix-ui/themes
Version:
[](https://radix-ui.com/themes)
59 lines (58 loc) • 2.47 kB
TypeScript
import type React from 'react';
type Union<S = string, T extends string | number = string> = T | Omit<S, T>;
declare const breakpoints: readonly ["initial", "xs", "sm", "md", "lg", "xl"];
type Breakpoint = (typeof breakpoints)[number];
type Responsive<T> = T | Partial<Record<Breakpoint, T>>;
type BooleanPropDef = {
type: 'boolean';
default?: boolean;
required?: boolean;
className?: string;
};
type StringPropDef = {
type: 'string';
default?: string;
required?: boolean;
};
type ReactNodePropDef = {
type: 'ReactNode';
default?: React.ReactNode;
required?: boolean;
};
type EnumPropDef<T> = {
type: 'enum';
values: readonly T[];
default?: T;
required?: boolean;
};
type EnumOrStringPropDef<T> = {
type: 'enum | string';
values: readonly T[];
default?: T | string;
required?: boolean;
};
type NonStylingPropDef = {
className?: never;
customProperties?: never;
parseValue?: never;
};
type StylingPropDef = {
className: string;
parseValue?: (value: string) => string | undefined;
};
type ArbitraryStylingPropDef = {
className: string;
customProperties: `--${string}`[];
parseValue?: (value: string) => string | undefined;
};
type RegularPropDef<T> = ReactNodePropDef | BooleanPropDef | (StringPropDef & ArbitraryStylingPropDef) | (StringPropDef & NonStylingPropDef) | (EnumPropDef<T> & StylingPropDef) | (EnumPropDef<T> & NonStylingPropDef) | (EnumOrStringPropDef<T> & ArbitraryStylingPropDef) | (EnumOrStringPropDef<T> & NonStylingPropDef);
type ResponsivePropDef<T = any> = RegularPropDef<T> & {
responsive: true;
};
type PropDef<T = any> = RegularPropDef<T> | ResponsivePropDef<T>;
type GetPropDefType<Def> = Def extends BooleanPropDef ? (Def extends ResponsivePropDef ? Responsive<boolean> : boolean) : Def extends StringPropDef ? (Def extends ResponsivePropDef ? Responsive<string> : string) : Def extends ReactNodePropDef ? (Def extends ResponsivePropDef ? Responsive<React.ReactNode> : React.ReactNode) : Def extends EnumOrStringPropDef<infer Type> ? Def extends ResponsivePropDef<infer Type extends string> ? Responsive<Union<string, Type>> : Type : Def extends EnumPropDef<infer Type> ? (Def extends ResponsivePropDef<infer Type> ? Responsive<Type> : Type) : never;
type GetPropDefTypes<P> = {
[K in keyof P]?: GetPropDefType<P[K]>;
};
export { breakpoints };
export type { PropDef, GetPropDefTypes, ResponsivePropDef, Breakpoint, Responsive, Union, };