react-native-reanimated 2.3.0-beta.4 → 2.3.0

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 (62) hide show
  1. package/Common/cpp/Tools/RuntimeDecorator.cpp +17 -0
  2. package/android/build.gradle +2 -0
  3. package/android/expo/linking.gradle +34 -0
  4. package/android/expo/src/main/java/com/swmansion/reanimated/EXReanimatedAdapter.java +12 -0
  5. package/android/expo/src/main/java/expo/modules/adapters/reanimated/EXReanimatedPackage.java +26 -0
  6. package/android/react-native-reanimated-63-hermes.aar +0 -0
  7. package/android/react-native-reanimated-63-jsc.aar +0 -0
  8. package/android/react-native-reanimated-64-hermes.aar +0 -0
  9. package/android/react-native-reanimated-64-jsc.aar +0 -0
  10. package/android/react-native-reanimated-65-hermes.aar +0 -0
  11. package/android/react-native-reanimated-65-jsc.aar +0 -0
  12. package/android/react-native-reanimated-66-hermes.aar +0 -0
  13. package/android/react-native-reanimated-66-jsc.aar +0 -0
  14. package/android/react-native-reanimated-67-hermes.aar +0 -0
  15. package/android/react-native-reanimated-67-jsc.aar +0 -0
  16. package/expo-module.config.json +3 -0
  17. package/ios/LayoutReanimation/REAAnimationsManager.m +64 -19
  18. package/ios/native/REAInitializer.mm +3 -4
  19. package/lib/Animated.js +3 -5
  20. package/lib/createAnimatedComponent.js +4 -2
  21. package/lib/index.js +3 -5
  22. package/lib/reanimated1/core/Core.test.js +1 -1
  23. package/lib/reanimated2/component/FlatList.js +30 -0
  24. package/lib/reanimated2/component/WrappedComponents.js +9 -0
  25. package/lib/reanimated2/component/index.js +4 -0
  26. package/lib/reanimated2/core.js +3 -0
  27. package/lib/reanimated2/globals.d.ts +3 -0
  28. package/lib/reanimated2/layoutReanimation/defaultAnimations/Default.js +14 -14
  29. package/lib/reanimated2/layoutReanimation/defaultAnimations/Flip.js +8 -8
  30. package/lib/reanimated2/layoutReanimation/defaultAnimations/Rotate.js +16 -16
  31. package/lib/reanimated2/layoutReanimation/defaultAnimations/Slide.js +15 -15
  32. package/lib/reanimated2/layoutReanimation/defaultAnimations/Zoom.js +4 -4
  33. package/lib/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.js +20 -8
  34. package/lib/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.js +2 -2
  35. package/lib/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.js +8 -8
  36. package/lib/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.js +10 -10
  37. package/lib/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.js +8 -8
  38. package/lib/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.js +8 -8
  39. package/package.json +3 -2
  40. package/plugin.js +2 -1
  41. package/react-native-reanimated.d.ts +37 -21
  42. package/src/Animated.js +3 -5
  43. package/src/createAnimatedComponent.tsx +13 -5
  44. package/src/reanimated1/core/Core.test.js +1 -1
  45. package/src/reanimated2/component/FlatList.tsx +44 -0
  46. package/src/reanimated2/component/WrappedComponents.ts +11 -0
  47. package/src/reanimated2/component/index.ts +9 -0
  48. package/src/reanimated2/core.ts +3 -0
  49. package/src/reanimated2/globals.d.ts +3 -0
  50. package/src/reanimated2/layoutReanimation/animationBuilder/commonTypes.ts +39 -20
  51. package/src/reanimated2/layoutReanimation/animationBuilder/index.ts +5 -1
  52. package/src/reanimated2/layoutReanimation/defaultAnimations/Default.ts +21 -15
  53. package/src/reanimated2/layoutReanimation/defaultAnimations/Flip.ts +29 -24
  54. package/src/reanimated2/layoutReanimation/defaultAnimations/Rotate.ts +61 -34
  55. package/src/reanimated2/layoutReanimation/defaultAnimations/Slide.ts +48 -33
  56. package/src/reanimated2/layoutReanimation/defaultAnimations/Zoom.ts +17 -12
  57. package/src/reanimated2/layoutReanimation/defaultTransitions/CurvedTransition.ts +20 -8
  58. package/src/reanimated2/layoutReanimation/defaultTransitions/EntryExitTransition.ts +8 -8
  59. package/src/reanimated2/layoutReanimation/defaultTransitions/FadingTransition.ts +8 -8
  60. package/src/reanimated2/layoutReanimation/defaultTransitions/JumpingTransition.ts +20 -14
  61. package/src/reanimated2/layoutReanimation/defaultTransitions/LinearTransition.ts +14 -8
  62. package/src/reanimated2/layoutReanimation/defaultTransitions/SequencedTransition.ts +24 -12
