UNPKG

@re-flex/styles

Version:
24 lines (23 loc) 1.83 kB
import React, { ComponentProps, ElementType, ForwardedRef, PropsWithoutRef } from "react"; import { SxType } from "./sx"; import Theme from "./Types"; declare type StylesSXType = SxType | SxType[]; declare type StylesGenerator<P extends object = {}> = (props: P) => StylesSXType; export declare type PropsOf<C extends keyof JSX.IntrinsicElements | React.JSXElementConstructor<any>> = JSX.LibraryManagedAttributes<C, React.ComponentProps<C>>; declare type GenerateProps<T extends ElementType, P extends object = {}> = PropsOf<T> & P; declare type RenderClasses<Tag extends ElementType, PP extends object> = StylesSXType | StylesGenerator<GenerateProps<Tag, PP> & { theme: Theme; }>; export declare type DistributiveOmit<T, K extends keyof any> = T extends any ? Omit<T, K> : never; declare const styledFlex: <Tag extends React.ElementType<any>, Forward extends boolean = false>(Component: Tag, forwardableRef?: Forward, defaultProps?: React.ComponentProps<Tag> & { sx?: SxType; }) => <PP extends object = {}>(renderClasses: RenderClasses<Tag, PP>) => (<Alias extends React.ElementType<any>>({ sx: SXInProp, component: ComponentInProp, ...definedProps }: PP & { className?: string; component?: Alias; sx?: SxType; } & DistributiveOmit<JSX.LibraryManagedAttributes<Alias, React.ComponentProps<Alias>>, JSX.LibraryManagedAttributes<Tag, React.ComponentProps<Tag>>>, ref?: Forward extends true ? React.ForwardedRef<React.PropsWithoutRef<Alias extends React.ElementType<any> ? Alias : Tag>> : never) => JSX.Element) | React.ForwardRefExoticComponent<React.PropsWithoutRef<PP & { className?: string; component?: React.ElementType<any>; sx?: SxType; } & Omit<any, JSX.LibraryManagedAttributes<Tag, React.ComponentProps<Tag>>>> & React.RefAttributes<React.ElementType<any>>>; export default styledFlex;