react-native-reanimated 3.0.0-rc.4 → 3.0.0-rc.6

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.
Files changed (61) hide show
  1. package/Common/cpp/LayoutAnimations/LayoutAnimationsProxy.cpp +97 -15
  2. package/Common/cpp/LayoutAnimations/LayoutAnimationsProxy.h +32 -8
  3. package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +16 -1
  4. package/Common/cpp/NativeModules/NativeReanimatedModule.h +8 -1
  5. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +17 -0
  6. package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.h +8 -0
  7. package/Common/cpp/ReanimatedRuntime/ReanimatedRuntime.cpp +2 -1
  8. package/Common/cpp/ReanimatedRuntime/ReanimatedRuntime.h +1 -0
  9. package/Common/cpp/Tools/RuntimeDecorator.cpp +2 -1
  10. package/android/CMakeLists.txt +1 -0
  11. package/android/build.gradle +9 -1
  12. package/android/src/fabric/java/com/swmansion/reanimated/NativeProxy.java +16 -25
  13. package/android/src/main/cpp/LayoutAnimations.cpp +42 -50
  14. package/android/src/main/cpp/LayoutAnimations.h +17 -3
  15. package/android/src/main/cpp/NativeProxy.cpp +55 -6
  16. package/android/src/main/java/com/swmansion/reanimated/NodesManager.java +1 -1
  17. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/AnimationsManager.java +208 -223
  18. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/LayoutAnimations.java +7 -5
  19. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/NativeMethodsHolder.java +5 -3
  20. package/android/src/main/java/com/swmansion/reanimated/layoutReanimation/ViewHierarchyObserver.java +1 -1
  21. package/android/src/paper/java/com/swmansion/reanimated/NativeProxy.java +20 -7
  22. package/android/src/reactNativeVersionPatch/nativeHierarchyManager/62/com/swmansion/reanimated/layoutReanimation/ReanimatedNativeHierarchyManager.java +8 -44
  23. package/android/src/reactNativeVersionPatch/nativeHierarchyManager/latest/com/swmansion/reanimated/layoutReanimation/ReanimatedNativeHierarchyManager.java +15 -61
  24. package/ios/LayoutReanimation/REAAnimationsManager.h +18 -8
  25. package/ios/LayoutReanimation/REAAnimationsManager.m +197 -162
  26. package/ios/LayoutReanimation/REAUIManager.mm +63 -70
  27. package/ios/native/NativeProxy.mm +55 -48
  28. package/lib/commonjs/createAnimatedComponent.js +26 -26
  29. package/lib/commonjs/createAnimatedComponent.js.map +1 -1
  30. package/lib/commonjs/reanimated2/NativeReanimated/NativeReanimated.js +4 -0
  31. package/lib/commonjs/reanimated2/NativeReanimated/NativeReanimated.js.map +1 -1
  32. package/lib/commonjs/reanimated2/core.js +9 -9
  33. package/lib/commonjs/reanimated2/core.js.map +1 -1
  34. package/lib/commonjs/reanimated2/globals.d.js.map +1 -1
  35. package/lib/commonjs/reanimated2/jestUtils.js +17 -9
  36. package/lib/commonjs/reanimated2/jestUtils.js.map +1 -1
  37. package/lib/commonjs/reanimated2/layoutReanimation/LayoutAnimationRepository.js +23 -62
  38. package/lib/commonjs/reanimated2/layoutReanimation/LayoutAnimationRepository.js.map +1 -1
  39. package/lib/module/createAnimatedComponent.js +27 -26
  40. package/lib/module/createAnimatedComponent.js.map +1 -1
  41. package/lib/module/reanimated2/NativeReanimated/NativeReanimated.js +4 -0
  42. package/lib/module/reanimated2/NativeReanimated/NativeReanimated.js.map +1 -1
  43. package/lib/module/reanimated2/core.js +7 -9
  44. package/lib/module/reanimated2/core.js.map +1 -1
  45. package/lib/module/reanimated2/globals.d.js.map +1 -1
  46. package/lib/module/reanimated2/jestUtils.js +17 -9
  47. package/lib/module/reanimated2/jestUtils.js.map +1 -1
  48. package/lib/module/reanimated2/layoutReanimation/LayoutAnimationRepository.js +22 -61
  49. package/lib/module/reanimated2/layoutReanimation/LayoutAnimationRepository.js.map +1 -1
  50. package/package.json +2 -2
  51. package/src/createAnimatedComponent.tsx +48 -39
  52. package/src/reanimated2/NativeReanimated/NativeReanimated.ts +15 -0
  53. package/src/reanimated2/core.ts +19 -10
  54. package/src/reanimated2/globals.d.ts +10 -6
  55. package/src/reanimated2/jestUtils.ts +14 -6
  56. package/src/reanimated2/layoutReanimation/LayoutAnimationRepository.ts +24 -50
  57. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Default.js +0 -55
  58. package/lib/commonjs/reanimated2/layoutReanimation/defaultAnimations/Default.js.map +0 -1
  59. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Default.js +0 -40
  60. package/lib/module/reanimated2/layoutReanimation/defaultAnimations/Default.js.map +0 -1
  61. package/src/reanimated2/layoutReanimation/defaultAnimations/Default.ts +0 -49
@@ -201,17 +201,25 @@ exports.advanceAnimationByFrame = advanceAnimationByFrame;
201
201
 