@@ -0,0 +1,44 @@
1
+ import React from 'react';
2
+ import { FlatList, FlatListProps, LayoutChangeEvent } from 'react-native';
3
+ import WrappedComponents from './WrappedComponents';
4
+ import createAnimatedComponent from '../../createAnimatedComponent';
5
+ import { ILayoutAnimationBuilder } from '../layoutReanimation/animationBuilder/commonTypes';
6
+
7
+ const AnimatedFlatList = createAnimatedComponent(FlatList as any) as any;
8
+
9
+ const createCellRenderer = (itemLayoutAnimation?: ILayoutAnimationBuilder) => {
10
+ const cellRenderer: React.FC<{
11
+ onLayout: (event: LayoutChangeEvent) => void;
12
+ }> = (props) => {
13
+ return (
14
+ <WrappedComponents.View
15
+ layout={itemLayoutAnimation}
16
+ onLayout={props.onLayout}>
17
+ {props.children}
18
+ </WrappedComponents.View>
19
+ );
20
+ };
21
+
22
+ return cellRenderer;
23
+ };
24
+
25
+ interface ReanimatedFlatlistProps<ItemT> extends FlatListProps<ItemT> {
26
+ itemLayoutAnimation?: ILayoutAnimationBuilder;
27
+ }
28
+
29
+ type ReanimatedFlatListFC<T = any> = React.FC<ReanimatedFlatlistProps<T>>;
30
+
31
+ const ReanimatedFlatlist: ReanimatedFlatListFC = ({
32
+ itemLayoutAnimation,
33
+ ...restProps
34
+ }) => {
35
+ const cellRenderer = React.useMemo(
36
+ () => createCellRenderer(itemLayoutAnimation),
37
+ []
38
+ );
39
+ return (
40
+ <AnimatedFlatList {...restProps} CellRendererComponent={cellRenderer} />
41
+ );
42
+ };
43
+
44
+ export default ReanimatedFlatlist;
@@ -0,0 +1,11 @@
1
+ import { Image, ScrollView, Text, View } from 'react-native';
2
+ import createAnimatedComponent from '../../createAnimatedComponent';
3
+
4
+ const WrappedComponents = {
5
+ View: createAnimatedComponent(View),
6
+ Text: createAnimatedComponent(Text as any),
7
+ Image: createAnimatedComponent(Image as any),
8
+ ScrollView: createAnimatedComponent(ScrollView),
9
+ };
10
+
11
+ export default WrappedComponents;
@@ -0,0 +1,9 @@
1
+ import ReanimatedFlatlist from './FlatList';
2
+ import WrappedComponents from './WrappedComponents';
3
+
4
+ const ReanimatedComponents = {
5
+ ...WrappedComponents,
6
+ FlatList: ReanimatedFlatlist,
7
+ };
8
+
9
+ export default ReanimatedComponents;
@@ -383,6 +383,9 @@ if (!NativeReanimatedModule.useOnlyV1) {
383
383
  info: runOnJS(capturableConsole.info),
384
384
  };
