react-native-unistyles
Version:
Level up your React Native StyleSheet
65 lines • 2.97 kB
TypeScript
import type { CSSProperties } from 'react';
import type { BoxShadowValue, FilterFunction, ImageStyle, TextStyle, ViewStyle } from 'react-native';
import type { UnistylesBreakpoints } from '../global';
import type { UnistylesMiniRuntime } from '../specs';
import type { Pseudo } from '../web/convert/pseudo';
import type { ReactNativeStyleSheet } from './breakpoints';
import type { ShadowOffset, TransformStyles, UnistylesTheme } from './core';
import type { ExtractVariantNames } from './variants';
type NestedKeys = 'shadowOffset' | 'transform' | 'textShadowOffset' | 'boxShadow' | 'filter';
export type UnistyleView = Omit<ViewStyle, NestedKeys>;
export type UnistyleText = Omit<TextStyle, NestedKeys>;
export type UnistyleImage = Omit<ImageStyle, NestedKeys>;
type UnistyleNestedStyles = {
shadowOffset?: ToDeepUnistyles<ShadowOffset>;
textShadowOffset?: ToDeepUnistyles<ShadowOffset>;
transform?: Array<ToDeepUnistyles<TransformStyles>>;
boxShadow?: Array<ToDeepUnistyles<BoxShadowValue>> | string;
filter?: Array<ToDeepUnistyles<FilterFunction>> | string;
};
type VariantsObject = {
[variantName: string]: {
[variant: string]: Omit<UnistylesValues, 'variants' | 'compoundVariants'>;
};
};
type CustomClassName = {
_classNames?: string | Array<string>;
};
type CompoundVariant = {
styles: Omit<UnistylesValues, 'variants' | 'compoundVariants'>;
};
type VariantsAndCompoundVariants = {
variants?: VariantsObject;
compoundVariants?: Array<CompoundVariant>;
};
export type ToDeepUnistyles<T> = {
[K in keyof T]?: T[K] | {
[key in BreakpointsOrMediaQueries]?: T[K];
};
};
type AllAvailableStyles = UnistyleView & UnistyleText & UnistyleImage & UnistyleNestedStyles;
export type AllAvailableKeys = keyof (UnistyleView & UnistyleText & UnistyleImage);
export type BreakpointsOrMediaQueries = keyof UnistylesBreakpoints | symbol;
type FlatUnistylesValues = {
[propName in AllAvailableKeys]?: AllAvailableStyles[propName] | {
[key in BreakpointsOrMediaQueries]?: AllAvailableStyles[propName];
};
};
export type UnistylesValues = FlatUnistylesValues & {} & VariantsAndCompoundVariants & {
[propName in NestedKeys]?: UnistyleNestedStyles[propName];
} & {
_web?: ToDeepUnistyles<CSSProperties> & CustomClassName & {
[propName in Pseudo]?: ToDeepUnistyles<CSSProperties>;
};
};
export type StyleSheet = {
[styleName: string]: UnistylesValues | ((...args: any) => UnistylesValues);
};
export type StyleSheetWithSuperPowers<S extends StyleSheet> = ((theme: UnistylesTheme, miniRuntime: UnistylesMiniRuntime) => S) | S;
type UseVariantsFn<T> = {
useVariants: (variants: ExtractVariantNames<T>) => void;
};
declare const create: <S extends StyleSheet>(stylesheet: StyleSheetWithSuperPowers<S>) => (ReactNativeStyleSheet<S> & UseVariantsFn<typeof stylesheet>);
export type CreateUnistylesStyleSheet = typeof create;
export {};
//# sourceMappingURL=stylesheet.d.ts.map