react-native-reanimated 3.0.0-rc.2 → 3.0.0-rc.3
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.
- package/Common/cpp/AnimatedSensor/AnimatedSensorModule.cpp +3 -0
- package/Common/cpp/{headers/AnimatedSensor → AnimatedSensor}/AnimatedSensorModule.h +0 -0
- package/Common/cpp/Fabric/FabricUtils.cpp +1 -1
- package/Common/cpp/{headers/Fabric → Fabric}/FabricUtils.h +0 -0
- package/Common/cpp/Fabric/ReanimatedUIManagerBinding.cpp +2 -0
- package/Common/cpp/{headers/Fabric → Fabric}/ReanimatedUIManagerBinding.h +0 -0
- package/Common/cpp/{headers/Fabric → Fabric}/ShadowTreeCloner.h +1 -1
- package/Common/cpp/LayoutAnimations/LayoutAnimationsProxy.cpp +2 -0
- package/Common/cpp/{headers/LayoutAnimations → LayoutAnimations}/LayoutAnimationsProxy.h +0 -0
- package/Common/cpp/NativeModules/NativeReanimatedModule.cpp +1 -0
- package/Common/cpp/{headers/NativeModules → NativeModules}/NativeReanimatedModule.h +5 -0
- package/Common/cpp/NativeModules/NativeReanimatedModuleSpec.cpp +2 -0
- package/Common/cpp/{headers/NativeModules → NativeModules}/NativeReanimatedModuleSpec.h +1 -1
- package/Common/cpp/ReanimatedRuntime/ReanimatedHermesRuntime.cpp +93 -0
- package/Common/cpp/ReanimatedRuntime/ReanimatedHermesRuntime.h +125 -0
- package/Common/cpp/ReanimatedRuntime/ReanimatedRuntime.cpp +50 -0
- package/Common/cpp/ReanimatedRuntime/ReanimatedRuntime.h +27 -0
- package/Common/cpp/ReanimatedRuntime/RuntimeInitialization.md +194 -0
- package/Common/cpp/{headers/Registries → Registries}/EventHandlerRegistry.h +0 -0
- package/Common/cpp/Registries/MapperRegistry.cpp +3 -1
- package/Common/cpp/{headers/Registries → Registries}/MapperRegistry.h +0 -0
- package/Common/cpp/{headers/Registries → Registries}/NewestShadowNodesRegistry.h +0 -0
- package/Common/cpp/Registries/WorkletsCache.cpp +8 -1
- package/Common/cpp/{headers/Registries → Registries}/WorkletsCache.h +0 -0
- package/Common/cpp/{headers/SharedItems → SharedItems}/FrozenObject.h +0 -0
- package/Common/cpp/{headers/SharedItems → SharedItems}/HostFunctionHandler.h +0 -0
- package/Common/cpp/SharedItems/MutableValue.cpp +2 -0
- package/Common/cpp/{headers/SharedItems → SharedItems}/MutableValue.h +0 -0
- package/Common/cpp/{headers/SharedItems → SharedItems}/MutableValueSetterProxy.h +0 -0
- package/Common/cpp/{headers/SharedItems → SharedItems}/RemoteObject.h +0 -0
- package/Common/cpp/{headers/SharedItems → SharedItems}/RuntimeManager.h +0 -0
- package/Common/cpp/SharedItems/ShareableValue.cpp +6 -0
- package/Common/cpp/{headers/SharedItems → SharedItems}/ShareableValue.h +0 -0
- package/Common/cpp/{headers/SharedItems → SharedItems}/SharedParent.h +0 -0
- package/Common/cpp/{headers/SharedItems → SharedItems}/ValueWrapper.h +0 -0
- package/Common/cpp/{headers/SpecTools → SpecTools}/ErrorHandler.h +0 -0
- package/Common/cpp/{headers/Tools → Tools}/FeaturesConfig.h +0 -0
- package/Common/cpp/Tools/JSIStoreValueUser.cpp +2 -2
- package/Common/cpp/{headers/Tools → Tools}/JSIStoreValueUser.h +0 -0
- package/Common/cpp/{headers/Tools → Tools}/Mapper.h +0 -0
- package/Common/cpp/{headers/Tools → Tools}/PlatformDepMethodsHolder.h +0 -0
- package/Common/cpp/{headers/Tools → Tools}/ReanimatedHiddenHeaders.h +1 -1
- package/Common/cpp/{headers/Tools → Tools}/RuntimeDecorator.h +0 -0
- package/Common/cpp/{headers/Tools → Tools}/Scheduler.h +0 -0
- package/Common/cpp/Tools/SingleInstanceChecker.h +58 -0
- package/Common/cpp/{headers/Tools → Tools}/WorkletEventHandler.h +0 -0
- package/RNReanimated.podspec +25 -23
- package/android/CMakeLists.txt +41 -38
- package/android/build.gradle +91 -72
- package/android/src/fabric/java/com/swmansion/reanimated/NativeProxy.java +10 -8
- package/android/src/main/cpp/{headers/AndroidErrorHandler.h → AndroidErrorHandler.h} +0 -0
- package/android/src/main/cpp/AndroidLogger.cpp +4 -1
- package/android/src/main/cpp/{headers/AndroidLogger.h → AndroidLogger.h} +0 -0
- package/android/src/main/cpp/{headers/AndroidScheduler.h → AndroidScheduler.h} +0 -0
- package/android/src/main/cpp/{headers/JNIHelper.h → JNIHelper.h} +0 -0
- package/android/src/main/cpp/{headers/LayoutAnimations.h → LayoutAnimations.h} +0 -0
- package/android/src/main/cpp/NativeProxy.cpp +12 -28
- package/android/src/main/cpp/{headers/NativeProxy.h → NativeProxy.h} +3 -1
- package/android/src/main/cpp/{headers/TurboModule.h → TurboModule.h} +0 -0
- package/android/src/main/java/com/swmansion/reanimated/ReanimatedMessageQueueThread.java +77 -0
- package/android/src/main/java/com/swmansion/reanimated/keyboardObserver/ReanimatedKeyboardEventListener.java +2 -1
- package/android/src/paper/java/com/swmansion/reanimated/NativeProxy.java +7 -7
- package/ios/REAModule.mm +10 -0
- package/ios/native/NativeProxy.mm +12 -19
- package/ios/native/REAInitializer.h +2 -2
- package/ios/native/REAInitializer.mm +2 -2
- package/ios/native/REAMessageThread.h +22 -0
- package/ios/native/REAMessageThread.mm +38 -0
- package/ios/native/UIResponder+Reanimated.mm +1 -1
- package/lib/commonjs/reanimated2/NativeMethods.js +20 -24
- package/lib/commonjs/reanimated2/NativeMethods.js.map +1 -1
- package/lib/commonjs/reanimated2/animation/delay.js +0 -12
- package/lib/commonjs/reanimated2/animation/delay.js.map +1 -1
- package/lib/commonjs/reanimated2/animation/repeat.js +0 -24
- package/lib/commonjs/reanimated2/animation/repeat.js.map +1 -1
- package/lib/commonjs/reanimated2/animation/sequence.js +0 -12
- package/lib/commonjs/reanimated2/animation/sequence.js.map +1 -1
- package/lib/commonjs/reanimated2/commonTypes.js.map +1 -1
- package/lib/commonjs/reanimated2/frameCallback/FrameCallbackRegistryJS.js +4 -4
- package/lib/commonjs/reanimated2/frameCallback/FrameCallbackRegistryJS.js.map +1 -1
- package/lib/commonjs/reanimated2/frameCallback/FrameCallbackRegistryUI.js +51 -19
- package/lib/commonjs/reanimated2/frameCallback/FrameCallbackRegistryUI.js.map +1 -1
- package/lib/commonjs/reanimated2/hook/index.js +8 -0
- package/lib/commonjs/reanimated2/hook/index.js.map +1 -1
- package/lib/commonjs/reanimated2/hook/useAnimatedScrollHandler.js.map +1 -1
- package/lib/commonjs/reanimated2/hook/useFrameCallback.js.map +1 -1
- package/lib/commonjs/reanimated2/hook/useScrollViewOffset.js +31 -0
- package/lib/commonjs/reanimated2/hook/useScrollViewOffset.js.map +1 -0
- package/lib/commonjs/reanimated2/utils.js +12 -3
- package/lib/commonjs/reanimated2/utils.js.map +1 -1
- package/lib/module/reanimated2/NativeMethods.js +20 -24
- package/lib/module/reanimated2/NativeMethods.js.map +1 -1
- package/lib/module/reanimated2/animation/delay.js +0 -10
- package/lib/module/reanimated2/animation/delay.js.map +1 -1
- package/lib/module/reanimated2/animation/repeat.js +0 -20
- package/lib/module/reanimated2/animation/repeat.js.map +1 -1
- package/lib/module/reanimated2/animation/sequence.js +0 -10
- package/lib/module/reanimated2/animation/sequence.js.map +1 -1
- package/lib/module/reanimated2/commonTypes.js.map +1 -1
- package/lib/module/reanimated2/frameCallback/FrameCallbackRegistryJS.js +4 -4
- package/lib/module/reanimated2/frameCallback/FrameCallbackRegistryJS.js.map +1 -1
- package/lib/module/reanimated2/frameCallback/FrameCallbackRegistryUI.js +51 -19
- package/lib/module/reanimated2/frameCallback/FrameCallbackRegistryUI.js.map +1 -1
- package/lib/module/reanimated2/hook/index.js +1 -0
- package/lib/module/reanimated2/hook/index.js.map +1 -1
- package/lib/module/reanimated2/hook/useAnimatedScrollHandler.js.map +1 -1
- package/lib/module/reanimated2/hook/useFrameCallback.js.map +1 -1
- package/lib/module/reanimated2/hook/useScrollViewOffset.js +20 -0
- package/lib/module/reanimated2/hook/useScrollViewOffset.js.map +1 -0
- package/lib/module/reanimated2/utils.js +13 -3
- package/lib/module/reanimated2/utils.js.map +1 -1
- package/package.json +6 -4
- package/plugin.js +105 -47
- package/react-native-reanimated.d.ts +13 -9
- package/src/reanimated2/NativeMethods.ts +28 -33
- package/src/reanimated2/animation/delay.ts +0 -12
- package/src/reanimated2/animation/repeat.ts +0 -25
- package/src/reanimated2/animation/sequence.ts +0 -13
- package/src/reanimated2/commonTypes.ts +9 -0
- package/src/reanimated2/frameCallback/FrameCallbackRegistryJS.ts +6 -9
- package/src/reanimated2/frameCallback/FrameCallbackRegistryUI.ts +78 -27
- package/src/reanimated2/hook/index.ts +1 -0
- package/src/reanimated2/hook/useAnimatedScrollHandler.ts +3 -1
- package/src/reanimated2/hook/useFrameCallback.ts +2 -1
- package/src/reanimated2/hook/useScrollViewOffset.ts +36 -0
- package/src/reanimated2/utils.ts +12 -5
- package/android/src/main/java/com/swmansion/reanimated/ReanimatedJSIModulePackage.java +0 -29
|
@@ -4,48 +4,80 @@ export const prepareUIRegistry = runOnUI(() => {
|
|
|
4
4
|
|
|
5
5
|
const frameCallbackRegistry = {
|
|
6
6
|
frameCallbackRegistry: new Map(),
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
activeFrameCallbacks: new Set(),
|
|
8
|
+
previousFrameTimestamp: null,
|
|
9
9
|
|
|
10
10
|
runCallbacks() {
|
|
11
|
-
const loop =
|
|
12
|
-
this.
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
const loop = timestamp => {
|
|
12
|
+
if (this.previousFrameTimestamp === null) {
|
|
13
|
+
this.previousFrameTimestamp = timestamp;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const delta = timestamp - this.previousFrameTimestamp;
|
|
17
|
+
this.activeFrameCallbacks.forEach(callbackId => {
|
|
18
|
+
const callbackDetails = this.frameCallbackRegistry.get(callbackId);
|
|
19
|
+
const {
|
|
20
|
+
startTime
|
|
21
|
+
} = callbackDetails;
|
|
22
|
+
|
|
23
|
+
if (startTime === null) {
|
|
24
|
+
// First frame
|
|
25
|
+
callbackDetails.startTime = timestamp;
|
|
26
|
+
callbackDetails.callback({
|
|
27
|
+
timestamp,
|
|
28
|
+
timeSincePreviousFrame: null,
|
|
29
|
+
timeSinceFirstFrame: 0
|
|
30
|
+
});
|
|
31
|
+
} else {
|
|
32
|
+
// Next frame
|
|
33
|
+
callbackDetails.callback({
|
|
34
|
+
timestamp,
|
|
35
|
+
timeSincePreviousFrame: delta,
|
|
36
|
+
timeSinceFirstFrame: timestamp - startTime
|
|
37
|
+
});
|
|
38
|
+
}
|
|
15
39
|
});
|
|
16
40
|
|
|
17
|
-
if (this.
|
|
41
|
+
if (this.activeFrameCallbacks.size > 0) {
|
|
42
|
+
this.previousFrameTimestamp = timestamp;
|
|
18
43
|
requestAnimationFrame(loop);
|
|
19
44
|
} else {
|
|
20
|
-
this.
|
|
45
|
+
this.previousFrameTimestamp = null;
|
|
21
46
|
}
|
|
22
|
-
};
|
|
47
|
+
}; // runCallback() should only be called after registering a callback,
|
|
48
|
+
// so if there is only one active callback, then it means that there were
|
|
49
|
+
// zero previously and the loop isn't running yet.
|
|
50
|
+
|
|
23
51
|
|
|
24
|
-
if (
|
|
52
|
+
if (this.activeFrameCallbacks.size === 1) {
|
|
25
53
|
requestAnimationFrame(loop);
|
|
26
|
-
this.isFrameCallbackRunning = true;
|
|
27
54
|
}
|
|
28
55
|
},
|
|
29
56
|
|
|
30
57
|
registerFrameCallback(callback, callbackId) {
|
|
31
|
-
this.frameCallbackRegistry.set(callbackId,
|
|
58
|
+
this.frameCallbackRegistry.set(callbackId, {
|
|
59
|
+
callback: callback,
|
|
60
|
+
startTime: null
|
|
61
|
+
});
|
|
32
62
|
},
|
|
33
63
|
|
|
34
|
-
unregisterFrameCallback(
|
|
35
|
-
this.manageStateFrameCallback(
|
|
36
|
-
this.frameCallbackRegistry.delete(
|
|
64
|
+
unregisterFrameCallback(callbackId) {
|
|
65
|
+
this.manageStateFrameCallback(callbackId, false);
|
|
66
|
+
this.frameCallbackRegistry.delete(callbackId);
|
|
37
67
|
},
|
|
38
68
|
|
|
39
|
-
manageStateFrameCallback(
|
|
40
|
-
if (
|
|
69
|
+
manageStateFrameCallback(callbackId, state) {
|
|
70
|
+
if (callbackId === -1) {
|
|
41
71
|
return;
|
|
42
72
|
}
|
|
43
73
|
|
|
44
74
|
if (state) {
|
|
45
|
-
this.
|
|
75
|
+
this.activeFrameCallbacks.add(callbackId);
|
|
46
76
|
this.runCallbacks();
|
|
47
77
|
} else {
|
|
48
|
-
this.
|
|
78
|
+
const callback = this.frameCallbackRegistry.get(callbackId);
|
|
79
|
+
callback.startTime = null;
|
|
80
|
+
this.activeFrameCallbacks.delete(callbackId);
|
|
49
81
|
}
|
|
50
82
|
}
|
|
51
83
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["runOnUI","prepareUIRegistry","frameCallbackRegistry","Map","
|
|
1
|
+
{"version":3,"names":["runOnUI","prepareUIRegistry","frameCallbackRegistry","Map","activeFrameCallbacks","Set","previousFrameTimestamp","runCallbacks","loop","timestamp","delta","forEach","callbackId","callbackDetails","get","startTime","callback","timeSincePreviousFrame","timeSinceFirstFrame","size","requestAnimationFrame","registerFrameCallback","set","unregisterFrameCallback","manageStateFrameCallback","delete","state","add","global","_frameCallbackRegistry"],"sources":["FrameCallbackRegistryUI.ts"],"sourcesContent":["import { runOnUI } from '../core';\n\ntype CallbackDetails = {\n callback: (frameInfo: FrameInfo) => void;\n startTime: number | null;\n};\n\nexport type FrameInfo = {\n timestamp: number;\n timeSincePreviousFrame: number | null;\n timeSinceFirstFrame: number;\n};\n\ninterface FrameCallbackRegistryUI {\n frameCallbackRegistry: Map<number, CallbackDetails>;\n activeFrameCallbacks: Set<number>;\n previousFrameTimestamp: number | null;\n runCallbacks: () => void;\n registerFrameCallback: (\n callback: (frameInfo: FrameInfo) => void,\n callbackId: number\n ) => void;\n unregisterFrameCallback: (callbackId: number) => void;\n manageStateFrameCallback: (callbackId: number, state: boolean) => void;\n}\n\nexport const prepareUIRegistry = runOnUI(() => {\n 'worklet';\n\n const frameCallbackRegistry: FrameCallbackRegistryUI = {\n frameCallbackRegistry: new Map<number, CallbackDetails>(),\n activeFrameCallbacks: new Set<number>(),\n previousFrameTimestamp: null,\n\n runCallbacks() {\n const loop = (timestamp: number) => {\n if (this.previousFrameTimestamp === null) {\n this.previousFrameTimestamp = timestamp;\n }\n\n const delta = timestamp - this.previousFrameTimestamp;\n\n this.activeFrameCallbacks.forEach((callbackId: number) => {\n const callbackDetails = this.frameCallbackRegistry.get(callbackId)!;\n\n const { startTime } = callbackDetails;\n\n if (startTime === null) {\n // First frame\n callbackDetails.startTime = timestamp;\n\n callbackDetails.callback({\n timestamp,\n timeSincePreviousFrame: null,\n timeSinceFirstFrame: 0,\n });\n } else {\n // Next frame\n callbackDetails.callback({\n timestamp,\n timeSincePreviousFrame: delta,\n timeSinceFirstFrame: timestamp - startTime,\n });\n }\n });\n\n if (this.activeFrameCallbacks.size > 0) {\n this.previousFrameTimestamp = timestamp;\n requestAnimationFrame(loop);\n } else {\n this.previousFrameTimestamp = null;\n }\n };\n\n // runCallback() should only be called after registering a callback,\n // so if there is only one active callback, then it means that there were\n // zero previously and the loop isn't running yet.\n if (this.activeFrameCallbacks.size === 1) {\n requestAnimationFrame(loop);\n }\n },\n\n registerFrameCallback(\n callback: (frameInfo: FrameInfo) => void,\n callbackId: number\n ) {\n this.frameCallbackRegistry.set(callbackId, {\n callback: callback,\n startTime: null,\n });\n },\n\n unregisterFrameCallback(callbackId: number) {\n this.manageStateFrameCallback(callbackId, false);\n this.frameCallbackRegistry.delete(callbackId);\n },\n\n manageStateFrameCallback(callbackId: number, state: boolean) {\n if (callbackId === -1) {\n return;\n }\n if (state) {\n this.activeFrameCallbacks.add(callbackId);\n this.runCallbacks();\n } else {\n const callback = this.frameCallbackRegistry.get(callbackId)!;\n callback.startTime = null;\n\n this.activeFrameCallbacks.delete(callbackId);\n }\n },\n };\n\n global._frameCallbackRegistry = frameCallbackRegistry;\n});\n"],"mappings":"AAAA,SAASA,OAAT,QAAwB,SAAxB;AA0BA,OAAO,MAAMC,iBAAiB,GAAGD,OAAO,CAAC,MAAM;EAC7C;;EAEA,MAAME,qBAA8C,GAAG;IACrDA,qBAAqB,EAAE,IAAIC,GAAJ,EAD8B;IAErDC,oBAAoB,EAAE,IAAIC,GAAJ,EAF+B;IAGrDC,sBAAsB,EAAE,IAH6B;;IAKrDC,YAAY,GAAG;MACb,MAAMC,IAAI,GAAIC,SAAD,IAAuB;QAClC,IAAI,KAAKH,sBAAL,KAAgC,IAApC,EAA0C;UACxC,KAAKA,sBAAL,GAA8BG,SAA9B;QACD;;QAED,MAAMC,KAAK,GAAGD,SAAS,GAAG,KAAKH,sBAA/B;QAEA,KAAKF,oBAAL,CAA0BO,OAA1B,CAAmCC,UAAD,IAAwB;UACxD,MAAMC,eAAe,GAAG,KAAKX,qBAAL,CAA2BY,GAA3B,CAA+BF,UAA/B,CAAxB;UAEA,MAAM;YAAEG;UAAF,IAAgBF,eAAtB;;UAEA,IAAIE,SAAS,KAAK,IAAlB,EAAwB;YACtB;YACAF,eAAe,CAACE,SAAhB,GAA4BN,SAA5B;YAEAI,eAAe,CAACG,QAAhB,CAAyB;cACvBP,SADuB;cAEvBQ,sBAAsB,EAAE,IAFD;cAGvBC,mBAAmB,EAAE;YAHE,CAAzB;UAKD,CATD,MASO;YACL;YACAL,eAAe,CAACG,QAAhB,CAAyB;cACvBP,SADuB;cAEvBQ,sBAAsB,EAAEP,KAFD;cAGvBQ,mBAAmB,EAAET,SAAS,GAAGM;YAHV,CAAzB;UAKD;QACF,CAtBD;;QAwBA,IAAI,KAAKX,oBAAL,CAA0Be,IAA1B,GAAiC,CAArC,EAAwC;UACtC,KAAKb,sBAAL,GAA8BG,SAA9B;UACAW,qBAAqB,CAACZ,IAAD,CAArB;QACD,CAHD,MAGO;UACL,KAAKF,sBAAL,GAA8B,IAA9B;QACD;MACF,CArCD,CADa,CAwCb;MACA;MACA;;;MACA,IAAI,KAAKF,oBAAL,CAA0Be,IAA1B,KAAmC,CAAvC,EAA0C;QACxCC,qBAAqB,CAACZ,IAAD,CAArB;MACD;IACF,CAnDoD;;IAqDrDa,qBAAqB,CACnBL,QADmB,EAEnBJ,UAFmB,EAGnB;MACA,KAAKV,qBAAL,CAA2BoB,GAA3B,CAA+BV,UAA/B,EAA2C;QACzCI,QAAQ,EAAEA,QAD+B;QAEzCD,SAAS,EAAE;MAF8B,CAA3C;IAID,CA7DoD;;IA+DrDQ,uBAAuB,CAACX,UAAD,EAAqB;MAC1C,KAAKY,wBAAL,CAA8BZ,UAA9B,EAA0C,KAA1C;MACA,KAAKV,qBAAL,CAA2BuB,MAA3B,CAAkCb,UAAlC;IACD,CAlEoD;;IAoErDY,wBAAwB,CAACZ,UAAD,EAAqBc,KAArB,EAAqC;MAC3D,IAAId,UAAU,KAAK,CAAC,CAApB,EAAuB;QACrB;MACD;;MACD,IAAIc,KAAJ,EAAW;QACT,KAAKtB,oBAAL,CAA0BuB,GAA1B,CAA8Bf,UAA9B;QACA,KAAKL,YAAL;MACD,CAHD,MAGO;QACL,MAAMS,QAAQ,GAAG,KAAKd,qBAAL,CAA2BY,GAA3B,CAA+BF,UAA/B,CAAjB;QACAI,QAAQ,CAACD,SAAT,GAAqB,IAArB;QAEA,KAAKX,oBAAL,CAA0BqB,MAA1B,CAAiCb,UAAjC;MACD;IACF;;EAjFoD,CAAvD;EAoFAgB,MAAM,CAACC,sBAAP,GAAgC3B,qBAAhC;AACD,CAxFuC,CAAjC"}
|
|
@@ -9,4 +9,5 @@ export { useDerivedValue } from './useDerivedValue';
|
|
|
9
9
|
export { useAnimatedSensor, SensorType } from './useAnimatedSensor';
|
|
10
10
|
export { useFrameCallback } from './useFrameCallback';
|
|
11
11
|
export { useAnimatedKeyboard } from './useAnimatedKeyboard';
|
|
12
|
+
export { useScrollViewOffset } from './useScrollViewOffset';
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useAnimatedProps","useEvent","useHandler","useWorkletCallback","useSharedValue","useAnimatedStyle","useAnimatedGestureHandler","useAnimatedReaction","useAnimatedRef","useAnimatedScrollHandler","useDerivedValue","useAnimatedSensor","SensorType","useFrameCallback","useAnimatedKeyboard"],"sources":["index.ts"],"sourcesContent":["export type { DependencyList } from './commonTypes';\nexport {\n useAnimatedProps,\n useEvent,\n useHandler,\n useWorkletCallback,\n} from './Hooks';\nexport { useSharedValue } from './useSharedValue';\nexport { useAnimatedStyle } from './useAnimatedStyle';\nexport type { AnimatedStyleResult } from './useAnimatedStyle';\nexport { useAnimatedGestureHandler } from './useAnimatedGestureHandler';\nexport type {\n GestureHandlerEvent,\n GestureHandlers,\n} from './useAnimatedGestureHandler';\nexport { useAnimatedReaction } from './useAnimatedReaction';\nexport type { AnimatedReactionWorkletFunction } from './useAnimatedReaction';\nexport { useAnimatedRef } from './useAnimatedRef';\nexport { useAnimatedScrollHandler } from './useAnimatedScrollHandler';\nexport type { ScrollHandler, ScrollHandlers } from './useAnimatedScrollHandler';\nexport { useDerivedValue } from './useDerivedValue';\nexport type { DerivedValue } from './useDerivedValue';\nexport { useAnimatedSensor, SensorType } from './useAnimatedSensor';\nexport { useFrameCallback } from './useFrameCallback';\nexport type { FrameCallback } from './useFrameCallback';\nexport { useAnimatedKeyboard } from './useAnimatedKeyboard';\n"],"mappings":"AACA,SACEA,gBADF,EAEEC,QAFF,EAGEC,UAHF,EAIEC,kBAJF,QAKO,SALP;AAMA,SAASC,cAAT,QAA+B,kBAA/B;AACA,SAASC,gBAAT,QAAiC,oBAAjC;AAEA,SAASC,yBAAT,QAA0C,6BAA1C;AAKA,SAASC,mBAAT,QAAoC,uBAApC;AAEA,SAASC,cAAT,QAA+B,kBAA/B;AACA,SAASC,wBAAT,QAAyC,4BAAzC;AAEA,SAASC,eAAT,QAAgC,mBAAhC;AAEA,SAASC,iBAAT,EAA4BC,UAA5B,QAA8C,qBAA9C;AACA,SAASC,gBAAT,QAAiC,oBAAjC;AAEA,SAASC,mBAAT,QAAoC,uBAApC"}
|
|
1
|
+
{"version":3,"names":["useAnimatedProps","useEvent","useHandler","useWorkletCallback","useSharedValue","useAnimatedStyle","useAnimatedGestureHandler","useAnimatedReaction","useAnimatedRef","useAnimatedScrollHandler","useDerivedValue","useAnimatedSensor","SensorType","useFrameCallback","useAnimatedKeyboard","useScrollViewOffset"],"sources":["index.ts"],"sourcesContent":["export type { DependencyList } from './commonTypes';\nexport {\n useAnimatedProps,\n useEvent,\n useHandler,\n useWorkletCallback,\n} from './Hooks';\nexport { useSharedValue } from './useSharedValue';\nexport { useAnimatedStyle } from './useAnimatedStyle';\nexport type { AnimatedStyleResult } from './useAnimatedStyle';\nexport { useAnimatedGestureHandler } from './useAnimatedGestureHandler';\nexport type {\n GestureHandlerEvent,\n GestureHandlers,\n} from './useAnimatedGestureHandler';\nexport { useAnimatedReaction } from './useAnimatedReaction';\nexport type { AnimatedReactionWorkletFunction } from './useAnimatedReaction';\nexport { useAnimatedRef } from './useAnimatedRef';\nexport { useAnimatedScrollHandler } from './useAnimatedScrollHandler';\nexport type { ScrollHandler, ScrollHandlers } from './useAnimatedScrollHandler';\nexport { useDerivedValue } from './useDerivedValue';\nexport type { DerivedValue } from './useDerivedValue';\nexport { useAnimatedSensor, SensorType } from './useAnimatedSensor';\nexport { useFrameCallback } from './useFrameCallback';\nexport type { FrameCallback } from './useFrameCallback';\nexport { useAnimatedKeyboard } from './useAnimatedKeyboard';\nexport { useScrollViewOffset } from './useScrollViewOffset';\n"],"mappings":"AACA,SACEA,gBADF,EAEEC,QAFF,EAGEC,UAHF,EAIEC,kBAJF,QAKO,SALP;AAMA,SAASC,cAAT,QAA+B,kBAA/B;AACA,SAASC,gBAAT,QAAiC,oBAAjC;AAEA,SAASC,yBAAT,QAA0C,6BAA1C;AAKA,SAASC,mBAAT,QAAoC,uBAApC;AAEA,SAASC,cAAT,QAA+B,kBAA/B;AACA,SAASC,wBAAT,QAAyC,4BAAzC;AAEA,SAASC,eAAT,QAAgC,mBAAhC;AAEA,SAASC,iBAAT,EAA4BC,UAA5B,QAA8C,qBAA9C;AACA,SAASC,gBAAT,QAAiC,oBAAjC;AAEA,SAASC,mBAAT,QAAoC,uBAApC;AACA,SAASC,mBAAT,QAAoC,uBAApC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEvent","useHandler","useAnimatedScrollHandler","handlers","dependencies","scrollHandlers","onScroll","context","doDependenciesDiffer","subscribeForEvents","onBeginDrag","undefined","push","onEndDrag","onMomentumBegin","onMomentumEnd","event","eventName","endsWith"],"sources":["useAnimatedScrollHandler.ts"],"sourcesContent":["import { RefObject } from 'react';\nimport { NativeScrollEvent } from 'react-native';\nimport { Context, NativeEvent, WorkletFunction } from '../commonTypes';\nimport WorkletEventHandler from '../WorkletEventHandler';\nimport { DependencyList } from './commonTypes';\nimport { useEvent, useHandler } from './Hooks';\n\nexport interface ScrollHandler<TContext extends Context>\n extends WorkletFunction {\n (event: NativeScrollEvent, context?: TContext): void;\n}\n\
|
|
1
|
+
{"version":3,"names":["useEvent","useHandler","useAnimatedScrollHandler","handlers","dependencies","scrollHandlers","onScroll","context","doDependenciesDiffer","subscribeForEvents","onBeginDrag","undefined","push","onEndDrag","onMomentumBegin","onMomentumEnd","event","eventName","endsWith"],"sources":["useAnimatedScrollHandler.ts"],"sourcesContent":["import { RefObject } from 'react';\nimport { NativeScrollEvent } from 'react-native';\nimport { Context, NativeEvent, WorkletFunction } from '../commonTypes';\nimport WorkletEventHandler from '../WorkletEventHandler';\nimport { DependencyList } from './commonTypes';\nimport { useEvent, useHandler } from './Hooks';\n\nexport interface ScrollHandler<TContext extends Context>\n extends WorkletFunction {\n (event: NativeScrollEvent, context?: TContext): void;\n}\n\nexport interface ScrollEvent\n extends NativeScrollEvent,\n NativeEvent<ScrollEvent> {\n eventName: string;\n}\nexport interface ScrollHandlers<TContext extends Context> {\n [key: string]: ScrollHandler<TContext> | undefined;\n onScroll?: ScrollHandler<TContext>;\n onBeginDrag?: ScrollHandler<TContext>;\n onEndDrag?: ScrollHandler<TContext>;\n onMomentumBegin?: ScrollHandler<TContext>;\n onMomentumEnd?: ScrollHandler<TContext>;\n}\n\nexport function useAnimatedScrollHandler<TContext extends Context>(\n handlers: ScrollHandlers<TContext> | ScrollHandler<TContext>,\n dependencies?: DependencyList\n): RefObject<WorkletEventHandler<ScrollEvent>> {\n // case when handlers is a function\n const scrollHandlers: ScrollHandlers<TContext> =\n typeof handlers === 'function' ? { onScroll: handlers } : handlers;\n const { context, doDependenciesDiffer } = useHandler<ScrollEvent, TContext>(\n scrollHandlers,\n dependencies\n );\n\n // build event subscription array\n const subscribeForEvents = ['onScroll'];\n if (scrollHandlers.onBeginDrag !== undefined) {\n subscribeForEvents.push('onScrollBeginDrag');\n }\n if (scrollHandlers.onEndDrag !== undefined) {\n subscribeForEvents.push('onScrollEndDrag');\n }\n if (scrollHandlers.onMomentumBegin !== undefined) {\n subscribeForEvents.push('onMomentumScrollBegin');\n }\n if (scrollHandlers.onMomentumEnd !== undefined) {\n subscribeForEvents.push('onMomentumScrollEnd');\n }\n\n return useEvent<ScrollEvent>(\n (event: ScrollEvent) => {\n 'worklet';\n const {\n onScroll,\n onBeginDrag,\n onEndDrag,\n onMomentumBegin,\n onMomentumEnd,\n } = scrollHandlers;\n if (onScroll && event.eventName.endsWith('onScroll')) {\n onScroll(event, context);\n } else if (onBeginDrag && event.eventName.endsWith('onScrollBeginDrag')) {\n onBeginDrag(event, context);\n } else if (onEndDrag && event.eventName.endsWith('onScrollEndDrag')) {\n onEndDrag(event, context);\n } else if (\n onMomentumBegin &&\n event.eventName.endsWith('onMomentumScrollBegin')\n ) {\n onMomentumBegin(event, context);\n } else if (\n onMomentumEnd &&\n event.eventName.endsWith('onMomentumScrollEnd')\n ) {\n onMomentumEnd(event, context);\n }\n },\n subscribeForEvents,\n doDependenciesDiffer\n );\n}\n"],"mappings":"AAKA,SAASA,QAAT,EAAmBC,UAAnB,QAAqC,SAArC;AAqBA,OAAO,SAASC,wBAAT,CACLC,QADK,EAELC,YAFK,EAGwC;EAC7C;EACA,MAAMC,cAAwC,GAC5C,OAAOF,QAAP,KAAoB,UAApB,GAAiC;IAAEG,QAAQ,EAAEH;EAAZ,CAAjC,GAA0DA,QAD5D;EAEA,MAAM;IAAEI,OAAF;IAAWC;EAAX,IAAoCP,UAAU,CAClDI,cADkD,EAElDD,YAFkD,CAApD,CAJ6C,CAS7C;;EACA,MAAMK,kBAAkB,GAAG,CAAC,UAAD,CAA3B;;EACA,IAAIJ,cAAc,CAACK,WAAf,KAA+BC,SAAnC,EAA8C;IAC5CF,kBAAkB,CAACG,IAAnB,CAAwB,mBAAxB;EACD;;EACD,IAAIP,cAAc,CAACQ,SAAf,KAA6BF,SAAjC,EAA4C;IAC1CF,kBAAkB,CAACG,IAAnB,CAAwB,iBAAxB;EACD;;EACD,IAAIP,cAAc,CAACS,eAAf,KAAmCH,SAAvC,EAAkD;IAChDF,kBAAkB,CAACG,IAAnB,CAAwB,uBAAxB;EACD;;EACD,IAAIP,cAAc,CAACU,aAAf,KAAiCJ,SAArC,EAAgD;IAC9CF,kBAAkB,CAACG,IAAnB,CAAwB,qBAAxB;EACD;;EAED,OAAOZ,QAAQ,CACZgB,KAAD,IAAwB;IACtB;;IACA,MAAM;MACJV,QADI;MAEJI,WAFI;MAGJG,SAHI;MAIJC,eAJI;MAKJC;IALI,IAMFV,cANJ;;IAOA,IAAIC,QAAQ,IAAIU,KAAK,CAACC,SAAN,CAAgBC,QAAhB,CAAyB,UAAzB,CAAhB,EAAsD;MACpDZ,QAAQ,CAACU,KAAD,EAAQT,OAAR,CAAR;IACD,CAFD,MAEO,IAAIG,WAAW,IAAIM,KAAK,CAACC,SAAN,CAAgBC,QAAhB,CAAyB,mBAAzB,CAAnB,EAAkE;MACvER,WAAW,CAACM,KAAD,EAAQT,OAAR,CAAX;IACD,CAFM,MAEA,IAAIM,SAAS,IAAIG,KAAK,CAACC,SAAN,CAAgBC,QAAhB,CAAyB,iBAAzB,CAAjB,EAA8D;MACnEL,SAAS,CAACG,KAAD,EAAQT,OAAR,CAAT;IACD,CAFM,MAEA,IACLO,eAAe,IACfE,KAAK,CAACC,SAAN,CAAgBC,QAAhB,CAAyB,uBAAzB,CAFK,EAGL;MACAJ,eAAe,CAACE,KAAD,EAAQT,OAAR,CAAf;IACD,CALM,MAKA,IACLQ,aAAa,IACbC,KAAK,CAACC,SAAN,CAAgBC,QAAhB,CAAyB,qBAAzB,CAFK,EAGL;MACAH,aAAa,CAACC,KAAD,EAAQT,OAAR,CAAb;IACD;EACF,CA3BY,EA4BbE,kBA5Ba,EA6BbD,oBA7Ba,CAAf;AA+BD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","FrameCallbackRegistryJS","frameCallbackRegistry","useFrameCallback","callback","autostart","ref","setActive","isActive","manageStateFrameCallback","current","callbackId","registerFrameCallback","unregisterFrameCallback"],"sources":["useFrameCallback.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport FrameCallbackRegistryJS from '../frameCallback/FrameCallbackRegistryJS';\n\nexport type FrameCallback = {\n setActive: (isActive: boolean) => void;\n isActive: boolean;\n callbackId: number;\n};\nconst frameCallbackRegistry = new FrameCallbackRegistryJS();\n\nexport function useFrameCallback(\n callback: () => void,\n autostart = true\n): FrameCallback {\n const ref = useRef<FrameCallback>({\n setActive: (isActive: boolean) => {\n frameCallbackRegistry.manageStateFrameCallback(\n ref.current.callbackId,\n isActive\n );\n ref.current.isActive = isActive;\n },\n isActive: autostart,\n callbackId: -1,\n });\n\n useEffect(() => {\n ref.current.callbackId =\n frameCallbackRegistry.registerFrameCallback(callback);\n ref.current.setActive(ref.current.isActive);\n\n return () => {\n frameCallbackRegistry.unregisterFrameCallback(ref.current.callbackId);\n ref.current.callbackId = -1;\n };\n }, [callback, autostart]);\n\n return ref.current;\n}\n"],"mappings":"AAAA,SAASA,SAAT,EAAoBC,MAApB,QAAkC,OAAlC;AACA,OAAOC,uBAAP,MAAoC,0CAApC;
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","FrameCallbackRegistryJS","frameCallbackRegistry","useFrameCallback","callback","autostart","ref","setActive","isActive","manageStateFrameCallback","current","callbackId","registerFrameCallback","unregisterFrameCallback"],"sources":["useFrameCallback.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport FrameCallbackRegistryJS from '../frameCallback/FrameCallbackRegistryJS';\nimport { FrameInfo } from '../frameCallback/FrameCallbackRegistryUI';\n\nexport type FrameCallback = {\n setActive: (isActive: boolean) => void;\n isActive: boolean;\n callbackId: number;\n};\nconst frameCallbackRegistry = new FrameCallbackRegistryJS();\n\nexport function useFrameCallback(\n callback: (frameInfo: FrameInfo) => void,\n autostart = true\n): FrameCallback {\n const ref = useRef<FrameCallback>({\n setActive: (isActive: boolean) => {\n frameCallbackRegistry.manageStateFrameCallback(\n ref.current.callbackId,\n isActive\n );\n ref.current.isActive = isActive;\n },\n isActive: autostart,\n callbackId: -1,\n });\n\n useEffect(() => {\n ref.current.callbackId =\n frameCallbackRegistry.registerFrameCallback(callback);\n ref.current.setActive(ref.current.isActive);\n\n return () => {\n frameCallbackRegistry.unregisterFrameCallback(ref.current.callbackId);\n ref.current.callbackId = -1;\n };\n }, [callback, autostart]);\n\n return ref.current;\n}\n"],"mappings":"AAAA,SAASA,SAAT,EAAoBC,MAApB,QAAkC,OAAlC;AACA,OAAOC,uBAAP,MAAoC,0CAApC;AAQA,MAAMC,qBAAqB,GAAG,IAAID,uBAAJ,EAA9B;AAEA,OAAO,SAASE,gBAAT,CACLC,QADK,EAGU;EAAA,IADfC,SACe,uEADH,IACG;EACf,MAAMC,GAAG,GAAGN,MAAM,CAAgB;IAChCO,SAAS,EAAGC,QAAD,IAAuB;MAChCN,qBAAqB,CAACO,wBAAtB,CACEH,GAAG,CAACI,OAAJ,CAAYC,UADd,EAEEH,QAFF;MAIAF,GAAG,CAACI,OAAJ,CAAYF,QAAZ,GAAuBA,QAAvB;IACD,CAP+B;IAQhCA,QAAQ,EAAEH,SARsB;IAShCM,UAAU,EAAE,CAAC;EATmB,CAAhB,CAAlB;EAYAZ,SAAS,CAAC,MAAM;IACdO,GAAG,CAACI,OAAJ,CAAYC,UAAZ,GACET,qBAAqB,CAACU,qBAAtB,CAA4CR,QAA5C,CADF;IAEAE,GAAG,CAACI,OAAJ,CAAYH,SAAZ,CAAsBD,GAAG,CAACI,OAAJ,CAAYF,QAAlC;IAEA,OAAO,MAAM;MACXN,qBAAqB,CAACW,uBAAtB,CAA8CP,GAAG,CAACI,OAAJ,CAAYC,UAA1D;MACAL,GAAG,CAACI,OAAJ,CAAYC,UAAZ,GAAyB,CAAC,CAA1B;IACD,CAHD;EAID,CATQ,EASN,CAACP,QAAD,EAAWC,SAAX,CATM,CAAT;EAWA,OAAOC,GAAG,CAACI,OAAX;AACD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { useEffect, useRef } from 'react';
|
|
2
|
+
import { findNodeHandle } from 'react-native';
|
|
3
|
+
import { useEvent, useSharedValue } from '.';
|
|
4
|
+
const subscribeForEvents = ['onScroll', 'onScrollBeginDrag', 'onScrollEndDrag', 'onMomentumScrollBegin', 'onMomentumScrollEnd'];
|
|
5
|
+
export function useScrollViewOffset(aref) {
|
|
6
|
+
const offsetRef = useRef(useSharedValue(0));
|
|
7
|
+
const event = useEvent(event => {
|
|
8
|
+
'worklet';
|
|
9
|
+
|
|
10
|
+
offsetRef.current.value = event.contentOffset.x === 0 ? event.contentOffset.y : event.contentOffset.x;
|
|
11
|
+
}, subscribeForEvents);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
var _event$current;
|
|
14
|
+
|
|
15
|
+
const viewTag = findNodeHandle(aref.current);
|
|
16
|
+
(_event$current = event.current) === null || _event$current === void 0 ? void 0 : _event$current.registerForEvents(viewTag);
|
|
17
|
+
}, [aref.current]);
|
|
18
|
+
return offsetRef.current;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=useScrollViewOffset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","findNodeHandle","useEvent","useSharedValue","subscribeForEvents","useScrollViewOffset","aref","offsetRef","event","current","value","contentOffset","x","y","viewTag","registerForEvents"],"sources":["useScrollViewOffset.ts"],"sourcesContent":["import { RefObject, useEffect, useRef } from 'react';\n\nimport { findNodeHandle } from 'react-native';\nimport type Animated from 'react-native-reanimated';\nimport { useEvent, useSharedValue } from '.';\nimport { SharedValue } from '../commonTypes';\nimport { ScrollEvent } from './useAnimatedScrollHandler';\n\nconst subscribeForEvents = [\n 'onScroll',\n 'onScrollBeginDrag',\n 'onScrollEndDrag',\n 'onMomentumScrollBegin',\n 'onMomentumScrollEnd',\n];\n\nexport function useScrollViewOffset(\n aref: RefObject<Animated.ScrollView>\n): SharedValue<number> {\n const offsetRef = useRef(useSharedValue(0));\n\n const event = useEvent<ScrollEvent>((event: ScrollEvent) => {\n 'worklet';\n offsetRef.current.value =\n event.contentOffset.x === 0\n ? event.contentOffset.y\n : event.contentOffset.x;\n }, subscribeForEvents);\n\n useEffect(() => {\n const viewTag = findNodeHandle(aref.current);\n event.current?.registerForEvents(viewTag as number);\n }, [aref.current]);\n\n return offsetRef.current;\n}\n"],"mappings":"AAAA,SAAoBA,SAApB,EAA+BC,MAA/B,QAA6C,OAA7C;AAEA,SAASC,cAAT,QAA+B,cAA/B;AAEA,SAASC,QAAT,EAAmBC,cAAnB,QAAyC,GAAzC;AAIA,MAAMC,kBAAkB,GAAG,CACzB,UADyB,EAEzB,mBAFyB,EAGzB,iBAHyB,EAIzB,uBAJyB,EAKzB,qBALyB,CAA3B;AAQA,OAAO,SAASC,mBAAT,CACLC,IADK,EAEgB;EACrB,MAAMC,SAAS,GAAGP,MAAM,CAACG,cAAc,CAAC,CAAD,CAAf,CAAxB;EAEA,MAAMK,KAAK,GAAGN,QAAQ,CAAeM,KAAD,IAAwB;IAC1D;;IACAD,SAAS,CAACE,OAAV,CAAkBC,KAAlB,GACEF,KAAK,CAACG,aAAN,CAAoBC,CAApB,KAA0B,CAA1B,GACIJ,KAAK,CAACG,aAAN,CAAoBE,CADxB,GAEIL,KAAK,CAACG,aAAN,CAAoBC,CAH1B;EAID,CANqB,EAMnBR,kBANmB,CAAtB;EAQAL,SAAS,CAAC,MAAM;IAAA;;IACd,MAAMe,OAAO,GAAGb,cAAc,CAACK,IAAI,CAACG,OAAN,CAA9B;IACA,kBAAAD,KAAK,CAACC,OAAN,kEAAeM,iBAAf,CAAiCD,OAAjC;EACD,CAHQ,EAGN,CAACR,IAAI,CAACG,OAAN,CAHM,CAAT;EAKA,OAAOF,SAAS,CAACE,OAAjB;AACD"}
|
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import { measure } from './NativeMethods';
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Given an absolute position and a component ref, returns the relative
|
|
5
|
+
* position in the component's local coordinate space.
|
|
6
|
+
*/
|
|
7
|
+
export function getRelativeCoords(parentRef, absoluteX, absoluteY) {
|
|
3
8
|
'worklet';
|
|
4
9
|
|
|
5
10
|
const parentCoords = measure(parentRef);
|
|
11
|
+
|
|
12
|
+
if (parentCoords === null) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
|
|
6
16
|
return {
|
|
7
|
-
x:
|
|
8
|
-
y:
|
|
17
|
+
x: absoluteX - parentCoords.x,
|
|
18
|
+
y: absoluteY - parentCoords.y
|
|
9
19
|
};
|
|
10
20
|
}
|
|
11
21
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["measure","getRelativeCoords","parentRef","
|
|
1
|
+
{"version":3,"names":["measure","getRelativeCoords","parentRef","absoluteX","absoluteY","parentCoords","x","y"],"sources":["utils.ts"],"sourcesContent":["import { Component } from 'react';\nimport { measure } from './NativeMethods';\nimport { RefObjectFunction } from './hook/commonTypes';\n\nexport interface ComponentCoords {\n x: number;\n y: number;\n}\n\n/**\n * Given an absolute position and a component ref, returns the relative\n * position in the component's local coordinate space.\n */\nexport function getRelativeCoords(\n parentRef: RefObjectFunction<Component>,\n absoluteX: number,\n absoluteY: number\n): ComponentCoords | null {\n 'worklet';\n const parentCoords = measure(parentRef);\n if (parentCoords === null) {\n return null;\n }\n return {\n x: absoluteX - parentCoords.x,\n y: absoluteY - parentCoords.y,\n };\n}\n"],"mappings":"AACA,SAASA,OAAT,QAAwB,iBAAxB;;AAQA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAT,CACLC,SADK,EAELC,SAFK,EAGLC,SAHK,EAImB;EACxB;;EACA,MAAMC,YAAY,GAAGL,OAAO,CAACE,SAAD,CAA5B;;EACA,IAAIG,YAAY,KAAK,IAArB,EAA2B;IACzB,OAAO,IAAP;EACD;;EACD,OAAO;IACLC,CAAC,EAAEH,SAAS,GAAGE,YAAY,CAACC,CADvB;IAELC,CAAC,EAAEH,SAAS,GAAGC,YAAY,CAACE;EAFvB,CAAP;AAID"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-reanimated",
|
|
3
|
-
"version": "3.0.0-rc.
|
|
3
|
+
"version": "3.0.0-rc.3",
|
|
4
4
|
"description": "More powerful alternative to Animated library for React Native.",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "yarn run format:js && yarn run lint:js && yarn run test:unit",
|
|
7
7
|
"test:unit": "jest",
|
|
8
|
-
"lint": "yarn lint:js && yarn lint:cpp && yarn lint:java",
|
|
8
|
+
"lint": "yarn lint:js && yarn lint:cpp && yarn lint:java && yarn lint:docs",
|
|
9
9
|
"lint:js": "eslint --ext '.js,.ts,.tsx' src/ && yarn prettier --check src/",
|
|
10
|
+
"lint:docs": "cd docs && yarn lint && cd ..",
|
|
10
11
|
"lint:java": "./android/gradlew -p android spotlessCheck -q",
|
|
11
12
|
"lint:cpp": "./scripts/cpplint.sh",
|
|
12
13
|
"format": "yarn format:js && yarn format:java && yarn format:ios && yarn format:android && yarn format:common",
|
|
@@ -120,7 +121,7 @@
|
|
|
120
121
|
"madge": "^5.0.1",
|
|
121
122
|
"prettier": "^2.5.1",
|
|
122
123
|
"react": "17.0.2",
|
|
123
|
-
"react-native": "0.70.
|
|
124
|
+
"react-native": "0.70.1",
|
|
124
125
|
"react-native-builder-bob": "^0.18.3",
|
|
125
126
|
"react-native-codegen": "^0.0.7",
|
|
126
127
|
"react-native-gesture-handler": "^2.4.2",
|
|
@@ -137,7 +138,8 @@
|
|
|
137
138
|
"android/src/**/*.java": "yarn format:java",
|
|
138
139
|
"android/src/**/*.{h,cpp}": "yarn format:android",
|
|
139
140
|
"ios/**/*.{h,m,mm,cpp}": "yarn format:ios",
|
|
140
|
-
"Common/**/*.{h,cpp}": "yarn format:common"
|
|
141
|
+
"Common/**/*.{h,cpp}": "yarn format:common",
|
|
142
|
+
"docs/**/*.{md,mdx}": "yarn lint:docs"
|
|
141
143
|
},
|
|
142
144
|
"release-it": {
|
|
143
145
|
"hooks": {
|
package/plugin.js
CHANGED
|
@@ -3,6 +3,7 @@ const generate = require('@babel/generator').default;
|
|
|
3
3
|
const hash = require('string-hash-64');
|
|
4
4
|
const traverse = require('@babel/traverse').default;
|
|
5
5
|
const { transformSync } = require('@babel/core');
|
|
6
|
+
const fs = require('fs');
|
|
6
7
|
/**
|
|
7
8
|
* holds a map of function names as keys and array of argument indexes as values which should be automatically workletized(they have to be functions)(starting from 0)
|
|
8
9
|
*/
|
|
@@ -277,49 +278,105 @@ class ClosureGenerator {
|
|
|
277
278
|
}
|
|
278
279
|
}
|
|
279
280
|
|
|
280
|
-
function
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
return body;
|
|
284
|
-
}
|
|
281
|
+
function isRelease() {
|
|
282
|
+
return process.env.BABEL_ENV === 'release';
|
|
283
|
+
}
|
|
285
284
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
285
|
+
function shouldGenerateSourceMap() {
|
|
286
|
+
if (isRelease()) {
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if (process.env.REANIMATED_PLUGIN_TESTS === 'jest') {
|
|
291
|
+
// We want to detect this, so we can disable source maps (because they break
|
|
292
|
+
// snapshot tests with jest).
|
|
293
|
+
return false;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
return true;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
function buildWorkletString(t, fun, closureVariables, name, inputMap) {
|
|
300
|
+
function prependClosureVariablesIfNecessary() {
|
|
301
|
+
const closureDeclaration = t.variableDeclaration('const', [
|
|
302
|
+
t.variableDeclarator(
|
|
303
|
+
t.objectPattern(
|
|
304
|
+
closureVariables.map((variable) =>
|
|
305
|
+
t.objectProperty(
|
|
306
|
+
t.identifier(variable.name),
|
|
307
|
+
t.identifier(variable.name),
|
|
308
|
+
false,
|
|
309
|
+
true
|
|
297
310
|
)
|
|
298
|
-
)
|
|
299
|
-
t.memberExpression(t.identifier('jsThis'), t.identifier('_closure'))
|
|
311
|
+
)
|
|
300
312
|
),
|
|
301
|
-
|
|
302
|
-
|
|
313
|
+
t.memberExpression(t.identifier('jsThis'), t.identifier('_closure'))
|
|
314
|
+
),
|
|
303
315
|
]);
|
|
304
|
-
}
|
|
305
316
|
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
317
|
+
function prependClosure(path) {
|
|
318
|
+
if (closureVariables.length === 0 || path.parent.type !== 'Program') {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
path.node.body.body.unshift(closureDeclaration);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
return {
|
|
326
|
+
visitor: {
|
|
327
|
+
FunctionDeclaration(path) {
|
|
328
|
+
prependClosure(path);
|
|
329
|
+
},
|
|
330
|
+
FunctionExpression(path) {
|
|
331
|
+
prependClosure(path);
|
|
332
|
+
},
|
|
333
|
+
ArrowFunctionExpression(path) {
|
|
334
|
+
prependClosure(path);
|
|
335
|
+
},
|
|
336
|
+
ObjectMethod(path) {
|
|
337
|
+
prependClosure(path);
|
|
338
|
+
},
|
|
339
|
+
},
|
|
340
|
+
};
|
|
341
|
+
}
|
|
311
342
|
|
|
312
|
-
const expression =
|
|
313
|
-
({ type }) => type === '
|
|
314
|
-
|
|
343
|
+
const expression =
|
|
344
|
+
fun.program.body.find(({ type }) => type === 'FunctionDeclaration') ||
|
|
345
|
+
fun.program.body.find(({ type }) => type === 'ExpressionStatement')
|
|
346
|
+
.expression;
|
|
315
347
|
|
|
316
348
|
const workletFunction = t.functionExpression(
|
|
317
349
|
t.identifier(name),
|
|
318
350
|
expression.params,
|
|
319
|
-
|
|
351
|
+
expression.body
|
|
320
352
|
);
|
|
321
353
|
|
|
322
|
-
|
|
354
|
+
const code = generate(workletFunction).code;
|
|
355
|
+
|
|
356
|
+
if (shouldGenerateSourceMap()) {
|
|
357
|
+
// Clear contents array (should be empty anyways)
|
|
358
|
+
inputMap.sourcesContent = [];
|
|
359
|
+
// Include source contents in source map, because Flipper/iframe is not
|
|
360
|
+
// allowed to read files from disk.
|
|
361
|
+
for (const sourceFile of inputMap.sources) {
|
|
362
|
+
inputMap.sourcesContent.push(
|
|
363
|
+
fs.readFileSync(sourceFile).toString('utf-8')
|
|
364
|
+
);
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
const transformed = transformSync(code, {
|
|
369
|
+
plugins: [prependClosureVariablesIfNecessary()],
|
|
370
|
+
compact: !shouldGenerateSourceMap(),
|
|
371
|
+
sourceMaps: shouldGenerateSourceMap() ? 'inline' : false,
|
|
372
|
+
inputSourceMap: inputMap,
|
|
373
|
+
ast: false,
|
|
374
|
+
babelrc: false,
|
|
375
|
+
configFile: false,
|
|
376
|
+
comments: false,
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
return transformed.code;
|
|
323
380
|
}
|
|
324
381
|
|
|
325
382
|
function makeWorkletName(t, fun) {
|
|
@@ -342,11 +399,10 @@ function makeWorklet(t, fun, state) {
|
|
|
342
399
|
const functionName = makeWorkletName(t, fun);
|
|
343
400
|
|
|
344
401
|
const closure = new Map();
|
|
345
|
-
const outputs = new Set();
|
|
346
402
|
const closureGenerator = new ClosureGenerator();
|
|
347
403
|
const options = {};
|
|
348
404
|
|
|
349
|
-
// remove 'worklet'; directive before
|
|
405
|
+
// remove 'worklet'; directive before generating string
|
|
350
406
|
fun.traverse({
|
|
351
407
|
DirectiveLiteral(path) {
|
|
352
408
|
if (path.node.value === 'worklet' && path.getFunctionParent() === fun) {
|
|
@@ -358,8 +414,17 @@ function makeWorklet(t, fun, state) {
|
|
|
358
414
|
// We use copy because some of the plugins don't update bindings and
|
|
359
415
|
// some even break them
|
|
360
416
|
|
|
417
|
+
const codeObject = generate(fun.node, {
|
|
418
|
+
sourceMaps: true,
|
|
419
|
+
sourceFileName: state.file.opts.filename,
|
|
420
|
+
});
|
|
421
|
+
|
|
422
|
+
// We need to add a newline at the end, because there could potentially be a
|
|
423
|
+
// comment after the function that gets included here, and then the closing
|
|
424
|
+
// bracket would become part of the comment thus resulting in an error, since
|
|
425
|
+
// there is a missing closing bracket.
|
|
361
426
|
const code =
|
|
362
|
-
'
|
|
427
|
+
'(' + (t.isObjectMethod(fun) ? 'function ' : '') + codeObject.code + '\n)';
|
|
363
428
|
|
|
364
429
|
const transformed = transformSync(code, {
|
|
365
430
|
filename: state.file.opts.filename,
|
|
@@ -374,7 +439,9 @@ function makeWorklet(t, fun, state) {
|
|
|
374
439
|
ast: true,
|
|
375
440
|
babelrc: false,
|
|
376
441
|
configFile: false,
|
|
442
|
+
inputSourceMap: codeObject.map,
|
|
377
443
|
});
|
|
444
|
+
|
|
378
445
|
if (
|
|
379
446
|
fun.parent &&
|
|
380
447
|
fun.parent.callee &&
|
|
@@ -418,17 +485,6 @@ function makeWorklet(t, fun, state) {
|
|
|
418
485
|
closure.set(name, path.node);
|
|
419
486
|
closureGenerator.addPath(name, path);
|
|
420
487
|
},
|
|
421
|
-
AssignmentExpression(path) {
|
|
422
|
-
// test for <something>.value = <something> expressions
|
|
423
|
-
const left = path.node.left;
|
|
424
|
-
if (
|
|
425
|
-
t.isMemberExpression(left) &&
|
|
426
|
-
t.isIdentifier(left.object) &&
|
|
427
|
-
t.isIdentifier(left.property, { name: 'value' })
|
|
428
|
-
) {
|
|
429
|
-
outputs.add(left.object.name);
|
|
430
|
-
}
|
|
431
|
-
},
|
|
432
488
|
});
|
|
433
489
|
|
|
434
490
|
const variables = Array.from(closure.values());
|
|
@@ -441,16 +497,18 @@ function makeWorklet(t, fun, state) {
|
|
|
441
497
|
} else {
|
|
442
498
|
funExpression = clone;
|
|
443
499
|
}
|
|
500
|
+
|
|
444
501
|
const funString = buildWorkletString(
|
|
445
502
|
t,
|
|
446
503
|
transformed.ast,
|
|
447
504
|
variables,
|
|
448
|
-
functionName
|
|
505
|
+
functionName,
|
|
506
|
+
transformed.map
|
|
449
507
|
);
|
|
450
508
|
const workletHash = hash(funString);
|
|
451
509
|
|
|
452
510
|
let location = state.file.opts.filename;
|
|
453
|
-
if (state.opts.relativeSourceLocation) {
|
|
511
|
+
if (state.opts && state.opts.relativeSourceLocation) {
|
|
454
512
|
const path = require('path');
|
|
455
513
|
location = path.relative(state.cwd, location);
|
|
456
514
|
}
|
|
@@ -54,6 +54,8 @@ declare module 'react-native-reanimated' {
|
|
|
54
54
|
import('./lib/types/lib/reanimated2/animation/index').StyleLayoutAnimation;
|
|
55
55
|
export type Animation<T> =
|
|
56
56
|
import('./lib/types/lib/reanimated2/commonTypes').Animation<T>;
|
|
57
|
+
export type MeasuredDimensions =
|
|
58
|
+
import('./lib/types/lib/reanimated2/commonTypes').MeasuredDimensions;
|
|
57
59
|
|
|
58
60
|
namespace Animated {
|
|
59
61
|
type Nullable<T> = T | null | undefined;
|
|
@@ -543,8 +545,13 @@ declare module 'react-native-reanimated' {
|
|
|
543
545
|
isActive: boolean;
|
|
544
546
|
callbackId: number;
|
|
545
547
|
};
|
|
548
|
+
export type FrameInfo = {
|
|
549
|
+
timestamp: number;
|
|
550
|
+
timeSincePreviousFrame: number | null;
|
|
551
|
+
timeSinceFirstFrame: number;
|
|
552
|
+
};
|
|
546
553
|
export function useFrameCallback(
|
|
547
|
-
callback: () => void,
|
|
554
|
+
callback: (frameInfo: FrameInfo) => void,
|
|
548
555
|
autostart?: boolean
|
|
549
556
|
): FrameCallback;
|
|
550
557
|
|
|
@@ -561,6 +568,10 @@ declare module 'react-native-reanimated' {
|
|
|
561
568
|
};
|
|
562
569
|
export function useAnimatedKeyboard(): AnimatedKeyboardInfo;
|
|
563
570
|
|
|
571
|
+
export function useScrollViewOffset(
|
|
572
|
+
aref: RefObject<Animated.ScrollView>
|
|
573
|
+
): SharedValue<number>;
|
|
574
|
+
|
|
564
575
|
export interface ExitAnimationsValues {
|
|
565
576
|
currentOriginX: number;
|
|
566
577
|
currentOriginY: number;
|
|
@@ -805,14 +816,7 @@ declare module 'react-native-reanimated' {
|
|
|
805
816
|
export function defineAnimation<T>(starting: any, factory: () => T): number;
|
|
806
817
|
export function measure<T extends Component>(
|
|
807
818
|
ref: RefObject<T>
|
|
808
|
-
):
|
|
809
|
-
width: number;
|
|
810
|
-
height: number;
|
|
811
|
-
x: number;
|
|
812
|
-
y: number;
|
|
813
|
-
pageX: number;
|
|
814
|
-
pageY: number;
|
|
815
|
-
};
|
|
819
|
+
): MeasuredDimensions | null;
|
|
816
820
|
|
|
817
821
|
export function getRelativeCoords(
|
|
818
822
|
ref: RefObject<Component>,
|