385
385
  _setGlobalConsole(console);
386
+ global.performance = {
387
+ now: global._chronoNow,
388
+ };
386
389
  })();
387
390
  }
388
391
 
@@ -26,6 +26,7 @@ declare global {
26
26
  y: number,
27
27
  animated: boolean
28
28
  ) => void;
29
+ const _chronoNow: () => number;
29
30
  namespace NodeJS {
30
31
  interface Global {
31
32
  __reanimatedWorkletInit: (worklet: WorkletFunction) => void;
@@ -37,6 +38,8 @@ declare global {
37
38
  _frameTimestamp: number | null;
38
39
  _measure: () => MeasuredDimensions;
39
40
  _scrollTo: () => void;
41
+ _chronoNow: () => number;
42
+ performance: { now: () => number };
40
43
  LayoutAnimationRepository: {
41
44
  configs: Record<string, unknown>;
42
45
  registerConfig(tag: number, config: Record<string, unknown>): void;
@@ -14,32 +14,43 @@ export type LayoutAnimation = {
14
14
 
15
15
  export type AnimationFunction = (a?: any, b?: any, c?: any) => any; // this is just a temporary mock
16
16
 
17
- export interface EntryExitAnimationsValues {
18
- originX: number;
19
- originY: number;
20
- width: number;
21
- height: number;
22
- globalOriginX: number;
23
- globalOriginY: number;
17
+ export interface EntryAnimationsValues {
18
+ targetOriginX: number;
19
+ targetOriginY: number;
20
+ targetWidth: number;
21
+ targetHeight: number;
22
+ targetGlobalOriginX: number;
23
+ targetGlobalOriginY: number;
24
+ }
25
+
26
+ export interface ExitAnimationsValues {
27
+ currentOriginX: number;
28
+ currentOriginY: number;
29
+ currentWidth: number;
30
+ currentHeight: number;
31
+ currentGlobalOriginX: number;
32
+ currentGlobalOriginY: number;
24
33
  }
25
34
 
26
35
  export type EntryExitAnimationFunction = (
27
- targetValues: EntryExitAnimationsValues
36
+ targetValues: EntryAnimationsValues | ExitAnimationsValues
28
37
  ) => LayoutAnimation;
29
38
 
39
+ export type AnimationConfigFunction<T> = (targetValues: T) => LayoutAnimation;
40
+
30
41
  export interface LayoutAnimationsValues {
31
- originX: number;
32
- originY: number;
33
- width: number;
34
- height: number;
35
- globalOriginX: number;
36
- globalOriginY: number;
37
- boriginX: number;
38
- boriginY: number;
39
- bwidth: number;
40
- bheight: number;
41
- bglobalOriginX: number;
42
- bglobalOriginY: number;
42
+ currentOriginX: number;
43
+ currentOriginY: number;
44
+ currentWidth: number;
45
+ currentHeight: number;
46
+ currentGlobalOriginX: number;
47
+ currentGlobalOriginY: number;
48
+ targetOriginX: number;
49
+ targetOriginY: number;
50
+ targetWidth: number;
51
+ targetHeight: number;
52
+ targetGlobalOriginX: number;
53
+ targetGlobalOriginY: number;
43
54
  windowWidth: number;
44
55
  windowHeight: number;
45
56
  }
@@ -76,3 +87,11 @@ export type LayoutAnimationAndConfig = [
76
87
  export interface IEntryExitAnimationBuilder {
77
88
  build: () => EntryExitAnimationFunction;
78
89
  }
90
+
91
+ export interface IEntryAnimationBuilder {
92
+ build: () => AnimationConfigFunction<EntryAnimationsValues>;
93
+ }
94
+
95
+ export interface IExitAnimationBuilder {
96
+ build: () => AnimationConfigFunction<ExitAnimationsValues>;
97
+ }
@@ -4,8 +4,12 @@ export { Keyframe } from './Keyframe';
4
4
  export {
5
5
  LayoutAnimation,
6
6
  AnimationFunction,
7
- EntryExitAnimationsValues,
7
+ EntryAnimationsValues,
8
+ ExitAnimationsValues,
8
9
  EntryExitAnimationFunction,
10
+ AnimationConfigFunction,
11
+ IEntryAnimationBuilder,
12
+ IExitAnimationBuilder,
9
13
  LayoutAnimationsValues,
10
14
  LayoutAnimationFunction,
11
15
  ILayoutAnimationBuilder,
@@ -1,42 +1,48 @@
1
1
  import {
2
2
  LayoutAnimationFunction,
3
- EntryExitAnimationFunction,
3
+ EntryAnimationsValues,
4
+ ExitAnimationsValues,
5
+ AnimationConfigFunction,
4
6
  } from '../animationBuilder/commonTypes';
5
7
 
6
8
  export const DefaultLayout: LayoutAnimationFunction = (values) => {
7
9
  'worklet';
8
10
  return {
9
11
  initialValues: {
10
- originX: values.originX,
11
- originY: values.originY,
12
- width: values.width,
13
- height: values.height,
12
+ originX: values.targetOriginX,
13
+ originY: values.targetOriginY,
14
+ width: values.targetWidth,
15
+ height: values.targetHeight,
14
16
  },
15
17
  animations: {},
16
18
  };
17
19
  };
18
20
 
19
- export const DefaultEntering: EntryExitAnimationFunction = (targetValues) => {
21
+ export const DefaultEntering: AnimationConfigFunction<EntryAnimationsValues> = (
22
+ values
23
+ ) => {
20
24
  'worklet';
21
25
  return {
22
26
  initialValues: {
23
- originX: targetValues.originX,
24
- originY: targetValues.originY,
25
- width: targetValues.width,
26
- height: targetValues.height,
27
+ originX: values.targetOriginX,
28
+ originY: values.targetOriginY,
29
+ width: values.targetWidth,
30
+ height: values.targetHeight,
27
31
  },
28
32
  animations: {},
29
33
  };
30
34
  };
31
35
 
32
- export const DefaultExiting: EntryExitAnimationFunction = (startValues) => {
36
+ export const DefaultExiting: AnimationConfigFunction<ExitAnimationsValues> = (
37
+ values
38
+ ) => {
33
39
  'worklet';
34
40
  return {
35
41
  initialValues: {
36
- originX: startValues.originX,
37
- originY: startValues.originY,
38
- width: startValues.width,
39
- height: startValues.height,
42
+ originX: values.currentOriginX,
43
+ originY: values.currentOriginY,
44
+ width: values.currentWidth,
45
+ height: values.currentHeight,
40
46
  },
41
47
  animations: {},
42
48
  };
@@ -1,17 +1,22 @@
1
1
  import {
2
2
  IEntryExitAnimationBuilder,
3
3
  EntryExitAnimationFunction,
4
+ EntryAnimationsValues,
5
+ ExitAnimationsValues,
6
+ AnimationConfigFunction,
7
+ IEntryAnimationBuilder,
8
+ IExitAnimationBuilder,
4
9
  } from '../animationBuilder/commonTypes';
5
10
  import { ComplexAnimationBuilder } from '../animationBuilder';
6
11
 
7
12
  export class FlipInXUp
8
13
  extends ComplexAnimationBuilder
9
- implements IEntryExitAnimationBuilder {
14
+ implements IEntryAnimationBuilder {
10
15
  static createInstance(): FlipInXUp {
11
16
  return new FlipInXUp();
12
17
  }
13
18
 
14
- build = (): EntryExitAnimationFunction => {
19
+ build = (): AnimationConfigFunction<EntryAnimationsValues> => {
15
20
  const delayFunction = this.getDelayFunction();
16
21
  const [animation, config] = this.getAnimationAndConfig();
17
22
  const delay = this.getDelay();
@@ -24,7 +29,7 @@ export class FlipInXUp
24
29
  transform: [
25
30
  { perspective: 500 },
26
31
  { rotateX: '90deg' },
27
- { translateY: -targetValues.height },
32
+ { translateY: -targetValues.targetHeight },
28
33
  ],
29
34
  },
30
35
  animations: {
@@ -42,12 +47,12 @@ export class FlipInXUp
42
47
 
43
48
  export class FlipInYLeft
44
49
  extends ComplexAnimationBuilder
45
- implements IEntryExitAnimationBuilder {
50
+ implements IEntryAnimationBuilder {
46
51
  static createInstance(): FlipInYLeft {
47
52
  return new FlipInYLeft();
48
53
  }
49
54
 
50
- build = (): EntryExitAnimationFunction => {
55
+ build = (): AnimationConfigFunction<EntryAnimationsValues> => {
51
56
  const delayFunction = this.getDelayFunction();
52
57
  const [animation, config] = this.getAnimationAndConfig();
53
58
  const delay = this.getDelay();
@@ -60,7 +65,7 @@ export class FlipInYLeft
60
65
  transform: [
61
66
  { perspective: 500 },
62
67
  { rotateY: '-90deg' },
63
- { translateX: -targetValues.width },
68
+ { translateX: -targetValues.targetWidth },
64
69
  ],
65
70
  },
66
71
  animations: {
@@ -78,12 +83,12 @@ export class FlipInYLeft
78
83
 
79
84
  export class FlipInXDown
80
85
  extends ComplexAnimationBuilder
81
- implements IEntryExitAnimationBuilder {
86
+ implements IEntryAnimationBuilder {
82
87
  static createInstance(): FlipInXDown {
83
88
  return new FlipInXDown();
84
89
  }
85
90
 
86
- build = (): EntryExitAnimationFunction => {
91
+ build = (): AnimationConfigFunction<EntryAnimationsValues> => {
87
92
  const delayFunction = this.getDelayFunction();
88
93
  const [animation, config] = this.getAnimationAndConfig();
89
94
  const delay = this.getDelay();
@@ -96,7 +101,7 @@ export class FlipInXDown
96
101
  transform: [
97
102
  { perspective: 500 },
98
103
  { rotateX: '-90deg' },
99
- { translateY: targetValues.height },
104
+ { translateY: targetValues.targetHeight },
100
105
  ],
101
106
  },
102
107
  animations: {
@@ -114,12 +119,12 @@ export class FlipInXDown
114
119
 
115
120
  export class FlipInYRight
116
121
  extends ComplexAnimationBuilder
117
- implements IEntryExitAnimationBuilder {
122
+ implements IEntryAnimationBuilder {
118
123
  static createInstance(): FlipInYRight {
119
124
  return new FlipInYRight();
120
125
  }
121
126
 
122
- build = (): EntryExitAnimationFunction => {
127
+ build = (): AnimationConfigFunction<EntryAnimationsValues> => {
123
128
  const delayFunction = this.getDelayFunction();
124
129
  const [animation, config] = this.getAnimationAndConfig();
125
130
  const delay = this.getDelay();
@@ -132,7 +137,7 @@ export class FlipInYRight
132
137
  transform: [
133
138
  { perspective: 500 },
134
139
  { rotateY: '90deg' },
135
- { translateX: targetValues.width },
140
+ { translateX: targetValues.targetWidth },
136
141
  ],
137
142
  },
138
143
  animations: {
@@ -212,12 +217,12 @@ export class FlipInEasyY
212
217
 
213
218
  export class FlipOutXUp
214
219
  extends ComplexAnimationBuilder
215
- implements IEntryExitAnimationBuilder {
220
+ implements IExitAnimationBuilder {
216
221
  static createInstance(): FlipOutXUp {
217
222
  return new FlipOutXUp();
218
223
  }
219
224
 
220
- build = (): EntryExitAnimationFunction => {
225
+ build = (): AnimationConfigFunction<ExitAnimationsValues> => {
221
226
  const delayFunction = this.getDelayFunction();
222
227
  const [animation, config] = this.getAnimationAndConfig();
223
228
  const delay = this.getDelay();
@@ -240,7 +245,7 @@ export class FlipOutXUp
240
245
  {
241
246
  translateY: delayFunction(
242
247
  delay,
243
- animation(-targetValues.height, config)
248
+ animation(-targetValues.currentHeight, config)
244
249
  ),
245
250
  },
246
251
  ],
@@ -253,12 +258,12 @@ export class FlipOutXUp
253
258
 
254
259
  export class FlipOutYLeft
255
260
  extends ComplexAnimationBuilder
256
- implements IEntryExitAnimationBuilder {
261
+ implements IExitAnimationBuilder {
257
262
  static createInstance(): FlipOutYLeft {
258
263
  return new FlipOutYLeft();
259
264
  }
260
265
 
261
- build = (): EntryExitAnimationFunction => {
266
+ build = (): AnimationConfigFunction<ExitAnimationsValues> => {
262
267
  const delayFunction = this.getDelayFunction();
263
268
  const [animation, config] = this.getAnimationAndConfig();
264
269
  const delay = this.getDelay();
@@ -281,7 +286,7 @@ export class FlipOutYLeft
281
286
  {
282
287
  translateX: delayFunction(
283
288
  delay,
284
- animation(-targetValues.width, config)
289
+ animation(-targetValues.currentWidth, config)
285
290
  ),
286
291
  },
287
292
  ],
@@ -294,12 +299,12 @@ export class FlipOutYLeft
294
299
 
295
300
  export class FlipOutXDown
296
301
  extends ComplexAnimationBuilder
297
- implements IEntryExitAnimationBuilder {
302
+ implements IExitAnimationBuilder {
298
303
  static createInstance(): FlipOutXDown {
299
304
  return new FlipOutXDown();
300
305
  }
301
306
 
302
- build = (): EntryExitAnimationFunction => {
307
+ build = (): AnimationConfigFunction<ExitAnimationsValues> => {
303
308
  const delayFunction = this.getDelayFunction();
304
309
  const [animation, config] = this.getAnimationAndConfig();
305
310
  const delay = this.getDelay();
@@ -322,7 +327,7 @@ export class FlipOutXDown
322
327
  {
323
328
  translateY: delayFunction(
324
329
  delay,
325
- animation(targetValues.height, config)
330
+ animation(targetValues.currentHeight, config)
326
331
  ),
327
332
  },
328
333
  ],
@@ -335,12 +340,12 @@ export class FlipOutXDown
335
340
 
336
341
  export class FlipOutYRight
337
342
  extends ComplexAnimationBuilder
338
- implements IEntryExitAnimationBuilder {
343
+ implements IExitAnimationBuilder {
339
344
  static createInstance(): FlipOutYRight {
340
345
  return new FlipOutYRight();
341
346
  }
342
347
 
343
- build = (): EntryExitAnimationFunction => {
348
+ build = (): AnimationConfigFunction<ExitAnimationsValues> => {
344
349
  const delayFunction = this.getDelayFunction();
345
350
  const [animation, config] = this.getAnimationAndConfig();
346
351
  const delay = this.getDelay();
@@ -363,7 +368,7 @@ export class FlipOutYRight
363
368
  {
364
369
  translateX: delayFunction(
365
370
  delay,
366
- animation(targetValues.width, config)
371
+ animation(targetValues.currentWidth, config)
367
372
  ),
368
373
  },
369
374
  ],