react-native-reanimated 3.7.0 → 3.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -35,12 +35,6 @@ if (IS_WEB) {
35
35
  function onlyAnimatedStyles(styles) {
36
36
  return styles.filter(style => style === null || style === void 0 ? void 0 : style.viewDescriptors);
37
37
  }
38
- function isSameAnimatedStyle(style1, style2) {
39
- // We cannot use equality check to compare useAnimatedStyle outputs directly.
40
- // Instead, we can compare its viewsRefs.
41
- return (style1 === null || style1 === void 0 ? void 0 : style1.viewsRef) === (style2 === null || style2 === void 0 ? void 0 : style2.viewsRef);
42
- }
43
- const isSameAnimatedProps = isSameAnimatedStyle;
44
38
 
45
39
  /**
46
40
  * Lets you create an Animated version of any React Native component.
@@ -298,11 +292,11 @@ export function createAnimatedComponent(Component, options) {
298
292
  // remove old styles
299
293
  if (prevStyles) {
300
294
  // in most of the cases, views have only a single animated style and it remains unchanged
301
- const hasOneSameStyle = styles.length === 1 && prevStyles.length === 1 && isSameAnimatedStyle(styles[0], prevStyles[0]);
295
+ const hasOneSameStyle = styles.length === 1 && prevStyles.length === 1 && styles[0] === prevStyles[0];
302
296
  if (!hasOneSameStyle) {
303
297
  // otherwise, remove each style that is not present in new styles
304
298
  for (const prevStyle of prevStyles) {
305
- const isPresent = styles.some(style => isSameAnimatedStyle(style, prevStyle));
299
+ const isPresent = styles.some(style => style === prevStyle);
306
300
  if (!isPresent) {
307
301
  prevStyle.viewDescriptors.remove(viewTag);
308
302
  }
@@ -331,7 +325,7 @@ export function createAnimatedComponent(Component, options) {
331
325
  });
332
326
 
333
327
  // detach old animatedProps
334
- if (prevAnimatedProps && !isSameAnimatedProps(prevAnimatedProps, this.props.animatedProps)) {
328
+ if (prevAnimatedProps && prevAnimatedProps !== this.props.animatedProps) {
335
329
  prevAnimatedProps.viewDescriptors.remove(viewTag);
336
330
  }
337
331
 
@@ -1 +1 @@
1
- {"version":3,"names":["_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","_defineProperty","obj","value","_toPropertyKey","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","TypeError","Number","React","findNodeHandle","Platform","WorkletEventHandler","invariant","adaptViewConfig","RNRenderer","enableLayoutAnimations","SharedTransition","LayoutAnimationType","getShadowNodeWrapperFromRef","removeFromPropsRegistry","getReduceMotionFromConfig","maybeBuild","SkipEnteringContext","JSPropsUpdater","has","flattenArray","setAndForwardRef","isFabric","isJest","isWeb","shouldBeUseWeb","InlinePropManager","PropsFilter","startWebLayoutAnimation","tryActivateLayoutTransition","configureWebLayoutAnimations","getReducedMotionFromConfig","saveSnapshot","updateLayoutAnimations","addHTMLMutationObserver","IS_WEB","IS_FABRIC","onlyAnimatedStyles","styles","filter","style","viewDescriptors","isSameAnimatedStyle","style1","style2","viewsRef","isSameAnimatedProps","createAnimatedComponent","Component","options","isReactComponent","name","AnimatedComponent","constructor","props","getForwardedRef","forwardedRef","setLocalRef","ref","tag","layout","entering","exiting","sharedTransitionTag","_this$context","skipEntering","context","current","_this$props","ENTERING","displayName","sharedElementTransition","sharedTransitionStyle","reduceMotionInTransition","getReduceMotion","registerTransition","_sharedElementTransition","_component","jestAnimatedStyle","componentDidMount","_attachNativeEvents","_jsPropsUpdater","addOnJSPropsChangeListener","_attachAnimatedStyles","_InlinePropManager","attachInlineProps","_getViewInfo","_configureLayoutTransition","_isFirstRender","componentWillUnmount","_this$_sharedElementT","_detachNativeEvents","removeOnJSPropsChangeListener","_detachStyles","detachInlineProps","unregisterTransition","_viewTag","EXITING","reduceMotionInExiting","_this$props2","_getEventViewRef","_this$_component","_getScrollableNode","_ref","getScrollableNode","node","viewTag","prop","setNativeProps","registerForEvents","unregisterFromEvents","_styles","remove","_this$props$animatedP","animatedProps","_reattachNativeEvents","prevProps","reattachNeeded","_updateFromNative","_this$_component2","_this$_component2$set","_this$_component3","_getAnimatableRef","_ref2","_viewInfo","viewName","shadowNodeWrapper","viewConfig","component","getAnimatableRef","_hostInstance$viewCon","hostInstance","findHostInstance_DEPRECATED","Error","_nativeTag","uiViewClassName","_this$props$animatedP2","_this$props$animatedP3","prevStyles","prevAnimatedProps","_animatedProps","hasReanimated2Props","hasOneSameStyle","prevStyle","isPresent","some","forEach","add","initial","componentDidUpdate","_prevState","snapshot","oldLayout","LAYOUT","getSnapshotBeforeUpdate","_this$_component4","getBoundingClientRect","render","filteredProps","_PropsFilter","filterNonAnimatedProps","visibility","platformProps","select","web","default","collapsable","createElement","_setComponentRef","forwardRef"],"sources":["createAnimatedComponent.tsx"],"sourcesContent":["'use strict';\nimport type {\n Component,\n ComponentClass,\n ComponentType,\n FunctionComponent,\n MutableRefObject,\n} from 'react';\nimport React from 'react';\nimport { findNodeHandle, Platform } from 'react-native';\nimport WorkletEventHandler from '../reanimated2/WorkletEventHandler';\nimport '../reanimated2/layoutReanimation/animationsManager';\nimport invariant from 'invariant';\nimport { adaptViewConfig } from '../ConfigHelper';\nimport { RNRenderer } from '../reanimated2/platform-specific/RNRenderer';\nimport { enableLayoutAnimations } from '../reanimated2/core';\nimport {\n SharedTransition,\n LayoutAnimationType,\n} from '../reanimated2/layoutReanimation';\nimport type { StyleProps, ShadowNodeWrapper } from '../reanimated2/commonTypes';\nimport { getShadowNodeWrapperFromRef } from '../reanimated2/fabricUtils';\nimport { removeFromPropsRegistry } from '../reanimated2/PropsRegistry';\nimport { getReduceMotionFromConfig } from '../reanimated2/animation/util';\nimport { maybeBuild } from '../animationBuilder';\nimport { SkipEnteringContext } from '../reanimated2/component/LayoutAnimationConfig';\nimport type { AnimateProps } from '../reanimated2';\nimport JSPropsUpdater from './JSPropsUpdater';\nimport type {\n AnimatedComponentProps,\n AnimatedProps,\n InitialComponentProps,\n AnimatedComponentRef,\n IAnimatedComponentInternal,\n ViewInfo,\n} from './commonTypes';\nimport { has, flattenArray } from './utils';\nimport setAndForwardRef from './setAndForwardRef';\nimport {\n isFabric,\n isJest,\n isWeb,\n shouldBeUseWeb,\n} from '../reanimated2/PlatformChecker';\nimport { InlinePropManager } from './InlinePropManager';\nimport { PropsFilter } from './PropsFilter';\nimport {\n startWebLayoutAnimation,\n tryActivateLayoutTransition,\n configureWebLayoutAnimations,\n getReducedMotionFromConfig,\n saveSnapshot,\n} from '../reanimated2/layoutReanimation/web';\nimport { updateLayoutAnimations } from '../reanimated2/UpdateLayoutAnimations';\nimport type { CustomConfig } from '../reanimated2/layoutReanimation/web/config';\nimport type { FlatList, FlatListProps } from 'react-native';\nimport { addHTMLMutationObserver } from '../reanimated2/layoutReanimation/web/domUtils';\n\nconst IS_WEB = isWeb();\nconst IS_FABRIC = isFabric();\n\nif (IS_WEB) {\n configureWebLayoutAnimations();\n}\n\nfunction onlyAnimatedStyles(styles: StyleProps[]): StyleProps[] {\n return styles.filter((style) => style?.viewDescriptors);\n}\n\nfunction isSameAnimatedStyle(\n style1?: StyleProps,\n style2?: StyleProps\n): boolean {\n // We cannot use equality check to compare useAnimatedStyle outputs directly.\n // Instead, we can compare its viewsRefs.\n return style1?.viewsRef === style2?.viewsRef;\n}\n\nconst isSameAnimatedProps = isSameAnimatedStyle;\n\ntype Options<P> = {\n setNativeProps: (ref: AnimatedComponentRef, props: P) => void;\n};\n\n/**\n * Lets you create an Animated version of any React Native component.\n *\n * @param component - The component you want to make animatable.\n * @returns A component that Reanimated is capable of animating.\n * @see https://docs.swmansion.com/react-native-reanimated/docs/core/createAnimatedComponent\n */\n\n// Don't change the order of overloads, since such a change breaks current behavior\nexport function createAnimatedComponent<P extends object>(\n component: FunctionComponent<P>,\n options?: Options<P>\n): FunctionComponent<AnimateProps<P>>;\n\nexport function createAnimatedComponent<P extends object>(\n component: ComponentClass<P>,\n options?: Options<P>\n): ComponentClass<AnimateProps<P>>;\n\nexport function createAnimatedComponent<P extends object>(\n // Actually ComponentType<P = {}> = ComponentClass<P> | FunctionComponent<P> but we need this overload too\n // since some external components (like FastImage) are typed just as ComponentType\n component: ComponentType<P>,\n options?: Options<P>\n): FunctionComponent<AnimateProps<P>> | ComponentClass<AnimateProps<P>>;\n\n/**\n * @deprecated Please use `Animated.FlatList` component instead of calling `Animated.createAnimatedComponent(FlatList)` manually.\n */\n// @ts-ignore This is required to create this overload, since type of createAnimatedComponent is incorrect and doesn't include typeof FlatList\nexport function createAnimatedComponent(\n component: typeof FlatList<unknown>,\n options?: Options<any>\n): ComponentClass<AnimateProps<FlatListProps<unknown>>>;\n\nexport function createAnimatedComponent(\n Component: ComponentType<InitialComponentProps>,\n options?: Options<InitialComponentProps>\n): any {\n invariant(\n typeof Component !== 'function' ||\n (Component.prototype && Component.prototype.isReactComponent),\n `Looks like you're passing a function component \\`${Component.name}\\` to \\`createAnimatedComponent\\` function which supports only class components. Please wrap your function component with \\`React.forwardRef()\\` or use a class component instead.`\n );\n\n class AnimatedComponent\n extends React.Component<AnimatedComponentProps<InitialComponentProps>>\n implements IAnimatedComponentInternal\n {\n _styles: StyleProps[] | null = null;\n _animatedProps?: Partial<AnimatedComponentProps<AnimatedProps>>;\n _viewTag = -1;\n _isFirstRender = true;\n jestAnimatedStyle: { value: StyleProps } = { value: {} };\n _component: AnimatedComponentRef | HTMLElement | null = null;\n _sharedElementTransition: SharedTransition | null = null;\n _jsPropsUpdater = new JSPropsUpdater();\n _InlinePropManager = new InlinePropManager();\n _PropsFilter = new PropsFilter();\n _viewInfo?: ViewInfo;\n static displayName: string;\n static contextType = SkipEnteringContext;\n context!: React.ContextType<typeof SkipEnteringContext>;\n\n constructor(props: AnimatedComponentProps<InitialComponentProps>) {\n super(props);\n if (isJest()) {\n this.jestAnimatedStyle = { value: {} };\n }\n }\n\n componentDidMount() {\n this._attachNativeEvents();\n this._jsPropsUpdater.addOnJSPropsChangeListener(this);\n this._attachAnimatedStyles();\n this._InlinePropManager.attachInlineProps(this, this._getViewInfo());\n\n const layout = this.props.layout;\n if (layout) {\n this._configureLayoutTransition();\n }\n\n if (IS_WEB) {\n if (this.props.exiting) {\n saveSnapshot(this._component as HTMLElement);\n }\n\n if (\n !this.props.entering ||\n getReducedMotionFromConfig(this.props.entering as CustomConfig)\n ) {\n this._isFirstRender = false;\n return;\n }\n\n startWebLayoutAnimation(\n this.props,\n this._component as HTMLElement,\n LayoutAnimationType.ENTERING\n );\n }\n\n this._isFirstRender = false;\n }\n\n componentWillUnmount() {\n this._detachNativeEvents();\n this._jsPropsUpdater.removeOnJSPropsChangeListener(this);\n this._detachStyles();\n this._InlinePropManager.detachInlineProps();\n this._sharedElementTransition?.unregisterTransition(this._viewTag);\n\n const exiting = this.props.exiting;\n if (\n IS_WEB &&\n this.props.exiting &&\n !getReducedMotionFromConfig(this.props.exiting as CustomConfig)\n ) {\n addHTMLMutationObserver();\n\n startWebLayoutAnimation(\n this.props,\n this._component as HTMLElement,\n LayoutAnimationType.EXITING\n );\n } else if (exiting) {\n const reduceMotionInExiting =\n 'getReduceMotion' in exiting &&\n typeof exiting.getReduceMotion === 'function'\n ? getReduceMotionFromConfig(exiting.getReduceMotion())\n : getReduceMotionFromConfig();\n if (!reduceMotionInExiting) {\n updateLayoutAnimations(\n this._viewTag,\n LayoutAnimationType.EXITING,\n maybeBuild(\n exiting,\n this.props?.style,\n AnimatedComponent.displayName\n )\n );\n }\n }\n }\n\n _getEventViewRef() {\n // Make sure to get the scrollable node for components that implement\n // `ScrollResponder.Mixin`.\n return (this._component as AnimatedComponentRef)?.getScrollableNode\n ? (this._component as AnimatedComponentRef).getScrollableNode?.()\n : this._component;\n }\n\n _attachNativeEvents() {\n const node = this._getEventViewRef() as AnimatedComponentRef;\n let viewTag = null; // We set it only if needed\n\n for (const key in this.props) {\n const prop = this.props[key];\n if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler\n ) {\n if (viewTag === null) {\n viewTag = findNodeHandle(options?.setNativeProps ? this : node);\n }\n prop.current.registerForEvents(viewTag as number, key);\n }\n }\n }\n\n _detachNativeEvents() {\n for (const key in this.props) {\n const prop = this.props[key];\n if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler\n ) {\n prop.current.unregisterFromEvents();\n }\n }\n }\n\n _detachStyles() {\n if (IS_WEB && this._styles !== null) {\n for (const style of this._styles) {\n style.viewsRef.remove(this);\n }\n } else if (this._viewTag !== -1 && this._styles !== null) {\n for (const style of this._styles) {\n style.viewDescriptors.remove(this._viewTag);\n }\n if (this.props.animatedProps?.viewDescriptors) {\n this.props.animatedProps.viewDescriptors.remove(this._viewTag);\n }\n if (IS_FABRIC) {\n removeFromPropsRegistry(this._viewTag);\n }\n }\n }\n\n _reattachNativeEvents(\n prevProps: AnimatedComponentProps<InitialComponentProps>\n ) {\n for (const key in prevProps) {\n const prop = this.props[key];\n if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler &&\n prop.current.reattachNeeded\n ) {\n prop.current.unregisterFromEvents();\n }\n }\n\n let viewTag = null;\n\n for (const key in this.props) {\n const prop = this.props[key];\n if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler &&\n prop.current.reattachNeeded\n ) {\n if (viewTag === null) {\n const node = this._getEventViewRef() as AnimatedComponentRef;\n viewTag = findNodeHandle(options?.setNativeProps ? this : node);\n }\n prop.current.registerForEvents(viewTag as number, key);\n prop.current.reattachNeeded = false;\n }\n }\n }\n\n _updateFromNative(props: StyleProps) {\n if (options?.setNativeProps) {\n options.setNativeProps(this._component as AnimatedComponentRef, props);\n } else {\n (this._component as AnimatedComponentRef)?.setNativeProps?.(props);\n }\n }\n\n _getViewInfo(): ViewInfo {\n if (this._viewInfo !== undefined) {\n return this._viewInfo;\n }\n\n let viewTag: number | HTMLElement | null;\n let viewName: string | null;\n let shadowNodeWrapper: ShadowNodeWrapper | null = null;\n let viewConfig;\n // Component can specify ref which should be animated when animated version of the component is created.\n // Otherwise, we animate the component itself.\n const component = (this._component as AnimatedComponentRef)\n ?.getAnimatableRef\n ? (this._component as AnimatedComponentRef).getAnimatableRef?.()\n : this;\n\n if (IS_WEB) {\n // At this point I assume that `_setComponentRef` was already called and `_component` is set.\n // `this._component` on web represents HTMLElement of our component, that's why we use casting\n viewTag = this._component as HTMLElement;\n viewName = null;\n shadowNodeWrapper = null;\n viewConfig = null;\n } else {\n // hostInstance can be null for a component that doesn't render anything (render function returns null). Example: svg Stop: https://github.com/react-native-svg/react-native-svg/blob/develop/src/elements/Stop.tsx\n const hostInstance = RNRenderer.findHostInstance_DEPRECATED(component);\n if (!hostInstance) {\n throw new Error(\n '[Reanimated] Cannot find host instance for this component. Maybe it renders nothing?'\n );\n }\n // we can access view tag in the same way it's accessed here https://github.com/facebook/react/blob/e3f4eb7272d4ca0ee49f27577156b57eeb07cf73/packages/react-native-renderer/src/ReactFabric.js#L146\n viewTag = hostInstance?._nativeTag;\n /**\n * RN uses viewConfig for components for storing different properties of the component(example: https://github.com/facebook/react-native/blob/main/packages/react-native/Libraries/Components/ScrollView/ScrollViewNativeComponent.js#L24).\n * The name we're looking for is in the field named uiViewClassName.\n */\n viewName = hostInstance?.viewConfig?.uiViewClassName;\n\n viewConfig = hostInstance?.viewConfig;\n\n if (IS_FABRIC) {\n shadowNodeWrapper = getShadowNodeWrapperFromRef(this);\n }\n }\n this._viewInfo = { viewTag, viewName, shadowNodeWrapper, viewConfig };\n return this._viewInfo;\n }\n\n _attachAnimatedStyles() {\n const styles = this.props.style\n ? onlyAnimatedStyles(flattenArray<StyleProps>(this.props.style))\n : [];\n const prevStyles = this._styles;\n this._styles = styles;\n\n const prevAnimatedProps = this._animatedProps;\n this._animatedProps = this.props.animatedProps;\n\n const { viewTag, viewName, shadowNodeWrapper, viewConfig } =\n this._getViewInfo();\n\n // update UI props whitelist for this view\n const hasReanimated2Props =\n this.props.animatedProps?.viewDescriptors || styles.length;\n if (hasReanimated2Props && viewConfig) {\n adaptViewConfig(viewConfig);\n }\n\n this._viewTag = viewTag as number;\n\n // remove old styles\n if (prevStyles) {\n // in most of the cases, views have only a single animated style and it remains unchanged\n const hasOneSameStyle =\n styles.length === 1 &&\n prevStyles.length === 1 &&\n isSameAnimatedStyle(styles[0], prevStyles[0]);\n\n if (!hasOneSameStyle) {\n // otherwise, remove each style that is not present in new styles\n for (const prevStyle of prevStyles) {\n const isPresent = styles.some((style) =>\n isSameAnimatedStyle(style, prevStyle)\n );\n if (!isPresent) {\n prevStyle.viewDescriptors.remove(viewTag);\n }\n }\n }\n }\n\n styles.forEach((style) => {\n style.viewDescriptors.add({\n tag: viewTag,\n name: viewName,\n shadowNodeWrapper,\n });\n if (isJest()) {\n /**\n * We need to connect Jest's TestObject instance whose contains just props object\n * with the updateProps() function where we update the properties of the component.\n * We can't update props object directly because TestObject contains a copy of props - look at render function:\n * const props = this._filterNonAnimatedProps(this.props);\n */\n this.jestAnimatedStyle.value = {\n ...this.jestAnimatedStyle.value,\n ...style.initial.value,\n };\n style.jestAnimatedStyle.current = this.jestAnimatedStyle;\n }\n });\n\n // detach old animatedProps\n if (\n prevAnimatedProps &&\n !isSameAnimatedProps(prevAnimatedProps, this.props.animatedProps)\n ) {\n prevAnimatedProps.viewDescriptors!.remove(viewTag as number);\n }\n\n // attach animatedProps property\n if (this.props.animatedProps?.viewDescriptors) {\n this.props.animatedProps.viewDescriptors.add({\n tag: viewTag as number,\n name: viewName!,\n shadowNodeWrapper: shadowNodeWrapper!,\n });\n }\n }\n\n componentDidUpdate(\n prevProps: AnimatedComponentProps<InitialComponentProps>,\n _prevState: Readonly<unknown>,\n // This type comes straight from React\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n snapshot: DOMRect | null\n ) {\n const layout = this.props.layout;\n const oldLayout = prevProps.layout;\n if (layout !== oldLayout) {\n this._configureLayoutTransition();\n }\n this._reattachNativeEvents(prevProps);\n this._attachAnimatedStyles();\n this._InlinePropManager.attachInlineProps(this, this._getViewInfo());\n\n if (IS_WEB && this.props.exiting) {\n saveSnapshot(this._component as HTMLElement);\n }\n\n // Snapshot won't be undefined because it comes from getSnapshotBeforeUpdate method\n if (\n IS_WEB &&\n snapshot !== null &&\n this.props.layout &&\n !getReducedMotionFromConfig(this.props.layout as CustomConfig)\n ) {\n tryActivateLayoutTransition(\n this.props,\n this._component as HTMLElement,\n snapshot\n );\n }\n }\n\n _configureLayoutTransition() {\n const layout = this.props.layout\n ? maybeBuild(\n this.props.layout,\n undefined /* We don't have to warn user if style has common properties with animation for LAYOUT */,\n AnimatedComponent.displayName\n )\n : undefined;\n updateLayoutAnimations(this._viewTag, LayoutAnimationType.LAYOUT, layout);\n }\n\n _setComponentRef = setAndForwardRef<Component | HTMLElement>({\n getForwardedRef: () =>\n this.props.forwardedRef as MutableRefObject<\n Component<Record<string, unknown>, Record<string, unknown>, unknown>\n >,\n setLocalRef: (ref) => {\n // TODO update config\n\n const tag = IS_WEB\n ? (ref as HTMLElement)\n : findNodeHandle(ref as Component);\n\n const { layout, entering, exiting, sharedTransitionTag } = this.props;\n if (\n (layout || entering || exiting || sharedTransitionTag) &&\n tag != null\n ) {\n if (!shouldBeUseWeb()) {\n enableLayoutAnimations(true, false);\n }\n\n const skipEntering = this.context?.current;\n if (entering && !skipEntering) {\n updateLayoutAnimations(\n tag as number,\n LayoutAnimationType.ENTERING,\n maybeBuild(\n entering,\n this.props?.style,\n AnimatedComponent.displayName\n )\n );\n }\n if (sharedTransitionTag && !IS_WEB) {\n const sharedElementTransition =\n this.props.sharedTransitionStyle ?? new SharedTransition();\n const reduceMotionInTransition = getReduceMotionFromConfig(\n sharedElementTransition.getReduceMotion()\n );\n if (!reduceMotionInTransition) {\n sharedElementTransition.registerTransition(\n tag as number,\n sharedTransitionTag\n );\n this._sharedElementTransition = sharedElementTransition;\n }\n }\n }\n\n if (ref !== this._component) {\n this._component = ref;\n }\n },\n });\n\n // This is a component lifecycle method from React, therefore we are not calling it directly.\n // It is called before the component gets rerendered. This way we can access components' position before it changed\n // and later on, in componentDidUpdate, calculate translation for layout transition.\n getSnapshotBeforeUpdate() {\n if (\n IS_WEB &&\n (this._component as HTMLElement)?.getBoundingClientRect !== undefined\n ) {\n return (this._component as HTMLElement).getBoundingClientRect();\n }\n\n return null;\n }\n\n render() {\n const filteredProps = this._PropsFilter.filterNonAnimatedProps(this);\n\n if (isJest()) {\n filteredProps.jestAnimatedStyle = this.jestAnimatedStyle;\n }\n\n // Layout animations on web are set inside `componentDidMount` method, which is called after first render.\n // Because of that we can encounter a situation in which component is visible for a short amount of time, and later on animation triggers.\n // I've tested that on various browsers and devices and it did not happen to me. To be sure that it won't happen to someone else,\n // I've decided to hide component at first render. Its visibility is reset in `componentDidMount`.\n if (\n this._isFirstRender &&\n IS_WEB &&\n filteredProps.entering &&\n !getReducedMotionFromConfig(filteredProps.entering as CustomConfig)\n ) {\n filteredProps.style = {\n ...(filteredProps.style ?? {}),\n visibility: 'hidden', // Hide component until `componentDidMount` triggers\n };\n }\n\n const platformProps = Platform.select({\n web: {},\n default: { collapsable: false },\n });\n\n return (\n <Component\n {...filteredProps}\n // Casting is used here, because ref can be null - in that case it cannot be assigned to HTMLElement.\n // After spending some time trying to figure out what to do with this problem, we decided to leave it this way\n ref={this._setComponentRef as (ref: Component) => void}\n {...platformProps}\n />\n );\n }\n }\n\n AnimatedComponent.displayName = `AnimatedComponent(${\n Component.displayName || Component.name || 'Component'\n })`;\n\n return React.forwardRef<Component>((props, ref) => {\n return (\n <AnimatedComponent\n {...props}\n {...(ref === null ? null : { forwardedRef: ref })}\n />\n );\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","_defineProperty","obj","value","_toPropertyKey","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","TypeError","Number","React","findNodeHandle","Platform","WorkletEventHandler","invariant","adaptViewConfig","RNRenderer","enableLayoutAnimations","SharedTransition","LayoutAnimationType","getShadowNodeWrapperFromRef","removeFromPropsRegistry","getReduceMotionFromConfig","maybeBuild","SkipEnteringContext","JSPropsUpdater","has","flattenArray","setAndForwardRef","isFabric","isJest","isWeb","shouldBeUseWeb","InlinePropManager","PropsFilter","startWebLayoutAnimation","tryActivateLayoutTransition","configureWebLayoutAnimations","getReducedMotionFromConfig","saveSnapshot","updateLayoutAnimations","addHTMLMutationObserver","IS_WEB","IS_FABRIC","onlyAnimatedStyles","styles","filter","style","viewDescriptors","createAnimatedComponent","Component","options","isReactComponent","name","AnimatedComponent","constructor","props","getForwardedRef","forwardedRef","setLocalRef","ref","tag","layout","entering","exiting","sharedTransitionTag","_this$context","skipEntering","context","current","_this$props","ENTERING","displayName","sharedElementTransition","sharedTransitionStyle","reduceMotionInTransition","getReduceMotion","registerTransition","_sharedElementTransition","_component","jestAnimatedStyle","componentDidMount","_attachNativeEvents","_jsPropsUpdater","addOnJSPropsChangeListener","_attachAnimatedStyles","_InlinePropManager","attachInlineProps","_getViewInfo","_configureLayoutTransition","_isFirstRender","componentWillUnmount","_this$_sharedElementT","_detachNativeEvents","removeOnJSPropsChangeListener","_detachStyles","detachInlineProps","unregisterTransition","_viewTag","EXITING","reduceMotionInExiting","_this$props2","_getEventViewRef","_this$_component","_getScrollableNode","_ref","getScrollableNode","node","viewTag","prop","setNativeProps","registerForEvents","unregisterFromEvents","_styles","viewsRef","remove","_this$props$animatedP","animatedProps","_reattachNativeEvents","prevProps","reattachNeeded","_updateFromNative","_this$_component2","_this$_component2$set","_this$_component3","_getAnimatableRef","_ref2","_viewInfo","viewName","shadowNodeWrapper","viewConfig","component","getAnimatableRef","_hostInstance$viewCon","hostInstance","findHostInstance_DEPRECATED","Error","_nativeTag","uiViewClassName","_this$props$animatedP2","_this$props$animatedP3","prevStyles","prevAnimatedProps","_animatedProps","hasReanimated2Props","hasOneSameStyle","prevStyle","isPresent","some","forEach","add","initial","componentDidUpdate","_prevState","snapshot","oldLayout","LAYOUT","getSnapshotBeforeUpdate","_this$_component4","getBoundingClientRect","render","filteredProps","_PropsFilter","filterNonAnimatedProps","visibility","platformProps","select","web","default","collapsable","createElement","_setComponentRef","forwardRef"],"sources":["createAnimatedComponent.tsx"],"sourcesContent":["'use strict';\nimport type {\n Component,\n ComponentClass,\n ComponentType,\n FunctionComponent,\n MutableRefObject,\n} from 'react';\nimport React from 'react';\nimport { findNodeHandle, Platform } from 'react-native';\nimport WorkletEventHandler from '../reanimated2/WorkletEventHandler';\nimport '../reanimated2/layoutReanimation/animationsManager';\nimport invariant from 'invariant';\nimport { adaptViewConfig } from '../ConfigHelper';\nimport { RNRenderer } from '../reanimated2/platform-specific/RNRenderer';\nimport { enableLayoutAnimations } from '../reanimated2/core';\nimport {\n SharedTransition,\n LayoutAnimationType,\n} from '../reanimated2/layoutReanimation';\nimport type { StyleProps, ShadowNodeWrapper } from '../reanimated2/commonTypes';\nimport { getShadowNodeWrapperFromRef } from '../reanimated2/fabricUtils';\nimport { removeFromPropsRegistry } from '../reanimated2/PropsRegistry';\nimport { getReduceMotionFromConfig } from '../reanimated2/animation/util';\nimport { maybeBuild } from '../animationBuilder';\nimport { SkipEnteringContext } from '../reanimated2/component/LayoutAnimationConfig';\nimport type { AnimateProps } from '../reanimated2';\nimport JSPropsUpdater from './JSPropsUpdater';\nimport type {\n AnimatedComponentProps,\n AnimatedProps,\n InitialComponentProps,\n AnimatedComponentRef,\n IAnimatedComponentInternal,\n ViewInfo,\n} from './commonTypes';\nimport { has, flattenArray } from './utils';\nimport setAndForwardRef from './setAndForwardRef';\nimport {\n isFabric,\n isJest,\n isWeb,\n shouldBeUseWeb,\n} from '../reanimated2/PlatformChecker';\nimport { InlinePropManager } from './InlinePropManager';\nimport { PropsFilter } from './PropsFilter';\nimport {\n startWebLayoutAnimation,\n tryActivateLayoutTransition,\n configureWebLayoutAnimations,\n getReducedMotionFromConfig,\n saveSnapshot,\n} from '../reanimated2/layoutReanimation/web';\nimport { updateLayoutAnimations } from '../reanimated2/UpdateLayoutAnimations';\nimport type { CustomConfig } from '../reanimated2/layoutReanimation/web/config';\nimport type { FlatList, FlatListProps } from 'react-native';\nimport { addHTMLMutationObserver } from '../reanimated2/layoutReanimation/web/domUtils';\n\nconst IS_WEB = isWeb();\nconst IS_FABRIC = isFabric();\n\nif (IS_WEB) {\n configureWebLayoutAnimations();\n}\n\nfunction onlyAnimatedStyles(styles: StyleProps[]): StyleProps[] {\n return styles.filter((style) => style?.viewDescriptors);\n}\n\ntype Options<P> = {\n setNativeProps: (ref: AnimatedComponentRef, props: P) => void;\n};\n\n/**\n * Lets you create an Animated version of any React Native component.\n *\n * @param component - The component you want to make animatable.\n * @returns A component that Reanimated is capable of animating.\n * @see https://docs.swmansion.com/react-native-reanimated/docs/core/createAnimatedComponent\n */\n\n// Don't change the order of overloads, since such a change breaks current behavior\nexport function createAnimatedComponent<P extends object>(\n component: FunctionComponent<P>,\n options?: Options<P>\n): FunctionComponent<AnimateProps<P>>;\n\nexport function createAnimatedComponent<P extends object>(\n component: ComponentClass<P>,\n options?: Options<P>\n): ComponentClass<AnimateProps<P>>;\n\nexport function createAnimatedComponent<P extends object>(\n // Actually ComponentType<P = {}> = ComponentClass<P> | FunctionComponent<P> but we need this overload too\n // since some external components (like FastImage) are typed just as ComponentType\n component: ComponentType<P>,\n options?: Options<P>\n): FunctionComponent<AnimateProps<P>> | ComponentClass<AnimateProps<P>>;\n\n/**\n * @deprecated Please use `Animated.FlatList` component instead of calling `Animated.createAnimatedComponent(FlatList)` manually.\n */\n// @ts-ignore This is required to create this overload, since type of createAnimatedComponent is incorrect and doesn't include typeof FlatList\nexport function createAnimatedComponent(\n component: typeof FlatList<unknown>,\n options?: Options<any>\n): ComponentClass<AnimateProps<FlatListProps<unknown>>>;\n\nexport function createAnimatedComponent(\n Component: ComponentType<InitialComponentProps>,\n options?: Options<InitialComponentProps>\n): any {\n invariant(\n typeof Component !== 'function' ||\n (Component.prototype && Component.prototype.isReactComponent),\n `Looks like you're passing a function component \\`${Component.name}\\` to \\`createAnimatedComponent\\` function which supports only class components. Please wrap your function component with \\`React.forwardRef()\\` or use a class component instead.`\n );\n\n class AnimatedComponent\n extends React.Component<AnimatedComponentProps<InitialComponentProps>>\n implements IAnimatedComponentInternal\n {\n _styles: StyleProps[] | null = null;\n _animatedProps?: Partial<AnimatedComponentProps<AnimatedProps>>;\n _viewTag = -1;\n _isFirstRender = true;\n jestAnimatedStyle: { value: StyleProps } = { value: {} };\n _component: AnimatedComponentRef | HTMLElement | null = null;\n _sharedElementTransition: SharedTransition | null = null;\n _jsPropsUpdater = new JSPropsUpdater();\n _InlinePropManager = new InlinePropManager();\n _PropsFilter = new PropsFilter();\n _viewInfo?: ViewInfo;\n static displayName: string;\n static contextType = SkipEnteringContext;\n context!: React.ContextType<typeof SkipEnteringContext>;\n\n constructor(props: AnimatedComponentProps<InitialComponentProps>) {\n super(props);\n if (isJest()) {\n this.jestAnimatedStyle = { value: {} };\n }\n }\n\n componentDidMount() {\n this._attachNativeEvents();\n this._jsPropsUpdater.addOnJSPropsChangeListener(this);\n this._attachAnimatedStyles();\n this._InlinePropManager.attachInlineProps(this, this._getViewInfo());\n\n const layout = this.props.layout;\n if (layout) {\n this._configureLayoutTransition();\n }\n\n if (IS_WEB) {\n if (this.props.exiting) {\n saveSnapshot(this._component as HTMLElement);\n }\n\n if (\n !this.props.entering ||\n getReducedMotionFromConfig(this.props.entering as CustomConfig)\n ) {\n this._isFirstRender = false;\n return;\n }\n\n startWebLayoutAnimation(\n this.props,\n this._component as HTMLElement,\n LayoutAnimationType.ENTERING\n );\n }\n\n this._isFirstRender = false;\n }\n\n componentWillUnmount() {\n this._detachNativeEvents();\n this._jsPropsUpdater.removeOnJSPropsChangeListener(this);\n this._detachStyles();\n this._InlinePropManager.detachInlineProps();\n this._sharedElementTransition?.unregisterTransition(this._viewTag);\n\n const exiting = this.props.exiting;\n if (\n IS_WEB &&\n this.props.exiting &&\n !getReducedMotionFromConfig(this.props.exiting as CustomConfig)\n ) {\n addHTMLMutationObserver();\n\n startWebLayoutAnimation(\n this.props,\n this._component as HTMLElement,\n LayoutAnimationType.EXITING\n );\n } else if (exiting) {\n const reduceMotionInExiting =\n 'getReduceMotion' in exiting &&\n typeof exiting.getReduceMotion === 'function'\n ? getReduceMotionFromConfig(exiting.getReduceMotion())\n : getReduceMotionFromConfig();\n if (!reduceMotionInExiting) {\n updateLayoutAnimations(\n this._viewTag,\n LayoutAnimationType.EXITING,\n maybeBuild(\n exiting,\n this.props?.style,\n AnimatedComponent.displayName\n )\n );\n }\n }\n }\n\n _getEventViewRef() {\n // Make sure to get the scrollable node for components that implement\n // `ScrollResponder.Mixin`.\n return (this._component as AnimatedComponentRef)?.getScrollableNode\n ? (this._component as AnimatedComponentRef).getScrollableNode?.()\n : this._component;\n }\n\n _attachNativeEvents() {\n const node = this._getEventViewRef() as AnimatedComponentRef;\n let viewTag = null; // We set it only if needed\n\n for (const key in this.props) {\n const prop = this.props[key];\n if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler\n ) {\n if (viewTag === null) {\n viewTag = findNodeHandle(options?.setNativeProps ? this : node);\n }\n prop.current.registerForEvents(viewTag as number, key);\n }\n }\n }\n\n _detachNativeEvents() {\n for (const key in this.props) {\n const prop = this.props[key];\n if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler\n ) {\n prop.current.unregisterFromEvents();\n }\n }\n }\n\n _detachStyles() {\n if (IS_WEB && this._styles !== null) {\n for (const style of this._styles) {\n style.viewsRef.remove(this);\n }\n } else if (this._viewTag !== -1 && this._styles !== null) {\n for (const style of this._styles) {\n style.viewDescriptors.remove(this._viewTag);\n }\n if (this.props.animatedProps?.viewDescriptors) {\n this.props.animatedProps.viewDescriptors.remove(this._viewTag);\n }\n if (IS_FABRIC) {\n removeFromPropsRegistry(this._viewTag);\n }\n }\n }\n\n _reattachNativeEvents(\n prevProps: AnimatedComponentProps<InitialComponentProps>\n ) {\n for (const key in prevProps) {\n const prop = this.props[key];\n if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler &&\n prop.current.reattachNeeded\n ) {\n prop.current.unregisterFromEvents();\n }\n }\n\n let viewTag = null;\n\n for (const key in this.props) {\n const prop = this.props[key];\n if (\n has('current', prop) &&\n prop.current instanceof WorkletEventHandler &&\n prop.current.reattachNeeded\n ) {\n if (viewTag === null) {\n const node = this._getEventViewRef() as AnimatedComponentRef;\n viewTag = findNodeHandle(options?.setNativeProps ? this : node);\n }\n prop.current.registerForEvents(viewTag as number, key);\n prop.current.reattachNeeded = false;\n }\n }\n }\n\n _updateFromNative(props: StyleProps) {\n if (options?.setNativeProps) {\n options.setNativeProps(this._component as AnimatedComponentRef, props);\n } else {\n (this._component as AnimatedComponentRef)?.setNativeProps?.(props);\n }\n }\n\n _getViewInfo(): ViewInfo {\n if (this._viewInfo !== undefined) {\n return this._viewInfo;\n }\n\n let viewTag: number | HTMLElement | null;\n let viewName: string | null;\n let shadowNodeWrapper: ShadowNodeWrapper | null = null;\n let viewConfig;\n // Component can specify ref which should be animated when animated version of the component is created.\n // Otherwise, we animate the component itself.\n const component = (this._component as AnimatedComponentRef)\n ?.getAnimatableRef\n ? (this._component as AnimatedComponentRef).getAnimatableRef?.()\n : this;\n\n if (IS_WEB) {\n // At this point I assume that `_setComponentRef` was already called and `_component` is set.\n // `this._component` on web represents HTMLElement of our component, that's why we use casting\n viewTag = this._component as HTMLElement;\n viewName = null;\n shadowNodeWrapper = null;\n viewConfig = null;\n } else {\n // hostInstance can be null for a component that doesn't render anything (render function returns null). Example: svg Stop: https://github.com/react-native-svg/react-native-svg/blob/develop/src/elements/Stop.tsx\n const hostInstance = RNRenderer.findHostInstance_DEPRECATED(component);\n if (!hostInstance) {\n throw new Error(\n '[Reanimated] Cannot find host instance for this component. Maybe it renders nothing?'\n );\n }\n // we can access view tag in the same way it's accessed here https://github.com/facebook/react/blob/e3f4eb7272d4ca0ee49f27577156b57eeb07cf73/packages/react-native-renderer/src/ReactFabric.js#L146\n viewTag = hostInstance?._nativeTag;\n /**\n * RN uses viewConfig for components for storing different properties of the component(example: https://github.com/facebook/react-native/blob/main/packages/react-native/Libraries/Components/ScrollView/ScrollViewNativeComponent.js#L24).\n * The name we're looking for is in the field named uiViewClassName.\n */\n viewName = hostInstance?.viewConfig?.uiViewClassName;\n\n viewConfig = hostInstance?.viewConfig;\n\n if (IS_FABRIC) {\n shadowNodeWrapper = getShadowNodeWrapperFromRef(this);\n }\n }\n this._viewInfo = { viewTag, viewName, shadowNodeWrapper, viewConfig };\n return this._viewInfo;\n }\n\n _attachAnimatedStyles() {\n const styles = this.props.style\n ? onlyAnimatedStyles(flattenArray<StyleProps>(this.props.style))\n : [];\n const prevStyles = this._styles;\n this._styles = styles;\n\n const prevAnimatedProps = this._animatedProps;\n this._animatedProps = this.props.animatedProps;\n\n const { viewTag, viewName, shadowNodeWrapper, viewConfig } =\n this._getViewInfo();\n\n // update UI props whitelist for this view\n const hasReanimated2Props =\n this.props.animatedProps?.viewDescriptors || styles.length;\n if (hasReanimated2Props && viewConfig) {\n adaptViewConfig(viewConfig);\n }\n\n this._viewTag = viewTag as number;\n\n // remove old styles\n if (prevStyles) {\n // in most of the cases, views have only a single animated style and it remains unchanged\n const hasOneSameStyle =\n styles.length === 1 &&\n prevStyles.length === 1 &&\n styles[0] === prevStyles[0];\n\n if (!hasOneSameStyle) {\n // otherwise, remove each style that is not present in new styles\n for (const prevStyle of prevStyles) {\n const isPresent = styles.some((style) => style === prevStyle);\n if (!isPresent) {\n prevStyle.viewDescriptors.remove(viewTag);\n }\n }\n }\n }\n\n styles.forEach((style) => {\n style.viewDescriptors.add({\n tag: viewTag,\n name: viewName,\n shadowNodeWrapper,\n });\n if (isJest()) {\n /**\n * We need to connect Jest's TestObject instance whose contains just props object\n * with the updateProps() function where we update the properties of the component.\n * We can't update props object directly because TestObject contains a copy of props - look at render function:\n * const props = this._filterNonAnimatedProps(this.props);\n */\n this.jestAnimatedStyle.value = {\n ...this.jestAnimatedStyle.value,\n ...style.initial.value,\n };\n style.jestAnimatedStyle.current = this.jestAnimatedStyle;\n }\n });\n\n // detach old animatedProps\n if (prevAnimatedProps && prevAnimatedProps !== this.props.animatedProps) {\n prevAnimatedProps.viewDescriptors!.remove(viewTag as number);\n }\n\n // attach animatedProps property\n if (this.props.animatedProps?.viewDescriptors) {\n this.props.animatedProps.viewDescriptors.add({\n tag: viewTag as number,\n name: viewName!,\n shadowNodeWrapper: shadowNodeWrapper!,\n });\n }\n }\n\n componentDidUpdate(\n prevProps: AnimatedComponentProps<InitialComponentProps>,\n _prevState: Readonly<unknown>,\n // This type comes straight from React\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n snapshot: DOMRect | null\n ) {\n const layout = this.props.layout;\n const oldLayout = prevProps.layout;\n if (layout !== oldLayout) {\n this._configureLayoutTransition();\n }\n this._reattachNativeEvents(prevProps);\n this._attachAnimatedStyles();\n this._InlinePropManager.attachInlineProps(this, this._getViewInfo());\n\n if (IS_WEB && this.props.exiting) {\n saveSnapshot(this._component as HTMLElement);\n }\n\n // Snapshot won't be undefined because it comes from getSnapshotBeforeUpdate method\n if (\n IS_WEB &&\n snapshot !== null &&\n this.props.layout &&\n !getReducedMotionFromConfig(this.props.layout as CustomConfig)\n ) {\n tryActivateLayoutTransition(\n this.props,\n this._component as HTMLElement,\n snapshot\n );\n }\n }\n\n _configureLayoutTransition() {\n const layout = this.props.layout\n ? maybeBuild(\n this.props.layout,\n undefined /* We don't have to warn user if style has common properties with animation for LAYOUT */,\n AnimatedComponent.displayName\n )\n : undefined;\n updateLayoutAnimations(this._viewTag, LayoutAnimationType.LAYOUT, layout);\n }\n\n _setComponentRef = setAndForwardRef<Component | HTMLElement>({\n getForwardedRef: () =>\n this.props.forwardedRef as MutableRefObject<\n Component<Record<string, unknown>, Record<string, unknown>, unknown>\n >,\n setLocalRef: (ref) => {\n // TODO update config\n\n const tag = IS_WEB\n ? (ref as HTMLElement)\n : findNodeHandle(ref as Component);\n\n const { layout, entering, exiting, sharedTransitionTag } = this.props;\n if (\n (layout || entering || exiting || sharedTransitionTag) &&\n tag != null\n ) {\n if (!shouldBeUseWeb()) {\n enableLayoutAnimations(true, false);\n }\n\n const skipEntering = this.context?.current;\n if (entering && !skipEntering) {\n updateLayoutAnimations(\n tag as number,\n LayoutAnimationType.ENTERING,\n maybeBuild(\n entering,\n this.props?.style,\n AnimatedComponent.displayName\n )\n );\n }\n if (sharedTransitionTag && !IS_WEB) {\n const sharedElementTransition =\n this.props.sharedTransitionStyle ?? new SharedTransition();\n const reduceMotionInTransition = getReduceMotionFromConfig(\n sharedElementTransition.getReduceMotion()\n );\n if (!reduceMotionInTransition) {\n sharedElementTransition.registerTransition(\n tag as number,\n sharedTransitionTag\n );\n this._sharedElementTransition = sharedElementTransition;\n }\n }\n }\n\n if (ref !== this._component) {\n this._component = ref;\n }\n },\n });\n\n // This is a component lifecycle method from React, therefore we are not calling it directly.\n // It is called before the component gets rerendered. This way we can access components' position before it changed\n // and later on, in componentDidUpdate, calculate translation for layout transition.\n getSnapshotBeforeUpdate() {\n if (\n IS_WEB &&\n (this._component as HTMLElement)?.getBoundingClientRect !== undefined\n ) {\n return (this._component as HTMLElement).getBoundingClientRect();\n }\n\n return null;\n }\n\n render() {\n const filteredProps = this._PropsFilter.filterNonAnimatedProps(this);\n\n if (isJest()) {\n filteredProps.jestAnimatedStyle = this.jestAnimatedStyle;\n }\n\n // Layout animations on web are set inside `componentDidMount` method, which is called after first render.\n // Because of that we can encounter a situation in which component is visible for a short amount of time, and later on animation triggers.\n // I've tested that on various browsers and devices and it did not happen to me. To be sure that it won't happen to someone else,\n // I've decided to hide component at first render. Its visibility is reset in `componentDidMount`.\n if (\n this._isFirstRender &&\n IS_WEB &&\n filteredProps.entering &&\n !getReducedMotionFromConfig(filteredProps.entering as CustomConfig)\n ) {\n filteredProps.style = {\n ...(filteredProps.style ?? {}),\n visibility: 'hidden', // Hide component until `componentDidMount` triggers\n };\n }\n\n const platformProps = Platform.select({\n web: {},\n default: { collapsable: false },\n });\n\n return (\n <Component\n {...filteredProps}\n // Casting is used here, because ref can be null - in that case it cannot be assigned to HTMLElement.\n // After spending some time trying to figure out what to do with this problem, we decided to leave it this way\n ref={this._setComponentRef as (ref: Component) => void}\n {...platformProps}\n />\n );\n }\n }\n\n AnimatedComponent.displayName = `AnimatedComponent(${\n Component.displayName || Component.name || 'Component'\n })`;\n\n return React.forwardRef<Component>((props, ref) => {\n return (\n <AnimatedComponent\n {...props}\n {...(ref === null ? null : { forwardedRef: ref })}\n />\n );\n });\n}\n"],"mappings":"AAAA,YAAY;;AAAC,SAAAA,SAAA,IAAAA,QAAA,GAAAC,MAAA,CAAAC,MAAA,GAAAD,MAAA,CAAAC,MAAA,CAAAC,IAAA,eAAAC,MAAA,aAAAC,CAAA,MAAAA,CAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAF,CAAA,UAAAG,MAAA,GAAAF,SAAA,CAAAD,CAAA,YAAAI,GAAA,IAAAD,MAAA,QAAAP,MAAA,CAAAS,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAJ,MAAA,EAAAC,GAAA,KAAAL,MAAA,CAAAK,GAAA,IAAAD,MAAA,CAAAC,GAAA,gBAAAL,MAAA,YAAAJ,QAAA,CAAAa,KAAA,OAAAP,SAAA;AAAA,SAAAQ,gBAAAC,GAAA,EAAAN,GAAA,EAAAO,KAAA,IAAAP,GAAA,GAAAQ,cAAA,CAAAR,GAAA,OAAAA,GAAA,IAAAM,GAAA,IAAAd,MAAA,CAAAiB,cAAA,CAAAH,GAAA,EAAAN,GAAA,IAAAO,KAAA,EAAAA,KAAA,EAAAG,UAAA,QAAAC,YAAA,QAAAC,QAAA,oBAAAN,GAAA,CAAAN,GAAA,IAAAO,KAAA,WAAAD,GAAA;AAAA,SAAAE,eAAAK,GAAA,QAAAb,GAAA,GAAAc,YAAA,CAAAD,GAAA,2BAAAb,GAAA,gBAAAA,GAAA,GAAAe,MAAA,CAAAf,GAAA;AAAA,SAAAc,aAAAE,KAAA,EAAAC,IAAA,eAAAD,KAAA,iBAAAA,KAAA,kBAAAA,KAAA,MAAAE,IAAA,GAAAF,KAAA,CAAAG,MAAA,CAAAC,WAAA,OAAAF,IAAA,KAAAG,SAAA,QAAAC,GAAA,GAAAJ,IAAA,CAAAf,IAAA,CAAAa,KAAA,EAAAC,IAAA,2BAAAK,GAAA,sBAAAA,GAAA,YAAAC,SAAA,4DAAAN,IAAA,gBAAAF,MAAA,GAAAS,MAAA,EAAAR,KAAA;AAQb,OAAOS,KAAK,MAAM,OAAO;AACzB,SAASC,cAAc,EAAEC,QAAQ,QAAQ,cAAc;AACvD,OAAOC,mBAAmB,MAAM,oCAAoC;AACpE,OAAO,oDAAoD;AAC3D,OAAOC,SAAS,MAAM,WAAW;AACjC,SAASC,eAAe,QAAQ,iBAAiB;AACjD,SAASC,UAAU,QAAQ,6CAA6C;AACxE,SAASC,sBAAsB,QAAQ,qBAAqB;AAC5D,SACEC,gBAAgB,EAChBC,mBAAmB,QACd,kCAAkC;AAEzC,SAASC,2BAA2B,QAAQ,4BAA4B;AACxE,SAASC,uBAAuB,QAAQ,8BAA8B;AACtE,SAASC,yBAAyB,QAAQ,+BAA+B;AACzE,SAASC,UAAU,QAAQ,qBAAqB;AAChD,SAASC,mBAAmB,QAAQ,gDAAgD;AAEpF,OAAOC,cAAc,MAAM,kBAAkB;AAS7C,SAASC,GAAG,EAAEC,YAAY,QAAQ,SAAS;AAC3C,OAAOC,gBAAgB,MAAM,oBAAoB;AACjD,SACEC,QAAQ,EACRC,MAAM,EACNC,KAAK,EACLC,cAAc,QACT,gCAAgC;AACvC,SAASC,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,WAAW,QAAQ,eAAe;AAC3C,SACEC,uBAAuB,EACvBC,2BAA2B,EAC3BC,4BAA4B,EAC5BC,0BAA0B,EAC1BC,YAAY,QACP,sCAAsC;AAC7C,SAASC,sBAAsB,QAAQ,uCAAuC;AAG9E,SAASC,uBAAuB,QAAQ,+CAA+C;AAEvF,MAAMC,MAAM,GAAGX,KAAK,EAAE;AACtB,MAAMY,SAAS,GAAGd,QAAQ,EAAE;AAE5B,IAAIa,MAAM,EAAE;EACVL,4BAA4B,EAAE;AAChC;AAEA,SAASO,kBAAkBA,CAACC,MAAoB,EAAgB;EAC9D,OAAOA,MAAM,CAACC,MAAM,CAAEC,KAAK,IAAKA,KAAK,aAALA,KAAK,uBAALA,KAAK,CAAEC,eAAe,CAAC;AACzD;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA,GANA,CAQA;AAkBA;AACA;AACA;AACA;AAMA,OAAO,SAASC,uBAAuBA,CACrCC,SAA+C,EAC/CC,OAAwC,EACnC;EACLrC,SAAS,CACP,OAAOoC,SAAS,KAAK,UAAU,IAC5BA,SAAS,CAAChE,SAAS,IAAIgE,SAAS,CAAChE,SAAS,CAACkE,gBAAiB,EAC9D,oDAAmDF,SAAS,CAACG,IAAK,oLAAmL,CACvP;EAED,MAAMC,iBAAiB,SACb5C,KAAK,CAACwC,SAAS,CAEzB;IAgBEK,WAAWA,CAACC,KAAoD,EAAE;MAChE,KAAK,CAACA,KAAK,CAAC;MAAClE,eAAA,kBAhBgB,IAAI;MAAAA,eAAA;MAAAA,eAAA,mBAExB,CAAC,CAAC;MAAAA,eAAA,yBACI,IAAI;MAAAA,eAAA,4BACsB;QAAEE,KAAK,EAAE,CAAC;MAAE,CAAC;MAAAF,eAAA,qBACA,IAAI;MAAAA,eAAA,mCACR,IAAI;MAAAA,eAAA,0BACtC,IAAImC,cAAc,EAAE;MAAAnC,eAAA,6BACjB,IAAI2C,iBAAiB,EAAE;MAAA3C,eAAA,uBAC7B,IAAI4C,WAAW,EAAE;MAAA5C,eAAA;MAAAA,eAAA;MAAAA,eAAA,2BAoWbsC,gBAAgB,CAA0B;QAC3D6B,eAAe,EAAEA,CAAA,KACf,IAAI,CAACD,KAAK,CAACE,YAEV;QACHC,WAAW,EAAGC,GAAG,IAAK;UACpB;;UAEA,MAAMC,GAAG,GAAGnB,MAAM,GACbkB,GAAG,GACJjD,cAAc,CAACiD,GAAG,CAAc;UAEpC,MAAM;YAAEE,MAAM;YAAEC,QAAQ;YAAEC,OAAO;YAAEC;UAAoB,CAAC,GAAG,IAAI,CAACT,KAAK;UACrE,IACE,CAACM,MAAM,IAAIC,QAAQ,IAAIC,OAAO,IAAIC,mBAAmB,KACrDJ,GAAG,IAAI,IAAI,EACX;YAAA,IAAAK,aAAA;YACA,IAAI,CAAClC,cAAc,EAAE,EAAE;cACrBf,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC;YACrC;YAEA,MAAMkD,YAAY,IAAAD,aAAA,GAAG,IAAI,CAACE,OAAO,cAAAF,aAAA,uBAAZA,aAAA,CAAcG,OAAO;YAC1C,IAAIN,QAAQ,IAAI,CAACI,YAAY,EAAE;cAAA,IAAAG,WAAA;cAC7B9B,sBAAsB,CACpBqB,GAAG,EACH1C,mBAAmB,CAACoD,QAAQ,EAC5BhD,UAAU,CACRwC,QAAQ,GAAAO,WAAA,GACR,IAAI,CAACd,KAAK,cAAAc,WAAA,uBAAVA,WAAA,CAAYvB,KAAK,EACjBO,iBAAiB,CAACkB,WAAW,CAC9B,CACF;YACH;YACA,IAAIP,mBAAmB,IAAI,CAACvB,MAAM,EAAE;cAClC,MAAM+B,uBAAuB,GAC3B,IAAI,CAACjB,KAAK,CAACkB,qBAAqB,IAAI,IAAIxD,gBAAgB,EAAE;cAC5D,MAAMyD,wBAAwB,GAAGrD,yBAAyB,CACxDmD,uBAAuB,CAACG,eAAe,EAAE,CAC1C;cACD,IAAI,CAACD,wBAAwB,EAAE;gBAC7BF,uBAAuB,CAACI,kBAAkB,CACxChB,GAAG,EACHI,mBAAmB,CACpB;gBACD,IAAI,CAACa,wBAAwB,GAAGL,uBAAuB;cACzD;YACF;UACF;UAEA,IAAIb,GAAG,KAAK,IAAI,CAACmB,UAAU,EAAE;YAC3B,IAAI,CAACA,UAAU,GAAGnB,GAAG;UACvB;QACF;MACF,CAAC,CAAC;MAjZA,IAAI9B,MAAM,EAAE,EAAE;QACZ,IAAI,CAACkD,iBAAiB,GAAG;UAAExF,KAAK,EAAE,CAAC;QAAE,CAAC;MACxC;IACF;IAEAyF,iBAAiBA,CAAA,EAAG;MAClB,IAAI,CAACC,mBAAmB,EAAE;MAC1B,IAAI,CAACC,eAAe,CAACC,0BAA0B,CAAC,IAAI,CAAC;MACrD,IAAI,CAACC,qBAAqB,EAAE;MAC5B,IAAI,CAACC,kBAAkB,CAACC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAACC,YAAY,EAAE,CAAC;MAEpE,MAAM1B,MAAM,GAAG,IAAI,CAACN,KAAK,CAACM,MAAM;MAChC,IAAIA,MAAM,EAAE;QACV,IAAI,CAAC2B,0BAA0B,EAAE;MACnC;MAEA,IAAI/C,MAAM,EAAE;QACV,IAAI,IAAI,CAACc,KAAK,CAACQ,OAAO,EAAE;UACtBzB,YAAY,CAAC,IAAI,CAACwC,UAAU,CAAgB;QAC9C;QAEA,IACE,CAAC,IAAI,CAACvB,KAAK,CAACO,QAAQ,IACpBzB,0BAA0B,CAAC,IAAI,CAACkB,KAAK,CAACO,QAAQ,CAAiB,EAC/D;UACA,IAAI,CAAC2B,cAAc,GAAG,KAAK;UAC3B;QACF;QAEAvD,uBAAuB,CACrB,IAAI,CAACqB,KAAK,EACV,IAAI,CAACuB,UAAU,EACf5D,mBAAmB,CAACoD,QAAQ,CAC7B;MACH;MAEA,IAAI,CAACmB,cAAc,GAAG,KAAK;IAC7B;IAEAC,oBAAoBA,CAAA,EAAG;MAAA,IAAAC,qBAAA;MACrB,IAAI,CAACC,mBAAmB,EAAE;MAC1B,IAAI,CAACV,eAAe,CAACW,6BAA6B,CAAC,IAAI,CAAC;MACxD,IAAI,CAACC,aAAa,EAAE;MACpB,IAAI,CAACT,kBAAkB,CAACU,iBAAiB,EAAE;MAC3C,CAAAJ,qBAAA,OAAI,CAACd,wBAAwB,cAAAc,qBAAA,uBAA7BA,qBAAA,CAA+BK,oBAAoB,CAAC,IAAI,CAACC,QAAQ,CAAC;MAElE,MAAMlC,OAAO,GAAG,IAAI,CAACR,KAAK,CAACQ,OAAO;MAClC,IACEtB,MAAM,IACN,IAAI,CAACc,KAAK,CAACQ,OAAO,IAClB,CAAC1B,0BAA0B,CAAC,IAAI,CAACkB,KAAK,CAACQ,OAAO,CAAiB,EAC/D;QACAvB,uBAAuB,EAAE;QAEzBN,uBAAuB,CACrB,IAAI,CAACqB,KAAK,EACV,IAAI,CAACuB,UAAU,EACf5D,mBAAmB,CAACgF,OAAO,CAC5B;MACH,CAAC,MAAM,IAAInC,OAAO,EAAE;QAClB,MAAMoC,qBAAqB,GACzB,iBAAiB,IAAIpC,OAAO,IAC5B,OAAOA,OAAO,CAACY,eAAe,KAAK,UAAU,GACzCtD,yBAAyB,CAAC0C,OAAO,CAACY,eAAe,EAAE,CAAC,GACpDtD,yBAAyB,EAAE;QACjC,IAAI,CAAC8E,qBAAqB,EAAE;UAAA,IAAAC,YAAA;UAC1B7D,sBAAsB,CACpB,IAAI,CAAC0D,QAAQ,EACb/E,mBAAmB,CAACgF,OAAO,EAC3B5E,UAAU,CACRyC,OAAO,GAAAqC,YAAA,GACP,IAAI,CAAC7C,KAAK,cAAA6C,YAAA,uBAAVA,YAAA,CAAYtD,KAAK,EACjBO,iBAAiB,CAACkB,WAAW,CAC9B,CACF;QACH;MACF;IACF;IAEA8B,gBAAgBA,CAAA,EAAG;MAAA,IAAAC,gBAAA,EAAAC,kBAAA,EAAAC,IAAA;MACjB;MACA;MACA,OAAO,CAAAF,gBAAA,GAAC,IAAI,CAACxB,UAAU,cAAAwB,gBAAA,eAAhBA,gBAAA,CAA2CG,iBAAiB,IAAAF,kBAAA,GAC/D,CAAAC,IAAA,GAAC,IAAI,CAAC1B,UAAU,EAA0B2B,iBAAiB,cAAAF,kBAAA,uBAA3DA,kBAAA,CAAApH,IAAA,CAAAqH,IAAA,CAA+D,GAC/D,IAAI,CAAC1B,UAAU;IACrB;IAEAG,mBAAmBA,CAAA,EAAG;MACpB,MAAMyB,IAAI,GAAG,IAAI,CAACL,gBAAgB,EAA0B;MAC5D,IAAIM,OAAO,GAAG,IAAI,CAAC,CAAC;;MAEpB,KAAK,MAAM3H,GAAG,IAAI,IAAI,CAACuE,KAAK,EAAE;QAC5B,MAAMqD,IAAI,GAAG,IAAI,CAACrD,KAAK,CAACvE,GAAG,CAAC;QAC5B,IACEyC,GAAG,CAAC,SAAS,EAAEmF,IAAI,CAAC,IACpBA,IAAI,CAACxC,OAAO,YAAYxD,mBAAmB,EAC3C;UACA,IAAI+F,OAAO,KAAK,IAAI,EAAE;YACpBA,OAAO,GAAGjG,cAAc,CAACwC,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAE2D,cAAc,GAAG,IAAI,GAAGH,IAAI,CAAC;UACjE;UACAE,IAAI,CAACxC,OAAO,CAAC0C,iBAAiB,CAACH,OAAO,EAAY3H,GAAG,CAAC;QACxD;MACF;IACF;IAEA4G,mBAAmBA,CAAA,EAAG;MACpB,KAAK,MAAM5G,GAAG,IAAI,IAAI,CAACuE,KAAK,EAAE;QAC5B,MAAMqD,IAAI,GAAG,IAAI,CAACrD,KAAK,CAACvE,GAAG,CAAC;QAC5B,IACEyC,GAAG,CAAC,SAAS,EAAEmF,IAAI,CAAC,IACpBA,IAAI,CAACxC,OAAO,YAAYxD,mBAAmB,EAC3C;UACAgG,IAAI,CAACxC,OAAO,CAAC2C,oBAAoB,EAAE;QACrC;MACF;IACF;IAEAjB,aAAaA,CAAA,EAAG;MACd,IAAIrD,MAAM,IAAI,IAAI,CAACuE,OAAO,KAAK,IAAI,EAAE;QACnC,KAAK,MAAMlE,KAAK,IAAI,IAAI,CAACkE,OAAO,EAAE;UAChClE,KAAK,CAACmE,QAAQ,CAACC,MAAM,CAAC,IAAI,CAAC;QAC7B;MACF,CAAC,MAAM,IAAI,IAAI,CAACjB,QAAQ,KAAK,CAAC,CAAC,IAAI,IAAI,CAACe,OAAO,KAAK,IAAI,EAAE;QAAA,IAAAG,qBAAA;QACxD,KAAK,MAAMrE,KAAK,IAAI,IAAI,CAACkE,OAAO,EAAE;UAChClE,KAAK,CAACC,eAAe,CAACmE,MAAM,CAAC,IAAI,CAACjB,QAAQ,CAAC;QAC7C;QACA,KAAAkB,qBAAA,GAAI,IAAI,CAAC5D,KAAK,CAAC6D,aAAa,cAAAD,qBAAA,eAAxBA,qBAAA,CAA0BpE,eAAe,EAAE;UAC7C,IAAI,CAACQ,KAAK,CAAC6D,aAAa,CAACrE,eAAe,CAACmE,MAAM,CAAC,IAAI,CAACjB,QAAQ,CAAC;QAChE;QACA,IAAIvD,SAAS,EAAE;UACbtB,uBAAuB,CAAC,IAAI,CAAC6E,QAAQ,CAAC;QACxC;MACF;IACF;IAEAoB,qBAAqBA,CACnBC,SAAwD,EACxD;MACA,KAAK,MAAMtI,GAAG,IAAIsI,SAAS,EAAE;QAC3B,MAAMV,IAAI,GAAG,IAAI,CAACrD,KAAK,CAACvE,GAAG,CAAC;QAC5B,IACEyC,GAAG,CAAC,SAAS,EAAEmF,IAAI,CAAC,IACpBA,IAAI,CAACxC,OAAO,YAAYxD,mBAAmB,IAC3CgG,IAAI,CAACxC,OAAO,CAACmD,cAAc,EAC3B;UACAX,IAAI,CAACxC,OAAO,CAAC2C,oBAAoB,EAAE;QACrC;MACF;MAEA,IAAIJ,OAAO,GAAG,IAAI;MAElB,KAAK,MAAM3H,GAAG,IAAI,IAAI,CAACuE,KAAK,EAAE;QAC5B,MAAMqD,IAAI,GAAG,IAAI,CAACrD,KAAK,CAACvE,GAAG,CAAC;QAC5B,IACEyC,GAAG,CAAC,SAAS,EAAEmF,IAAI,CAAC,IACpBA,IAAI,CAACxC,OAAO,YAAYxD,mBAAmB,IAC3CgG,IAAI,CAACxC,OAAO,CAACmD,cAAc,EAC3B;UACA,IAAIZ,OAAO,KAAK,IAAI,EAAE;YACpB,MAAMD,IAAI,GAAG,IAAI,CAACL,gBAAgB,EAA0B;YAC5DM,OAAO,GAAGjG,cAAc,CAACwC,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAE2D,cAAc,GAAG,IAAI,GAAGH,IAAI,CAAC;UACjE;UACAE,IAAI,CAACxC,OAAO,CAAC0C,iBAAiB,CAACH,OAAO,EAAY3H,GAAG,CAAC;UACtD4H,IAAI,CAACxC,OAAO,CAACmD,cAAc,GAAG,KAAK;QACrC;MACF;IACF;IAEAC,iBAAiBA,CAACjE,KAAiB,EAAE;MACnC,IAAIL,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAE2D,cAAc,EAAE;QAC3B3D,OAAO,CAAC2D,cAAc,CAAC,IAAI,CAAC/B,UAAU,EAA0BvB,KAAK,CAAC;MACxE,CAAC,MAAM;QAAA,IAAAkE,iBAAA,EAAAC,qBAAA;QACL,CAAAD,iBAAA,GAAC,IAAI,CAAC3C,UAAU,cAAA2C,iBAAA,wBAAAC,qBAAA,GAAhBD,iBAAA,CAA2CZ,cAAc,cAAAa,qBAAA,uBAAzDA,qBAAA,CAAAvI,IAAA,CAAAsI,iBAAA,EAA4DlE,KAAK,CAAC;MACpE;IACF;IAEAgC,YAAYA,CAAA,EAAa;MAAA,IAAAoC,iBAAA,EAAAC,iBAAA,EAAAC,KAAA;MACvB,IAAI,IAAI,CAACC,SAAS,KAAKzH,SAAS,EAAE;QAChC,OAAO,IAAI,CAACyH,SAAS;MACvB;MAEA,IAAInB,OAAoC;MACxC,IAAIoB,QAAuB;MAC3B,IAAIC,iBAA2C,GAAG,IAAI;MACtD,IAAIC,UAAU;MACd;MACA;MACA,MAAMC,SAAS,GAAG,CAAAP,iBAAA,GAAC,IAAI,CAAC7C,UAAU,cAAA6C,iBAAA,eAAhBA,iBAAA,CACdQ,gBAAgB,IAAAP,iBAAA,GAChB,CAAAC,KAAA,GAAC,IAAI,CAAC/C,UAAU,EAA0BqD,gBAAgB,cAAAP,iBAAA,uBAA1DA,iBAAA,CAAAzI,IAAA,CAAA0I,KAAA,CAA8D,GAC9D,IAAI;MAER,IAAIpF,MAAM,EAAE;QACV;QACA;QACAkE,OAAO,GAAG,IAAI,CAAC7B,UAAyB;QACxCiD,QAAQ,GAAG,IAAI;QACfC,iBAAiB,GAAG,IAAI;QACxBC,UAAU,GAAG,IAAI;MACnB,CAAC,MAAM;QAAA,IAAAG,qBAAA;QACL;QACA,MAAMC,YAAY,GAAGtH,UAAU,CAACuH,2BAA2B,CAACJ,SAAS,CAAC;QACtE,IAAI,CAACG,YAAY,EAAE;UACjB,MAAM,IAAIE,KAAK,CACb,sFAAsF,CACvF;QACH;QACA;QACA5B,OAAO,GAAG0B,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEG,UAAU;QAClC;AACR;AACA;AACA;QACQT,QAAQ,GAAGM,YAAY,aAAZA,YAAY,wBAAAD,qBAAA,GAAZC,YAAY,CAAEJ,UAAU,cAAAG,qBAAA,uBAAxBA,qBAAA,CAA0BK,eAAe;QAEpDR,UAAU,GAAGI,YAAY,aAAZA,YAAY,uBAAZA,YAAY,CAAEJ,UAAU;QAErC,IAAIvF,SAAS,EAAE;UACbsF,iBAAiB,GAAG7G,2BAA2B,CAAC,IAAI,CAAC;QACvD;MACF;MACA,IAAI,CAAC2G,SAAS,GAAG;QAAEnB,OAAO;QAAEoB,QAAQ;QAAEC,iBAAiB;QAAEC;MAAW,CAAC;MACrE,OAAO,IAAI,CAACH,SAAS;IACvB;IAEA1C,qBAAqBA,CAAA,EAAG;MAAA,IAAAsD,sBAAA,EAAAC,sBAAA;MACtB,MAAM/F,MAAM,GAAG,IAAI,CAACW,KAAK,CAACT,KAAK,GAC3BH,kBAAkB,CAACjB,YAAY,CAAa,IAAI,CAAC6B,KAAK,CAACT,KAAK,CAAC,CAAC,GAC9D,EAAE;MACN,MAAM8F,UAAU,GAAG,IAAI,CAAC5B,OAAO;MAC/B,IAAI,CAACA,OAAO,GAAGpE,MAAM;MAErB,MAAMiG,iBAAiB,GAAG,IAAI,CAACC,cAAc;MAC7C,IAAI,CAACA,cAAc,GAAG,IAAI,CAACvF,KAAK,CAAC6D,aAAa;MAE9C,MAAM;QAAET,OAAO;QAAEoB,QAAQ;QAAEC,iBAAiB;QAAEC;MAAW,CAAC,GACxD,IAAI,CAAC1C,YAAY,EAAE;;MAErB;MACA,MAAMwD,mBAAmB,GACvB,EAAAL,sBAAA,OAAI,CAACnF,KAAK,CAAC6D,aAAa,cAAAsB,sBAAA,uBAAxBA,sBAAA,CAA0B3F,eAAe,KAAIH,MAAM,CAAC9D,MAAM;MAC5D,IAAIiK,mBAAmB,IAAId,UAAU,EAAE;QACrCnH,eAAe,CAACmH,UAAU,CAAC;MAC7B;MAEA,IAAI,CAAChC,QAAQ,GAAGU,OAAiB;;MAEjC;MACA,IAAIiC,UAAU,EAAE;QACd;QACA,MAAMI,eAAe,GACnBpG,MAAM,CAAC9D,MAAM,KAAK,CAAC,IACnB8J,UAAU,CAAC9J,MAAM,KAAK,CAAC,IACvB8D,MAAM,CAAC,CAAC,CAAC,KAAKgG,UAAU,CAAC,CAAC,CAAC;QAE7B,IAAI,CAACI,eAAe,EAAE;UACpB;UACA,KAAK,MAAMC,SAAS,IAAIL,UAAU,EAAE;YAClC,MAAMM,SAAS,GAAGtG,MAAM,CAACuG,IAAI,CAAErG,KAAK,IAAKA,KAAK,KAAKmG,SAAS,CAAC;YAC7D,IAAI,CAACC,SAAS,EAAE;cACdD,SAAS,CAAClG,eAAe,CAACmE,MAAM,CAACP,OAAO,CAAC;YAC3C;UACF;QACF;MACF;MAEA/D,MAAM,CAACwG,OAAO,CAAEtG,KAAK,IAAK;QACxBA,KAAK,CAACC,eAAe,CAACsG,GAAG,CAAC;UACxBzF,GAAG,EAAE+C,OAAO;UACZvD,IAAI,EAAE2E,QAAQ;UACdC;QACF,CAAC,CAAC;QACF,IAAInG,MAAM,EAAE,EAAE;UACZ;AACV;AACA;AACA;AACA;AACA;UACU,IAAI,CAACkD,iBAAiB,CAACxF,KAAK,GAAG;YAC7B,GAAG,IAAI,CAACwF,iBAAiB,CAACxF,KAAK;YAC/B,GAAGuD,KAAK,CAACwG,OAAO,CAAC/J;UACnB,CAAC;UACDuD,KAAK,CAACiC,iBAAiB,CAACX,OAAO,GAAG,IAAI,CAACW,iBAAiB;QAC1D;MACF,CAAC,CAAC;;MAEF;MACA,IAAI8D,iBAAiB,IAAIA,iBAAiB,KAAK,IAAI,CAACtF,KAAK,CAAC6D,aAAa,EAAE;QACvEyB,iBAAiB,CAAC9F,eAAe,CAAEmE,MAAM,CAACP,OAAO,CAAW;MAC9D;;MAEA;MACA,KAAAgC,sBAAA,GAAI,IAAI,CAACpF,KAAK,CAAC6D,aAAa,cAAAuB,sBAAA,eAAxBA,sBAAA,CAA0B5F,eAAe,EAAE;QAC7C,IAAI,CAACQ,KAAK,CAAC6D,aAAa,CAACrE,eAAe,CAACsG,GAAG,CAAC;UAC3CzF,GAAG,EAAE+C,OAAiB;UACtBvD,IAAI,EAAE2E,QAAS;UACfC,iBAAiB,EAAEA;QACrB,CAAC,CAAC;MACJ;IACF;IAEAuB,kBAAkBA,CAChBjC,SAAwD,EACxDkC,UAA6B;IAC7B;IACA;IACAC,QAAwB,EACxB;MACA,MAAM5F,MAAM,GAAG,IAAI,CAACN,KAAK,CAACM,MAAM;MAChC,MAAM6F,SAAS,GAAGpC,SAAS,CAACzD,MAAM;MAClC,IAAIA,MAAM,KAAK6F,SAAS,EAAE;QACxB,IAAI,CAAClE,0BAA0B,EAAE;MACnC;MACA,IAAI,CAAC6B,qBAAqB,CAACC,SAAS,CAAC;MACrC,IAAI,CAAClC,qBAAqB,EAAE;MAC5B,IAAI,CAACC,kBAAkB,CAACC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAACC,YAAY,EAAE,CAAC;MAEpE,IAAI9C,MAAM,IAAI,IAAI,CAACc,KAAK,CAACQ,OAAO,EAAE;QAChCzB,YAAY,CAAC,IAAI,CAACwC,UAAU,CAAgB;MAC9C;;MAEA;MACA,IACErC,MAAM,IACNgH,QAAQ,KAAK,IAAI,IACjB,IAAI,CAAClG,KAAK,CAACM,MAAM,IACjB,CAACxB,0BAA0B,CAAC,IAAI,CAACkB,KAAK,CAACM,MAAM,CAAiB,EAC9D;QACA1B,2BAA2B,CACzB,IAAI,CAACoB,KAAK,EACV,IAAI,CAACuB,UAAU,EACf2E,QAAQ,CACT;MACH;IACF;IAEAjE,0BAA0BA,CAAA,EAAG;MAC3B,MAAM3B,MAAM,GAAG,IAAI,CAACN,KAAK,CAACM,MAAM,GAC5BvC,UAAU,CACR,IAAI,CAACiC,KAAK,CAACM,MAAM,EACjBxD,SAAS,CAAC,2FACVgD,iBAAiB,CAACkB,WAAW,CAC9B,GACDlE,SAAS;MACbkC,sBAAsB,CAAC,IAAI,CAAC0D,QAAQ,EAAE/E,mBAAmB,CAACyI,MAAM,EAAE9F,MAAM,CAAC;IAC3E;IAyDA;IACA;IACA;IACA+F,uBAAuBA,CAAA,EAAG;MAAA,IAAAC,iBAAA;MACxB,IACEpH,MAAM,IACN,EAAAoH,iBAAA,GAAC,IAAI,CAAC/E,UAAU,cAAA+E,iBAAA,uBAAhBA,iBAAA,CAAkCC,qBAAqB,MAAKzJ,SAAS,EACrE;QACA,OAAQ,IAAI,CAACyE,UAAU,CAAiBgF,qBAAqB,EAAE;MACjE;MAEA,OAAO,IAAI;IACb;IAEAC,MAAMA,CAAA,EAAG;MACP,MAAMC,aAAa,GAAG,IAAI,CAACC,YAAY,CAACC,sBAAsB,CAAC,IAAI,CAAC;MAEpE,IAAIrI,MAAM,EAAE,EAAE;QACZmI,aAAa,CAACjF,iBAAiB,GAAG,IAAI,CAACA,iBAAiB;MAC1D;;MAEA;MACA;MACA;MACA;MACA,IACE,IAAI,CAACU,cAAc,IACnBhD,MAAM,IACNuH,aAAa,CAAClG,QAAQ,IACtB,CAACzB,0BAA0B,CAAC2H,aAAa,CAAClG,QAAQ,CAAiB,EACnE;QACAkG,aAAa,CAAClH,KAAK,GAAG;UACpB,IAAIkH,aAAa,CAAClH,KAAK,IAAI,CAAC,CAAC,CAAC;UAC9BqH,UAAU,EAAE,QAAQ,CAAE;QACxB,CAAC;MACH;;MAEA,MAAMC,aAAa,GAAGzJ,QAAQ,CAAC0J,MAAM,CAAC;QACpCC,GAAG,EAAE,CAAC,CAAC;QACPC,OAAO,EAAE;UAAEC,WAAW,EAAE;QAAM;MAChC,CAAC,CAAC;MAEF,oBACE/J,KAAA,CAAAgK,aAAA,CAACxH,SAAS,EAAA1E,QAAA,KACJyL,aAAa;QACjB;QACA;QACArG,GAAG,EAAE,IAAI,CAAC+G;MAA6C,GACnDN,aAAa,EACjB;IAEN;EACF;EAAC/K,eAAA,CA5dKgE,iBAAiB;EAAAhE,eAAA,CAAjBgE,iBAAiB,iBAgBA9B,mBAAmB;EA8c1C8B,iBAAiB,CAACkB,WAAW,GAAI,qBAC/BtB,SAAS,CAACsB,WAAW,IAAItB,SAAS,CAACG,IAAI,IAAI,WAC5C,GAAE;EAEH,oBAAO3C,KAAK,CAACkK,UAAU,CAAY,CAACpH,KAAK,EAAEI,GAAG,KAAK;IACjD,oBACElD,KAAA,CAAAgK,aAAA,CAACpH,iBAAiB,EAAA9E,QAAA,KACZgF,KAAK,EACJI,GAAG,KAAK,IAAI,GAAG,IAAI,GAAG;MAAEF,YAAY,EAAEE;IAAI,CAAC,EAChD;EAEN,CAAC,CAAC;AACJ"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- import { useEffect, useRef } from 'react';
3
+ import { useEffect, useMemo, useRef } from 'react';
4
4
  import { initializeSensor, registerSensor, unregisterSensor } from '../core';
5
5
  import { SensorType, IOSReferenceFrame, InterfaceOrientation } from '../commonTypes';
6
6
  import { callMicrotasks } from '../threads';
@@ -78,12 +78,20 @@ function adjustVectorToInterfaceOrientation(data) {
78
78
  */
79
79
 
80
80
  export function useAnimatedSensor(sensorType, userConfig) {
81
- const config = {
81
+ var _userConfigRef$curren, _userConfigRef$curren2, _userConfigRef$curren3;
82
+ const userConfigRef = useRef(userConfig);
83
+ const hasConfigChanged = ((_userConfigRef$curren = userConfigRef.current) === null || _userConfigRef$curren === void 0 ? void 0 : _userConfigRef$curren.adjustToInterfaceOrientation) !== (userConfig === null || userConfig === void 0 ? void 0 : userConfig.adjustToInterfaceOrientation) || ((_userConfigRef$curren2 = userConfigRef.current) === null || _userConfigRef$curren2 === void 0 ? void 0 : _userConfigRef$curren2.interval) !== (userConfig === null || userConfig === void 0 ? void 0 : userConfig.interval) || ((_userConfigRef$curren3 = userConfigRef.current) === null || _userConfigRef$curren3 === void 0 ? void 0 : _userConfigRef$curren3.iosReferenceFrame) !== (userConfig === null || userConfig === void 0 ? void 0 : userConfig.iosReferenceFrame);
84
+ if (hasConfigChanged) {
85
+ userConfigRef.current = {
86
+ ...userConfig
87
+ };
88
+ }
89
+ const config = useMemo(() => ({
82
90
  interval: 'auto',
83
91
  adjustToInterfaceOrientation: true,
84
92
  iosReferenceFrame: IOSReferenceFrame.Auto,
85
- ...userConfig
86
- };
93
+ ...userConfigRef.current
94
+ }), [userConfigRef.current]);
87
95
  const ref = useRef({
88
96
  sensor: initializeSensor(sensorType, config),
89
97
  unregister: () => {
@@ -93,11 +101,14 @@ export function useAnimatedSensor(sensorType, userConfig) {
93
101
  config
94
102
  });
95
103
  useEffect(() => {
96
- const newConfig = {
97
- ...config,
98
- ...userConfig
104
+ ref.current = {
105
+ sensor: initializeSensor(sensorType, config),
106
+ unregister: () => {
107
+ // NOOP
108
+ },
109
+ isAvailable: false,
110
+ config
99
111
  };
100
- ref.current.sensor = initializeSensor(sensorType, newConfig);
101
112
  const sensorData = ref.current.sensor;
102
113
  const adjustToInterfaceOrientation = ref.current.config.adjustToInterfaceOrientation;
103
114
  const id = registerSensor(sensorType, config, data => {
@@ -127,7 +138,7 @@ export function useAnimatedSensor(sensorType, userConfig) {
127
138
  return () => {
128
139
  ref.current.unregister();
129
140
  };
130
- }, [sensorType, userConfig]);
141
+ }, [sensorType, config]);
131
142
  return ref.current;
132
143
  }
133
144
  //# sourceMappingURL=useAnimatedSensor.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","initializeSensor","registerSensor","unregisterSensor","SensorType","IOSReferenceFrame","InterfaceOrientation","callMicrotasks","eulerToQuaternion","pitch","roll","yaw","c1","Math","cos","s1","sin","c2","s2","c3","s3","adjustRotationToInterfaceOrientation","data","interfaceOrientation","ROTATION_90","PI","ROTATION_270","ROTATION_180","q","qx","qy","qz","qw","adjustVectorToInterfaceOrientation","x","y","useAnimatedSensor","sensorType","userConfig","config","interval","adjustToInterfaceOrientation","iosReferenceFrame","Auto","ref","sensor","unregister","isAvailable","newConfig","current","sensorData","id","ROTATION","value"],"sources":["useAnimatedSensor.ts"],"sourcesContent":["'use strict';\nimport { useEffect, useRef } from 'react';\nimport { initializeSensor, registerSensor, unregisterSensor } from '../core';\nimport type {\n SensorConfig,\n AnimatedSensor,\n Value3D,\n ValueRotation,\n} from '../commonTypes';\nimport {\n SensorType,\n IOSReferenceFrame,\n InterfaceOrientation,\n} from '../commonTypes';\nimport { callMicrotasks } from '../threads';\n\n// euler angles are in order ZXY, z = yaw, x = pitch, y = roll\n// https://github.com/mrdoob/three.js/blob/dev/src/math/Quaternion.js#L237\nfunction eulerToQuaternion(pitch: number, roll: number, yaw: number) {\n 'worklet';\n const c1 = Math.cos(pitch / 2);\n const s1 = Math.sin(pitch / 2);\n const c2 = Math.cos(roll / 2);\n const s2 = Math.sin(roll / 2);\n const c3 = Math.cos(yaw / 2);\n const s3 = Math.sin(yaw / 2);\n\n return [\n s1 * c2 * c3 - c1 * s2 * s3,\n c1 * s2 * c3 + s1 * c2 * s3,\n c1 * c2 * s3 + s1 * s2 * c3,\n c1 * c2 * c3 - s1 * s2 * s3,\n ];\n}\n\nfunction adjustRotationToInterfaceOrientation(data: ValueRotation) {\n 'worklet';\n const { interfaceOrientation, pitch, roll, yaw } = data;\n if (interfaceOrientation === InterfaceOrientation.ROTATION_90) {\n data.pitch = roll;\n data.roll = -pitch;\n data.yaw = yaw - Math.PI / 2;\n } else if (interfaceOrientation === InterfaceOrientation.ROTATION_270) {\n data.pitch = -roll;\n data.roll = pitch;\n data.yaw = yaw + Math.PI / 2;\n } else if (interfaceOrientation === InterfaceOrientation.ROTATION_180) {\n data.pitch *= -1;\n data.roll *= -1;\n data.yaw *= -1;\n }\n\n const q = eulerToQuaternion(data.pitch, data.roll, data.yaw);\n data.qx = q[0];\n data.qy = q[1];\n data.qz = q[2];\n data.qw = q[3];\n return data;\n}\n\nfunction adjustVectorToInterfaceOrientation(data: Value3D) {\n 'worklet';\n const { interfaceOrientation, x, y } = data;\n if (interfaceOrientation === InterfaceOrientation.ROTATION_90) {\n data.x = -y;\n data.y = x;\n } else if (interfaceOrientation === InterfaceOrientation.ROTATION_270) {\n data.x = y;\n data.y = -x;\n } else if (interfaceOrientation === InterfaceOrientation.ROTATION_180) {\n data.x *= -1;\n data.y *= -1;\n }\n return data;\n}\n\n/**\n * Lets you create animations based on data from the device's sensors.\n *\n * @param sensorType - Type of the sensor to use. Configured with {@link SensorType} enum.\n * @param config - The sensor configuration - {@link SensorConfig}.\n * @returns An object containing the sensor measurements [shared value](https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/glossary#shared-value) and a function to unregister the sensor\n * @see https://docs.swmansion.com/react-native-reanimated/docs/device/useAnimatedSensor\n */\nexport function useAnimatedSensor(\n sensorType: SensorType.ROTATION,\n userConfig?: Partial<SensorConfig>\n): AnimatedSensor<ValueRotation>;\nexport function useAnimatedSensor(\n sensorType: Exclude<SensorType, SensorType.ROTATION>,\n userConfig?: Partial<SensorConfig>\n): AnimatedSensor<Value3D>;\nexport function useAnimatedSensor(\n sensorType: SensorType,\n userConfig?: Partial<SensorConfig>\n): AnimatedSensor<ValueRotation> | AnimatedSensor<Value3D> {\n const config: SensorConfig = {\n interval: 'auto',\n adjustToInterfaceOrientation: true,\n iosReferenceFrame: IOSReferenceFrame.Auto,\n ...userConfig,\n };\n const ref = useRef<AnimatedSensor<Value3D | ValueRotation>>({\n sensor: initializeSensor(sensorType, config),\n unregister: () => {\n // NOOP\n },\n isAvailable: false,\n config,\n });\n\n useEffect(() => {\n const newConfig = {\n ...config,\n ...userConfig,\n };\n ref.current.sensor = initializeSensor(sensorType, newConfig);\n\n const sensorData = ref.current.sensor;\n const adjustToInterfaceOrientation =\n ref.current.config.adjustToInterfaceOrientation;\n\n const id = registerSensor(sensorType, config, (data) => {\n 'worklet';\n if (adjustToInterfaceOrientation) {\n if (sensorType === SensorType.ROTATION) {\n data = adjustRotationToInterfaceOrientation(data as ValueRotation);\n } else {\n data = adjustVectorToInterfaceOrientation(data as Value3D);\n }\n }\n sensorData.value = data;\n callMicrotasks();\n });\n\n if (id !== -1) {\n // if sensor is available\n ref.current.unregister = () => unregisterSensor(id);\n ref.current.isAvailable = true;\n } else {\n // if sensor is unavailable\n ref.current.unregister = () => {\n // NOOP\n };\n ref.current.isAvailable = false;\n }\n\n return () => {\n ref.current.unregister();\n };\n }, [sensorType, userConfig]);\n\n return ref.current as AnimatedSensor<ValueRotation> | AnimatedSensor<Value3D>;\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["useEffect","useMemo","useRef","initializeSensor","registerSensor","unregisterSensor","SensorType","IOSReferenceFrame","InterfaceOrientation","callMicrotasks","eulerToQuaternion","pitch","roll","yaw","c1","Math","cos","s1","sin","c2","s2","c3","s3","adjustRotationToInterfaceOrientation","data","interfaceOrientation","ROTATION_90","PI","ROTATION_270","ROTATION_180","q","qx","qy","qz","qw","adjustVectorToInterfaceOrientation","x","y","useAnimatedSensor","sensorType","userConfig","_userConfigRef$curren","_userConfigRef$curren2","_userConfigRef$curren3","userConfigRef","hasConfigChanged","current","adjustToInterfaceOrientation","interval","iosReferenceFrame","config","Auto","ref","sensor","unregister","isAvailable","sensorData","id","ROTATION","value"],"sources":["useAnimatedSensor.ts"],"sourcesContent":["'use strict';\nimport { useEffect, useMemo, useRef } from 'react';\nimport { initializeSensor, registerSensor, unregisterSensor } from '../core';\nimport type {\n SensorConfig,\n AnimatedSensor,\n Value3D,\n ValueRotation,\n} from '../commonTypes';\nimport {\n SensorType,\n IOSReferenceFrame,\n InterfaceOrientation,\n} from '../commonTypes';\nimport { callMicrotasks } from '../threads';\n\n// euler angles are in order ZXY, z = yaw, x = pitch, y = roll\n// https://github.com/mrdoob/three.js/blob/dev/src/math/Quaternion.js#L237\nfunction eulerToQuaternion(pitch: number, roll: number, yaw: number) {\n 'worklet';\n const c1 = Math.cos(pitch / 2);\n const s1 = Math.sin(pitch / 2);\n const c2 = Math.cos(roll / 2);\n const s2 = Math.sin(roll / 2);\n const c3 = Math.cos(yaw / 2);\n const s3 = Math.sin(yaw / 2);\n\n return [\n s1 * c2 * c3 - c1 * s2 * s3,\n c1 * s2 * c3 + s1 * c2 * s3,\n c1 * c2 * s3 + s1 * s2 * c3,\n c1 * c2 * c3 - s1 * s2 * s3,\n ];\n}\n\nfunction adjustRotationToInterfaceOrientation(data: ValueRotation) {\n 'worklet';\n const { interfaceOrientation, pitch, roll, yaw } = data;\n if (interfaceOrientation === InterfaceOrientation.ROTATION_90) {\n data.pitch = roll;\n data.roll = -pitch;\n data.yaw = yaw - Math.PI / 2;\n } else if (interfaceOrientation === InterfaceOrientation.ROTATION_270) {\n data.pitch = -roll;\n data.roll = pitch;\n data.yaw = yaw + Math.PI / 2;\n } else if (interfaceOrientation === InterfaceOrientation.ROTATION_180) {\n data.pitch *= -1;\n data.roll *= -1;\n data.yaw *= -1;\n }\n\n const q = eulerToQuaternion(data.pitch, data.roll, data.yaw);\n data.qx = q[0];\n data.qy = q[1];\n data.qz = q[2];\n data.qw = q[3];\n return data;\n}\n\nfunction adjustVectorToInterfaceOrientation(data: Value3D) {\n 'worklet';\n const { interfaceOrientation, x, y } = data;\n if (interfaceOrientation === InterfaceOrientation.ROTATION_90) {\n data.x = -y;\n data.y = x;\n } else if (interfaceOrientation === InterfaceOrientation.ROTATION_270) {\n data.x = y;\n data.y = -x;\n } else if (interfaceOrientation === InterfaceOrientation.ROTATION_180) {\n data.x *= -1;\n data.y *= -1;\n }\n return data;\n}\n\n/**\n * Lets you create animations based on data from the device's sensors.\n *\n * @param sensorType - Type of the sensor to use. Configured with {@link SensorType} enum.\n * @param config - The sensor configuration - {@link SensorConfig}.\n * @returns An object containing the sensor measurements [shared value](https://docs.swmansion.com/react-native-reanimated/docs/fundamentals/glossary#shared-value) and a function to unregister the sensor\n * @see https://docs.swmansion.com/react-native-reanimated/docs/device/useAnimatedSensor\n */\nexport function useAnimatedSensor(\n sensorType: SensorType.ROTATION,\n userConfig?: Partial<SensorConfig>\n): AnimatedSensor<ValueRotation>;\nexport function useAnimatedSensor(\n sensorType: Exclude<SensorType, SensorType.ROTATION>,\n userConfig?: Partial<SensorConfig>\n): AnimatedSensor<Value3D>;\nexport function useAnimatedSensor(\n sensorType: SensorType,\n userConfig?: Partial<SensorConfig>\n): AnimatedSensor<ValueRotation> | AnimatedSensor<Value3D> {\n const userConfigRef = useRef(userConfig);\n\n const hasConfigChanged =\n userConfigRef.current?.adjustToInterfaceOrientation !==\n userConfig?.adjustToInterfaceOrientation ||\n userConfigRef.current?.interval !== userConfig?.interval ||\n userConfigRef.current?.iosReferenceFrame !== userConfig?.iosReferenceFrame;\n\n if (hasConfigChanged) {\n userConfigRef.current = { ...userConfig };\n }\n\n const config: SensorConfig = useMemo(\n () => ({\n interval: 'auto',\n adjustToInterfaceOrientation: true,\n iosReferenceFrame: IOSReferenceFrame.Auto,\n ...userConfigRef.current,\n }),\n [userConfigRef.current]\n );\n\n const ref = useRef<AnimatedSensor<Value3D | ValueRotation>>({\n sensor: initializeSensor(sensorType, config),\n unregister: () => {\n // NOOP\n },\n isAvailable: false,\n config,\n });\n\n useEffect(() => {\n ref.current = {\n sensor: initializeSensor(sensorType, config),\n unregister: () => {\n // NOOP\n },\n isAvailable: false,\n config,\n };\n\n const sensorData = ref.current.sensor;\n const adjustToInterfaceOrientation =\n ref.current.config.adjustToInterfaceOrientation;\n\n const id = registerSensor(sensorType, config, (data) => {\n 'worklet';\n if (adjustToInterfaceOrientation) {\n if (sensorType === SensorType.ROTATION) {\n data = adjustRotationToInterfaceOrientation(data as ValueRotation);\n } else {\n data = adjustVectorToInterfaceOrientation(data as Value3D);\n }\n }\n sensorData.value = data;\n callMicrotasks();\n });\n\n if (id !== -1) {\n // if sensor is available\n ref.current.unregister = () => unregisterSensor(id);\n ref.current.isAvailable = true;\n } else {\n // if sensor is unavailable\n ref.current.unregister = () => {\n // NOOP\n };\n ref.current.isAvailable = false;\n }\n\n return () => {\n ref.current.unregister();\n };\n }, [sensorType, config]);\n\n return ref.current as AnimatedSensor<ValueRotation> | AnimatedSensor<Value3D>;\n}\n"],"mappings":"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"}
@@ -22,7 +22,7 @@ function prepareAnimation(frameTimestamp, animatedProp, lastAnimation, lastValue
22
22
  if (typeof animatedProp === 'object' && animatedProp.onFrame) {
23
23
  const animation = animatedProp;
24
24
  let value = animation.current;
25
- if (lastValue !== undefined) {
25
+ if (lastValue !== undefined && lastValue !== null) {
26
26
  if (typeof lastValue === 'object') {
27
27
  if (lastValue.value !== undefined) {
28
28
  // previously it was a shared value
@@ -369,19 +369,19 @@ For more, see the docs: \`https://docs.swmansion.com/react-native-reanimated/doc
369
369
  };
370
370
  }, [areAnimationsActive]);
371
371
  checkSharedValueUsage(initial.value);
372
- if (isJest()) {
373
- return {
372
+ const animatedStyleHandle = useRef(null);
373
+ if (!animatedStyleHandle.current) {
374
+ animatedStyleHandle.current = isJest() ? {
374
375
  viewDescriptors,
375
376
  initial,
376
377
  viewsRef,
377
378
  jestAnimatedStyle
378
- };
379
- } else {
380
- return {
381
- viewDescriptors,
379
+ } : {
382
380
  initial,
383
- viewsRef
381
+ viewsRef,
382
+ viewDescriptors
384
383
  };
385
384
  }
385
+ return animatedStyleHandle.current;
386
386
  }
387
387
  //# sourceMappingURL=useAnimatedStyle.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","makeShareable","startMapper","stopMapper","updateProps","updatePropsJestWrapper","initialUpdaterRun","useSharedValue","buildWorkletsHash","isAnimated","shallowEqual","validateAnimatedStyles","makeViewDescriptorsSet","useViewRefSet","isJest","shouldBeUseWeb","SHOULD_BE_USE_WEB","prepareAnimation","frameTimestamp","animatedProp","lastAnimation","lastValue","Array","isArray","forEach","prop","index","onFrame","animation","value","current","undefined","callStart","timestamp","onStart","Object","keys","key","runAnimations","result","animationsActive","allFinished","entry","finished","callback","k","styleUpdater","viewDescriptors","updater","state","maybeViewRef","isAnimatedProps","arguments","length","animations","newValues","oldValues","last","nonAnimatedNewValues","hasAnimations","hasNonAnimatedValues","global","__frameTimestamp","_getAnimationTimestamp","frame","isAnimationCancelled","isAnimationRunning","updates","propName","requestAnimationFrame","jestStyleUpdater","animatedStyle","adapters","checkSharedValueUsage","currentKey","element","Error","useAnimatedStyle","dependencies","viewsRef","animatedUpdaterData","inputs","values","__closure","_dependencies","__DEV__","__workletHash","adaptersArray","adaptersHash","areAnimationsActive","jestAnimatedStyle","push","initialStyle","initial","remoteState","shareableViewDescriptors","fun","updaterFn","adapter","mapperId"],"sources":["useAnimatedStyle.ts"],"sourcesContent":["'use strict';\nimport type { MutableRefObject } from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport { makeShareable, startMapper, stopMapper } from '../core';\nimport updateProps, { updatePropsJestWrapper } from '../UpdateProps';\nimport { initialUpdaterRun } from '../animation';\nimport { useSharedValue } from './useSharedValue';\nimport {\n buildWorkletsHash,\n isAnimated,\n shallowEqual,\n validateAnimatedStyles,\n} from './utils';\nimport type {\n AnimatedStyleHandle,\n DefaultStyle,\n DependencyList,\n Descriptor,\n JestAnimatedStyleHandle,\n} from './commonTypes';\nimport type { ViewDescriptorsSet, ViewRefSet } from '../ViewDescriptorsSet';\nimport { makeViewDescriptorsSet, useViewRefSet } from '../ViewDescriptorsSet';\nimport { isJest, shouldBeUseWeb } from '../PlatformChecker';\nimport type {\n AnimationObject,\n Timestamp,\n NestedObjectValues,\n SharedValue,\n StyleProps,\n __AdapterWorkletFunction,\n __BasicWorkletFunction,\n WorkletFunction,\n} from '../commonTypes';\nimport type { AnimatedStyle } from '../helperTypes';\n\nconst SHOULD_BE_USE_WEB = shouldBeUseWeb();\n\ninterface AnimatedState {\n last: AnimatedStyle<any>;\n animations: AnimatedStyle<any>;\n isAnimationRunning: boolean;\n isAnimationCancelled: boolean;\n}\n\ninterface AnimatedUpdaterData {\n initial: {\n value: AnimatedStyle<any>;\n updater: () => AnimatedStyle<any>;\n };\n remoteState: AnimatedState;\n viewDescriptors: ViewDescriptorsSet;\n}\n\nfunction prepareAnimation(\n frameTimestamp: number,\n animatedProp: AnimatedStyle<any>,\n lastAnimation: AnimatedStyle<any>,\n lastValue: AnimatedStyle<any>\n): void {\n 'worklet';\n if (Array.isArray(animatedProp)) {\n animatedProp.forEach((prop, index) => {\n prepareAnimation(\n frameTimestamp,\n prop,\n lastAnimation && lastAnimation[index],\n lastValue && lastValue[index]\n );\n });\n // return animatedProp;\n }\n if (typeof animatedProp === 'object' && animatedProp.onFrame) {\n const animation = animatedProp;\n\n let value = animation.current;\n if (lastValue !== undefined) {\n if (typeof lastValue === 'object') {\n if (lastValue.value !== undefined) {\n // previously it was a shared value\n value = lastValue.value;\n } else if (lastValue.onFrame !== undefined) {\n if (lastAnimation?.current !== undefined) {\n // it was an animation before, copy its state\n value = lastAnimation.current;\n } else if (lastValue?.current !== undefined) {\n // it was initialized\n value = lastValue.current;\n }\n }\n } else {\n // previously it was a plain value, just set it as starting point\n value = lastValue;\n }\n }\n\n animation.callStart = (timestamp: Timestamp) => {\n animation.onStart(animation, value, timestamp, lastAnimation);\n };\n animation.callStart(frameTimestamp);\n animation.callStart = null;\n } else if (typeof animatedProp === 'object') {\n // it is an object\n Object.keys(animatedProp).forEach((key) =>\n prepareAnimation(\n frameTimestamp,\n animatedProp[key],\n lastAnimation && lastAnimation[key],\n lastValue && lastValue[key]\n )\n );\n }\n}\n\nfunction runAnimations(\n animation: AnimatedStyle<any>,\n timestamp: Timestamp,\n key: number | string,\n result: AnimatedStyle<any>,\n animationsActive: SharedValue<boolean>\n): boolean {\n 'worklet';\n if (!animationsActive.value) {\n return true;\n }\n if (Array.isArray(animation)) {\n result[key] = [];\n let allFinished = true;\n animation.forEach((entry, index) => {\n if (\n !runAnimations(entry, timestamp, index, result[key], animationsActive)\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else if (typeof animation === 'object' && animation.onFrame) {\n let finished = true;\n if (!animation.finished) {\n if (animation.callStart) {\n animation.callStart(timestamp);\n animation.callStart = null;\n }\n finished = animation.onFrame(animation, timestamp);\n animation.timestamp = timestamp;\n if (finished) {\n animation.finished = true;\n animation.callback && animation.callback(true /* finished */);\n }\n }\n result[key] = animation.current;\n return finished;\n } else if (typeof animation === 'object') {\n result[key] = {};\n let allFinished = true;\n Object.keys(animation).forEach((k) => {\n if (\n !runAnimations(\n animation[k],\n timestamp,\n k,\n result[key],\n animationsActive\n )\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else {\n result[key] = animation;\n return true;\n }\n}\n\nfunction styleUpdater(\n viewDescriptors: SharedValue<Descriptor[]>,\n updater: __BasicWorkletFunction<AnimatedStyle<any>>,\n state: AnimatedState,\n maybeViewRef: ViewRefSet<any> | undefined,\n animationsActive: SharedValue<boolean>,\n isAnimatedProps = false\n): void {\n 'worklet';\n const animations = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n const nonAnimatedNewValues: StyleProps = {};\n\n let hasAnimations = false;\n let frameTimestamp: number | undefined;\n let hasNonAnimatedValues = false;\n for (const key in newValues) {\n const value = newValues[key];\n if (isAnimated(value)) {\n frameTimestamp = global.__frameTimestamp || _getAnimationTimestamp();\n prepareAnimation(frameTimestamp, value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n } else {\n hasNonAnimatedValues = true;\n nonAnimatedNewValues[key] = value;\n delete animations[key];\n }\n }\n\n if (hasAnimations) {\n const frame = (timestamp: Timestamp) => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const { animations, last, isAnimationCancelled } = state;\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle<any> = {};\n let allFinished = true;\n for (const propName in animations) {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n }\n\n if (updates) {\n updateProps(viewDescriptors, updates, maybeViewRef);\n }\n\n if (!allFinished) {\n requestAnimationFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n };\n\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n frame(frameTimestamp!);\n }\n\n if (hasNonAnimatedValues) {\n updateProps(viewDescriptors, nonAnimatedNewValues, maybeViewRef);\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n\n if (!shallowEqual(oldValues, newValues)) {\n updateProps(viewDescriptors, newValues, maybeViewRef, isAnimatedProps);\n }\n }\n state.last = newValues;\n}\n\nfunction jestStyleUpdater(\n viewDescriptors: SharedValue<Descriptor[]>,\n updater: __BasicWorkletFunction<AnimatedStyle<any>>,\n state: AnimatedState,\n maybeViewRef: ViewRefSet<any> | undefined,\n animationsActive: SharedValue<boolean>,\n animatedStyle: MutableRefObject<AnimatedStyle<any>>,\n adapters: __AdapterWorkletFunction[] = []\n): void {\n 'worklet';\n const animations: AnimatedStyle<any> = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n\n // extract animated props\n let hasAnimations = false;\n let frameTimestamp: number | undefined;\n Object.keys(animations).forEach((key) => {\n const value = newValues[key];\n if (!isAnimated(value)) {\n delete animations[key];\n }\n });\n Object.keys(newValues).forEach((key) => {\n const value = newValues[key];\n if (isAnimated(value)) {\n frameTimestamp = global.__frameTimestamp || _getAnimationTimestamp();\n prepareAnimation(frameTimestamp, value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n }\n });\n\n function frame(timestamp: Timestamp) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const { animations, last, isAnimationCancelled } = state;\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle<any> = {};\n let allFinished = true;\n Object.keys(animations).forEach((propName) => {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n });\n\n if (Object.keys(updates).length) {\n updatePropsJestWrapper(\n viewDescriptors,\n updates,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n\n if (!allFinished) {\n requestAnimationFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n }\n\n if (hasAnimations) {\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n frame(frameTimestamp!);\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n }\n\n // calculate diff\n state.last = newValues;\n\n if (!shallowEqual(oldValues, newValues)) {\n updatePropsJestWrapper(\n viewDescriptors,\n newValues,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n}\n\n// check for invalid usage of shared values in returned object\nfunction checkSharedValueUsage(\n prop: NestedObjectValues<AnimationObject>,\n currentKey?: string\n): void {\n if (Array.isArray(prop)) {\n // if it's an array (i.ex. transform) validate all its elements\n for (const element of prop) {\n checkSharedValueUsage(element, currentKey);\n }\n } else if (\n typeof prop === 'object' &&\n prop !== null &&\n prop.value === undefined\n ) {\n // if it's a nested object, run validation for all its props\n for (const key of Object.keys(prop)) {\n checkSharedValueUsage(prop[key], key);\n }\n } else if (\n currentKey !== undefined &&\n typeof prop === 'object' &&\n prop !== null &&\n prop.value !== undefined\n ) {\n // if shared value is passed insted of its value, throw an error\n throw new Error(\n `[Reanimated] Invalid value passed to \\`${currentKey}\\`, maybe you forgot to use \\`.value\\`?`\n );\n }\n}\n\n/**\n * Lets you create a styles object, similar to StyleSheet styles, which can be animated using shared values.\n *\n * @param updater - A function returning an object with style properties you want to animate.\n * @param dependencies - An optional array of dependencies. Only relevant when using Reanimated without the Babel plugin on the Web.\n * @returns An animated style object which has to be passed to the `style` property of an Animated component you want to animate.\n * @see https://docs.swmansion.com/react-native-reanimated/docs/core/useAnimatedStyle\n */\n// You cannot pass Shared Values to `useAnimatedStyle` directly.\n// @ts-expect-error This overload is required by our API.\nexport function useAnimatedStyle<Style extends DefaultStyle>(\n updater: () => Style,\n dependencies?: DependencyList | null\n): Style;\n\nexport function useAnimatedStyle<Style extends DefaultStyle>(\n updater: WorkletFunction<[], Style>,\n dependencies?: DependencyList | null,\n adapters?: WorkletFunction | WorkletFunction[],\n isAnimatedProps = false\n): AnimatedStyleHandle<Style> | JestAnimatedStyleHandle<Style> {\n const viewsRef: ViewRefSet<unknown> | undefined = useViewRefSet();\n const animatedUpdaterData = useRef<AnimatedUpdaterData>();\n let inputs = Object.values(updater.__closure ?? {});\n if (SHOULD_BE_USE_WEB) {\n if (!inputs.length && dependencies?.length) {\n // let web work without a Babel plugin\n inputs = dependencies;\n }\n if (__DEV__ && !inputs.length && !dependencies && !updater.__workletHash) {\n throw new Error(\n `[Reanimated] \\`useAnimatedStyle\\` was used without a dependency array or Babel plugin. Please explicitly pass a dependency array, or enable the Babel plugin.\nFor more, see the docs: \\`https://docs.swmansion.com/react-native-reanimated/docs/guides/web-support#web-without-the-babel-plugin\\`.`\n );\n }\n }\n const adaptersArray = adapters\n ? Array.isArray(adapters)\n ? adapters\n : [adapters]\n : [];\n const adaptersHash = adapters ? buildWorkletsHash(adaptersArray) : null;\n const areAnimationsActive = useSharedValue<boolean>(true);\n const jestAnimatedStyle = useRef<Style>({} as Style);\n\n // build dependencies\n if (!dependencies) {\n dependencies = [...inputs, updater.__workletHash];\n } else {\n dependencies.push(updater.__workletHash);\n }\n adaptersHash && dependencies.push(adaptersHash);\n\n if (!animatedUpdaterData.current) {\n const initialStyle = initialUpdaterRun(updater);\n if (__DEV__) {\n validateAnimatedStyles(initialStyle);\n }\n animatedUpdaterData.current = {\n initial: {\n value: initialStyle,\n updater,\n },\n remoteState: makeShareable({\n last: initialStyle,\n animations: {},\n isAnimationCancelled: false,\n isAnimationRunning: false,\n }),\n viewDescriptors: makeViewDescriptorsSet(),\n };\n }\n\n const { initial, remoteState, viewDescriptors } = animatedUpdaterData.current;\n const shareableViewDescriptors = viewDescriptors.shareableViewDescriptors;\n\n dependencies.push(shareableViewDescriptors);\n\n useEffect(() => {\n let fun;\n let updaterFn = updater;\n if (adapters) {\n updaterFn = (() => {\n 'worklet';\n const newValues = updater();\n adaptersArray.forEach((adapter) => {\n adapter(newValues);\n });\n return newValues;\n }) as WorkletFunction<[], Style>;\n }\n\n if (isJest()) {\n fun = () => {\n 'worklet';\n jestStyleUpdater(\n shareableViewDescriptors,\n updater,\n remoteState,\n viewsRef,\n areAnimationsActive,\n jestAnimatedStyle,\n adaptersArray\n );\n };\n } else {\n fun = () => {\n 'worklet';\n styleUpdater(\n shareableViewDescriptors,\n updaterFn,\n remoteState,\n viewsRef,\n areAnimationsActive,\n isAnimatedProps\n );\n };\n }\n const mapperId = startMapper(fun, inputs);\n return () => {\n stopMapper(mapperId);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies);\n\n useEffect(() => {\n areAnimationsActive.value = true;\n return () => {\n areAnimationsActive.value = false;\n };\n }, [areAnimationsActive]);\n\n checkSharedValueUsage(initial.value);\n\n if (isJest()) {\n return { viewDescriptors, initial, viewsRef, jestAnimatedStyle };\n } else {\n return { viewDescriptors, initial, viewsRef };\n }\n}\n"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAEzC,SAASC,aAAa,EAAEC,WAAW,EAAEC,UAAU,QAAQ,SAAS;AAChE,OAAOC,WAAW,IAAIC,sBAAsB,QAAQ,gBAAgB;AACpE,SAASC,iBAAiB,QAAQ,cAAc;AAChD,SAASC,cAAc,QAAQ,kBAAkB;AACjD,SACEC,iBAAiB,EACjBC,UAAU,EACVC,YAAY,EACZC,sBAAsB,QACjB,SAAS;AAShB,SAASC,sBAAsB,EAAEC,aAAa,QAAQ,uBAAuB;AAC7E,SAASC,MAAM,EAAEC,cAAc,QAAQ,oBAAoB;AAa3D,MAAMC,iBAAiB,GAAGD,cAAc,EAAE;AAkB1C,SAASE,gBAAgBA,CACvBC,cAAsB,EACtBC,YAAgC,EAChCC,aAAiC,EACjCC,SAA6B,EACvB;EACN,SAAS;;EACT,IAAIC,KAAK,CAACC,OAAO,CAACJ,YAAY,CAAC,EAAE;IAC/BA,YAAY,CAACK,OAAO,CAAC,CAACC,IAAI,EAAEC,KAAK,KAAK;MACpCT,gBAAgB,CACdC,cAAc,EACdO,IAAI,EACJL,aAAa,IAAIA,aAAa,CAACM,KAAK,CAAC,EACrCL,SAAS,IAAIA,SAAS,CAACK,KAAK,CAAC,CAC9B;IACH,CAAC,CAAC;IACF;EACF;;EACA,IAAI,OAAOP,YAAY,KAAK,QAAQ,IAAIA,YAAY,CAACQ,OAAO,EAAE;IAC5D,MAAMC,SAAS,GAAGT,YAAY;IAE9B,IAAIU,KAAK,GAAGD,SAAS,CAACE,OAAO;IAC7B,IAAIT,SAAS,KAAKU,SAAS,EAAE;MAC3B,IAAI,OAAOV,SAAS,KAAK,QAAQ,EAAE;QACjC,IAAIA,SAAS,CAACQ,KAAK,KAAKE,SAAS,EAAE;UACjC;UACAF,KAAK,GAAGR,SAAS,CAACQ,KAAK;QACzB,CAAC,MAAM,IAAIR,SAAS,CAACM,OAAO,KAAKI,SAAS,EAAE;UAC1C,IAAI,CAAAX,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEU,OAAO,MAAKC,SAAS,EAAE;YACxC;YACAF,KAAK,GAAGT,aAAa,CAACU,OAAO;UAC/B,CAAC,MAAM,IAAI,CAAAT,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAES,OAAO,MAAKC,SAAS,EAAE;YAC3C;YACAF,KAAK,GAAGR,SAAS,CAACS,OAAO;UAC3B;QACF;MACF,CAAC,MAAM;QACL;QACAD,KAAK,GAAGR,SAAS;MACnB;IACF;IAEAO,SAAS,CAACI,SAAS,GAAIC,SAAoB,IAAK;MAC9CL,SAAS,CAACM,OAAO,CAACN,SAAS,EAAEC,KAAK,EAAEI,SAAS,EAAEb,aAAa,CAAC;IAC/D,CAAC;IACDQ,SAAS,CAACI,SAAS,CAACd,cAAc,CAAC;IACnCU,SAAS,CAACI,SAAS,GAAG,IAAI;EAC5B,CAAC,MAAM,IAAI,OAAOb,YAAY,KAAK,QAAQ,EAAE;IAC3C;IACAgB,MAAM,CAACC,IAAI,CAACjB,YAAY,CAAC,CAACK,OAAO,CAAEa,GAAG,IACpCpB,gBAAgB,CACdC,cAAc,EACdC,YAAY,CAACkB,GAAG,CAAC,EACjBjB,aAAa,IAAIA,aAAa,CAACiB,GAAG,CAAC,EACnChB,SAAS,IAAIA,SAAS,CAACgB,GAAG,CAAC,CAC5B,CACF;EACH;AACF;AAEA,SAASC,aAAaA,CACpBV,SAA6B,EAC7BK,SAAoB,EACpBI,GAAoB,EACpBE,MAA0B,EAC1BC,gBAAsC,EAC7B;EACT,SAAS;;EACT,IAAI,CAACA,gBAAgB,CAACX,KAAK,EAAE;IAC3B,OAAO,IAAI;EACb;EACA,IAAIP,KAAK,CAACC,OAAO,CAACK,SAAS,CAAC,EAAE;IAC5BW,MAAM,CAACF,GAAG,CAAC,GAAG,EAAE;IAChB,IAAII,WAAW,GAAG,IAAI;IACtBb,SAAS,CAACJ,OAAO,CAAC,CAACkB,KAAK,EAAEhB,KAAK,KAAK;MAClC,IACE,CAACY,aAAa,CAACI,KAAK,EAAET,SAAS,EAAEP,KAAK,EAAEa,MAAM,CAACF,GAAG,CAAC,EAAEG,gBAAgB,CAAC,EACtE;QACAC,WAAW,GAAG,KAAK;MACrB;IACF,CAAC,CAAC;IACF,OAAOA,WAAW;EACpB,CAAC,MAAM,IAAI,OAAOb,SAAS,KAAK,QAAQ,IAAIA,SAAS,CAACD,OAAO,EAAE;IAC7D,IAAIgB,QAAQ,GAAG,IAAI;IACnB,IAAI,CAACf,SAAS,CAACe,QAAQ,EAAE;MACvB,IAAIf,SAAS,CAACI,SAAS,EAAE;QACvBJ,SAAS,CAACI,SAAS,CAACC,SAAS,CAAC;QAC9BL,SAAS,CAACI,SAAS,GAAG,IAAI;MAC5B;MACAW,QAAQ,GAAGf,SAAS,CAACD,OAAO,CAACC,SAAS,EAAEK,SAAS,CAAC;MAClDL,SAAS,CAACK,SAAS,GAAGA,SAAS;MAC/B,IAAIU,QAAQ,EAAE;QACZf,SAAS,CAACe,QAAQ,GAAG,IAAI;QACzBf,SAAS,CAACgB,QAAQ,IAAIhB,SAAS,CAACgB,QAAQ,CAAC,IAAI,CAAC,eAAe;MAC/D;IACF;;IACAL,MAAM,CAACF,GAAG,CAAC,GAAGT,SAAS,CAACE,OAAO;IAC/B,OAAOa,QAAQ;EACjB,CAAC,MAAM,IAAI,OAAOf,SAAS,KAAK,QAAQ,EAAE;IACxCW,MAAM,CAACF,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,IAAII,WAAW,GAAG,IAAI;IACtBN,MAAM,CAACC,IAAI,CAACR,SAAS,CAAC,CAACJ,OAAO,CAAEqB,CAAC,IAAK;MACpC,IACE,CAACP,aAAa,CACZV,SAAS,CAACiB,CAAC,CAAC,EACZZ,SAAS,EACTY,CAAC,EACDN,MAAM,CAACF,GAAG,CAAC,EACXG,gBAAgB,CACjB,EACD;QACAC,WAAW,GAAG,KAAK;MACrB;IACF,CAAC,CAAC;IACF,OAAOA,WAAW;EACpB,CAAC,MAAM;IACLF,MAAM,CAACF,GAAG,CAAC,GAAGT,SAAS;IACvB,OAAO,IAAI;EACb;AACF;AAEA,SAASkB,YAAYA,CACnBC,eAA0C,EAC1CC,OAAmD,EACnDC,KAAoB,EACpBC,YAAyC,EACzCV,gBAAsC,EAEhC;EACN,SAAS;;EAAC,IAFVW,eAAe,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAArB,SAAA,GAAAqB,SAAA,MAAG,KAAK;EAGvB,MAAME,UAAU,GAAGL,KAAK,CAACK,UAAU,IAAI,CAAC,CAAC;EACzC,MAAMC,SAAS,GAAGP,OAAO,EAAE,IAAI,CAAC,CAAC;EACjC,MAAMQ,SAAS,GAAGP,KAAK,CAACQ,IAAI;EAC5B,MAAMC,oBAAgC,GAAG,CAAC,CAAC;EAE3C,IAAIC,aAAa,GAAG,KAAK;EACzB,IAAIzC,cAAkC;EACtC,IAAI0C,oBAAoB,GAAG,KAAK;EAChC,KAAK,MAAMvB,GAAG,IAAIkB,SAAS,EAAE;IAC3B,MAAM1B,KAAK,GAAG0B,SAAS,CAAClB,GAAG,CAAC;IAC5B,IAAI5B,UAAU,CAACoB,KAAK,CAAC,EAAE;MACrBX,cAAc,GAAG2C,MAAM,CAACC,gBAAgB,IAAIC,sBAAsB,EAAE;MACpE9C,gBAAgB,CAACC,cAAc,EAAEW,KAAK,EAAEyB,UAAU,CAACjB,GAAG,CAAC,EAAEmB,SAAS,CAACnB,GAAG,CAAC,CAAC;MACxEiB,UAAU,CAACjB,GAAG,CAAC,GAAGR,KAAK;MACvB8B,aAAa,GAAG,IAAI;IACtB,CAAC,MAAM;MACLC,oBAAoB,GAAG,IAAI;MAC3BF,oBAAoB,CAACrB,GAAG,CAAC,GAAGR,KAAK;MACjC,OAAOyB,UAAU,CAACjB,GAAG,CAAC;IACxB;EACF;EAEA,IAAIsB,aAAa,EAAE;IACjB,MAAMK,KAAK,GAAI/B,SAAoB,IAAK;MACtC;MACA,MAAM;QAAEqB,UAAU;QAAEG,IAAI;QAAEQ;MAAqB,CAAC,GAAGhB,KAAK;MACxD,IAAIgB,oBAAoB,EAAE;QACxBhB,KAAK,CAACiB,kBAAkB,GAAG,KAAK;QAChC;MACF;MAEA,MAAMC,OAA2B,GAAG,CAAC,CAAC;MACtC,IAAI1B,WAAW,GAAG,IAAI;MACtB,KAAK,MAAM2B,QAAQ,IAAId,UAAU,EAAE;QACjC,MAAMX,QAAQ,GAAGL,aAAa,CAC5BgB,UAAU,CAACc,QAAQ,CAAC,EACpBnC,SAAS,EACTmC,QAAQ,EACRD,OAAO,EACP3B,gBAAgB,CACjB;QACD,IAAIG,QAAQ,EAAE;UACZc,IAAI,CAACW,QAAQ,CAAC,GAAGD,OAAO,CAACC,QAAQ,CAAC;UAClC,OAAOd,UAAU,CAACc,QAAQ,CAAC;QAC7B,CAAC,MAAM;UACL3B,WAAW,GAAG,KAAK;QACrB;MACF;MAEA,IAAI0B,OAAO,EAAE;QACX/D,WAAW,CAAC2C,eAAe,EAAEoB,OAAO,EAAEjB,YAAY,CAAC;MACrD;MAEA,IAAI,CAACT,WAAW,EAAE;QAChB4B,qBAAqB,CAACL,KAAK,CAAC;MAC9B,CAAC,MAAM;QACLf,KAAK,CAACiB,kBAAkB,GAAG,KAAK;MAClC;IACF,CAAC;IAEDjB,KAAK,CAACK,UAAU,GAAGA,UAAU;IAC7B,IAAI,CAACL,KAAK,CAACiB,kBAAkB,EAAE;MAC7BjB,KAAK,CAACgB,oBAAoB,GAAG,KAAK;MAClChB,KAAK,CAACiB,kBAAkB,GAAG,IAAI;MAC/BF,KAAK,CAAC9C,cAAc,CAAE;IACxB;IAEA,IAAI0C,oBAAoB,EAAE;MACxBxD,WAAW,CAAC2C,eAAe,EAAEW,oBAAoB,EAAER,YAAY,CAAC;IAClE;EACF,CAAC,MAAM;IACLD,KAAK,CAACgB,oBAAoB,GAAG,IAAI;IACjChB,KAAK,CAACK,UAAU,GAAG,EAAE;IAErB,IAAI,CAAC5C,YAAY,CAAC8C,SAAS,EAAED,SAAS,CAAC,EAAE;MACvCnD,WAAW,CAAC2C,eAAe,EAAEQ,SAAS,EAAEL,YAAY,EAAEC,eAAe,CAAC;IACxE;EACF;EACAF,KAAK,CAACQ,IAAI,GAAGF,SAAS;AACxB;AAEA,SAASe,gBAAgBA,CACvBvB,eAA0C,EAC1CC,OAAmD,EACnDC,KAAoB,EACpBC,YAAyC,EACzCV,gBAAsC,EACtC+B,aAAmD,EAE7C;EACN,SAAS;;EAAC,IAFVC,QAAoC,GAAApB,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAArB,SAAA,GAAAqB,SAAA,MAAG,EAAE;EAGzC,MAAME,UAA8B,GAAGL,KAAK,CAACK,UAAU,IAAI,CAAC,CAAC;EAC7D,MAAMC,SAAS,GAAGP,OAAO,EAAE,IAAI,CAAC,CAAC;EACjC,MAAMQ,SAAS,GAAGP,KAAK,CAACQ,IAAI;;EAE5B;EACA,IAAIE,aAAa,GAAG,KAAK;EACzB,IAAIzC,cAAkC;EACtCiB,MAAM,CAACC,IAAI,CAACkB,UAAU,CAAC,CAAC9B,OAAO,CAAEa,GAAG,IAAK;IACvC,MAAMR,KAAK,GAAG0B,SAAS,CAAClB,GAAG,CAAC;IAC5B,IAAI,CAAC5B,UAAU,CAACoB,KAAK,CAAC,EAAE;MACtB,OAAOyB,UAAU,CAACjB,GAAG,CAAC;IACxB;EACF,CAAC,CAAC;EACFF,MAAM,CAACC,IAAI,CAACmB,SAAS,CAAC,CAAC/B,OAAO,CAAEa,GAAG,IAAK;IACtC,MAAMR,KAAK,GAAG0B,SAAS,CAAClB,GAAG,CAAC;IAC5B,IAAI5B,UAAU,CAACoB,KAAK,CAAC,EAAE;MACrBX,cAAc,GAAG2C,MAAM,CAACC,gBAAgB,IAAIC,sBAAsB,EAAE;MACpE9C,gBAAgB,CAACC,cAAc,EAAEW,KAAK,EAAEyB,UAAU,CAACjB,GAAG,CAAC,EAAEmB,SAAS,CAACnB,GAAG,CAAC,CAAC;MACxEiB,UAAU,CAACjB,GAAG,CAAC,GAAGR,KAAK;MACvB8B,aAAa,GAAG,IAAI;IACtB;EACF,CAAC,CAAC;EAEF,SAASK,KAAKA,CAAC/B,SAAoB,EAAE;IACnC;IACA,MAAM;MAAEqB,UAAU;MAAEG,IAAI;MAAEQ;IAAqB,CAAC,GAAGhB,KAAK;IACxD,IAAIgB,oBAAoB,EAAE;MACxBhB,KAAK,CAACiB,kBAAkB,GAAG,KAAK;MAChC;IACF;IAEA,MAAMC,OAA2B,GAAG,CAAC,CAAC;IACtC,IAAI1B,WAAW,GAAG,IAAI;IACtBN,MAAM,CAACC,IAAI,CAACkB,UAAU,CAAC,CAAC9B,OAAO,CAAE4C,QAAQ,IAAK;MAC5C,MAAMzB,QAAQ,GAAGL,aAAa,CAC5BgB,UAAU,CAACc,QAAQ,CAAC,EACpBnC,SAAS,EACTmC,QAAQ,EACRD,OAAO,EACP3B,gBAAgB,CACjB;MACD,IAAIG,QAAQ,EAAE;QACZc,IAAI,CAACW,QAAQ,CAAC,GAAGD,OAAO,CAACC,QAAQ,CAAC;QAClC,OAAOd,UAAU,CAACc,QAAQ,CAAC;MAC7B,CAAC,MAAM;QACL3B,WAAW,GAAG,KAAK;MACrB;IACF,CAAC,CAAC;IAEF,IAAIN,MAAM,CAACC,IAAI,CAAC+B,OAAO,CAAC,CAACd,MAAM,EAAE;MAC/BhD,sBAAsB,CACpB0C,eAAe,EACfoB,OAAO,EACPjB,YAAY,EACZqB,aAAa,EACbC,QAAQ,CACT;IACH;IAEA,IAAI,CAAC/B,WAAW,EAAE;MAChB4B,qBAAqB,CAACL,KAAK,CAAC;IAC9B,CAAC,MAAM;MACLf,KAAK,CAACiB,kBAAkB,GAAG,KAAK;IAClC;EACF;EAEA,IAAIP,aAAa,EAAE;IACjBV,KAAK,CAACK,UAAU,GAAGA,UAAU;IAC7B,IAAI,CAACL,KAAK,CAACiB,kBAAkB,EAAE;MAC7BjB,KAAK,CAACgB,oBAAoB,GAAG,KAAK;MAClChB,KAAK,CAACiB,kBAAkB,GAAG,IAAI;MAC/BF,KAAK,CAAC9C,cAAc,CAAE;IACxB;EACF,CAAC,MAAM;IACL+B,KAAK,CAACgB,oBAAoB,GAAG,IAAI;IACjChB,KAAK,CAACK,UAAU,GAAG,EAAE;EACvB;;EAEA;EACAL,KAAK,CAACQ,IAAI,GAAGF,SAAS;EAEtB,IAAI,CAAC7C,YAAY,CAAC8C,SAAS,EAAED,SAAS,CAAC,EAAE;IACvClD,sBAAsB,CACpB0C,eAAe,EACfQ,SAAS,EACTL,YAAY,EACZqB,aAAa,EACbC,QAAQ,CACT;EACH;AACF;;AAEA;AACA,SAASC,qBAAqBA,CAC5BhD,IAAyC,EACzCiD,UAAmB,EACb;EACN,IAAIpD,KAAK,CAACC,OAAO,CAACE,IAAI,CAAC,EAAE;IACvB;IACA,KAAK,MAAMkD,OAAO,IAAIlD,IAAI,EAAE;MAC1BgD,qBAAqB,CAACE,OAAO,EAAED,UAAU,CAAC;IAC5C;EACF,CAAC,MAAM,IACL,OAAOjD,IAAI,KAAK,QAAQ,IACxBA,IAAI,KAAK,IAAI,IACbA,IAAI,CAACI,KAAK,KAAKE,SAAS,EACxB;IACA;IACA,KAAK,MAAMM,GAAG,IAAIF,MAAM,CAACC,IAAI,CAACX,IAAI,CAAC,EAAE;MACnCgD,qBAAqB,CAAChD,IAAI,CAACY,GAAG,CAAC,EAAEA,GAAG,CAAC;IACvC;EACF,CAAC,MAAM,IACLqC,UAAU,KAAK3C,SAAS,IACxB,OAAON,IAAI,KAAK,QAAQ,IACxBA,IAAI,KAAK,IAAI,IACbA,IAAI,CAACI,KAAK,KAAKE,SAAS,EACxB;IACA;IACA,MAAM,IAAI6C,KAAK,CACZ,0CAAyCF,UAAW,yCAAwC,CAC9F;EACH;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAMA,OAAO,SAASG,gBAAgBA,CAC9B7B,OAAmC,EACnC8B,YAAoC,EACpCN,QAA8C,EAEe;EAAA,IAD7DrB,eAAe,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAArB,SAAA,GAAAqB,SAAA,MAAG,KAAK;EAEvB,MAAM2B,QAAyC,GAAGlE,aAAa,EAAE;EACjE,MAAMmE,mBAAmB,GAAGhF,MAAM,EAAuB;EACzD,IAAIiF,MAAM,GAAG9C,MAAM,CAAC+C,MAAM,CAAClC,OAAO,CAACmC,SAAS,IAAI,CAAC,CAAC,CAAC;EACnD,IAAInE,iBAAiB,EAAE;IAAA,IAAAoE,aAAA;IACrB,IAAI,CAACH,MAAM,CAAC5B,MAAM,KAAA+B,aAAA,GAAIN,YAAY,cAAAM,aAAA,eAAZA,aAAA,CAAc/B,MAAM,EAAE;MAC1C;MACA4B,MAAM,GAAGH,YAAY;IACvB;IACA,IAAIO,OAAO,IAAI,CAACJ,MAAM,CAAC5B,MAAM,IAAI,CAACyB,YAAY,IAAI,CAAC9B,OAAO,CAACsC,aAAa,EAAE;MACxE,MAAM,IAAIV,KAAK,CACZ;AACT,qIAAqI,CAC9H;IACH;EACF;EACA,MAAMW,aAAa,GAAGf,QAAQ,GAC1BlD,KAAK,CAACC,OAAO,CAACiD,QAAQ,CAAC,GACrBA,QAAQ,GACR,CAACA,QAAQ,CAAC,GACZ,EAAE;EACN,MAAMgB,YAAY,GAAGhB,QAAQ,GAAGhE,iBAAiB,CAAC+E,aAAa,CAAC,GAAG,IAAI;EACvE,MAAME,mBAAmB,GAAGlF,cAAc,CAAU,IAAI,CAAC;EACzD,MAAMmF,iBAAiB,GAAG1F,MAAM,CAAQ,CAAC,CAAC,CAAU;;EAEpD;EACA,IAAI,CAAC8E,YAAY,EAAE;IACjBA,YAAY,GAAG,CAAC,GAAGG,MAAM,EAAEjC,OAAO,CAACsC,aAAa,CAAC;EACnD,CAAC,MAAM;IACLR,YAAY,CAACa,IAAI,CAAC3C,OAAO,CAACsC,aAAa,CAAC;EAC1C;EACAE,YAAY,IAAIV,YAAY,CAACa,IAAI,CAACH,YAAY,CAAC;EAE/C,IAAI,CAACR,mBAAmB,CAAClD,OAAO,EAAE;IAChC,MAAM8D,YAAY,GAAGtF,iBAAiB,CAAC0C,OAAO,CAAC;IAC/C,IAAIqC,OAAO,EAAE;MACX1E,sBAAsB,CAACiF,YAAY,CAAC;IACtC;IACAZ,mBAAmB,CAAClD,OAAO,GAAG;MAC5B+D,OAAO,EAAE;QACPhE,KAAK,EAAE+D,YAAY;QACnB5C;MACF,CAAC;MACD8C,WAAW,EAAE7F,aAAa,CAAC;QACzBwD,IAAI,EAAEmC,YAAY;QAClBtC,UAAU,EAAE,CAAC,CAAC;QACdW,oBAAoB,EAAE,KAAK;QAC3BC,kBAAkB,EAAE;MACtB,CAAC,CAAC;MACFnB,eAAe,EAAEnC,sBAAsB;IACzC,CAAC;EACH;EAEA,MAAM;IAAEiF,OAAO;IAAEC,WAAW;IAAE/C;EAAgB,CAAC,GAAGiC,mBAAmB,CAAClD,OAAO;EAC7E,MAAMiE,wBAAwB,GAAGhD,eAAe,CAACgD,wBAAwB;EAEzEjB,YAAY,CAACa,IAAI,CAACI,wBAAwB,CAAC;EAE3ChG,SAAS,CAAC,MAAM;IACd,IAAIiG,GAAG;IACP,IAAIC,SAAS,GAAGjD,OAAO;IACvB,IAAIwB,QAAQ,EAAE;MACZyB,SAAS,GAAIA,CAAA,KAAM;QACjB,SAAS;;QACT,MAAM1C,SAAS,GAAGP,OAAO,EAAE;QAC3BuC,aAAa,CAAC/D,OAAO,CAAE0E,OAAO,IAAK;UACjCA,OAAO,CAAC3C,SAAS,CAAC;QACpB,CAAC,CAAC;QACF,OAAOA,SAAS;MAClB,CAAgC;IAClC;IAEA,IAAIzC,MAAM,EAAE,EAAE;MACZkF,GAAG,GAAGA,CAAA,KAAM;QACV,SAAS;;QACT1B,gBAAgB,CACdyB,wBAAwB,EACxB/C,OAAO,EACP8C,WAAW,EACXf,QAAQ,EACRU,mBAAmB,EACnBC,iBAAiB,EACjBH,aAAa,CACd;MACH,CAAC;IACH,CAAC,MAAM;MACLS,GAAG,GAAGA,CAAA,KAAM;QACV,SAAS;;QACTlD,YAAY,CACViD,wBAAwB,EACxBE,SAAS,EACTH,WAAW,EACXf,QAAQ,EACRU,mBAAmB,EACnBtC,eAAe,CAChB;MACH,CAAC;IACH;IACA,MAAMgD,QAAQ,GAAGjG,WAAW,CAAC8F,GAAG,EAAEf,MAAM,CAAC;IACzC,OAAO,MAAM;MACX9E,UAAU,CAACgG,QAAQ,CAAC;IACtB,CAAC;IACD;EACF,CAAC,EAAErB,YAAY,CAAC;EAEhB/E,SAAS,CAAC,MAAM;IACd0F,mBAAmB,CAAC5D,KAAK,GAAG,IAAI;IAChC,OAAO,MAAM;MACX4D,mBAAmB,CAAC5D,KAAK,GAAG,KAAK;IACnC,CAAC;EACH,CAAC,EAAE,CAAC4D,mBAAmB,CAAC,CAAC;EAEzBhB,qBAAqB,CAACoB,OAAO,CAAChE,KAAK,CAAC;EAEpC,IAAIf,MAAM,EAAE,EAAE;IACZ,OAAO;MAAEiC,eAAe;MAAE8C,OAAO;MAAEd,QAAQ;MAAEW;IAAkB,CAAC;EAClE,CAAC,MAAM;IACL,OAAO;MAAE3C,eAAe;MAAE8C,OAAO;MAAEd;IAAS,CAAC;EAC/C;AACF"}
1
+ {"version":3,"names":["useEffect","useRef","makeShareable","startMapper","stopMapper","updateProps","updatePropsJestWrapper","initialUpdaterRun","useSharedValue","buildWorkletsHash","isAnimated","shallowEqual","validateAnimatedStyles","makeViewDescriptorsSet","useViewRefSet","isJest","shouldBeUseWeb","SHOULD_BE_USE_WEB","prepareAnimation","frameTimestamp","animatedProp","lastAnimation","lastValue","Array","isArray","forEach","prop","index","onFrame","animation","value","current","undefined","callStart","timestamp","onStart","Object","keys","key","runAnimations","result","animationsActive","allFinished","entry","finished","callback","k","styleUpdater","viewDescriptors","updater","state","maybeViewRef","isAnimatedProps","arguments","length","animations","newValues","oldValues","last","nonAnimatedNewValues","hasAnimations","hasNonAnimatedValues","global","__frameTimestamp","_getAnimationTimestamp","frame","isAnimationCancelled","isAnimationRunning","updates","propName","requestAnimationFrame","jestStyleUpdater","animatedStyle","adapters","checkSharedValueUsage","currentKey","element","Error","useAnimatedStyle","dependencies","viewsRef","animatedUpdaterData","inputs","values","__closure","_dependencies","__DEV__","__workletHash","adaptersArray","adaptersHash","areAnimationsActive","jestAnimatedStyle","push","initialStyle","initial","remoteState","shareableViewDescriptors","fun","updaterFn","adapter","mapperId","animatedStyleHandle"],"sources":["useAnimatedStyle.ts"],"sourcesContent":["'use strict';\nimport type { MutableRefObject } from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport { makeShareable, startMapper, stopMapper } from '../core';\nimport updateProps, { updatePropsJestWrapper } from '../UpdateProps';\nimport { initialUpdaterRun } from '../animation';\nimport { useSharedValue } from './useSharedValue';\nimport {\n buildWorkletsHash,\n isAnimated,\n shallowEqual,\n validateAnimatedStyles,\n} from './utils';\nimport type {\n AnimatedStyleHandle,\n DefaultStyle,\n DependencyList,\n Descriptor,\n JestAnimatedStyleHandle,\n} from './commonTypes';\nimport type { ViewDescriptorsSet, ViewRefSet } from '../ViewDescriptorsSet';\nimport { makeViewDescriptorsSet, useViewRefSet } from '../ViewDescriptorsSet';\nimport { isJest, shouldBeUseWeb } from '../PlatformChecker';\nimport type {\n AnimationObject,\n Timestamp,\n NestedObjectValues,\n SharedValue,\n StyleProps,\n __AdapterWorkletFunction,\n __BasicWorkletFunction,\n WorkletFunction,\n} from '../commonTypes';\nimport type { AnimatedStyle } from '../helperTypes';\n\nconst SHOULD_BE_USE_WEB = shouldBeUseWeb();\n\ninterface AnimatedState {\n last: AnimatedStyle<any>;\n animations: AnimatedStyle<any>;\n isAnimationRunning: boolean;\n isAnimationCancelled: boolean;\n}\n\ninterface AnimatedUpdaterData {\n initial: {\n value: AnimatedStyle<any>;\n updater: () => AnimatedStyle<any>;\n };\n remoteState: AnimatedState;\n viewDescriptors: ViewDescriptorsSet;\n}\n\nfunction prepareAnimation(\n frameTimestamp: number,\n animatedProp: AnimatedStyle<any>,\n lastAnimation: AnimatedStyle<any>,\n lastValue: AnimatedStyle<any>\n): void {\n 'worklet';\n if (Array.isArray(animatedProp)) {\n animatedProp.forEach((prop, index) => {\n prepareAnimation(\n frameTimestamp,\n prop,\n lastAnimation && lastAnimation[index],\n lastValue && lastValue[index]\n );\n });\n // return animatedProp;\n }\n if (typeof animatedProp === 'object' && animatedProp.onFrame) {\n const animation = animatedProp;\n\n let value = animation.current;\n if (lastValue !== undefined && lastValue !== null) {\n if (typeof lastValue === 'object') {\n if (lastValue.value !== undefined) {\n // previously it was a shared value\n value = lastValue.value;\n } else if (lastValue.onFrame !== undefined) {\n if (lastAnimation?.current !== undefined) {\n // it was an animation before, copy its state\n value = lastAnimation.current;\n } else if (lastValue?.current !== undefined) {\n // it was initialized\n value = lastValue.current;\n }\n }\n } else {\n // previously it was a plain value, just set it as starting point\n value = lastValue;\n }\n }\n\n animation.callStart = (timestamp: Timestamp) => {\n animation.onStart(animation, value, timestamp, lastAnimation);\n };\n animation.callStart(frameTimestamp);\n animation.callStart = null;\n } else if (typeof animatedProp === 'object') {\n // it is an object\n Object.keys(animatedProp).forEach((key) =>\n prepareAnimation(\n frameTimestamp,\n animatedProp[key],\n lastAnimation && lastAnimation[key],\n lastValue && lastValue[key]\n )\n );\n }\n}\n\nfunction runAnimations(\n animation: AnimatedStyle<any>,\n timestamp: Timestamp,\n key: number | string,\n result: AnimatedStyle<any>,\n animationsActive: SharedValue<boolean>\n): boolean {\n 'worklet';\n if (!animationsActive.value) {\n return true;\n }\n if (Array.isArray(animation)) {\n result[key] = [];\n let allFinished = true;\n animation.forEach((entry, index) => {\n if (\n !runAnimations(entry, timestamp, index, result[key], animationsActive)\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else if (typeof animation === 'object' && animation.onFrame) {\n let finished = true;\n if (!animation.finished) {\n if (animation.callStart) {\n animation.callStart(timestamp);\n animation.callStart = null;\n }\n finished = animation.onFrame(animation, timestamp);\n animation.timestamp = timestamp;\n if (finished) {\n animation.finished = true;\n animation.callback && animation.callback(true /* finished */);\n }\n }\n result[key] = animation.current;\n return finished;\n } else if (typeof animation === 'object') {\n result[key] = {};\n let allFinished = true;\n Object.keys(animation).forEach((k) => {\n if (\n !runAnimations(\n animation[k],\n timestamp,\n k,\n result[key],\n animationsActive\n )\n ) {\n allFinished = false;\n }\n });\n return allFinished;\n } else {\n result[key] = animation;\n return true;\n }\n}\n\nfunction styleUpdater(\n viewDescriptors: SharedValue<Descriptor[]>,\n updater: __BasicWorkletFunction<AnimatedStyle<any>>,\n state: AnimatedState,\n maybeViewRef: ViewRefSet<any> | undefined,\n animationsActive: SharedValue<boolean>,\n isAnimatedProps = false\n): void {\n 'worklet';\n const animations = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n const nonAnimatedNewValues: StyleProps = {};\n\n let hasAnimations = false;\n let frameTimestamp: number | undefined;\n let hasNonAnimatedValues = false;\n for (const key in newValues) {\n const value = newValues[key];\n if (isAnimated(value)) {\n frameTimestamp = global.__frameTimestamp || _getAnimationTimestamp();\n prepareAnimation(frameTimestamp, value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n } else {\n hasNonAnimatedValues = true;\n nonAnimatedNewValues[key] = value;\n delete animations[key];\n }\n }\n\n if (hasAnimations) {\n const frame = (timestamp: Timestamp) => {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const { animations, last, isAnimationCancelled } = state;\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle<any> = {};\n let allFinished = true;\n for (const propName in animations) {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n }\n\n if (updates) {\n updateProps(viewDescriptors, updates, maybeViewRef);\n }\n\n if (!allFinished) {\n requestAnimationFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n };\n\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n frame(frameTimestamp!);\n }\n\n if (hasNonAnimatedValues) {\n updateProps(viewDescriptors, nonAnimatedNewValues, maybeViewRef);\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n\n if (!shallowEqual(oldValues, newValues)) {\n updateProps(viewDescriptors, newValues, maybeViewRef, isAnimatedProps);\n }\n }\n state.last = newValues;\n}\n\nfunction jestStyleUpdater(\n viewDescriptors: SharedValue<Descriptor[]>,\n updater: __BasicWorkletFunction<AnimatedStyle<any>>,\n state: AnimatedState,\n maybeViewRef: ViewRefSet<any> | undefined,\n animationsActive: SharedValue<boolean>,\n animatedStyle: MutableRefObject<AnimatedStyle<any>>,\n adapters: __AdapterWorkletFunction[] = []\n): void {\n 'worklet';\n const animations: AnimatedStyle<any> = state.animations ?? {};\n const newValues = updater() ?? {};\n const oldValues = state.last;\n\n // extract animated props\n let hasAnimations = false;\n let frameTimestamp: number | undefined;\n Object.keys(animations).forEach((key) => {\n const value = newValues[key];\n if (!isAnimated(value)) {\n delete animations[key];\n }\n });\n Object.keys(newValues).forEach((key) => {\n const value = newValues[key];\n if (isAnimated(value)) {\n frameTimestamp = global.__frameTimestamp || _getAnimationTimestamp();\n prepareAnimation(frameTimestamp, value, animations[key], oldValues[key]);\n animations[key] = value;\n hasAnimations = true;\n }\n });\n\n function frame(timestamp: Timestamp) {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const { animations, last, isAnimationCancelled } = state;\n if (isAnimationCancelled) {\n state.isAnimationRunning = false;\n return;\n }\n\n const updates: AnimatedStyle<any> = {};\n let allFinished = true;\n Object.keys(animations).forEach((propName) => {\n const finished = runAnimations(\n animations[propName],\n timestamp,\n propName,\n updates,\n animationsActive\n );\n if (finished) {\n last[propName] = updates[propName];\n delete animations[propName];\n } else {\n allFinished = false;\n }\n });\n\n if (Object.keys(updates).length) {\n updatePropsJestWrapper(\n viewDescriptors,\n updates,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n\n if (!allFinished) {\n requestAnimationFrame(frame);\n } else {\n state.isAnimationRunning = false;\n }\n }\n\n if (hasAnimations) {\n state.animations = animations;\n if (!state.isAnimationRunning) {\n state.isAnimationCancelled = false;\n state.isAnimationRunning = true;\n frame(frameTimestamp!);\n }\n } else {\n state.isAnimationCancelled = true;\n state.animations = [];\n }\n\n // calculate diff\n state.last = newValues;\n\n if (!shallowEqual(oldValues, newValues)) {\n updatePropsJestWrapper(\n viewDescriptors,\n newValues,\n maybeViewRef,\n animatedStyle,\n adapters\n );\n }\n}\n\n// check for invalid usage of shared values in returned object\nfunction checkSharedValueUsage(\n prop: NestedObjectValues<AnimationObject>,\n currentKey?: string\n): void {\n if (Array.isArray(prop)) {\n // if it's an array (i.ex. transform) validate all its elements\n for (const element of prop) {\n checkSharedValueUsage(element, currentKey);\n }\n } else if (\n typeof prop === 'object' &&\n prop !== null &&\n prop.value === undefined\n ) {\n // if it's a nested object, run validation for all its props\n for (const key of Object.keys(prop)) {\n checkSharedValueUsage(prop[key], key);\n }\n } else if (\n currentKey !== undefined &&\n typeof prop === 'object' &&\n prop !== null &&\n prop.value !== undefined\n ) {\n // if shared value is passed insted of its value, throw an error\n throw new Error(\n `[Reanimated] Invalid value passed to \\`${currentKey}\\`, maybe you forgot to use \\`.value\\`?`\n );\n }\n}\n\n/**\n * Lets you create a styles object, similar to StyleSheet styles, which can be animated using shared values.\n *\n * @param updater - A function returning an object with style properties you want to animate.\n * @param dependencies - An optional array of dependencies. Only relevant when using Reanimated without the Babel plugin on the Web.\n * @returns An animated style object which has to be passed to the `style` property of an Animated component you want to animate.\n * @see https://docs.swmansion.com/react-native-reanimated/docs/core/useAnimatedStyle\n */\n// You cannot pass Shared Values to `useAnimatedStyle` directly.\n// @ts-expect-error This overload is required by our API.\nexport function useAnimatedStyle<Style extends DefaultStyle>(\n updater: () => Style,\n dependencies?: DependencyList | null\n): Style;\n\nexport function useAnimatedStyle<Style extends DefaultStyle>(\n updater: WorkletFunction<[], Style>,\n dependencies?: DependencyList | null,\n adapters?: WorkletFunction | WorkletFunction[],\n isAnimatedProps = false\n): AnimatedStyleHandle<Style> | JestAnimatedStyleHandle<Style> {\n const viewsRef: ViewRefSet<unknown> | undefined = useViewRefSet();\n const animatedUpdaterData = useRef<AnimatedUpdaterData>();\n let inputs = Object.values(updater.__closure ?? {});\n if (SHOULD_BE_USE_WEB) {\n if (!inputs.length && dependencies?.length) {\n // let web work without a Babel plugin\n inputs = dependencies;\n }\n if (__DEV__ && !inputs.length && !dependencies && !updater.__workletHash) {\n throw new Error(\n `[Reanimated] \\`useAnimatedStyle\\` was used without a dependency array or Babel plugin. Please explicitly pass a dependency array, or enable the Babel plugin.\nFor more, see the docs: \\`https://docs.swmansion.com/react-native-reanimated/docs/guides/web-support#web-without-the-babel-plugin\\`.`\n );\n }\n }\n const adaptersArray = adapters\n ? Array.isArray(adapters)\n ? adapters\n : [adapters]\n : [];\n const adaptersHash = adapters ? buildWorkletsHash(adaptersArray) : null;\n const areAnimationsActive = useSharedValue<boolean>(true);\n const jestAnimatedStyle = useRef<Style>({} as Style);\n\n // build dependencies\n if (!dependencies) {\n dependencies = [...inputs, updater.__workletHash];\n } else {\n dependencies.push(updater.__workletHash);\n }\n adaptersHash && dependencies.push(adaptersHash);\n\n if (!animatedUpdaterData.current) {\n const initialStyle = initialUpdaterRun(updater);\n if (__DEV__) {\n validateAnimatedStyles(initialStyle);\n }\n animatedUpdaterData.current = {\n initial: {\n value: initialStyle,\n updater,\n },\n remoteState: makeShareable({\n last: initialStyle,\n animations: {},\n isAnimationCancelled: false,\n isAnimationRunning: false,\n }),\n viewDescriptors: makeViewDescriptorsSet(),\n };\n }\n\n const { initial, remoteState, viewDescriptors } = animatedUpdaterData.current;\n const shareableViewDescriptors = viewDescriptors.shareableViewDescriptors;\n\n dependencies.push(shareableViewDescriptors);\n\n useEffect(() => {\n let fun;\n let updaterFn = updater;\n if (adapters) {\n updaterFn = (() => {\n 'worklet';\n const newValues = updater();\n adaptersArray.forEach((adapter) => {\n adapter(newValues);\n });\n return newValues;\n }) as WorkletFunction<[], Style>;\n }\n\n if (isJest()) {\n fun = () => {\n 'worklet';\n jestStyleUpdater(\n shareableViewDescriptors,\n updater,\n remoteState,\n viewsRef,\n areAnimationsActive,\n jestAnimatedStyle,\n adaptersArray\n );\n };\n } else {\n fun = () => {\n 'worklet';\n styleUpdater(\n shareableViewDescriptors,\n updaterFn,\n remoteState,\n viewsRef,\n areAnimationsActive,\n isAnimatedProps\n );\n };\n }\n const mapperId = startMapper(fun, inputs);\n return () => {\n stopMapper(mapperId);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, dependencies);\n\n useEffect(() => {\n areAnimationsActive.value = true;\n return () => {\n areAnimationsActive.value = false;\n };\n }, [areAnimationsActive]);\n\n checkSharedValueUsage(initial.value);\n\n const animatedStyleHandle = useRef<\n AnimatedStyleHandle<Style> | JestAnimatedStyleHandle<Style> | null\n >(null);\n\n if (!animatedStyleHandle.current) {\n animatedStyleHandle.current = isJest()\n ? { viewDescriptors, initial, viewsRef, jestAnimatedStyle }\n : { initial, viewsRef, viewDescriptors };\n }\n\n return animatedStyleHandle.current;\n}\n"],"mappings":"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"}
@@ -111,6 +111,11 @@ function reattachElementToAncestor(child, parent) {
111
111
  };
112
112
  }
113
113
  function findDescendantWithExitingAnimation(node, root) {
114
+ // Node could be something else than HTMLElement, for example TextNode (treated as plain text, not as HTML object),
115
+ // therefore it won't have children prop and calling Array.from(node.children) will cause error.
116
+ if (!(node instanceof HTMLElement)) {
117
+ return;
118
+ }
114
119
  if (node.reanimatedDummy && node.removedAfterAnimation === undefined) {
115
120
  reattachElementToAncestor(node, root);
116
121
  }
@@ -1 +1 @@
1
- {"version":3,"names":["isWindowAvailable","setDummyPosition","snapshots","Animations","PREDEFINED_WEB_ANIMATIONS_ID","CUSTOM_WEB_ANIMATIONS_ID","animationNameToIndex","Map","animationNameList","isObserverSet","configureWebLayoutAnimations","document","getElementById","predefinedAnimationsStyleTag","createElement","id","onload","sheet","console","error","animationName","insertRule","style","customAnimationsStyleTag","head","appendChild","insertWebAnimation","keyframe","styleTag","unshift","set","i","length","nextAnimationName","nextAnimationIndex","get","undefined","Error","removeWebAnimation","_styleTag$sheet","currentAnimationIndex","deleteRule","splice","delete","timeoutScale","frameDurationMs","minimumFrames","scheduleAnimationCleanup","animationDuration","timeoutValue","Math","max","setTimeout","reattachElementToAncestor","child","parent","childSnapshot","removedAfterAnimation","originalOnAnimationEnd","onanimationend","event","removeChild","call","findDescendantWithExitingAnimation","node","root","reanimatedDummy","children","Array","from","checkIfScreenWasChanged","mutationTarget","_mutationTarget$react","_mutationTarget$react2","_mutationTarget$react3","reactFiberKey","key","Object","keys","startsWith","memoizedProps","navigation","addHTMLMutationObserver","observer","MutationObserver","mutationsList","rootMutation","target","removedNodes","observe","body","childList","subtree","areDOMRectsEqual","r1","r2","x","y","width","height"],"sources":["domUtils.ts"],"sourcesContent":["'use strict';\n\nimport type { ReanimatedHTMLElement } from '../../js-reanimated';\nimport { isWindowAvailable } from '../../PlatformChecker';\nimport { setDummyPosition, snapshots } from './componentStyle';\nimport { Animations } from './config';\nimport type { AnimationNames } from './config';\n\nconst PREDEFINED_WEB_ANIMATIONS_ID = 'ReanimatedPredefinedWebAnimationsStyle';\nconst CUSTOM_WEB_ANIMATIONS_ID = 'ReanimatedCustomWebAnimationsStyle';\n\n// Since we cannot remove keyframe from DOM by its name, we have to store its id\nconst animationNameToIndex = new Map<string, number>();\nconst animationNameList: string[] = [];\n\nlet isObserverSet = false;\n\n/**\n * Creates `HTMLStyleElement`, inserts it into DOM and then inserts CSS rules into the stylesheet.\n * If style element already exists, nothing happens.\n */\nexport function configureWebLayoutAnimations() {\n if (\n !isWindowAvailable() || // Without this check SSR crashes because document is undefined (NextExample on CI)\n document.getElementById(PREDEFINED_WEB_ANIMATIONS_ID) !== null\n ) {\n return;\n }\n\n const predefinedAnimationsStyleTag = document.createElement('style');\n predefinedAnimationsStyleTag.id = PREDEFINED_WEB_ANIMATIONS_ID;\n\n predefinedAnimationsStyleTag.onload = () => {\n if (!predefinedAnimationsStyleTag.sheet) {\n console.error(\n '[Reanimated] Failed to create layout animations stylesheet.'\n );\n return;\n }\n\n for (const animationName in Animations) {\n predefinedAnimationsStyleTag.sheet.insertRule(\n Animations[animationName as AnimationNames].style\n );\n }\n };\n\n const customAnimationsStyleTag = document.createElement('style');\n customAnimationsStyleTag.id = CUSTOM_WEB_ANIMATIONS_ID;\n\n document.head.appendChild(predefinedAnimationsStyleTag);\n document.head.appendChild(customAnimationsStyleTag);\n}\n\nexport function insertWebAnimation(animationName: string, keyframe: string) {\n // Without this check SSR crashes because document is undefined (NextExample on CI)\n if (!isWindowAvailable()) {\n return;\n }\n\n const styleTag = document.getElementById(\n CUSTOM_WEB_ANIMATIONS_ID\n ) as HTMLStyleElement;\n\n if (!styleTag.sheet) {\n console.error(\n '[Reanimated] Failed to create layout animations stylesheet.'\n );\n return;\n }\n\n styleTag.sheet.insertRule(keyframe, 0);\n animationNameList.unshift(animationName);\n animationNameToIndex.set(animationName, 0);\n\n for (let i = 1; i < animationNameList.length; ++i) {\n const nextAnimationName = animationNameList[i];\n const nextAnimationIndex = animationNameToIndex.get(nextAnimationName);\n\n if (nextAnimationIndex === undefined) {\n throw new Error('[Reanimated] Failed to obtain animation index.');\n }\n\n animationNameToIndex.set(animationNameList[i], nextAnimationIndex + 1);\n }\n}\n\nfunction removeWebAnimation(animationName: string) {\n // Without this check SSR crashes because document is undefined (NextExample on CI)\n if (!isWindowAvailable()) {\n return;\n }\n\n const styleTag = document.getElementById(\n CUSTOM_WEB_ANIMATIONS_ID\n ) as HTMLStyleElement;\n\n const currentAnimationIndex = animationNameToIndex.get(animationName);\n\n if (currentAnimationIndex === undefined) {\n throw new Error('[Reanimated] Failed to obtain animation index.');\n }\n\n styleTag.sheet?.deleteRule(currentAnimationIndex);\n animationNameList.splice(currentAnimationIndex, 1);\n animationNameToIndex.delete(animationName);\n\n for (let i = currentAnimationIndex; i < animationNameList.length; ++i) {\n const nextAnimationName = animationNameList[i];\n const nextAnimationIndex = animationNameToIndex.get(nextAnimationName);\n\n if (nextAnimationIndex === undefined) {\n throw new Error('[Reanimated] Failed to obtain animation index.');\n }\n\n animationNameToIndex.set(animationNameList[i], nextAnimationIndex - 1);\n }\n}\n\nconst timeoutScale = 1.25; // We use this value to enlarge timeout duration. It can prove useful if animation lags.\nconst frameDurationMs = 16; // Just an approximation.\nconst minimumFrames = 10;\n\nexport function scheduleAnimationCleanup(\n animationName: string,\n animationDuration: number\n) {\n // If duration is very short, we want to keep remove delay to at least 10 frames\n // In our case it is exactly 160/1099 s, which is approximately 0.15s\n const timeoutValue = Math.max(\n animationDuration * timeoutScale * 1000,\n animationDuration + frameDurationMs * minimumFrames\n );\n\n setTimeout(() => removeWebAnimation(animationName), timeoutValue);\n}\n\nfunction reattachElementToAncestor(child: ReanimatedHTMLElement, parent: Node) {\n const childSnapshot = snapshots.get(child);\n\n if (!childSnapshot) {\n console.error('[Reanimated] Failed to obtain snapshot.');\n return;\n }\n\n // We use that so we don't end up in infinite loop\n child.removedAfterAnimation = true;\n parent.appendChild(child);\n\n setDummyPosition(child, childSnapshot);\n\n const originalOnAnimationEnd = child.onanimationend;\n\n child.onanimationend = function (event: AnimationEvent) {\n parent.removeChild(child);\n\n // Given that this function overrides onAnimationEnd, it won't be null\n originalOnAnimationEnd?.call(this, event);\n };\n}\n\nfunction findDescendantWithExitingAnimation(\n node: ReanimatedHTMLElement,\n root: Node\n) {\n if (node.reanimatedDummy && node.removedAfterAnimation === undefined) {\n reattachElementToAncestor(node, root);\n }\n\n const children = Array.from(node.children);\n\n for (let i = 0; i < children.length; ++i) {\n findDescendantWithExitingAnimation(\n children[i] as ReanimatedHTMLElement,\n root\n );\n }\n}\n\ntype FiberNodeKey = `__reactFiber${string}`;\n\ninterface FiberNode {\n memoizedProps?: {\n navigation?: unknown;\n };\n\n child?: FiberNode;\n}\n\ntype WithFiberNode = {\n [key: FiberNodeKey]: FiberNode;\n};\n\ntype MaybeWithFiberNode = Partial<WithFiberNode>;\n\nfunction checkIfScreenWasChanged(\n mutationTarget: ReanimatedHTMLElement & MaybeWithFiberNode\n) {\n let reactFiberKey: FiberNodeKey = '__reactFiber';\n\n for (const key of Object.keys(mutationTarget)) {\n if (key.startsWith('__reactFiber')) {\n reactFiberKey = key as FiberNodeKey;\n break;\n }\n }\n\n return (\n mutationTarget[reactFiberKey]?.child?.memoizedProps?.navigation !==\n undefined\n );\n}\n\nexport function addHTMLMutationObserver() {\n if (isObserverSet || !isWindowAvailable()) {\n return;\n }\n\n isObserverSet = true;\n\n const observer = new MutationObserver((mutationsList) => {\n const rootMutation = mutationsList[mutationsList.length - 1];\n\n if (\n checkIfScreenWasChanged(\n rootMutation.target as ReanimatedHTMLElement & MaybeWithFiberNode\n )\n ) {\n return;\n }\n\n for (let i = 0; i < rootMutation.removedNodes.length; ++i) {\n findDescendantWithExitingAnimation(\n rootMutation.removedNodes[i] as ReanimatedHTMLElement,\n rootMutation.target\n );\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n}\n\nexport function areDOMRectsEqual(r1: DOMRect, r2: DOMRect) {\n // There are 4 more fields, but checking these should suffice\n return (\n r1.x === r2.x &&\n r1.y === r2.y &&\n r1.width === r2.width &&\n r1.height === r2.height\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["isWindowAvailable","setDummyPosition","snapshots","Animations","PREDEFINED_WEB_ANIMATIONS_ID","CUSTOM_WEB_ANIMATIONS_ID","animationNameToIndex","Map","animationNameList","isObserverSet","configureWebLayoutAnimations","document","getElementById","predefinedAnimationsStyleTag","createElement","id","onload","sheet","console","error","animationName","insertRule","style","customAnimationsStyleTag","head","appendChild","insertWebAnimation","keyframe","styleTag","unshift","set","i","length","nextAnimationName","nextAnimationIndex","get","undefined","Error","removeWebAnimation","_styleTag$sheet","currentAnimationIndex","deleteRule","splice","delete","timeoutScale","frameDurationMs","minimumFrames","scheduleAnimationCleanup","animationDuration","timeoutValue","Math","max","setTimeout","reattachElementToAncestor","child","parent","childSnapshot","removedAfterAnimation","originalOnAnimationEnd","onanimationend","event","removeChild","call","findDescendantWithExitingAnimation","node","root","HTMLElement","reanimatedDummy","children","Array","from","checkIfScreenWasChanged","mutationTarget","_mutationTarget$react","_mutationTarget$react2","_mutationTarget$react3","reactFiberKey","key","Object","keys","startsWith","memoizedProps","navigation","addHTMLMutationObserver","observer","MutationObserver","mutationsList","rootMutation","target","removedNodes","observe","body","childList","subtree","areDOMRectsEqual","r1","r2","x","y","width","height"],"sources":["domUtils.ts"],"sourcesContent":["'use strict';\n\nimport type { ReanimatedHTMLElement } from '../../js-reanimated';\nimport { isWindowAvailable } from '../../PlatformChecker';\nimport { setDummyPosition, snapshots } from './componentStyle';\nimport { Animations } from './config';\nimport type { AnimationNames } from './config';\n\nconst PREDEFINED_WEB_ANIMATIONS_ID = 'ReanimatedPredefinedWebAnimationsStyle';\nconst CUSTOM_WEB_ANIMATIONS_ID = 'ReanimatedCustomWebAnimationsStyle';\n\n// Since we cannot remove keyframe from DOM by its name, we have to store its id\nconst animationNameToIndex = new Map<string, number>();\nconst animationNameList: string[] = [];\n\nlet isObserverSet = false;\n\n/**\n * Creates `HTMLStyleElement`, inserts it into DOM and then inserts CSS rules into the stylesheet.\n * If style element already exists, nothing happens.\n */\nexport function configureWebLayoutAnimations() {\n if (\n !isWindowAvailable() || // Without this check SSR crashes because document is undefined (NextExample on CI)\n document.getElementById(PREDEFINED_WEB_ANIMATIONS_ID) !== null\n ) {\n return;\n }\n\n const predefinedAnimationsStyleTag = document.createElement('style');\n predefinedAnimationsStyleTag.id = PREDEFINED_WEB_ANIMATIONS_ID;\n\n predefinedAnimationsStyleTag.onload = () => {\n if (!predefinedAnimationsStyleTag.sheet) {\n console.error(\n '[Reanimated] Failed to create layout animations stylesheet.'\n );\n return;\n }\n\n for (const animationName in Animations) {\n predefinedAnimationsStyleTag.sheet.insertRule(\n Animations[animationName as AnimationNames].style\n );\n }\n };\n\n const customAnimationsStyleTag = document.createElement('style');\n customAnimationsStyleTag.id = CUSTOM_WEB_ANIMATIONS_ID;\n\n document.head.appendChild(predefinedAnimationsStyleTag);\n document.head.appendChild(customAnimationsStyleTag);\n}\n\nexport function insertWebAnimation(animationName: string, keyframe: string) {\n // Without this check SSR crashes because document is undefined (NextExample on CI)\n if (!isWindowAvailable()) {\n return;\n }\n\n const styleTag = document.getElementById(\n CUSTOM_WEB_ANIMATIONS_ID\n ) as HTMLStyleElement;\n\n if (!styleTag.sheet) {\n console.error(\n '[Reanimated] Failed to create layout animations stylesheet.'\n );\n return;\n }\n\n styleTag.sheet.insertRule(keyframe, 0);\n animationNameList.unshift(animationName);\n animationNameToIndex.set(animationName, 0);\n\n for (let i = 1; i < animationNameList.length; ++i) {\n const nextAnimationName = animationNameList[i];\n const nextAnimationIndex = animationNameToIndex.get(nextAnimationName);\n\n if (nextAnimationIndex === undefined) {\n throw new Error('[Reanimated] Failed to obtain animation index.');\n }\n\n animationNameToIndex.set(animationNameList[i], nextAnimationIndex + 1);\n }\n}\n\nfunction removeWebAnimation(animationName: string) {\n // Without this check SSR crashes because document is undefined (NextExample on CI)\n if (!isWindowAvailable()) {\n return;\n }\n\n const styleTag = document.getElementById(\n CUSTOM_WEB_ANIMATIONS_ID\n ) as HTMLStyleElement;\n\n const currentAnimationIndex = animationNameToIndex.get(animationName);\n\n if (currentAnimationIndex === undefined) {\n throw new Error('[Reanimated] Failed to obtain animation index.');\n }\n\n styleTag.sheet?.deleteRule(currentAnimationIndex);\n animationNameList.splice(currentAnimationIndex, 1);\n animationNameToIndex.delete(animationName);\n\n for (let i = currentAnimationIndex; i < animationNameList.length; ++i) {\n const nextAnimationName = animationNameList[i];\n const nextAnimationIndex = animationNameToIndex.get(nextAnimationName);\n\n if (nextAnimationIndex === undefined) {\n throw new Error('[Reanimated] Failed to obtain animation index.');\n }\n\n animationNameToIndex.set(animationNameList[i], nextAnimationIndex - 1);\n }\n}\n\nconst timeoutScale = 1.25; // We use this value to enlarge timeout duration. It can prove useful if animation lags.\nconst frameDurationMs = 16; // Just an approximation.\nconst minimumFrames = 10;\n\nexport function scheduleAnimationCleanup(\n animationName: string,\n animationDuration: number\n) {\n // If duration is very short, we want to keep remove delay to at least 10 frames\n // In our case it is exactly 160/1099 s, which is approximately 0.15s\n const timeoutValue = Math.max(\n animationDuration * timeoutScale * 1000,\n animationDuration + frameDurationMs * minimumFrames\n );\n\n setTimeout(() => removeWebAnimation(animationName), timeoutValue);\n}\n\nfunction reattachElementToAncestor(child: ReanimatedHTMLElement, parent: Node) {\n const childSnapshot = snapshots.get(child);\n\n if (!childSnapshot) {\n console.error('[Reanimated] Failed to obtain snapshot.');\n return;\n }\n\n // We use that so we don't end up in infinite loop\n child.removedAfterAnimation = true;\n parent.appendChild(child);\n\n setDummyPosition(child, childSnapshot);\n\n const originalOnAnimationEnd = child.onanimationend;\n\n child.onanimationend = function (event: AnimationEvent) {\n parent.removeChild(child);\n\n // Given that this function overrides onAnimationEnd, it won't be null\n originalOnAnimationEnd?.call(this, event);\n };\n}\n\nfunction findDescendantWithExitingAnimation(\n node: ReanimatedHTMLElement,\n root: Node\n) {\n // Node could be something else than HTMLElement, for example TextNode (treated as plain text, not as HTML object),\n // therefore it won't have children prop and calling Array.from(node.children) will cause error.\n if (!(node instanceof HTMLElement)) {\n return;\n }\n\n if (node.reanimatedDummy && node.removedAfterAnimation === undefined) {\n reattachElementToAncestor(node, root);\n }\n\n const children = Array.from(node.children);\n\n for (let i = 0; i < children.length; ++i) {\n findDescendantWithExitingAnimation(\n children[i] as ReanimatedHTMLElement,\n root\n );\n }\n}\n\ntype FiberNodeKey = `__reactFiber${string}`;\n\ninterface FiberNode {\n memoizedProps?: {\n navigation?: unknown;\n };\n\n child?: FiberNode;\n}\n\ntype WithFiberNode = {\n [key: FiberNodeKey]: FiberNode;\n};\n\ntype MaybeWithFiberNode = Partial<WithFiberNode>;\n\nfunction checkIfScreenWasChanged(\n mutationTarget: ReanimatedHTMLElement & MaybeWithFiberNode\n) {\n let reactFiberKey: FiberNodeKey = '__reactFiber';\n\n for (const key of Object.keys(mutationTarget)) {\n if (key.startsWith('__reactFiber')) {\n reactFiberKey = key as FiberNodeKey;\n break;\n }\n }\n\n return (\n mutationTarget[reactFiberKey]?.child?.memoizedProps?.navigation !==\n undefined\n );\n}\n\nexport function addHTMLMutationObserver() {\n if (isObserverSet || !isWindowAvailable()) {\n return;\n }\n\n isObserverSet = true;\n\n const observer = new MutationObserver((mutationsList) => {\n const rootMutation = mutationsList[mutationsList.length - 1];\n\n if (\n checkIfScreenWasChanged(\n rootMutation.target as ReanimatedHTMLElement & MaybeWithFiberNode\n )\n ) {\n return;\n }\n\n for (let i = 0; i < rootMutation.removedNodes.length; ++i) {\n findDescendantWithExitingAnimation(\n rootMutation.removedNodes[i] as ReanimatedHTMLElement,\n rootMutation.target\n );\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n}\n\nexport function areDOMRectsEqual(r1: DOMRect, r2: DOMRect) {\n // There are 4 more fields, but checking these should suffice\n return (\n r1.x === r2.x &&\n r1.y === r2.y &&\n r1.width === r2.width &&\n r1.height === r2.height\n );\n}\n"],"mappings":"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"}
@@ -5,5 +5,5 @@
5
5
  * with the version used to build the native part of the library in runtime.
6
6
  * Remember to keep this in sync with the version declared in `package.json`
7
7
  */
8
- export const jsVersion = '3.7.0';
8
+ export const jsVersion = '3.7.2';
9
9
  //# sourceMappingURL=jsVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["jsVersion"],"sources":["jsVersion.ts"],"sourcesContent":["'use strict';\n/**\n * We hardcode the version of Reanimated here in order to compare it\n * with the version used to build the native part of the library in runtime.\n * Remember to keep this in sync with the version declared in `package.json`\n */\nexport const jsVersion = '3.7.0';\n"],"mappings":"AAAA,YAAY;;AACZ;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,SAAS,GAAG,OAAO"}
1
+ {"version":3,"names":["jsVersion"],"sources":["jsVersion.ts"],"sourcesContent":["'use strict';\n/**\n * We hardcode the version of Reanimated here in order to compare it\n * with the version used to build the native part of the library in runtime.\n * Remember to keep this in sync with the version declared in `package.json`\n */\nexport const jsVersion = '3.7.2';\n"],"mappings":"AAAA,YAAY;;AACZ;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,SAAS,GAAG,OAAO"}
@@ -3,4 +3,4 @@
3
3
  * with the version used to build the native part of the library in runtime.
4
4
  * Remember to keep this in sync with the version declared in `package.json`
5
5
  */
6
- export declare const jsVersion = "3.7.0";
6
+ export declare const jsVersion = "3.7.2";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-reanimated",
3
- "version": "3.7.0",
3
+ "version": "3.7.2",
4
4
  "description": "More powerful alternative to Animated library for React Native.",
5
5
  "scripts": {
6
6
  "test": "yarn run format:js && yarn run lint:js && yarn run test:unit",
@@ -67,17 +67,6 @@ function onlyAnimatedStyles(styles: StyleProps[]): StyleProps[] {
67
67
  return styles.filter((style) => style?.viewDescriptors);
68
68
  }
69
69
 
70
- function isSameAnimatedStyle(
71
- style1?: StyleProps,
72
- style2?: StyleProps
73
- ): boolean {
74
- // We cannot use equality check to compare useAnimatedStyle outputs directly.
75
- // Instead, we can compare its viewsRefs.
76
- return style1?.viewsRef === style2?.viewsRef;
77
- }
78
-
79
- const isSameAnimatedProps = isSameAnimatedStyle;
80
-
81
70
  type Options<P> = {
82
71
  setNativeProps: (ref: AnimatedComponentRef, props: P) => void;
83
72
  };
@@ -401,14 +390,12 @@ export function createAnimatedComponent(
401
390
  const hasOneSameStyle =
402
391
  styles.length === 1 &&
403
392
  prevStyles.length === 1 &&
404
- isSameAnimatedStyle(styles[0], prevStyles[0]);
393
+ styles[0] === prevStyles[0];
405
394
 
406
395
  if (!hasOneSameStyle) {
407
396
  // otherwise, remove each style that is not present in new styles
408
397
  for (const prevStyle of prevStyles) {
409
- const isPresent = styles.some((style) =>
410
- isSameAnimatedStyle(style, prevStyle)
411
- );
398
+ const isPresent = styles.some((style) => style === prevStyle);
412
399
  if (!isPresent) {
413
400
  prevStyle.viewDescriptors.remove(viewTag);
414
401
  }
@@ -438,10 +425,7 @@ export function createAnimatedComponent(
438
425
  });
439
426
 
440
427
  // detach old animatedProps
441
- if (
442
- prevAnimatedProps &&
443
- !isSameAnimatedProps(prevAnimatedProps, this.props.animatedProps)
444
- ) {
428
+ if (prevAnimatedProps && prevAnimatedProps !== this.props.animatedProps) {
445
429
  prevAnimatedProps.viewDescriptors!.remove(viewTag as number);
446
430
  }
447
431
 
@@ -1,5 +1,5 @@
1
1
  'use strict';
2
- import { useEffect, useRef } from 'react';
2
+ import { useEffect, useMemo, useRef } from 'react';
3
3
  import { initializeSensor, registerSensor, unregisterSensor } from '../core';
4
4
  import type {
5
5
  SensorConfig,
@@ -94,12 +94,28 @@ export function useAnimatedSensor(
94
94
  sensorType: SensorType,
95
95
  userConfig?: Partial<SensorConfig>
96
96
  ): AnimatedSensor<ValueRotation> | AnimatedSensor<Value3D> {
97
- const config: SensorConfig = {
98
- interval: 'auto',
99
- adjustToInterfaceOrientation: true,
100
- iosReferenceFrame: IOSReferenceFrame.Auto,
101
- ...userConfig,
102
- };
97
+ const userConfigRef = useRef(userConfig);
98
+
99
+ const hasConfigChanged =
100
+ userConfigRef.current?.adjustToInterfaceOrientation !==
101
+ userConfig?.adjustToInterfaceOrientation ||
102
+ userConfigRef.current?.interval !== userConfig?.interval ||
103
+ userConfigRef.current?.iosReferenceFrame !== userConfig?.iosReferenceFrame;
104
+
105
+ if (hasConfigChanged) {
106
+ userConfigRef.current = { ...userConfig };
107
+ }
108
+
109
+ const config: SensorConfig = useMemo(
110
+ () => ({
111
+ interval: 'auto',
112
+ adjustToInterfaceOrientation: true,
113
+ iosReferenceFrame: IOSReferenceFrame.Auto,
114
+ ...userConfigRef.current,
115
+ }),
116
+ [userConfigRef.current]
117
+ );
118
+
103
119
  const ref = useRef<AnimatedSensor<Value3D | ValueRotation>>({
104
120
  sensor: initializeSensor(sensorType, config),
105
121
  unregister: () => {
@@ -110,11 +126,14 @@ export function useAnimatedSensor(
110
126
  });
111
127
 
112
128
  useEffect(() => {
113
- const newConfig = {
114
- ...config,
115
- ...userConfig,
129
+ ref.current = {
130
+ sensor: initializeSensor(sensorType, config),
131
+ unregister: () => {
132
+ // NOOP
133
+ },
134
+ isAvailable: false,
135
+ config,
116
136
  };
117
- ref.current.sensor = initializeSensor(sensorType, newConfig);
118
137
 
119
138
  const sensorData = ref.current.sensor;
120
139
  const adjustToInterfaceOrientation =
@@ -148,7 +167,7 @@ export function useAnimatedSensor(
148
167
  return () => {
149
168
  ref.current.unregister();
150
169
  };
151
- }, [sensorType, userConfig]);
170
+ }, [sensorType, config]);
152
171
 
153
172
  return ref.current as AnimatedSensor<ValueRotation> | AnimatedSensor<Value3D>;
154
173
  }
@@ -74,7 +74,7 @@ function prepareAnimation(
74
74
  const animation = animatedProp;
75
75
 
76
76
  let value = animation.current;
77
- if (lastValue !== undefined) {
77
+ if (lastValue !== undefined && lastValue !== null) {
78
78
  if (typeof lastValue === 'object') {
79
79
  if (lastValue.value !== undefined) {
80
80
  // previously it was a shared value
@@ -531,9 +531,15 @@ For more, see the docs: \`https://docs.swmansion.com/react-native-reanimated/doc
531
531
 
532
532
  checkSharedValueUsage(initial.value);
533
533
 
534
- if (isJest()) {
535
- return { viewDescriptors, initial, viewsRef, jestAnimatedStyle };
536
- } else {
537
- return { viewDescriptors, initial, viewsRef };
534
+ const animatedStyleHandle = useRef<
535
+ AnimatedStyleHandle<Style> | JestAnimatedStyleHandle<Style> | null
536
+ >(null);
537
+
538
+ if (!animatedStyleHandle.current) {
539
+ animatedStyleHandle.current = isJest()
540
+ ? { viewDescriptors, initial, viewsRef, jestAnimatedStyle }
541
+ : { initial, viewsRef, viewDescriptors };
538
542
  }
543
+
544
+ return animatedStyleHandle.current;
539
545
  }
@@ -163,6 +163,12 @@ function findDescendantWithExitingAnimation(
163
163
  node: ReanimatedHTMLElement,
164
164
  root: Node
165
165
  ) {
166
+ // Node could be something else than HTMLElement, for example TextNode (treated as plain text, not as HTML object),
167
+ // therefore it won't have children prop and calling Array.from(node.children) will cause error.
168
+ if (!(node instanceof HTMLElement)) {
169
+ return;
170
+ }
171
+
166
172
  if (node.reanimatedDummy && node.removedAfterAnimation === undefined) {
167
173
  reattachElementToAncestor(node, root);
168
174
  }
@@ -4,4 +4,4 @@
4
4
  * with the version used to build the native part of the library in runtime.
5
5
  * Remember to keep this in sync with the version declared in `package.json`
6
6
  */
7
- export const jsVersion = '3.7.0';
7
+ export const jsVersion = '3.7.2';