@hakuna-matata-ui/styled-system
Version:
Style function for css-in-js building component libraries
94 lines (76 loc) • 2.17 kB
text/typescript
import { Dict } from "@hakuna-matata-ui/utils"
import * as CSS from "csstype"
import type {
BackgroundProps,
BorderProps,
ColorProps,
EffectProps,
FilterProps,
FlexboxProps,
GridProps,
InteractivityProps,
LayoutProps,
ListProps,
OtherProps,
PositionProps,
RingProps,
SpaceProps,
TextDecorationProps,
TransformProps,
TransitionProps,
TypographyProps,
} from "./config"
import { Pseudos } from "./pseudos"
import { ResponsiveValue } from "./utils/types"
export interface StyleProps
extends SpaceProps,
ColorProps,
TransitionProps,
TypographyProps,
FlexboxProps,
TransformProps,
GridProps,
FilterProps,
LayoutProps,
BorderProps,
EffectProps,
BackgroundProps,
ListProps,
PositionProps,
RingProps,
InteractivityProps,
TextDecorationProps,
OtherProps {}
export interface SystemCSSProperties
extends CSS.Properties,
Omit<StyleProps, keyof CSS.Properties> {}
export type ThemeThunk<T> = T | ((theme: Dict) => T)
type PropertyValue<K extends keyof SystemCSSProperties> = ThemeThunk<
ResponsiveValue<boolean | number | string | SystemCSSProperties[K]>
>
export type CSSWithMultiValues = {
[K in keyof SystemCSSProperties]?: K extends keyof StyleProps
? StyleProps[K] | PropertyValue<K>
: PropertyValue<K>
}
type PseudoKeys = keyof CSS.Pseudos | keyof Pseudos
type PseudoSelectorDefinition<D> = D | RecursivePseudo<D>
export type RecursivePseudo<D> = {
[K in PseudoKeys]?: PseudoSelectorDefinition<D> & D
}
type CSSDefinition<D> = D | string | RecursiveCSSSelector<D | string>
export interface RecursiveCSSSelector<D> {
[selector: string]: CSSDefinition<D> & D
}
export type RecursiveCSSObject<D> = D &
(D | RecursivePseudo<D> | RecursiveCSSSelector<D>)
export type CSSObject = RecursiveCSSObject<CSSWithMultiValues>
export type SystemStyleObject = CSSObject
export interface FunctionCSSInterpolation {
(theme: Dict): CSSObject
}
export type StyleObjectOrFn = CSSObject | FunctionCSSInterpolation
type PseudoProps = {
[K in keyof Pseudos]?: SystemStyleObject
}
export interface SystemProps extends StyleProps, PseudoProps {}