UNPKG

rn-variant

Version:

Light-weight, type-safe style variants for React Native.

39 lines (36 loc) 1.12 kB
import { ViewStyle, TextStyle, ImageStyle } from 'react-native'; type RNStyle = ViewStyle & TextStyle & ImageStyle; type NamedStyle = { style: RNStyle; }; type VariantDefinitions = Record<string, Record<string, Partial<RNStyle>>>; type CompoundVariant<V extends VariantDefinitions> = { variants: { [K in keyof V]?: keyof V[K]; }; style: Partial<RNStyle>; }; type VariantInput<V extends VariantDefinitions> = { [K in keyof V]?: V[K] extends { true: any; false: any; } ? boolean : V[K] extends { true: any; } ? boolean : V[K] extends { false: any; } ? boolean : keyof V[K]; }; declare function createVariantStyles<V extends VariantDefinitions>(config: { base?: Partial<RNStyle>; variants: V; compoundVariants?: CompoundVariant<V>[]; }): { styles: { [K in keyof V]: { [K2 in keyof V[K]]: NamedStyle; }; }; useVariants: (input: VariantInput<V>) => { style: RNStyle; }; }; type InferVariant<T> = T extends { useVariants: (input: infer I) => any; } ? I : never; export { type InferVariant, createVariantStyles };