'use strict'; import type { PlainStyle } from '../../common'; import type { CSSTimingFunction } from '../easing'; import type { TimeUnit } from './common'; import type { AddArrayPropertyType, AddArrayPropertyTypes } from './helpers'; export interface CSSKeyframesRule { readonly cssRules: CSSAnimationKeyframes; readonly cssText: string; readonly length: number; readonly name: string; } export type CSSAnimationKeyframeSelector = string | number; export type CSSAnimationKeyframeBlock = S & { animationTimingFunction?: CSSAnimationTimingFunction; }; export type CSSAnimationKeyframes = Record< CSSAnimationKeyframeSelector, CSSAnimationKeyframeBlock >; export type CSSAnimationDuration = TimeUnit; export type CSSAnimationTimingFunction = CSSTimingFunction; export type CSSAnimationDelay = TimeUnit; export type CSSAnimationIterationCount = 'infinite' | number; export type CSSAnimationDirection = | 'normal' | 'reverse' | 'alternate' | 'alternate-reverse'; export type CSSAnimationFillMode = 'none' | 'forwards' | 'backwards' | 'both'; export type CSSAnimationPlayState = 'running' | 'paused'; export type SingleCSSAnimationSettings = { animationDuration?: CSSAnimationDuration; animationTimingFunction?: CSSAnimationTimingFunction; animationDelay?: CSSAnimationDelay; animationIterationCount?: CSSAnimationIterationCount; animationDirection?: CSSAnimationDirection; animationFillMode?: CSSAnimationFillMode; animationPlayState?: CSSAnimationPlayState; // animationTimeline?: // TODO - This is still experimental in browsers and we might not want to support it when CSS animations in reanimated are released }; export type SingleCSSAnimationProperties = SingleCSSAnimationSettings & { animationName: CSSKeyframesRule | CSSAnimationKeyframes; }; export type CSSAnimationSettings = AddArrayPropertyTypes; export type CSSAnimationProperties = CSSAnimationSettings & { animationName: | AddArrayPropertyType> | 'none'; }; export type ExistingCSSAnimationProperties = CSSAnimationProperties & { animationName: AddArrayPropertyType< CSSKeyframesRule | CSSAnimationKeyframes >; }; export type CSSAnimationProp = keyof CSSAnimationProperties;