202
202
  const setUpTests = function () {
203
203
  let userConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
204
- let expect;
204
+ let expect = global.expect;
205
205
 
206
- try {
207
- expect = require('expect');
208
- } catch (_) {
209
- // for Jest in version 28+
210
- const {
211
- expect: expectModule
212
- } = require('@jest/globals');
206
+ if (expect === undefined) {
207
+ const expectModule = require('expect');
213
208
 
214
- expect = expectModule;
209
+ expect = expectModule; // Starting from Jest 28, "expect" package uses named exports instead of default export.
210
+ // So, requiring "expect" package doesn't give direct access to "expect" function anymore.
211
+ // It gives access to the module object instead.
212
+ // We use this info to detect if the project uses Jest 28 or higher.
213
+
214
+ if (typeof expect === 'object') {
215
+ const jestGlobals = require('@jest/globals');
216
+
217
+ expect = jestGlobals.expect;
218
+ }
219
+
220
+ if (expect === undefined || expect.extend === undefined) {
221
+ expect = expectModule.default;
222
+ }
215
223
  }
216
224
 
217
225
  require('setimmediate');
@@ -1 +1 @@
1
- {"version":3,"names":["config","fps","isAnimatedStyle","style","animatedStyle","getAnimatedStyleFromObject","current","value","getCurrentStyle","received","styleObject","props","currentStyle","Array","isArray","forEach","checkEqual","expectStyle","length","i","property","findStyleDiff","expect","requireAllMatch","diffs","isEqual","push","Object","keys","undefined","compareStyle","expectedStyle","message","pass","exact","currentStyleStr","JSON","stringify","expectedStyleStr","differences","map","diff","join","frameTime","requestAnimationFrameCopy","currentTimestamp","requestAnimationFrame","callback","setTimeout","beforeTest","jestResetJsReanimatedModule","global","ReanimatedDataMock","now","jest","useFakeTimers","afterTest","useRealTimers","tickTravel","advanceTimersByTime","withReanimatedTimer","animationTest","advanceAnimationByTime","time","Math","ceil","advanceAnimationByFrame","count","setUpTests","userConfig","require","_","expectModule","round","extend","toHaveAnimatedStyle","getAnimatedStyle"],"sources":["jestUtils.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { jestResetJsReanimatedModule } from './core';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace jest {\n interface Matchers<R> {\n toHaveAnimatedStyle(\n style: Record<string, unknown>[] | Record<string, unknown>\n ): R;\n }\n }\n}\n\nlet config = {\n fps: 60,\n};\n\nconst isAnimatedStyle = (style) => {\n return !!style.animatedStyle;\n};\n\nconst getAnimatedStyleFromObject = (style) => {\n return style.animatedStyle.current.value;\n};\n\nconst getCurrentStyle = (received) => {\n const styleObject = received.props.style;\n let currentStyle = {};\n if (Array.isArray(styleObject)) {\n received.props.style.forEach((style) => {\n if (isAnimatedStyle(style)) {\n currentStyle = {\n ...currentStyle,\n ...getAnimatedStyleFromObject(style),\n };\n } else {\n currentStyle = {\n ...currentStyle,\n ...style,\n };\n }\n });\n } else {\n if (isAnimatedStyle(styleObject)) {\n currentStyle = getAnimatedStyleFromObject(styleObject);\n } else {\n currentStyle = {\n ...styleObject,\n ...received.props.animatedStyle.value,\n };\n }\n }\n return currentStyle;\n};\n\nconst checkEqual = (currentStyle, expectStyle) => {\n if (Array.isArray(expectStyle)) {\n if (expectStyle.length !== currentStyle.length) return false;\n for (let i = 0; i < currentStyle.length; i++) {\n if (!checkEqual(currentStyle[i], expectStyle[i])) {\n return false;\n }\n }\n } else if (typeof currentStyle === 'object' && currentStyle) {\n for (const property in expectStyle) {\n if (!checkEqual(currentStyle[property], expectStyle[property])) {\n return false;\n }\n }\n } else {\n return currentStyle === expectStyle;\n }\n return true;\n};\n\nconst findStyleDiff = (current, expect, requireAllMatch) => {\n const diffs = [];\n let isEqual = true;\n for (const property in expect) {\n if (!checkEqual(current[property], expect[property])) {\n isEqual = false;\n diffs.push({\n property: property,\n current: current[property],\n expect: expect[property],\n });\n }\n }\n\n if (\n requireAllMatch &&\n Object.keys(current).length !== Object.keys(expect).length\n ) {\n isEqual = false;\n for (const property in current) {\n if (expect[property] === undefined) {\n diffs.push({\n property: property,\n current: current[property],\n expect: expect[property],\n });\n }\n }\n }\n\n return { isEqual, diffs };\n};\n\nconst compareStyle = (received, expectedStyle, config) => {\n if (!received.props.style) {\n return { message: () => message, pass: false };\n }\n const { exact } = config;\n const currentStyle = getCurrentStyle(received);\n const { isEqual, diffs } = findStyleDiff(currentStyle, expectedStyle, exact);\n\n if (isEqual) {\n return { message: () => 'ok', pass: true };\n }\n\n const currentStyleStr = JSON.stringify(currentStyle);\n const expectedStyleStr = JSON.stringify(expectedStyle);\n const differences = diffs\n .map(\n (diff) =>\n `- '${diff.property}' should be ${JSON.stringify(\n diff.expect\n )}, but is ${JSON.stringify(diff.current)}`\n )\n .join('\\n');\n\n return {\n message: () =>\n `Expected: ${expectedStyleStr}\\nReceived: ${currentStyleStr}\\n\\nDifferences:\\n${differences}`,\n pass: false,\n };\n};\n\nlet frameTime = 1000 / config.fps;\nlet requestAnimationFrameCopy;\nlet currentTimestamp = 0;\n\nconst requestAnimationFrame = (callback) => {\n setTimeout(callback, frameTime);\n};\n\nconst beforeTest = () => {\n jestResetJsReanimatedModule();\n requestAnimationFrameCopy = global.requestAnimationFrame;\n global.requestAnimationFrame = requestAnimationFrame;\n global.ReanimatedDataMock = {\n now: () => currentTimestamp,\n };\n currentTimestamp = 0;\n jest.useFakeTimers();\n};\n\nconst afterTest = () => {\n jest.useRealTimers();\n global.requestAnimationFrame = requestAnimationFrameCopy;\n};\n\nconst tickTravel = () => {\n currentTimestamp += frameTime;\n jest.advanceTimersByTime(frameTime);\n};\n\nexport const withReanimatedTimer = (animationTest) => {\n beforeTest();\n animationTest();\n afterTest();\n};\n\nexport const advanceAnimationByTime = (time = frameTime) => {\n for (let i = 0; i <= Math.ceil(time / frameTime); i++) {\n tickTravel();\n }\n jest.advanceTimersByTime(frameTime);\n};\n\nexport const advanceAnimationByFrame = (count) => {\n for (let i = 0; i <= count; i++) {\n tickTravel();\n }\n jest.advanceTimersByTime(frameTime);\n};\n\nexport const setUpTests = (userConfig = {}) => {\n let expect;\n try {\n expect = require('expect');\n } catch (_) {\n // for Jest in version 28+\n const { expect: expectModule } = require('@jest/globals');\n expect = expectModule;\n }\n\n require('setimmediate');\n frameTime = Math.round(1000 / config.fps);\n\n config = {\n ...config,\n ...userConfig,\n };\n\n expect.extend({\n toHaveAnimatedStyle(received, expectedStyle, config = {}) {\n return compareStyle(received, expectedStyle, config);\n },\n });\n};\n\nexport const getAnimatedStyle = (received) => {\n return getCurrentStyle(received);\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["config","fps","isAnimatedStyle","style","animatedStyle","getAnimatedStyleFromObject","current","value","getCurrentStyle","received","styleObject","props","currentStyle","Array","isArray","forEach","checkEqual","expectStyle","length","i","property","findStyleDiff","expect","requireAllMatch","diffs","isEqual","push","Object","keys","undefined","compareStyle","expectedStyle","message","pass","exact","currentStyleStr","JSON","stringify","expectedStyleStr","differences","map","diff","join","frameTime","requestAnimationFrameCopy","currentTimestamp","requestAnimationFrame","callback","setTimeout","beforeTest","jestResetJsReanimatedModule","global","ReanimatedDataMock","now","jest","useFakeTimers","afterTest","useRealTimers","tickTravel","advanceTimersByTime","withReanimatedTimer","animationTest","advanceAnimationByTime","time","Math","ceil","advanceAnimationByFrame","count","setUpTests","userConfig","expectModule","require","jestGlobals","extend","default","round","toHaveAnimatedStyle","getAnimatedStyle"],"sources":["jestUtils.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { jestResetJsReanimatedModule } from './core';\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace jest {\n interface Matchers<R> {\n toHaveAnimatedStyle(\n style: Record<string, unknown>[] | Record<string, unknown>\n ): R;\n }\n }\n}\n\nlet config = {\n fps: 60,\n};\n\nconst isAnimatedStyle = (style) => {\n return !!style.animatedStyle;\n};\n\nconst getAnimatedStyleFromObject = (style) => {\n return style.animatedStyle.current.value;\n};\n\nconst getCurrentStyle = (received) => {\n const styleObject = received.props.style;\n let currentStyle = {};\n if (Array.isArray(styleObject)) {\n received.props.style.forEach((style) => {\n if (isAnimatedStyle(style)) {\n currentStyle = {\n ...currentStyle,\n ...getAnimatedStyleFromObject(style),\n };\n } else {\n currentStyle = {\n ...currentStyle,\n ...style,\n };\n }\n });\n } else {\n if (isAnimatedStyle(styleObject)) {\n currentStyle = getAnimatedStyleFromObject(styleObject);\n } else {\n currentStyle = {\n ...styleObject,\n ...received.props.animatedStyle.value,\n };\n }\n }\n return currentStyle;\n};\n\nconst checkEqual = (currentStyle, expectStyle) => {\n if (Array.isArray(expectStyle)) {\n if (expectStyle.length !== currentStyle.length) return false;\n for (let i = 0; i < currentStyle.length; i++) {\n if (!checkEqual(currentStyle[i], expectStyle[i])) {\n return false;\n }\n }\n } else if (typeof currentStyle === 'object' && currentStyle) {\n for (const property in expectStyle) {\n if (!checkEqual(currentStyle[property], expectStyle[property])) {\n return false;\n }\n }\n } else {\n return currentStyle === expectStyle;\n }\n return true;\n};\n\nconst findStyleDiff = (current, expect, requireAllMatch) => {\n const diffs = [];\n let isEqual = true;\n for (const property in expect) {\n if (!checkEqual(current[property], expect[property])) {\n isEqual = false;\n diffs.push({\n property: property,\n current: current[property],\n expect: expect[property],\n });\n }\n }\n\n if (\n requireAllMatch &&\n Object.keys(current).length !== Object.keys(expect).length\n ) {\n isEqual = false;\n for (const property in current) {\n if (expect[property] === undefined) {\n diffs.push({\n property: property,\n current: current[property],\n expect: expect[property],\n });\n }\n }\n }\n\n return { isEqual, diffs };\n};\n\nconst compareStyle = (received, expectedStyle, config) => {\n if (!received.props.style) {\n return { message: () => message, pass: false };\n }\n const { exact } = config;\n const currentStyle = getCurrentStyle(received);\n const { isEqual, diffs } = findStyleDiff(currentStyle, expectedStyle, exact);\n\n if (isEqual) {\n return { message: () => 'ok', pass: true };\n }\n\n const currentStyleStr = JSON.stringify(currentStyle);\n const expectedStyleStr = JSON.stringify(expectedStyle);\n const differences = diffs\n .map(\n (diff) =>\n `- '${diff.property}' should be ${JSON.stringify(\n diff.expect\n )}, but is ${JSON.stringify(diff.current)}`\n )\n .join('\\n');\n\n return {\n message: () =>\n `Expected: ${expectedStyleStr}\\nReceived: ${currentStyleStr}\\n\\nDifferences:\\n${differences}`,\n pass: false,\n };\n};\n\nlet frameTime = 1000 / config.fps;\nlet requestAnimationFrameCopy;\nlet currentTimestamp = 0;\n\nconst requestAnimationFrame = (callback) => {\n setTimeout(callback, frameTime);\n};\n\nconst beforeTest = () => {\n jestResetJsReanimatedModule();\n requestAnimationFrameCopy = global.requestAnimationFrame;\n global.requestAnimationFrame = requestAnimationFrame;\n global.ReanimatedDataMock = {\n now: () => currentTimestamp,\n };\n currentTimestamp = 0;\n jest.useFakeTimers();\n};\n\nconst afterTest = () => {\n jest.useRealTimers();\n global.requestAnimationFrame = requestAnimationFrameCopy;\n};\n\nconst tickTravel = () => {\n currentTimestamp += frameTime;\n jest.advanceTimersByTime(frameTime);\n};\n\nexport const withReanimatedTimer = (animationTest) => {\n beforeTest();\n animationTest();\n afterTest();\n};\n\nexport const advanceAnimationByTime = (time = frameTime) => {\n for (let i = 0; i <= Math.ceil(time / frameTime); i++) {\n tickTravel();\n }\n jest.advanceTimersByTime(frameTime);\n};\n\nexport const advanceAnimationByFrame = (count) => {\n for (let i = 0; i <= count; i++) {\n tickTravel();\n }\n jest.advanceTimersByTime(frameTime);\n};\n\nexport const setUpTests = (userConfig = {}) => {\n let expect = global.expect;\n if (expect === undefined) {\n const expectModule = require('expect');\n expect = expectModule;\n // Starting from Jest 28, \"expect\" package uses named exports instead of default export.\n // So, requiring \"expect\" package doesn't give direct access to \"expect\" function anymore.\n // It gives access to the module object instead.\n // We use this info to detect if the project uses Jest 28 or higher.\n if (typeof expect === 'object') {\n const jestGlobals = require('@jest/globals');\n expect = jestGlobals.expect;\n }\n if (expect === undefined || expect.extend === undefined) {\n expect = expectModule.default;\n }\n }\n\n require('setimmediate');\n frameTime = Math.round(1000 / config.fps);\n\n config = {\n ...config,\n ...userConfig,\n };\n\n expect.extend({\n toHaveAnimatedStyle(received, expectedStyle, config = {}) {\n return compareStyle(received, expectedStyle, config);\n },\n });\n};\n\nexport const getAnimatedStyle = (received) => {\n return getCurrentStyle(received);\n};\n"],"mappings":"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"}
@@ -4,92 +4,53 @@ var _core = require("../core");
4
4
 
5
5
  var _styleAnimation = require("../animation/styleAnimation");
6
6
 
7
- var _UpdateProps = require("../UpdateProps");
8
-
9
- var _Colors = require("../Colors");
7
+ var _reactNative = require("react-native");
10
8
 
11
9
  /* global _stopObservingProgress, _startObservingProgress */
10
+ _reactNative.LogBox.ignoreLogs(['Overriding previous layout animation with']);
11
+
12
12
  (0, _core.runOnUI)(() => {
13
13
  'worklet';
14
14
 
15
- const configs = Object.create(null);
16
15
  const enteringAnimationForTag = {};
17
16
  global.LayoutAnimationRepository = {
18
- configs,
19
-
20
- registerConfig(tag, config) {
21
- configs[tag] = config;
22
- enteringAnimationForTag[tag] = null;
23
- },
24
-
25
- removeConfig(tag) {
26
- delete configs[tag];
27
- delete enteringAnimationForTag[tag];
28
- },
29
-
30
- startAnimationForTag(tag, type, yogaValues) {
31
- if (configs[tag] == null) {
32
- return; // :(
33
- }
34
-
35
- const style = configs[tag][type](yogaValues);
17
+ startAnimationForTag(tag, type, yogaValues, config, viewSharedValue) {
18
+ const style = config(yogaValues);
36
19
  let currentAnimation = style.animations;
37
20
 
38
21
  if (type === 'entering') {
39
- enteringAnimationForTag[tag] = style;
40
- } else if (type === 'layout' && enteringAnimationForTag[tag] !== null) {
41
- const entryAniamtion = enteringAnimationForTag[tag].animations;
42
- const layoutAnimation = style.animations;
43
- currentAnimation = {};
44
-
45
- for (const key in entryAniamtion) {
46
- currentAnimation[key] = entryAniamtion[key];
47
- }
48
-
49
- for (const key in layoutAnimation) {
50
- currentAnimation[key] = layoutAnimation[key];
51
- }
52
- }
53
-
54
- const sv = configs[tag].sv;
55
-
56
- _stopObservingProgress(tag, false);
57
-
58
- _startObservingProgress(tag, sv);
59
-
60
- const backupColor = {};
61
-
62
- for (const key in style.initialValues) {
63
- if (_UpdateProps.ColorProperties.includes(key)) {
64
- const value = style.initialValues[key];
65
- backupColor[key] = value;
66
- style.initialValues[key] = (0, _Colors.processColor)(value);
22
+ enteringAnimationForTag[tag] = currentAnimation;
23
+ } else if (type === 'layout') {
24
+ // When layout animation is requested, but entering is still running, we merge
25
+ // new layout animation targets into the ongoing animation
26
+ const enteringAnimation = enteringAnimationForTag[tag];
27
+
28
+ if (enteringAnimation) {
29
+ currentAnimation = { ...enteringAnimation,
30
+ ...style.animations
31
+ };
67
32
  }
68
33
  }
69
34
 
70
- sv.value = Object.assign({}, sv._value, style.initialValues);
71
-
72
- _stopObservingProgress(tag, false);
35
+ _stopObservingProgress(tag, false, false);
73
36
 
37
+ viewSharedValue._value = Object.assign({}, viewSharedValue._value, style.initialValues);
74
38
  const animation = (0, _styleAnimation.withStyleAnimation)(currentAnimation);
75
39
 
76
40
  animation.callback = finished => {
77
41
  if (finished) {
78
- _stopObservingProgress(tag, finished);
42
+ delete enteringAnimationForTag[tag];
43
+ const shouldRemoveView = type === 'exiting';
44
+
45
+ _stopObservingProgress(tag, finished, shouldRemoveView);
79
46
  }
80
47
 
81
48
  style.callback && style.callback(finished);
82
49
  };
83
50
 
84
- if (backupColor) {
85
- configs[tag].sv._value = { ...configs[tag].sv.value,
86
- ...backupColor
87
- };
88
- }
89
-
90
- configs[tag].sv.value = animation;
51
+ viewSharedValue.value = animation;
91
52
 
92
- _startObservingProgress(tag, sv);
53
+ _startObservingProgress(tag, viewSharedValue, type);
93
54
  }
94
55
 
95
56
  };
@@ -1 +1 @@
1
- {"version":3,"names":["runOnUI","configs","Object","create","enteringAnimationForTag","global","LayoutAnimationRepository","registerConfig","tag","config","removeConfig","startAnimationForTag","type","yogaValues","style","currentAnimation","animations","entryAniamtion","layoutAnimation","key","sv","_stopObservingProgress","_startObservingProgress","backupColor","initialValues","ColorProperties","includes","value","processColor","assign","_value","animation","withStyleAnimation","callback","finished"],"sources":["LayoutAnimationRepository.ts"],"sourcesContent":["/* global _stopObservingProgress, _startObservingProgress */\nimport { runOnUI } from '../core';\nimport { withStyleAnimation } from '../animation/styleAnimation';\nimport { ColorProperties } from '../UpdateProps';\nimport { processColor } from '../Colors';\n\nrunOnUI(() => {\n 'worklet';\n\n const configs: Record<string, any> = Object.create(null);\n const enteringAnimationForTag: Record<string, any> = {};\n\n global.LayoutAnimationRepository = {\n configs,\n registerConfig(tag, config) {\n configs[tag] = config;\n enteringAnimationForTag[tag] = null;\n },\n removeConfig(tag) {\n delete configs[tag];\n delete enteringAnimationForTag[tag];\n },\n startAnimationForTag(tag, type, yogaValues) {\n if (configs[tag] == null) {\n return; // :(\n }\n const style = configs[tag][type](yogaValues);\n let currentAnimation = style.animations;\n if (type === 'entering') {\n enteringAnimationForTag[tag] = style;\n } else if (type === 'layout' && enteringAnimationForTag[tag] !== null) {\n const entryAniamtion = enteringAnimationForTag[tag].animations;\n const layoutAnimation = style.animations;\n currentAnimation = {};\n for (const key in entryAniamtion) {\n currentAnimation[key] = entryAniamtion[key];\n }\n for (const key in layoutAnimation) {\n currentAnimation[key] = layoutAnimation[key];\n }\n }\n\n const sv: { value: boolean; _value: boolean } = configs[tag].sv;\n _stopObservingProgress(tag, false);\n _startObservingProgress(tag, sv);\n\n const backupColor: Record<string, string> = {};\n for (const key in style.initialValues) {\n if (ColorProperties.includes(key)) {\n const value = style.initialValues[key];\n backupColor[key] = value;\n style.initialValues[key] = processColor(value);\n }\n }\n\n sv.value = Object.assign({}, sv._value, style.initialValues);\n _stopObservingProgress(tag, false);\n const animation = withStyleAnimation(currentAnimation);\n\n animation.callback = (finished?: boolean) => {\n if (finished) {\n _stopObservingProgress(tag, finished);\n }\n style.callback && style.callback(finished);\n };\n\n if (backupColor) {\n configs[tag].sv._value = { ...configs[tag].sv.value, ...backupColor };\n }\n\n configs[tag].sv.value = animation;\n _startObservingProgress(tag, sv);\n },\n };\n})();\n"],"mappings":"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"}
1
+ {"version":3,"names":["LogBox","ignoreLogs","runOnUI","enteringAnimationForTag","global","LayoutAnimationRepository","startAnimationForTag","tag","type","yogaValues","config","viewSharedValue","style","currentAnimation","animations","enteringAnimation","_stopObservingProgress","_value","Object","assign","initialValues","animation","withStyleAnimation","callback","finished","shouldRemoveView","value","_startObservingProgress"],"sources":["LayoutAnimationRepository.ts"],"sourcesContent":["/* global _stopObservingProgress, _startObservingProgress */\nimport { runOnUI } from '../core';\nimport { withStyleAnimation } from '../animation/styleAnimation';\nimport { LogBox } from 'react-native';\n\nLogBox.ignoreLogs(['Overriding previous layout animation with']);\n\nrunOnUI(() => {\n 'worklet';\n\n const enteringAnimationForTag: Record<string, any> = {};\n\n global.LayoutAnimationRepository = {\n startAnimationForTag(tag, type, yogaValues, config, viewSharedValue) {\n const style = config(yogaValues);\n let currentAnimation = style.animations;\n\n if (type === 'entering') {\n enteringAnimationForTag[tag] = currentAnimation;\n } else if (type === 'layout') {\n // When layout animation is requested, but entering is still running, we merge\n // new layout animation targets into the ongoing animation\n const enteringAnimation = enteringAnimationForTag[tag];\n if (enteringAnimation) {\n currentAnimation = { ...enteringAnimation, ...style.animations };\n }\n }\n _stopObservingProgress(tag, false, false);\n viewSharedValue._value = Object.assign(\n {},\n viewSharedValue._value,\n style.initialValues\n );\n const animation = withStyleAnimation(currentAnimation);\n\n animation.callback = (finished?: boolean) => {\n if (finished) {\n delete enteringAnimationForTag[tag];\n const shouldRemoveView = type === 'exiting';\n _stopObservingProgress(tag, finished, shouldRemoveView);\n }\n style.callback && style.callback(finished);\n };\n\n viewSharedValue.value = animation;\n _startObservingProgress(tag, viewSharedValue, type);\n },\n };\n})();\n"],"mappings":";;AACA;;AACA;;AACA;;AAHA;AAKAA,mBAAA,CAAOC,UAAP,CAAkB,CAAC,2CAAD,CAAlB;;AAEA,IAAAC,aAAA,EAAQ,MAAM;EACZ;;EAEA,MAAMC,uBAA4C,GAAG,EAArD;EAEAC,MAAM,CAACC,yBAAP,GAAmC;IACjCC,oBAAoB,CAACC,GAAD,EAAMC,IAAN,EAAYC,UAAZ,EAAwBC,MAAxB,EAAgCC,eAAhC,EAAiD;MACnE,MAAMC,KAAK,GAAGF,MAAM,CAACD,UAAD,CAApB;MACA,IAAII,gBAAgB,GAAGD,KAAK,CAACE,UAA7B;;MAEA,IAAIN,IAAI,KAAK,UAAb,EAAyB;QACvBL,uBAAuB,CAACI,GAAD,CAAvB,GAA+BM,gBAA/B;MACD,CAFD,MAEO,IAAIL,IAAI,KAAK,QAAb,EAAuB;QAC5B;QACA;QACA,MAAMO,iBAAiB,GAAGZ,uBAAuB,CAACI,GAAD,CAAjD;;QACA,IAAIQ,iBAAJ,EAAuB;UACrBF,gBAAgB,GAAG,EAAE,GAAGE,iBAAL;YAAwB,GAAGH,KAAK,CAACE;UAAjC,CAAnB;QACD;MACF;;MACDE,sBAAsB,CAACT,GAAD,EAAM,KAAN,EAAa,KAAb,CAAtB;;MACAI,eAAe,CAACM,MAAhB,GAAyBC,MAAM,CAACC,MAAP,CACvB,EADuB,EAEvBR,eAAe,CAACM,MAFO,EAGvBL,KAAK,CAACQ,aAHiB,CAAzB;MAKA,MAAMC,SAAS,GAAG,IAAAC,kCAAA,EAAmBT,gBAAnB,CAAlB;;MAEAQ,SAAS,CAACE,QAAV,GAAsBC,QAAD,IAAwB;QAC3C,IAAIA,QAAJ,EAAc;UACZ,OAAOrB,uBAAuB,CAACI,GAAD,CAA9B;UACA,MAAMkB,gBAAgB,GAAGjB,IAAI,KAAK,SAAlC;;UACAQ,sBAAsB,CAACT,GAAD,EAAMiB,QAAN,EAAgBC,gBAAhB,CAAtB;QACD;;QACDb,KAAK,CAACW,QAAN,IAAkBX,KAAK,CAACW,QAAN,CAAeC,QAAf,CAAlB;MACD,CAPD;;MASAb,eAAe,CAACe,KAAhB,GAAwBL,SAAxB;;MACAM,uBAAuB,CAACpB,GAAD,EAAMI,eAAN,EAAuBH,IAAvB,CAAvB;IACD;;EAlCgC,CAAnC;AAoCD,CAzCD"}
@@ -10,8 +10,7 @@ import './reanimated2/layoutReanimation/LayoutAnimationRepository';
10
10
  import invariant from 'invariant';
11
11
  import { adaptViewConfig } from './ConfigHelper';
12
12
  import { RNRenderer } from './reanimated2/platform-specific/RNRenderer';
13
- import { makeMutable, runOnUI, enableLayoutAnimations } from './reanimated2/core';
14
- import { DefaultEntering, DefaultExiting, DefaultLayout } from './reanimated2/layoutReanimation/defaultAnimations/Default';
13
+ import { makeMutable, configureLayoutAnimations, enableLayoutAnimations, runOnUI } from './reanimated2/core';
15
14
  import { isJest, isChromeDebugger, shouldBeUseWeb } from './reanimated2/PlatformChecker';
16
15
  import { initialUpdaterRun } from './reanimated2/animation';
17
16
  import { getShadowNodeWrapperFromRef } from './reanimated2/fabricUtils';
@@ -20,6 +19,16 @@ function dummyListener() {// empty listener we use to assign to listener propert
20
19
  // event is used.
21
20
  }
22
21
 
22
+ function maybeBuild(layoutAnimationOrBuilder) {
23
+ const isAnimationBuilder = value => 'build' in layoutAnimationOrBuilder && typeof layoutAnimationOrBuilder.build === 'function';
24
+
25
+ if (isAnimationBuilder(layoutAnimationOrBuilder)) {
26
+ return layoutAnimationOrBuilder.build();
27
+ } else {
28
+ return layoutAnimationOrBuilder;
29
+ }
30
+ }
31
+
23
32
  function flattenArray(array) {
24
33
  if (!Array.isArray(array)) {
25
34
  return [array];
@@ -96,36 +105,28 @@ export default function createAnimatedComponent(Component, options) {
96
105
  setLocalRef: ref => {
97
106
  // TODO update config
98
107
  const tag = findNodeHandle(ref);
99
-
100
- if (!shouldBeUseWeb() && (this.props.layout || this.props.entering || this.props.exiting) && tag != null) {
101
- enableLayoutAnimations(true, false);
102
- let layout = this.props.layout ? this.props.layout : DefaultLayout;
103
- let entering = this.props.entering ? this.props.entering : DefaultEntering;
104
- let exiting = this.props.exiting ? this.props.exiting : DefaultExiting;
105
-
106
- if (has('build', layout)) {
107
- layout = layout.build();
108
+ const {
109
+ layout,
110
+ entering,
111
+ exiting
112
+ } = this.props;
113
+
114
+ if ((layout || entering || exiting) && tag != null) {
115
+ if (!shouldBeUseWeb()) {
116
+ enableLayoutAnimations(true, false);
108
117
  }
109
118
 
110
- if (has('build', entering)) {
111
- entering = entering.build();
119
+ if (layout) {
120
+ configureLayoutAnimations(tag, 'layout', maybeBuild(layout), this.sv);
112
121
  }
113
122
 
114
- if (has('build', exiting)) {
115
- exiting = exiting.build();
123
+ if (entering) {
124
+ configureLayoutAnimations(tag, 'entering', maybeBuild(entering), this.sv);
116
125
  }
117
126
 
118
- const config = {
119
- layout,
120
- entering,
121
- exiting,
122
- sv: this.sv
123
- };
124
- runOnUI(() => {
125
- 'worklet';
126
-
127
- global.LayoutAnimationRepository.registerConfig(tag, config);
128
- })();
127
+ if (exiting) {
128
+ configureLayoutAnimations(tag, 'exiting', maybeBuild(exiting), this.sv);
129
+ }
129
130
  }
130
131
 
131
132
  if (ref !== this._component) {
@@ -1 +1 @@
1
- {"version":3,"names":["React","findNodeHandle","Platform","StyleSheet","WorkletEventHandler","setAndForwardRef","invariant","adaptViewConfig","RNRenderer","makeMutable","runOnUI","enableLayoutAnimations","DefaultEntering","DefaultExiting","DefaultLayout","isJest","isChromeDebugger","shouldBeUseWeb","initialUpdaterRun","getShadowNodeWrapperFromRef","dummyListener","flattenArray","array","Array","isArray","resultArr","_flattenArray","arr","forEach","item","push","onlyAnimatedStyles","styles","filter","style","viewDescriptors","isSameAnimatedStyle","style1","style2","viewsRef","isSameAnimatedProps","has","key","x","undefined","createAnimatedComponent","Component","options","prototype","isReactComponent","AnimatedComponent","constructor","props","value","getForwardedRef","forwardedRef","setLocalRef","ref","tag","layout","entering","exiting","build","config","sv","global","LayoutAnimationRepository","registerConfig","_component","animatedStyle","componentWillUnmount","_detachNativeEvents","_detachStyles","componentDidMount","_attachNativeEvents","_attachAnimatedStyles","viewTag","prop","current","registerForEvents","unregisterFromEvents","OS","_styles","remove","_viewTag","animatedProps","_IS_FABRIC","shadowNodeWrapper","_removeShadowNodeFromRegistry","_reattachNativeEvents","prevProps","reattachNeeded","_updateFromNative","setNativeProps","prevStyles","prevAnimatedProps","_animatedProps","viewName","hostInstance","findHostInstance_DEPRECATED","Error","_nativeTag","viewConfig","uiViewClassName","hasReanimated2Props","length","hasOneSameStyle","prevStyle","isPresent","some","add","name","initial","componentDidUpdate","_filterNonAnimatedProps","inputProps","styleProp","processedStyle","map","_isFirstRender","initialStyle","updater","flatten","animatedProp","Object","keys","eventNames","eventName","listeners","render","platformProps","select","web","default","collapsable","_setComponentRef","displayName","forwardRef"],"sources":["createAnimatedComponent.tsx"],"sourcesContent":["import React, { Component, ComponentType, MutableRefObject, Ref } from 'react';\nimport { findNodeHandle, Platform, StyleSheet } from 'react-native';\nimport WorkletEventHandler from './reanimated2/WorkletEventHandler';\nimport setAndForwardRef from './setAndForwardRef';\nimport './reanimated2/layoutReanimation/LayoutAnimationRepository';\nimport invariant from 'invariant';\nimport { adaptViewConfig } from './ConfigHelper';\nimport { RNRenderer } from './reanimated2/platform-specific/RNRenderer';\nimport {\n makeMutable,\n runOnUI,\n enableLayoutAnimations,\n} from './reanimated2/core';\nimport {\n DefaultEntering,\n DefaultExiting,\n DefaultLayout,\n} from './reanimated2/layoutReanimation/defaultAnimations/Default';\nimport {\n isJest,\n isChromeDebugger,\n shouldBeUseWeb,\n} from './reanimated2/PlatformChecker';\nimport { initialUpdaterRun } from './reanimated2/animation';\nimport {\n BaseAnimationBuilder,\n EntryExitAnimationFunction,\n ILayoutAnimationBuilder,\n} from './reanimated2/layoutReanimation';\nimport {\n SharedValue,\n StyleProps,\n ShadowNodeWrapper,\n} from './reanimated2/commonTypes';\nimport {\n ViewDescriptorsSet,\n ViewRefSet,\n} from './reanimated2/ViewDescriptorsSet';\nimport { getShadowNodeWrapperFromRef } from './reanimated2/fabricUtils';\n\nfunction dummyListener() {\n // empty listener we use to assign to listener properties for which animated\n // event is used.\n}\n\ntype NestedArray<T> = T | NestedArray<T>[];\nfunction flattenArray<T>(array: NestedArray<T>): T[] {\n if (!Array.isArray(array)) {\n return [array];\n }\n const resultArr: T[] = [];\n\n const _flattenArray = (arr: NestedArray<T>[]): void => {\n arr.forEach((item) => {\n if (Array.isArray(item)) {\n _flattenArray(item);\n } else {\n resultArr.push(item);\n }\n });\n };\n _flattenArray(array);\n return resultArr;\n}\n\nfunction onlyAnimatedStyles(styles: 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\nconst has = <K extends string>(\n key: K,\n x: unknown\n): x is { [key in K]: unknown } => {\n if (typeof x === 'function' || typeof x === 'object') {\n if (x === null || x === undefined) {\n return false;\n } else {\n return key in x;\n }\n }\n return false;\n};\n\ninterface AnimatedProps extends Record<string, unknown> {\n viewDescriptors?: ViewDescriptorsSet;\n viewsRef?: ViewRefSet<unknown>;\n initial?: SharedValue<StyleProps>;\n}\n\nexport type AnimatedComponentProps<P extends Record<string, unknown>> = P & {\n forwardedRef?: Ref<Component>;\n style?: NestedArray<StyleProps>;\n animatedProps?: Partial<AnimatedComponentProps<AnimatedProps>>;\n animatedStyle?: StyleProps;\n layout?:\n | BaseAnimationBuilder\n | ILayoutAnimationBuilder\n | typeof BaseAnimationBuilder;\n entering?:\n | BaseAnimationBuilder\n | typeof BaseAnimationBuilder\n | EntryExitAnimationFunction\n | Keyframe;\n exiting?:\n | BaseAnimationBuilder\n | typeof BaseAnimationBuilder\n | EntryExitAnimationFunction\n | Keyframe;\n};\n\ntype Options<P> = {\n setNativeProps: (ref: ComponentRef, props: P) => void;\n};\n\ninterface ComponentRef extends Component {\n setNativeProps?: (props: Record<string, unknown>) => void;\n getScrollableNode?: () => ComponentRef;\n}\n\nexport interface InitialComponentProps extends Record<string, unknown> {\n ref?: Ref<Component>;\n collapsable?: boolean;\n}\n\nexport default function createAnimatedComponent(\n Component: ComponentType<InitialComponentProps>,\n options?: Options<InitialComponentProps>\n): ComponentType<AnimatedComponentProps<InitialComponentProps>> {\n invariant(\n typeof Component !== 'function' ||\n (Component.prototype && Component.prototype.isReactComponent),\n '`createAnimatedComponent` does not support stateless functional components; ' +\n 'use a class component instead.'\n );\n\n class AnimatedComponent extends React.Component<\n AnimatedComponentProps<InitialComponentProps>\n > {\n _styles: StyleProps[] | null = null;\n _animatedProps?: Partial<AnimatedComponentProps<AnimatedProps>>;\n _viewTag = -1;\n _isFirstRender = true;\n animatedStyle: { value: StyleProps } = { value: {} };\n initialStyle = {};\n sv: SharedValue<null | Record<string, unknown>> | null;\n _component: ComponentRef | null = null;\n static displayName: string;\n\n constructor(props: AnimatedComponentProps<InitialComponentProps>) {\n super(props);\n if (isJest()) {\n this.animatedStyle = { value: {} };\n }\n this.sv = makeMutable({});\n }\n\n componentWillUnmount() {\n this._detachNativeEvents();\n this._detachStyles();\n this.sv = null;\n }\n\n componentDidMount() {\n this._attachNativeEvents();\n this._attachAnimatedStyles();\n }\n\n _attachNativeEvents() {\n const viewTag = findNodeHandle(this);\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.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 (Platform.OS === 'web' && this._styles !== null) {\n for (const style of this._styles) {\n if (style?.viewsRef) {\n style.viewsRef.remove(this);\n }\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 (global._IS_FABRIC) {\n const shadowNodeWrapper = getShadowNodeWrapperFromRef(this);\n runOnUI(() => {\n 'worklet';\n _removeShadowNodeFromRegistry(shadowNodeWrapper);\n })();\n }\n }\n }\n\n _reattachNativeEvents(\n prevProps: AnimatedComponentProps<InitialComponentProps>\n ) {\n let viewTag: number | undefined;\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 === undefined) {\n viewTag = prop.current.viewTag;\n }\n }\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 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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n prop.current.registerForEvents(viewTag!, key);\n prop.current.reattachNeeded = false;\n }\n }\n }\n\n _updateFromNative(props: StyleProps) {\n if (options?.setNativeProps) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n options.setNativeProps(this._component!, props);\n } else {\n // eslint-disable-next-line no-unused-expressions\n this._component?.setNativeProps?.(props);\n }\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 let viewTag: number | null;\n let viewName: string | null;\n let shadowNodeWrapper: ShadowNodeWrapper | null = null;\n if (Platform.OS === 'web') {\n viewTag = findNodeHandle(this);\n viewName = null;\n shadowNodeWrapper = 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(this);\n if (!hostInstance) {\n throw new Error(\n '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/master/Libraries/Components/ScrollView/ScrollViewViewConfig.js#L16).\n * The name we're looking for is in the field named uiViewClassName.\n */\n viewName = hostInstance?.viewConfig?.uiViewClassName;\n // update UI props whitelist for this view\n const hasReanimated2Props =\n this.props.animatedProps?.viewDescriptors || styles.length;\n if (hasReanimated2Props && hostInstance?.viewConfig) {\n adaptViewConfig(hostInstance.viewConfig);\n }\n\n if (global._IS_FABRIC) {\n shadowNodeWrapper = getShadowNodeWrapperFromRef(this);\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.animatedStyle.value = {\n ...this.animatedStyle.value,\n ...style.initial.value,\n };\n style.animatedStyle.current = this.animatedStyle;\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tag: viewTag!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n name: viewName!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n shadowNodeWrapper: shadowNodeWrapper!,\n });\n }\n }\n\n componentDidUpdate(\n prevProps: AnimatedComponentProps<InitialComponentProps>\n ) {\n this._reattachNativeEvents(prevProps);\n this._attachAnimatedStyles();\n }\n\n _setComponentRef = setAndForwardRef<Component>({\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 const tag = findNodeHandle(ref);\n if (\n !shouldBeUseWeb() &&\n (this.props.layout || this.props.entering || this.props.exiting) &&\n tag != null\n ) {\n enableLayoutAnimations(true, false);\n let layout = this.props.layout ? this.props.layout : DefaultLayout;\n let entering = this.props.entering\n ? this.props.entering\n : DefaultEntering;\n let exiting = this.props.exiting\n ? this.props.exiting\n : DefaultExiting;\n\n if (has('build', layout)) {\n layout = layout.build();\n }\n\n if (has('build', entering)) {\n entering = entering.build() as EntryExitAnimationFunction;\n }\n\n if (has('build', exiting)) {\n exiting = exiting.build() as EntryExitAnimationFunction;\n }\n\n const config = {\n layout,\n entering,\n exiting,\n sv: this.sv,\n };\n runOnUI(() => {\n 'worklet';\n global.LayoutAnimationRepository.registerConfig(tag, config);\n })();\n }\n\n if (ref !== this._component) {\n this._component = ref;\n }\n },\n });\n\n _filterNonAnimatedProps(\n inputProps: AnimatedComponentProps<InitialComponentProps>\n ): Record<string, unknown> {\n const props: Record<string, unknown> = {};\n for (const key in inputProps) {\n const value = inputProps[key];\n if (key === 'style') {\n const styleProp = inputProps.style;\n const styles = flattenArray<StyleProps>(styleProp ?? []);\n const processedStyle: StyleProps = styles.map((style) => {\n if (style && style.viewDescriptors) {\n // this is how we recognize styles returned by useAnimatedStyle\n style.viewsRef.add(this);\n if (this._isFirstRender) {\n this.initialStyle = {\n ...style.initial.value,\n ...initialUpdaterRun<StyleProps>(style.initial.updater),\n };\n }\n return this.initialStyle;\n } else {\n return style;\n }\n });\n props[key] = StyleSheet.flatten(processedStyle);\n } else if (key === 'animatedProps') {\n const animatedProp = inputProps.animatedProps as Partial<\n AnimatedComponentProps<AnimatedProps>\n >;\n if (animatedProp.initial !== undefined) {\n Object.keys(animatedProp.initial.value).forEach((key) => {\n props[key] = animatedProp.initial?.value[key];\n animatedProp.viewsRef?.add(this);\n });\n }\n } else if (\n has('current', value) &&\n value.current instanceof WorkletEventHandler\n ) {\n if (value.current.eventNames.length > 0) {\n value.current.eventNames.forEach((eventName) => {\n props[eventName] = has('listeners', value.current)\n ? (value.current.listeners as Record<string, unknown>)[\n eventName\n ]\n : dummyListener;\n });\n } else {\n props[key] = dummyListener;\n }\n } else if (\n key !== 'onGestureHandlerStateChange' ||\n !isChromeDebugger()\n ) {\n props[key] = value;\n }\n }\n return props;\n }\n\n render() {\n const props = this._filterNonAnimatedProps(this.props);\n if (isJest()) {\n props.animatedStyle = this.animatedStyle;\n }\n\n if (this._isFirstRender) {\n this._isFirstRender = false;\n }\n\n const platformProps = Platform.select({\n web: {},\n default: { collapsable: false },\n });\n return (\n <Component {...props} ref={this._setComponentRef} {...platformProps} />\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":["React","findNodeHandle","Platform","StyleSheet","WorkletEventHandler","setAndForwardRef","invariant","adaptViewConfig","RNRenderer","makeMutable","configureLayoutAnimations","enableLayoutAnimations","runOnUI","isJest","isChromeDebugger","shouldBeUseWeb","initialUpdaterRun","getShadowNodeWrapperFromRef","dummyListener","maybeBuild","layoutAnimationOrBuilder","isAnimationBuilder","value","build","flattenArray","array","Array","isArray","resultArr","_flattenArray","arr","forEach","item","push","onlyAnimatedStyles","styles","filter","style","viewDescriptors","isSameAnimatedStyle","style1","style2","viewsRef","isSameAnimatedProps","has","key","x","undefined","createAnimatedComponent","Component","options","prototype","isReactComponent","AnimatedComponent","constructor","props","getForwardedRef","forwardedRef","setLocalRef","ref","tag","layout","entering","exiting","sv","_component","animatedStyle","componentWillUnmount","_detachNativeEvents","_detachStyles","componentDidMount","_attachNativeEvents","_attachAnimatedStyles","viewTag","prop","current","registerForEvents","unregisterFromEvents","OS","_styles","remove","_viewTag","animatedProps","global","_IS_FABRIC","shadowNodeWrapper","_removeShadowNodeFromRegistry","_reattachNativeEvents","prevProps","reattachNeeded","_updateFromNative","setNativeProps","prevStyles","prevAnimatedProps","_animatedProps","viewName","hostInstance","findHostInstance_DEPRECATED","Error","_nativeTag","viewConfig","uiViewClassName","hasReanimated2Props","length","hasOneSameStyle","prevStyle","isPresent","some","add","name","initial","componentDidUpdate","_filterNonAnimatedProps","inputProps","styleProp","processedStyle","map","_isFirstRender","initialStyle","updater","flatten","animatedProp","Object","keys","eventNames","eventName","listeners","render","platformProps","select","web","default","collapsable","_setComponentRef","displayName","forwardRef"],"sources":["createAnimatedComponent.tsx"],"sourcesContent":["import React, { Component, ComponentType, MutableRefObject, Ref } from 'react';\nimport { findNodeHandle, Platform, StyleSheet } from 'react-native';\nimport WorkletEventHandler from './reanimated2/WorkletEventHandler';\nimport setAndForwardRef from './setAndForwardRef';\nimport './reanimated2/layoutReanimation/LayoutAnimationRepository';\nimport invariant from 'invariant';\nimport { adaptViewConfig } from './ConfigHelper';\nimport { RNRenderer } from './reanimated2/platform-specific/RNRenderer';\nimport {\n makeMutable,\n configureLayoutAnimations,\n enableLayoutAnimations,\n runOnUI,\n} from './reanimated2/core';\nimport {\n isJest,\n isChromeDebugger,\n shouldBeUseWeb,\n} from './reanimated2/PlatformChecker';\nimport { initialUpdaterRun } from './reanimated2/animation';\nimport {\n BaseAnimationBuilder,\n EntryExitAnimationFunction,\n ILayoutAnimationBuilder,\n LayoutAnimationFunction,\n} from './reanimated2/layoutReanimation';\nimport {\n SharedValue,\n StyleProps,\n ShadowNodeWrapper,\n} from './reanimated2/commonTypes';\nimport {\n ViewDescriptorsSet,\n ViewRefSet,\n} from './reanimated2/ViewDescriptorsSet';\nimport { getShadowNodeWrapperFromRef } from './reanimated2/fabricUtils';\n\nfunction dummyListener() {\n // empty listener we use to assign to listener properties for which animated\n // event is used.\n}\n\nfunction maybeBuild(\n layoutAnimationOrBuilder:\n | ILayoutAnimationBuilder\n | LayoutAnimationFunction\n | Keyframe\n): LayoutAnimationFunction | Keyframe {\n const isAnimationBuilder = (\n value: ILayoutAnimationBuilder | LayoutAnimationFunction | Keyframe\n ): value is ILayoutAnimationBuilder =>\n 'build' in layoutAnimationOrBuilder &&\n typeof layoutAnimationOrBuilder.build === 'function';\n\n if (isAnimationBuilder(layoutAnimationOrBuilder)) {\n return layoutAnimationOrBuilder.build();\n } else {\n return layoutAnimationOrBuilder;\n }\n}\n\ntype NestedArray<T> = T | NestedArray<T>[];\nfunction flattenArray<T>(array: NestedArray<T>): T[] {\n if (!Array.isArray(array)) {\n return [array];\n }\n const resultArr: T[] = [];\n\n const _flattenArray = (arr: NestedArray<T>[]): void => {\n arr.forEach((item) => {\n if (Array.isArray(item)) {\n _flattenArray(item);\n } else {\n resultArr.push(item);\n }\n });\n };\n _flattenArray(array);\n return resultArr;\n}\n\nfunction onlyAnimatedStyles(styles: 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\nconst has = <K extends string>(\n key: K,\n x: unknown\n): x is { [key in K]: unknown } => {\n if (typeof x === 'function' || typeof x === 'object') {\n if (x === null || x === undefined) {\n return false;\n } else {\n return key in x;\n }\n }\n return false;\n};\n\ninterface AnimatedProps extends Record<string, unknown> {\n viewDescriptors?: ViewDescriptorsSet;\n viewsRef?: ViewRefSet<unknown>;\n initial?: SharedValue<StyleProps>;\n}\n\nexport type AnimatedComponentProps<P extends Record<string, unknown>> = P & {\n forwardedRef?: Ref<Component>;\n style?: NestedArray<StyleProps>;\n animatedProps?: Partial<AnimatedComponentProps<AnimatedProps>>;\n animatedStyle?: StyleProps;\n layout?:\n | BaseAnimationBuilder\n | ILayoutAnimationBuilder\n | typeof BaseAnimationBuilder;\n entering?:\n | BaseAnimationBuilder\n | typeof BaseAnimationBuilder\n | EntryExitAnimationFunction\n | Keyframe;\n exiting?:\n | BaseAnimationBuilder\n | typeof BaseAnimationBuilder\n | EntryExitAnimationFunction\n | Keyframe;\n};\n\ntype Options<P> = {\n setNativeProps: (ref: ComponentRef, props: P) => void;\n};\n\ninterface ComponentRef extends Component {\n setNativeProps?: (props: Record<string, unknown>) => void;\n getScrollableNode?: () => ComponentRef;\n}\n\nexport interface InitialComponentProps extends Record<string, unknown> {\n ref?: Ref<Component>;\n collapsable?: boolean;\n}\n\nexport default function createAnimatedComponent(\n Component: ComponentType<InitialComponentProps>,\n options?: Options<InitialComponentProps>\n): ComponentType<AnimatedComponentProps<InitialComponentProps>> {\n invariant(\n typeof Component !== 'function' ||\n (Component.prototype && Component.prototype.isReactComponent),\n '`createAnimatedComponent` does not support stateless functional components; ' +\n 'use a class component instead.'\n );\n\n class AnimatedComponent extends React.Component<\n AnimatedComponentProps<InitialComponentProps>\n > {\n _styles: StyleProps[] | null = null;\n _animatedProps?: Partial<AnimatedComponentProps<AnimatedProps>>;\n _viewTag = -1;\n _isFirstRender = true;\n animatedStyle: { value: StyleProps } = { value: {} };\n initialStyle = {};\n sv: SharedValue<null | Record<string, unknown>> | null;\n _component: ComponentRef | null = null;\n static displayName: string;\n\n constructor(props: AnimatedComponentProps<InitialComponentProps>) {\n super(props);\n if (isJest()) {\n this.animatedStyle = { value: {} };\n }\n this.sv = makeMutable({});\n }\n\n componentWillUnmount() {\n this._detachNativeEvents();\n this._detachStyles();\n this.sv = null;\n }\n\n componentDidMount() {\n this._attachNativeEvents();\n this._attachAnimatedStyles();\n }\n\n _attachNativeEvents() {\n const viewTag = findNodeHandle(this);\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.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 (Platform.OS === 'web' && this._styles !== null) {\n for (const style of this._styles) {\n if (style?.viewsRef) {\n style.viewsRef.remove(this);\n }\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 (global._IS_FABRIC) {\n const shadowNodeWrapper = getShadowNodeWrapperFromRef(this);\n runOnUI(() => {\n 'worklet';\n _removeShadowNodeFromRegistry(shadowNodeWrapper);\n })();\n }\n }\n }\n\n _reattachNativeEvents(\n prevProps: AnimatedComponentProps<InitialComponentProps>\n ) {\n let viewTag: number | undefined;\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 === undefined) {\n viewTag = prop.current.viewTag;\n }\n }\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 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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n prop.current.registerForEvents(viewTag!, key);\n prop.current.reattachNeeded = false;\n }\n }\n }\n\n _updateFromNative(props: StyleProps) {\n if (options?.setNativeProps) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n options.setNativeProps(this._component!, props);\n } else {\n // eslint-disable-next-line no-unused-expressions\n this._component?.setNativeProps?.(props);\n }\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 let viewTag: number | null;\n let viewName: string | null;\n let shadowNodeWrapper: ShadowNodeWrapper | null = null;\n if (Platform.OS === 'web') {\n viewTag = findNodeHandle(this);\n viewName = null;\n shadowNodeWrapper = 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(this);\n if (!hostInstance) {\n throw new Error(\n '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/master/Libraries/Components/ScrollView/ScrollViewViewConfig.js#L16).\n * The name we're looking for is in the field named uiViewClassName.\n */\n viewName = hostInstance?.viewConfig?.uiViewClassName;\n // update UI props whitelist for this view\n const hasReanimated2Props =\n this.props.animatedProps?.viewDescriptors || styles.length;\n if (hasReanimated2Props && hostInstance?.viewConfig) {\n adaptViewConfig(hostInstance.viewConfig);\n }\n\n if (global._IS_FABRIC) {\n shadowNodeWrapper = getShadowNodeWrapperFromRef(this);\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.animatedStyle.value = {\n ...this.animatedStyle.value,\n ...style.initial.value,\n };\n style.animatedStyle.current = this.animatedStyle;\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 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tag: viewTag!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n name: viewName!,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n shadowNodeWrapper: shadowNodeWrapper!,\n });\n }\n }\n\n componentDidUpdate(\n prevProps: AnimatedComponentProps<InitialComponentProps>\n ) {\n this._reattachNativeEvents(prevProps);\n this._attachAnimatedStyles();\n }\n\n _setComponentRef = setAndForwardRef<Component>({\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 const tag = findNodeHandle(ref);\n const { layout, entering, exiting } = this.props;\n if ((layout || entering || exiting) && tag != null) {\n if (!shouldBeUseWeb()) {\n enableLayoutAnimations(true, false);\n }\n if (layout) {\n configureLayoutAnimations(\n tag,\n 'layout',\n maybeBuild(layout),\n this.sv\n );\n }\n if (entering) {\n configureLayoutAnimations(\n tag,\n 'entering',\n maybeBuild(entering),\n this.sv\n );\n }\n if (exiting) {\n configureLayoutAnimations(\n tag,\n 'exiting',\n maybeBuild(exiting),\n this.sv\n );\n }\n }\n\n if (ref !== this._component) {\n this._component = ref;\n }\n },\n });\n\n _filterNonAnimatedProps(\n inputProps: AnimatedComponentProps<InitialComponentProps>\n ): Record<string, unknown> {\n const props: Record<string, unknown> = {};\n for (const key in inputProps) {\n const value = inputProps[key];\n if (key === 'style') {\n const styleProp = inputProps.style;\n const styles = flattenArray<StyleProps>(styleProp ?? []);\n const processedStyle: StyleProps = styles.map((style) => {\n if (style && style.viewDescriptors) {\n // this is how we recognize styles returned by useAnimatedStyle\n style.viewsRef.add(this);\n if (this._isFirstRender) {\n this.initialStyle = {\n ...style.initial.value,\n ...initialUpdaterRun<StyleProps>(style.initial.updater),\n };\n }\n return this.initialStyle;\n } else {\n return style;\n }\n });\n props[key] = StyleSheet.flatten(processedStyle);\n } else if (key === 'animatedProps') {\n const animatedProp = inputProps.animatedProps as Partial<\n AnimatedComponentProps<AnimatedProps>\n >;\n if (animatedProp.initial !== undefined) {\n Object.keys(animatedProp.initial.value).forEach((key) => {\n props[key] = animatedProp.initial?.value[key];\n animatedProp.viewsRef?.add(this);\n });\n }\n } else if (\n has('current', value) &&\n value.current instanceof WorkletEventHandler\n ) {\n if (value.current.eventNames.length > 0) {\n value.current.eventNames.forEach((eventName) => {\n props[eventName] = has('listeners', value.current)\n ? (value.current.listeners as Record<string, unknown>)[\n eventName\n ]\n : dummyListener;\n });\n } else {\n props[key] = dummyListener;\n }\n } else if (\n key !== 'onGestureHandlerStateChange' ||\n !isChromeDebugger()\n ) {\n props[key] = value;\n }\n }\n return props;\n }\n\n render() {\n const props = this._filterNonAnimatedProps(this.props);\n if (isJest()) {\n props.animatedStyle = this.animatedStyle;\n }\n\n if (this._isFirstRender) {\n this._isFirstRender = false;\n }\n\n const platformProps = Platform.select({\n web: {},\n default: { collapsable: false },\n });\n return (\n <Component {...props} ref={this._setComponentRef} {...platformProps} />\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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"}
@@ -69,6 +69,10 @@ export class NativeReanimated {
69
69
  return this.InnerNativeModule.getViewProp(viewTag, propName, callback);
70
70
  }
71
71
 
72
+ configureLayoutAnimation(viewTag, type, config, viewSharedValue) {
73
+ this.InnerNativeModule.configureLayoutAnimation(viewTag, type, config, viewSharedValue);
74
+ }
75
+
72
76
  enableLayoutAnimations(flag) {
73
77
  this.InnerNativeModule.enableLayoutAnimations(flag);
74
78
  }
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","NativeReanimated","constructor","native","global","__reanimatedModuleProxy","undefined","ReanimatedModule","installTurboModule","InnerNativeModule","installCoreFunctions","valueSetter","makeShareable","value","makeMutable","makeRemote","object","registerSensor","sensorType","interval","sensorData","unregisterSensor","sensorId","startMapper","mapper","inputs","outputs","updater","viewDescriptors","stopMapper","mapperId","registerEventHandler","eventHash","eventHandler","unregisterEventHandler","id","getViewProp","viewTag","propName","callback","enableLayoutAnimations","flag","configureProps","uiProps","nativeProps","subscribeForKeyboardEvents","keyboardEventData","unsubscribeFromKeyboardEvents","listenerId"],"sources":["NativeReanimated.ts"],"sourcesContent":["import { NativeModules } from 'react-native';\nimport {\n SharedValue,\n SensorValue3D,\n SensorValueRotation,\n AnimatedKeyboardInfo,\n} from '../commonTypes';\nimport { Descriptor } from '../hook/commonTypes';\n\nexport class NativeReanimated {\n native: boolean;\n private InnerNativeModule: any;\n\n constructor(native = true) {\n if (global.__reanimatedModuleProxy === undefined && native) {\n const { ReanimatedModule } = NativeModules;\n ReanimatedModule?.installTurboModule();\n }\n this.InnerNativeModule = global.__reanimatedModuleProxy;\n this.native = native;\n }\n\n installCoreFunctions(valueSetter: <T>(value: T) => void): void {\n return this.InnerNativeModule.installCoreFunctions(valueSetter);\n }\n\n makeShareable<T>(value: T): T {\n return this.InnerNativeModule.makeShareable(value);\n }\n\n makeMutable<T>(value: T): SharedValue<T> {\n return this.InnerNativeModule.makeMutable(value);\n }\n\n makeRemote<T>(object = {}): T {\n return this.InnerNativeModule.makeRemote(object);\n }\n\n registerSensor(\n sensorType: number,\n interval: number,\n sensorData: SensorValue3D | SensorValueRotation\n ) {\n return this.InnerNativeModule.registerSensor(\n sensorType,\n interval,\n sensorData\n );\n }\n\n unregisterSensor(sensorId: number) {\n return this.InnerNativeModule.unregisterSensor(sensorId);\n }\n\n startMapper(\n mapper: () => void,\n inputs: any[] = [],\n outputs: any[] = [],\n updater: () => void,\n viewDescriptors: Descriptor[] | SharedValue<Descriptor[]>\n ): number {\n return this.InnerNativeModule.startMapper(\n mapper,\n inputs,\n outputs,\n updater,\n viewDescriptors\n );\n }\n\n stopMapper(mapperId: number): void {\n return this.InnerNativeModule.stopMapper(mapperId);\n }\n\n registerEventHandler<T>(\n eventHash: string,\n eventHandler: (event: T) => void\n ): string {\n return this.InnerNativeModule.registerEventHandler(eventHash, eventHandler);\n }\n\n unregisterEventHandler(id: string): void {\n return this.InnerNativeModule.unregisterEventHandler(id);\n }\n\n getViewProp<T>(\n viewTag: string,\n propName: string,\n callback?: (result: T) => void\n ): Promise<T> {\n return this.InnerNativeModule.getViewProp(viewTag, propName, callback);\n }\n\n enableLayoutAnimations(flag: boolean): void {\n this.InnerNativeModule.enableLayoutAnimations(flag);\n }\n\n configureProps(uiProps: string[], nativeProps: string[]): void {\n this.InnerNativeModule.configureProps(uiProps, nativeProps);\n }\n\n subscribeForKeyboardEvents(keyboardEventData: AnimatedKeyboardInfo): number {\n return this.InnerNativeModule.subscribeForKeyboardEvents(keyboardEventData);\n }\n\n unsubscribeFromKeyboardEvents(listenerId: number): void {\n this.InnerNativeModule.unsubscribeFromKeyboardEvents(listenerId);\n }\n}\n"],"mappings":";;AAAA,SAASA,aAAT,QAA8B,cAA9B;AASA,OAAO,MAAMC,gBAAN,CAAuB;EAI5BC,WAAW,GAAgB;IAAA,IAAfC,MAAe,uEAAN,IAAM;;IAAA;;IAAA;;IACzB,IAAIC,MAAM,CAACC,uBAAP,KAAmCC,SAAnC,IAAgDH,MAApD,EAA4D;MAC1D,MAAM;QAAEI;MAAF,IAAuBP,aAA7B;MACAO,gBAAgB,SAAhB,IAAAA,gBAAgB,WAAhB,YAAAA,gBAAgB,CAAEC,kBAAlB;IACD;;IACD,KAAKC,iBAAL,GAAyBL,MAAM,CAACC,uBAAhC;IACA,KAAKF,MAAL,GAAcA,MAAd;EACD;;EAEDO,oBAAoB,CAACC,WAAD,EAA2C;IAC7D,OAAO,KAAKF,iBAAL,CAAuBC,oBAAvB,CAA4CC,WAA5C,CAAP;EACD;;EAEDC,aAAa,CAAIC,KAAJ,EAAiB;IAC5B,OAAO,KAAKJ,iBAAL,CAAuBG,aAAvB,CAAqCC,KAArC,CAAP;EACD;;EAEDC,WAAW,CAAID,KAAJ,EAA8B;IACvC,OAAO,KAAKJ,iBAAL,CAAuBK,WAAvB,CAAmCD,KAAnC,CAAP;EACD;;EAEDE,UAAU,GAAoB;IAAA,IAAhBC,MAAgB,uEAAP,EAAO;IAC5B,OAAO,KAAKP,iBAAL,CAAuBM,UAAvB,CAAkCC,MAAlC,CAAP;EACD;;EAEDC,cAAc,CACZC,UADY,EAEZC,QAFY,EAGZC,UAHY,EAIZ;IACA,OAAO,KAAKX,iBAAL,CAAuBQ,cAAvB,CACLC,UADK,EAELC,QAFK,EAGLC,UAHK,CAAP;EAKD;;EAEDC,gBAAgB,CAACC,QAAD,EAAmB;IACjC,OAAO,KAAKb,iBAAL,CAAuBY,gBAAvB,CAAwCC,QAAxC,CAAP;EACD;;EAEDC,WAAW,CACTC,MADS,EAMD;IAAA,IAJRC,MAIQ,uEAJQ,EAIR;IAAA,IAHRC,OAGQ,uEAHS,EAGT;IAAA,IAFRC,OAEQ;IAAA,IADRC,eACQ;IACR,OAAO,KAAKnB,iBAAL,CAAuBc,WAAvB,CACLC,MADK,EAELC,MAFK,EAGLC,OAHK,EAILC,OAJK,EAKLC,eALK,CAAP;EAOD;;EAEDC,UAAU,CAACC,QAAD,EAAyB;IACjC,OAAO,KAAKrB,iBAAL,CAAuBoB,UAAvB,CAAkCC,QAAlC,CAAP;EACD;;EAEDC,oBAAoB,CAClBC,SADkB,EAElBC,YAFkB,EAGV;IACR,OAAO,KAAKxB,iBAAL,CAAuBsB,oBAAvB,CAA4CC,SAA5C,EAAuDC,YAAvD,CAAP;EACD;;EAEDC,sBAAsB,CAACC,EAAD,EAAmB;IACvC,OAAO,KAAK1B,iBAAL,CAAuByB,sBAAvB,CAA8CC,EAA9C,CAAP;EACD;;EAEDC,WAAW,CACTC,OADS,EAETC,QAFS,EAGTC,QAHS,EAIG;IACZ,OAAO,KAAK9B,iBAAL,CAAuB2B,WAAvB,CAAmCC,OAAnC,EAA4CC,QAA5C,EAAsDC,QAAtD,CAAP;EACD;;EAEDC,sBAAsB,CAACC,IAAD,EAAsB;IAC1C,KAAKhC,iBAAL,CAAuB+B,sBAAvB,CAA8CC,IAA9C;EACD;;EAEDC,cAAc,CAACC,OAAD,EAAoBC,WAApB,EAAiD;IAC7D,KAAKnC,iBAAL,CAAuBiC,cAAvB,CAAsCC,OAAtC,EAA+CC,WAA/C;EACD;;EAEDC,0BAA0B,CAACC,iBAAD,EAAkD;IAC1E,OAAO,KAAKrC,iBAAL,CAAuBoC,0BAAvB,CAAkDC,iBAAlD,CAAP;EACD;;EAEDC,6BAA6B,CAACC,UAAD,EAA2B;IACtD,KAAKvC,iBAAL,CAAuBsC,6BAAvB,CAAqDC,UAArD;EACD;;AAlG2B"}
1
+ {"version":3,"names":["NativeModules","NativeReanimated","constructor","native","global","__reanimatedModuleProxy","undefined","ReanimatedModule","installTurboModule","InnerNativeModule","installCoreFunctions","valueSetter","makeShareable","value","makeMutable","makeRemote","object","registerSensor","sensorType","interval","sensorData","unregisterSensor","sensorId","startMapper","mapper","inputs","outputs","updater","viewDescriptors","stopMapper","mapperId","registerEventHandler","eventHash","eventHandler","unregisterEventHandler","id","getViewProp","viewTag","propName","callback","configureLayoutAnimation","type","config","viewSharedValue","enableLayoutAnimations","flag","configureProps","uiProps","nativeProps","subscribeForKeyboardEvents","keyboardEventData","unsubscribeFromKeyboardEvents","listenerId"],"sources":["NativeReanimated.ts"],"sourcesContent":["import { NativeModules } from 'react-native';\nimport {\n SharedValue,\n SensorValue3D,\n SensorValueRotation,\n AnimatedKeyboardInfo,\n} from '../commonTypes';\nimport { Descriptor } from '../hook/commonTypes';\nimport { LayoutAnimationFunction } from '../layoutReanimation';\n\nexport class NativeReanimated {\n native: boolean;\n private InnerNativeModule: any;\n\n constructor(native = true) {\n if (global.__reanimatedModuleProxy === undefined && native) {\n const { ReanimatedModule } = NativeModules;\n ReanimatedModule?.installTurboModule();\n }\n this.InnerNativeModule = global.__reanimatedModuleProxy;\n this.native = native;\n }\n\n installCoreFunctions(valueSetter: <T>(value: T) => void): void {\n return this.InnerNativeModule.installCoreFunctions(valueSetter);\n }\n\n makeShareable<T>(value: T): T {\n return this.InnerNativeModule.makeShareable(value);\n }\n\n makeMutable<T>(value: T): SharedValue<T> {\n return this.InnerNativeModule.makeMutable(value);\n }\n\n makeRemote<T>(object = {}): T {\n return this.InnerNativeModule.makeRemote(object);\n }\n\n registerSensor(\n sensorType: number,\n interval: number,\n sensorData: SensorValue3D | SensorValueRotation\n ) {\n return this.InnerNativeModule.registerSensor(\n sensorType,\n interval,\n sensorData\n );\n }\n\n unregisterSensor(sensorId: number) {\n return this.InnerNativeModule.unregisterSensor(sensorId);\n }\n\n startMapper(\n mapper: () => void,\n inputs: any[] = [],\n outputs: any[] = [],\n updater: () => void,\n viewDescriptors: Descriptor[] | SharedValue<Descriptor[]>\n ): number {\n return this.InnerNativeModule.startMapper(\n mapper,\n inputs,\n outputs,\n updater,\n viewDescriptors\n );\n }\n\n stopMapper(mapperId: number): void {\n return this.InnerNativeModule.stopMapper(mapperId);\n }\n\n registerEventHandler<T>(\n eventHash: string,\n eventHandler: (event: T) => void\n ): string {\n return this.InnerNativeModule.registerEventHandler(eventHash, eventHandler);\n }\n\n unregisterEventHandler(id: string): void {\n return this.InnerNativeModule.unregisterEventHandler(id);\n }\n\n getViewProp<T>(\n viewTag: string,\n propName: string,\n callback?: (result: T) => void\n ): Promise<T> {\n return this.InnerNativeModule.getViewProp(viewTag, propName, callback);\n }\n\n configureLayoutAnimation(\n viewTag: number,\n type: string,\n config: Keyframe | LayoutAnimationFunction,\n viewSharedValue: SharedValue<null | Record<string, unknown>> | null\n ) {\n this.InnerNativeModule.configureLayoutAnimation(\n viewTag,\n type,\n config,\n viewSharedValue\n );\n }\n\n enableLayoutAnimations(flag: boolean): void {\n this.InnerNativeModule.enableLayoutAnimations(flag);\n }\n\n configureProps(uiProps: string[], nativeProps: string[]): void {\n this.InnerNativeModule.configureProps(uiProps, nativeProps);\n }\n\n subscribeForKeyboardEvents(keyboardEventData: AnimatedKeyboardInfo): number {\n return this.InnerNativeModule.subscribeForKeyboardEvents(keyboardEventData);\n }\n\n unsubscribeFromKeyboardEvents(listenerId: number): void {\n this.InnerNativeModule.unsubscribeFromKeyboardEvents(listenerId);\n }\n}\n"],"mappings":"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"}
@@ -138,7 +138,8 @@ function workletValueSetter(value) {
138
138
  animation.onStart(animation, this.value, timestamp, previousAnimation);
139
139
  };
140
140
 
141
- initializeAnimation(getTimestamp());
141
+ const currentTimestamp = getTimestamp();
142
+ initializeAnimation(currentTimestamp);
142
143
 
143
144
  const step = timestamp => {
144
145
  if (animation.cancelled) {
@@ -163,13 +164,7 @@ function workletValueSetter(value) {
163
164
  };
164
165
 
165
166
  this._animation = animation;
166
-
167
- if (_frameTimestamp) {
168
- // frame
169
- step(_frameTimestamp);
170
- } else {
171
- requestAnimationFrame(step);
172
- }
167
+ step(currentTimestamp);
173
168
  } else {
174
169
  // prevent setting again to the same value
175
170
  // and triggering the mappers that treat this value as an input
@@ -226,7 +221,7 @@ function workletValueSetterJS(value) {
226
221
  };
227
222
 
228
223
  this._animation = animation;
229
- requestFrame(step);
224
+ step(getTimestamp());
230
225
  } else {
231
226
  this._setValue && this._setValue(value);
232
227
  }
@@ -303,6 +298,9 @@ export function enableLayoutAnimations(flag) {
303
298
  NativeReanimatedModule.enableLayoutAnimations(flag);
304
299
  }
305
300
  }
301
+ export function configureLayoutAnimations(viewTag, type, config, viewSharedValue) {
302
+ NativeReanimatedModule.configureLayoutAnimation(viewTag, type, config, viewSharedValue);
303
+ }
306
304
  export function configureProps(uiProps, nativeProps) {
307
305
  if (!nativeShouldBeMock()) {
308
306
  NativeReanimatedModule.configureProps(uiProps, nativeProps);