'use strict'; import type { ComponentRef, ComponentType, ReactNode, Ref } from 'react'; import type React from 'react'; import type { FlatList, FlatListProps } from 'react-native'; import type { AnyRecord } from '../../common'; import type { InitialComponentProps } from '../../createAnimatedComponent/commonTypes'; import type { AnimatedProps } from '../../helperTypes'; import type { AnimatedRef } from '../../hook'; import type { CSSProps } from '../types'; import type { AnimatedComponentProps } from './AnimatedComponent'; import AnimatedComponentImpl from './AnimatedComponent'; type AnimatedComponentType< Props extends AnyRecord = object, Instance = unknown, > = ( props: Omit, 'ref'> & { // Accept untyped AnimatedRef as well to allow passing a reference created // with the useAnimatedRef hook call without specifying the type ref?: Ref | AnimatedRef; } ) => ReactNode; /** * @deprecated Please use `Animated.FlatList` component instead of calling * `Animated.createAnimatedComponent(FlatList)` manually. */ // eslint-disable-next-line @typescript-eslint/no-explicit-any export function createAnimatedComponent( Component: typeof FlatList ): AnimatedComponentType< Readonly>, ComponentRef> >; /** * Lets you create an Animated version of any React Native component. * * @param Component - The component you want to make animatable. * @returns A component that Reanimated is capable of animating. * @see https://docs.swmansion.com/react-native-reanimated/docs/core/createAnimatedComponent */ export function createAnimatedComponent< // eslint-disable-next-line @typescript-eslint/no-explicit-any TInstance extends ComponentType, >( Component: TInstance ): AnimatedComponentType< Readonly>, ComponentRef >; export function createAnimatedComponent< // eslint-disable-next-line @typescript-eslint/no-explicit-any TInstance extends ComponentType, >( Component: TInstance ): AnimatedComponentType< Readonly>, ComponentRef > { class AnimatedComponent extends AnimatedComponentImpl { static displayName = `AnimatedComponent(${ Component.displayName || Component.name || 'Component' })`; constructor(props: AnimatedComponentProps) { super(Component, props); } } const animatedComponent = ( props: AnimatedProps & { ref?: Ref> | AnimatedRef; } ) => { return ( ); }; animatedComponent.displayName = Component.displayName || Component.name || 'Component'; return animatedComponent; }