// Project: https://github.com/software-mansion/react-native-reanimated // TypeScript Version: 2.8 declare module 'react-native-reanimated' { import { ComponentClass, ReactNode, Component } from 'react'; import { ViewProps, TextProps, ImageProps, ScrollViewProps, StyleProp, ViewStyle, TextStyle, ImageStyle, TransformsStyle, View as ReactNativeView, Text as ReactNativeText, Image as ReactNativeImage, ScrollView as ReactNativeScrollView } from 'react-native'; namespace Animated { type Nullable = T | null | undefined; class AnimatedNode { constructor( nodeConfig: object, inputNodes?: ReadonlyArray>, ); isNativelyInitialized(): boolean; /** * ' __value' is not available at runtime on AnimatedNode. It is * necessary to have some discriminating property on a type to know that * an AnimatedNode and AnimatedNode are not compatible types. */ ' __value': T; } class AnimatedClock extends AnimatedNode { constructor(); } export enum Extrapolate { EXTEND = 'extend', CLAMP = 'clamp', IDENTITY = 'identity', } interface InterpolationConfig { inputRange: ReadonlyArray>; outputRange: ReadonlyArray>; extrapolate?: Extrapolate; extrapolateLeft?: Extrapolate; extrapolateRight?: Extrapolate; } type Value = string | number | boolean; class AnimatedValue extends AnimatedNode { constructor(value?: T); setValue(value: Adaptable): void; interpolate(config: InterpolationConfig): AnimatedNode; } export type Mapping = { [key: string]: Mapping } | Adaptable; export type Adaptable = | T | AnimatedNode | ReadonlyArray | ReadonlyArray>>; type BinaryOperator = ( left: Adaptable, right: Adaptable ) => AnimatedNode; type UnaryOperator = (value: Adaptable) => AnimatedNode; type MultiOperator = ( a: Adaptable, b: Adaptable, ...others: Adaptable[] ) => AnimatedNode; export interface AnimationState { finished: AnimatedValue; position: AnimatedValue; time: AnimatedValue; } export interface PhysicsAnimationState extends AnimationState { velocity: AnimatedValue; } export type DecayState = PhysicsAnimationState; export interface DecayConfig { deceleration: Adaptable; } export interface BackwardCompatibleWrapper { start: (callback?: (data: { finished: boolean }) => any) => void; stop: () => void; } export interface TimingState extends AnimationState { frameTime: AnimatedValue; } export type EasingFunction = (value: Adaptable) => AnimatedNode; export interface TimingConfig { toValue: Adaptable; duration: Adaptable; easing: EasingFunction; } export type SpringState = PhysicsAnimationState; export interface SpringConfig { damping: Adaptable; mass: Adaptable; stiffness: Adaptable; overshootClamping: Adaptable | boolean; restSpeedThreshold: Adaptable; restDisplacementThreshold: Adaptable; toValue: Adaptable; } interface SpringConfigWithOrigamiTensionAndFriction { tension: Adaptable; mass: Adaptable; friction: Adaptable; overshootClamping: Adaptable | boolean; restSpeedThreshold: Adaptable; restDisplacementThreshold: Adaptable; toValue: Adaptable; } interface SpringConfigWithBouncinessAndSpeed { bounciness: Adaptable; mass: Adaptable; speed: Adaptable; overshootClamping: Adaptable | boolean; restSpeedThreshold: Adaptable; restDisplacementThreshold: Adaptable; toValue: Adaptable; } type SpringUtils = { makeDefaultConfig: () => SpringConfig; makeConfigFromBouncinessAndSpeed: (prevConfig: SpringConfigWithBouncinessAndSpeed) => SpringConfig; makeConfigFromOrigamiTensionAndFriction: (prevConfig: SpringConfigWithOrigamiTensionAndFriction) => SpringConfig } export const SpringUtils: SpringUtils export type TransformStyleTypes = TransformsStyle['transform'] extends (readonly (infer T)[] | undefined) ? T : never export type AdaptTransforms = { [P in keyof T]: Adaptable } export type AnimatedTransform = (AdaptTransforms)[] export type AnimateStyle = { [K in keyof S]: K extends 'transform' ? AnimatedTransform : (S[K] extends ReadonlyArray ? ReadonlyArray> : S[K] extends object ? AnimateStyle : | S[K] | AnimatedNode< // allow `number` where `string` normally is to support colors S[K] extends (string | undefined) ? S[K] | number : S[K] >) }; export type AnimateProps< S extends object, P extends { style?: StyleProp; } > = { [K in keyof P]: K extends 'style' ? StyleProp> : P[K] | AnimatedNode }; type CodeProps = { exec?: AnimatedNode children?: () => AnimatedNode dependencies?: Array }; // components export class View extends Component> { getNode(): ReactNativeView; } export class Text extends Component> { getNode(): ReactNativeText; } export class Image extends Component< AnimateProps > { getNode(): ReactNativeImage; } export class ScrollView extends Component< AnimateProps > { getNode(): ReactNativeScrollView; } export class Code extends Component {} export function createAnimatedComponent(component: any): any; // classes export { AnimatedClock as Clock, AnimatedNode as Node, AnimatedValue as Value, }; // base operations export const add: MultiOperator; export const sub: MultiOperator; export const multiply: MultiOperator; export const divide: MultiOperator; export const pow: MultiOperator; export const modulo: MultiOperator; export const sqrt: UnaryOperator; export const log: UnaryOperator; export const sin: UnaryOperator; export const cos: UnaryOperator; export const tan: UnaryOperator; export const acos: UnaryOperator; export const asin: UnaryOperator; export const atan: UnaryOperator; export const exp: UnaryOperator; export const round: UnaryOperator; export const floor: UnaryOperator; export const ceil: UnaryOperator; export const lessThan: BinaryOperator<0 | 1>; export const eq: BinaryOperator<0 | 1>; export const greaterThan: BinaryOperator<0 | 1>; export const lessOrEq: BinaryOperator<0 | 1>; export const greaterOrEq: BinaryOperator<0 | 1>; export const neq: BinaryOperator<0 | 1>; export const and: MultiOperator<0 | 1>; export const or: MultiOperator<0 | 1>; export function proc | undefined)[]>( func: (...args: T) => AnimatedNode ): typeof func; export function defined(value: Adaptable): AnimatedNode<0 | 1>; export function not(value: Adaptable): AnimatedNode<0 | 1>; export function set( valueToBeUpdated: AnimatedValue, sourceNode: Adaptable, ): AnimatedNode; export function concat( ...args: Array | Adaptable>, ): AnimatedNode; export function cond( conditionNode: Adaptable, ifNode: Adaptable, elseNode?: Adaptable, ): AnimatedNode; export function block( items: ReadonlyArray>, ): AnimatedNode; export function call( args: ReadonlyArray>, callback: (args: ReadonlyArray) => void, ): AnimatedNode<0>; export function debug( message: string, value: AnimatedNode, ): AnimatedNode; export function onChange( value: Adaptable, action: Adaptable, ): AnimatedNode; export function startClock(clock: AnimatedClock): AnimatedNode<0>; export function stopClock(clock: AnimatedClock): AnimatedNode<0>; export function clockRunning(clock: AnimatedClock): AnimatedNode<0 | 1>; // the return type for `event` is a lie, but it's the same lie that // react-native makes within Animated type EventArgFunc = (arg: T) => AnimatedNode; type EventMapping = T extends object ? { [K in keyof T]?: EventMapping | EventArgFunc } : Adaptable | EventArgFunc; type EventMappingArray = T extends Array ? { [I in keyof T]: EventMapping } : [EventMapping] export function event( argMapping: T extends never ? ReadonlyArray : Readonly>, config?: {}, ): (...args: any[]) => void; // derived operations export function abs(value: Adaptable): AnimatedNode; export function acc(value: Adaptable): AnimatedNode; export function color( r: Adaptable, g: Adaptable, b: Adaptable, a?: Adaptable ): AnimatedNode; export function diff(value: Adaptable): AnimatedNode; export function diffClamp( value: Adaptable, minVal: Adaptable, maxVal: Adaptable, ): AnimatedNode; export function interpolate( value: Adaptable, config: InterpolationConfig, ): AnimatedNode; export function interpolateColors( animationValue: Adaptable, { inputRange, outputColorRange }: { inputRange: ReadonlyArray>; outputColorRange: ReadonlyArray>; } ): AnimatedNode; export const max: BinaryOperator; export const min: BinaryOperator; // animations export function decay( clock: AnimatedClock, state: DecayState, config: DecayConfig, ): AnimatedNode; export function timing( clock: AnimatedClock, state: TimingState, config: TimingConfig, ): AnimatedNode; export function spring( clock: AnimatedClock, state: SpringState, config: SpringConfig, ): AnimatedNode; // backward compatible API export function spring( node: AnimatedNode, config: SpringConfig, ): BackwardCompatibleWrapper; export function timing( node: AnimatedNode, config: TimingConfig, ): BackwardCompatibleWrapper; export function decay( node: AnimatedNode, config: DecayConfig, ): BackwardCompatibleWrapper; // hooks export function useCode( exec: () => Nullable< AnimatedNode[] | AnimatedNode > | boolean, deps: Array, ): void export function useValue( initialValue: T ): AnimatedValue; // configuration export function addWhitelistedNativeProps(props: { [key: string]: true }): void; export function addWhitelistedUIProps(props: { [key: string]: true }): void; } export default Animated; interface EasingStatic { linear: Animated.EasingFunction; ease: Animated.EasingFunction; quad: Animated.EasingFunction; cubic: Animated.EasingFunction; poly(n: Animated.Adaptable): Animated.EasingFunction; sin: Animated.EasingFunction; circle: Animated.EasingFunction; exp: Animated.EasingFunction; elastic(bounciness?: Animated.Adaptable): Animated.EasingFunction; back(s?: Animated.Adaptable): Animated.EasingFunction; bounce: Animated.EasingFunction; bezier( x1: number, y1: number, x2: number, y2: number, ): Animated.EasingFunction; in(easing: Animated.EasingFunction): Animated.EasingFunction; out(easing: Animated.EasingFunction): Animated.EasingFunction; inOut(easing: Animated.EasingFunction): Animated.EasingFunction; } export const Easing: EasingStatic; export interface TransitioningViewProps extends ViewProps { transition: ReactNode; } export class TransitioningView extends Component { animateNextTransition(): void; } export class Transitioning extends Component { static View: typeof TransitioningView; } export interface TransitionProps { delayMs?: number; durationMs?: number; interpolation?: 'linear' | 'easeIn' | 'easeOut' | 'easeInOut'; propagation?: 'top' | 'bottom' | 'left' | 'right'; } export interface TransitionInOutProps extends TransitionProps { type?: 'fade' | 'scale' | 'slide-top' | 'slide-bottom' | 'slide-right' | 'slide-left'; } export class Transition extends Component { static In: ComponentClass; static Out: ComponentClass; static Change: ComponentClass; static Together: ComponentClass<{}>; static Sequence: ComponentClass<{}>; } export class Clock extends Animated.Clock {} export class Value extends Animated.Value {} export class Node extends Animated.Node {} export const add: typeof Animated.add export const sub: typeof Animated.sub export const multiply: typeof Animated.multiply export const divide: typeof Animated.divide export const pow: typeof Animated.pow export const modulo: typeof Animated.modulo export const sqrt: typeof Animated.sqrt export const log: typeof Animated.log export const sin: typeof Animated.sin export const cos: typeof Animated.cos export const exp: typeof Animated.exp export const round: typeof Animated.round export const lessThan: typeof Animated.lessThan export const eq: typeof Animated.eq export const greaterThan: typeof Animated.greaterThan export const lessOrEq: typeof Animated.lessOrEq export const greaterOrEq: typeof Animated.greaterOrEq export const neq: typeof Animated.neq export const and: typeof Animated.and export const or: typeof Animated.or export const defined: typeof Animated.defined export const not: typeof Animated.not export const tan: typeof Animated.tan export const acos: typeof Animated.acos export const asin: typeof Animated.asin export const atan: typeof Animated.atan export const proc: typeof Animated.proc export const block: typeof Animated.block export const concat: typeof Animated.concat export const event: typeof Animated.event export const call: typeof Animated.call export const debug: typeof Animated.debug export const clockRunning: typeof Animated.clockRunning export const stopClock: typeof Animated.stopClock export const startClock: typeof Animated.startClock export const set: typeof Animated.set export const cond: typeof Animated.cond export const abs: typeof Animated.abs export const acc: typeof Animated.acc export const color: typeof Animated.color export const interpolateColors: typeof Animated.interpolateColors export const diff: typeof Animated.diff export const diffClamp: typeof Animated.diffClamp export const interpolate: typeof Animated.interpolate export const Extrapolate: typeof Animated.Extrapolate export const max: typeof Animated.max export const min: typeof Animated.min export const onChange: typeof Animated.onChange export const floor: typeof Animated.floor export const ceil: typeof Animated.ceil export const useCode: typeof Animated.useCode export const decay: typeof Animated.decay export const timing: typeof Animated.timing export const spring: typeof Animated.spring export const SpringUtils: typeof Animated.SpringUtils export const useValue: typeof Animated.useValue }