UNPKG

react-native-reanimated

Version:

More powerful alternative to Animated library for React Native.

47 lines (38 loc) 1.12 kB
'use strict'; import { CSSKeyframesRuleImpl } from '../models'; import type { CSSStyle } from '../types'; import { isCSSKeyframesRule } from '../utils'; type NamedStyles<T> = { [P in keyof T]: CSSStyle }; function parseAnimationName( animationName: Required<CSSStyle['animationName']> ) { if (typeof animationName !== 'object') { return; } const keyframesArray = Array.isArray(animationName) ? animationName : [animationName]; return keyframesArray.map((keyframes) => isCSSKeyframesRule(keyframes) ? keyframes : new CSSKeyframesRuleImpl(keyframes) ); } export const create = <T extends NamedStyles<T>>( // eslint-disable-next-line @typescript-eslint/no-explicit-any styles: T & NamedStyles<any> ): T => { // TODO - implement more optimizations and correctness checks in dev here for (const key in styles) { const style = styles[key]; if (style.animationName) { style.animationName = parseAnimationName(style.animationName); } } if (__DEV__) { for (const key in styles) { Object.freeze(styles[key]); } } return styles; };