react-native-smooth-clip-view 0.3.0 → 0.4.1
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/README.md +135 -386
- package/android/build.gradle +4 -7
- package/android/proguard-rules.pro +2 -2
- package/android/src/main/cpp/SmoothClipAndroid.h +9 -12
- package/android/src/main/cpp/SmoothClipBindings.cpp +300 -704
- package/android/src/main/cpp/SmoothClipRegistry.cpp +348 -594
- package/android/src/main/java/com/smoothclipview/ClipGeometryNormalizer.kt +36 -227
- package/android/src/main/java/com/smoothclipview/SmoothClipBindings.kt +16 -19
- package/android/src/main/java/com/smoothclipview/SmoothClipModule.kt +36 -294
- package/android/src/main/java/com/smoothclipview/SmoothClipView.kt +369 -486
- package/android/src/main/java/com/smoothclipview/SmoothClipViewManager.kt +75 -77
- package/cpp/SmoothClipAnimationCurve.h +237 -346
- package/cpp/SmoothClipRegistry.h +24 -52
- package/cpp/SmoothClipSharedGeometry.h +64 -94
- package/cpp/SmoothClipVelocityTracker.h +5 -5
- package/ios/SmoothClipGeometry.h +23 -34
- package/ios/SmoothClipRegistry.mm +206 -711
- package/ios/SmoothClipTurboModule.cpp +217 -715
- package/ios/SmoothClipTurboModule.h +54 -297
- package/ios/SmoothClipView.mm +599 -505
- package/ios/SmoothClipViewRegistry.h +2 -7
- package/lib/module/NativeSmoothClipModule.js.map +1 -1
- package/lib/module/SmoothClipView.ios.js +84 -17
- package/lib/module/SmoothClipView.ios.js.map +1 -1
- package/lib/module/SmoothClipView.js +1 -1
- package/lib/module/SmoothClipView.js.map +1 -1
- package/lib/module/SmoothClipViewNativeComponent.ts +20 -26
- package/lib/module/capabilities.native.js +1 -19
- package/lib/module/capabilities.native.js.map +1 -1
- package/lib/module/capabilityTypes.js +0 -9
- package/lib/module/capabilityTypes.js.map +1 -1
- package/lib/module/controllerInternals.js +28 -0
- package/lib/module/controllerInternals.js.map +1 -0
- package/lib/module/controllerLifecycle.js +9 -0
- package/lib/module/controllerLifecycle.js.map +1 -0
- package/lib/module/controllerTypes.js +4 -0
- package/lib/module/controllerTypes.js.map +1 -0
- package/lib/module/controllers.android.js +4 -0
- package/lib/module/controllers.android.js.map +1 -0
- package/lib/module/controllers.ios.js +4 -0
- package/lib/module/controllers.ios.js.map +1 -0
- package/lib/module/controllers.js +4 -0
- package/lib/module/controllers.js.map +1 -0
- package/lib/module/controllers.native.js +89 -0
- package/lib/module/controllers.native.js.map +1 -0
- package/lib/module/geometry.js +71 -51
- package/lib/module/geometry.js.map +1 -1
- package/lib/module/groupTypes.js +4 -0
- package/lib/module/{groupDriverTypes.js.map → groupTypes.js.map} +1 -1
- package/lib/module/groups.android.js +4 -0
- package/lib/module/groups.android.js.map +1 -0
- package/lib/module/groups.ios.js +4 -0
- package/lib/module/groups.ios.js.map +1 -0
- package/lib/module/groups.js +4 -0
- package/lib/module/groups.js.map +1 -0
- package/lib/module/groups.native.js +399 -0
- package/lib/module/groups.native.js.map +1 -0
- package/lib/module/ids.js +8 -0
- package/lib/module/ids.js.map +1 -0
- package/lib/module/index.js +3 -3
- package/lib/module/index.js.map +1 -1
- package/lib/module/nativeCompletion.js +37 -16
- package/lib/module/nativeCompletion.js.map +1 -1
- package/lib/module/presentationCodec.js +81 -0
- package/lib/module/presentationCodec.js.map +1 -0
- package/lib/typescript/src/NativeSmoothClipModule.d.ts +14 -23
- package/lib/typescript/src/NativeSmoothClipModule.d.ts.map +1 -1
- package/lib/typescript/src/SmoothClipView.d.ts +1 -1
- package/lib/typescript/src/SmoothClipView.d.ts.map +1 -1
- package/lib/typescript/src/SmoothClipView.ios.d.ts +18 -14
- package/lib/typescript/src/SmoothClipView.ios.d.ts.map +1 -1
- package/lib/typescript/src/SmoothClipViewNativeComponent.d.ts +10 -5
- package/lib/typescript/src/SmoothClipViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/capabilities.native.d.ts +1 -1
- package/lib/typescript/src/capabilities.native.d.ts.map +1 -1
- package/lib/typescript/src/capabilityTypes.d.ts +0 -6
- package/lib/typescript/src/capabilityTypes.d.ts.map +1 -1
- package/lib/typescript/src/controllerInternals.d.ts +14 -0
- package/lib/typescript/src/controllerInternals.d.ts.map +1 -0
- package/lib/typescript/src/controllerLifecycle.d.ts +3 -0
- package/lib/typescript/src/controllerLifecycle.d.ts.map +1 -0
- package/lib/typescript/src/controllerTypes.d.ts +62 -0
- package/lib/typescript/src/controllerTypes.d.ts.map +1 -0
- package/lib/typescript/src/controllers.android.d.ts +2 -0
- package/lib/typescript/src/controllers.android.d.ts.map +1 -0
- package/lib/typescript/src/controllers.d.ts +2 -0
- package/lib/typescript/src/controllers.d.ts.map +1 -0
- package/lib/typescript/src/controllers.ios.d.ts +2 -0
- package/lib/typescript/src/controllers.ios.d.ts.map +1 -0
- package/lib/typescript/src/controllers.native.d.ts +3 -0
- package/lib/typescript/src/controllers.native.d.ts.map +1 -0
- package/lib/typescript/src/geometry.d.ts +22 -12
- package/lib/typescript/src/geometry.d.ts.map +1 -1
- package/lib/typescript/src/groupTypes.d.ts +31 -0
- package/lib/typescript/src/groupTypes.d.ts.map +1 -0
- package/lib/typescript/src/groups.android.d.ts +2 -0
- package/lib/typescript/src/groups.android.d.ts.map +1 -0
- package/lib/typescript/src/groups.d.ts +2 -0
- package/lib/typescript/src/groups.d.ts.map +1 -0
- package/lib/typescript/src/groups.ios.d.ts +2 -0
- package/lib/typescript/src/groups.ios.d.ts.map +1 -0
- package/lib/typescript/src/groups.native.d.ts +3 -0
- package/lib/typescript/src/groups.native.d.ts.map +1 -0
- package/lib/typescript/src/ids.d.ts +2 -0
- package/lib/typescript/src/ids.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +6 -6
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/nativeCompletion.d.ts +16 -6
- package/lib/typescript/src/nativeCompletion.d.ts.map +1 -1
- package/lib/typescript/src/presentationCodec.d.ts +10 -0
- package/lib/typescript/src/presentationCodec.d.ts.map +1 -0
- package/package.json +8 -3
- package/src/NativeSmoothClipModule.ts +41 -292
- package/src/SmoothClipView.ios.tsx +130 -23
- package/src/SmoothClipView.tsx +5 -1
- package/src/SmoothClipViewNativeComponent.ts +20 -26
- package/src/capabilities.native.ts +2 -52
- package/src/capabilityTypes.ts +0 -14
- package/src/controllerInternals.ts +52 -0
- package/src/controllerLifecycle.ts +6 -0
- package/src/controllerTypes.ts +87 -0
- package/src/controllers.android.ts +1 -0
- package/src/controllers.ios.ts +1 -0
- package/src/controllers.native.ts +104 -0
- package/src/controllers.ts +1 -0
- package/src/geometry.ts +118 -74
- package/src/groupTypes.ts +53 -0
- package/src/groups.android.ts +1 -0
- package/src/groups.ios.ts +1 -0
- package/src/groups.native.ts +604 -0
- package/src/groups.ts +1 -0
- package/src/ids.ts +6 -0
- package/src/index.ts +20 -28
- package/src/nativeCompletion.ts +67 -32
- package/src/presentationCodec.ts +134 -0
- package/lib/module/driverState.js +0 -82
- package/lib/module/driverState.js.map +0 -1
- package/lib/module/driverTypes.js +0 -4
- package/lib/module/driverTypes.js.map +0 -1
- package/lib/module/drivers.android.js +0 -6
- package/lib/module/drivers.android.js.map +0 -1
- package/lib/module/drivers.ios.js +0 -6
- package/lib/module/drivers.ios.js.map +0 -1
- package/lib/module/drivers.js +0 -4
- package/lib/module/drivers.js.map +0 -1
- package/lib/module/drivers.native.js +0 -756
- package/lib/module/drivers.native.js.map +0 -1
- package/lib/module/groupDriverTypes.js +0 -4
- package/lib/module/groupDrivers.android.js +0 -4
- package/lib/module/groupDrivers.android.js.map +0 -1
- package/lib/module/groupDrivers.ios.js +0 -4
- package/lib/module/groupDrivers.ios.js.map +0 -1
- package/lib/module/groupDrivers.js +0 -4
- package/lib/module/groupDrivers.js.map +0 -1
- package/lib/module/groupDrivers.native.js +0 -799
- package/lib/module/groupDrivers.native.js.map +0 -1
- package/lib/module/presentationProtocol.js +0 -15
- package/lib/module/presentationProtocol.js.map +0 -1
- package/lib/module/reactRequests.js +0 -56
- package/lib/module/reactRequests.js.map +0 -1
- package/lib/typescript/src/driverState.d.ts +0 -26
- package/lib/typescript/src/driverState.d.ts.map +0 -1
- package/lib/typescript/src/driverTypes.d.ts +0 -121
- package/lib/typescript/src/driverTypes.d.ts.map +0 -1
- package/lib/typescript/src/drivers.android.d.ts +0 -3
- package/lib/typescript/src/drivers.android.d.ts.map +0 -1
- package/lib/typescript/src/drivers.d.ts +0 -3
- package/lib/typescript/src/drivers.d.ts.map +0 -1
- package/lib/typescript/src/drivers.ios.d.ts +0 -3
- package/lib/typescript/src/drivers.ios.d.ts.map +0 -1
- package/lib/typescript/src/drivers.native.d.ts +0 -5
- package/lib/typescript/src/drivers.native.d.ts.map +0 -1
- package/lib/typescript/src/groupDriverTypes.d.ts +0 -66
- package/lib/typescript/src/groupDriverTypes.d.ts.map +0 -1
- package/lib/typescript/src/groupDrivers.android.d.ts +0 -2
- package/lib/typescript/src/groupDrivers.android.d.ts.map +0 -1
- package/lib/typescript/src/groupDrivers.d.ts +0 -2
- package/lib/typescript/src/groupDrivers.d.ts.map +0 -1
- package/lib/typescript/src/groupDrivers.ios.d.ts +0 -2
- package/lib/typescript/src/groupDrivers.ios.d.ts.map +0 -1
- package/lib/typescript/src/groupDrivers.native.d.ts +0 -4
- package/lib/typescript/src/groupDrivers.native.d.ts.map +0 -1
- package/lib/typescript/src/presentationProtocol.d.ts +0 -4
- package/lib/typescript/src/presentationProtocol.d.ts.map +0 -1
- package/lib/typescript/src/reactRequests.d.ts +0 -9
- package/lib/typescript/src/reactRequests.d.ts.map +0 -1
- package/src/driverState.ts +0 -118
- package/src/driverTypes.ts +0 -171
- package/src/drivers.android.ts +0 -8
- package/src/drivers.ios.ts +0 -8
- package/src/drivers.native.ts +0 -1599
- package/src/drivers.ts +0 -6
- package/src/groupDriverTypes.ts +0 -117
- package/src/groupDrivers.android.ts +0 -1
- package/src/groupDrivers.ios.ts +0 -1
- package/src/groupDrivers.native.ts +0 -1189
- package/src/groupDrivers.ts +0 -1
- package/src/presentationProtocol.ts +0 -28
- package/src/reactRequests.ts +0 -76
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useRef } from 'react';
|
|
4
|
+
import { Platform } from 'react-native';
|
|
5
|
+
import { scheduleOnRN, scheduleOnUI } from 'react-native-worklets';
|
|
6
|
+
import { unwrapSmoothClipRef } from "./controllerInternals.js";
|
|
7
|
+
import { allocateSmoothClipId } from "./ids.js";
|
|
8
|
+
import { canonicalizeClipPresentation } from "./geometry.js";
|
|
9
|
+
import { subscribeGroupCompletion } from "./nativeCompletion.js";
|
|
10
|
+
import { appendPresentationPacket, PRESENTATION_STRIDE, presentationFromPacket } from "./presentationCodec.js";
|
|
11
|
+
import NativeSmoothClipModule from './smoothClipNative';
|
|
12
|
+
const beginGroupInteractionHostFunction = NativeSmoothClipModule.beginGroupInteraction;
|
|
13
|
+
const snapshotGroupHostFunction = NativeSmoothClipModule.snapshotGroup;
|
|
14
|
+
const setClipPresentationBatchHostFunction = NativeSmoothClipModule.setClipPresentationBatch;
|
|
15
|
+
const animateTimingGroupHostFunction = NativeSmoothClipModule.animateTimingGroup;
|
|
16
|
+
const animateSpringGroupHostFunction = NativeSmoothClipModule.animateSpringGroup;
|
|
17
|
+
const cancelAnimationGroupHostFunction = NativeSmoothClipModule.cancelAnimationGroup;
|
|
18
|
+
const SNAPSHOT_STRIDE = PRESENTATION_STRIDE + 1;
|
|
19
|
+
const MOTION_ENTRY_STRIDE = PRESENTATION_STRIDE * 2 + 2;
|
|
20
|
+
const NEEDS_START_STAMP = Platform.OS === 'android';
|
|
21
|
+
const DEFAULT_MASS = 4;
|
|
22
|
+
const DEFAULT_STIFFNESS = 900;
|
|
23
|
+
const DEFAULT_DAMPING = 120;
|
|
24
|
+
const DEFAULT_ENERGY_THRESHOLD = 6e-9;
|
|
25
|
+
const groupStates = new Map();
|
|
26
|
+
const clientRuns = new Map();
|
|
27
|
+
let nextClientRunId = 0;
|
|
28
|
+
function internalRef(ref) {
|
|
29
|
+
'worklet';
|
|
30
|
+
|
|
31
|
+
const internal = unwrapSmoothClipRef(ref);
|
|
32
|
+
if (!internal) {
|
|
33
|
+
throw new Error('[SmoothClipView] A group received an invalid clip ref.');
|
|
34
|
+
}
|
|
35
|
+
return internal;
|
|
36
|
+
}
|
|
37
|
+
function validatedRefs(refs) {
|
|
38
|
+
'worklet';
|
|
39
|
+
|
|
40
|
+
if (refs.length === 0) {
|
|
41
|
+
throw new Error('[SmoothClipView] A group must contain a clip.');
|
|
42
|
+
}
|
|
43
|
+
const seen = {};
|
|
44
|
+
return refs.map(ref => {
|
|
45
|
+
const internal = internalRef(ref);
|
|
46
|
+
const key = String(internal.id);
|
|
47
|
+
if (seen[key]) {
|
|
48
|
+
throw new Error('[SmoothClipView] A group cannot contain duplicate clips.');
|
|
49
|
+
}
|
|
50
|
+
seen[key] = true;
|
|
51
|
+
return internal;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function snapshotsFromPacket(refs, values) {
|
|
55
|
+
'worklet';
|
|
56
|
+
|
|
57
|
+
if (values.length !== refs.length * SNAPSHOT_STRIDE) {
|
|
58
|
+
throw new Error('[SmoothClipView] Native returned an invalid group snapshot.');
|
|
59
|
+
}
|
|
60
|
+
return refs.map((clip, index) => {
|
|
61
|
+
const offset = index * SNAPSHOT_STRIDE;
|
|
62
|
+
const ready = values[offset];
|
|
63
|
+
const frame = presentationFromPacket(values, offset + 1);
|
|
64
|
+
if (ready !== 0 && ready !== 1 || frame === null) {
|
|
65
|
+
throw new Error('[SmoothClipView] Native returned an invalid group snapshot.');
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
clip,
|
|
69
|
+
frame,
|
|
70
|
+
ready: ready === 1
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
function beginGroupOnUI(refs) {
|
|
75
|
+
'worklet';
|
|
76
|
+
|
|
77
|
+
const internals = validatedRefs(refs);
|
|
78
|
+
return snapshotsFromPacket(refs, beginGroupInteractionHostFunction(internals.map(ref => ref.id)));
|
|
79
|
+
}
|
|
80
|
+
function setFramesOnUI(entries) {
|
|
81
|
+
'worklet';
|
|
82
|
+
|
|
83
|
+
const internals = validatedRefs(entries.map(entry => entry.clip));
|
|
84
|
+
const packet = [];
|
|
85
|
+
entries.forEach((entry, index) => {
|
|
86
|
+
const frame = canonicalizeClipPresentation(entry.frame);
|
|
87
|
+
if (frame === null) {
|
|
88
|
+
throw new Error('[SmoothClipView] A group frame is invalid.');
|
|
89
|
+
}
|
|
90
|
+
packet.push(internals[index]?.id ?? 0);
|
|
91
|
+
appendPresentationPacket(packet, frame);
|
|
92
|
+
});
|
|
93
|
+
// A UI frame can race the Fabric host's first native registration (or its
|
|
94
|
+
// teardown). That is an availability result, not malformed input. The next
|
|
95
|
+
// streamed frame retries, while beginInteraction remains the explicit
|
|
96
|
+
// readiness gate for an atomic handoff.
|
|
97
|
+
setClipPresentationBatchHostFunction(packet);
|
|
98
|
+
}
|
|
99
|
+
function reduceMotionCode(value) {
|
|
100
|
+
'worklet';
|
|
101
|
+
|
|
102
|
+
if (value === 'always') return 1;
|
|
103
|
+
if (value === 'never') return 2;
|
|
104
|
+
return 0;
|
|
105
|
+
}
|
|
106
|
+
function startTimestamp() {
|
|
107
|
+
'worklet';
|
|
108
|
+
|
|
109
|
+
if (!NEEDS_START_STAMP) return Number.NaN;
|
|
110
|
+
const runtime = globalThis;
|
|
111
|
+
return runtime.__frameTimestamp || (typeof runtime._getAnimationTimestamp === 'function' ? runtime._getAnimationTimestamp() : Number.NaN);
|
|
112
|
+
}
|
|
113
|
+
function animationIsValid(animation) {
|
|
114
|
+
'worklet';
|
|
115
|
+
|
|
116
|
+
if (animation.type === 'timing') {
|
|
117
|
+
const [x1,, x2] = animation.controlPoints;
|
|
118
|
+
return Number.isFinite(animation.duration) && animation.duration >= 0 && animation.controlPoints.every(Number.isFinite) && x1 >= 0 && x1 <= 1 && x2 >= 0 && x2 <= 1;
|
|
119
|
+
}
|
|
120
|
+
const mass = animation.mass ?? DEFAULT_MASS;
|
|
121
|
+
const stiffness = animation.stiffness ?? DEFAULT_STIFFNESS;
|
|
122
|
+
const damping = animation.damping ?? DEFAULT_DAMPING;
|
|
123
|
+
const velocity = animation.velocity ?? 0;
|
|
124
|
+
const energyThreshold = animation.energyThreshold ?? DEFAULT_ENERGY_THRESHOLD;
|
|
125
|
+
return [mass, stiffness, damping, velocity, energyThreshold].every(Number.isFinite) && mass > 0 && stiffness > 0 && damping >= 0 && energyThreshold > 0;
|
|
126
|
+
}
|
|
127
|
+
function validCompletionTag(completionTag) {
|
|
128
|
+
'worklet';
|
|
129
|
+
|
|
130
|
+
return Number.isInteger(completionTag) && completionTag >= 0 && completionTag <= 0x7fffffff;
|
|
131
|
+
}
|
|
132
|
+
function validInternalCompletionTag(completionTag) {
|
|
133
|
+
'worklet';
|
|
134
|
+
|
|
135
|
+
return Number.isInteger(completionTag) && completionTag >= -0x7fffffff && completionTag <= 0x7fffffff;
|
|
136
|
+
}
|
|
137
|
+
function animateGroupOnUI(controllerId, entries, animation, completionTag, allowInternalCompletionTag = false) {
|
|
138
|
+
'worklet';
|
|
139
|
+
|
|
140
|
+
const completionTagIsValid = allowInternalCompletionTag ? validInternalCompletionTag(completionTag) : validCompletionTag(completionTag);
|
|
141
|
+
if (!animationIsValid(animation) || !completionTagIsValid) {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
let internals;
|
|
145
|
+
try {
|
|
146
|
+
internals = validatedRefs(entries.map(entry => entry.clip));
|
|
147
|
+
} catch {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
const packet = [];
|
|
151
|
+
for (let index = 0; index < entries.length; index += 1) {
|
|
152
|
+
const entry = entries[index];
|
|
153
|
+
const target = entry === undefined ? null : canonicalizeClipPresentation(entry.target);
|
|
154
|
+
if (entry === undefined || target === null) return null;
|
|
155
|
+
packet.push(internals[index]?.id ?? 0, 0);
|
|
156
|
+
// Fixed native packets retain a start slot. With hasFrom=0 its contents
|
|
157
|
+
// are ignored; duplicating the target avoids a second sentinel format.
|
|
158
|
+
appendPresentationPacket(packet, target);
|
|
159
|
+
appendPresentationPacket(packet, target);
|
|
160
|
+
}
|
|
161
|
+
if (packet.length !== entries.length * MOTION_ENTRY_STRIDE) return null;
|
|
162
|
+
const timestamp = startTimestamp();
|
|
163
|
+
let id;
|
|
164
|
+
if (animation.type === 'timing') {
|
|
165
|
+
const [x1, y1, x2, y2] = animation.controlPoints;
|
|
166
|
+
id = animateTimingGroupHostFunction(controllerId, packet, animation.duration, x1, y1, x2, y2, reduceMotionCode(animation.reduceMotion), completionTag, timestamp);
|
|
167
|
+
} else {
|
|
168
|
+
id = animateSpringGroupHostFunction(controllerId, packet, animation.mass ?? DEFAULT_MASS, animation.stiffness ?? DEFAULT_STIFFNESS, animation.damping ?? DEFAULT_DAMPING, animation.velocity ?? 0, animation.energyThreshold ?? DEFAULT_ENERGY_THRESHOLD, reduceMotionCode(animation.reduceMotion), completionTag, timestamp);
|
|
169
|
+
}
|
|
170
|
+
if (id <= 0) return null;
|
|
171
|
+
return {
|
|
172
|
+
controllerId,
|
|
173
|
+
id,
|
|
174
|
+
refs: entries.map(entry => entry.clip)
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
function cancelGroupOnUI(controllerId, handle) {
|
|
178
|
+
'worklet';
|
|
179
|
+
|
|
180
|
+
const internal = handle;
|
|
181
|
+
if (internal.controllerId !== controllerId || !Number.isInteger(internal.id) || internal.id <= 0 || !Array.isArray(internal.refs)) {
|
|
182
|
+
return [];
|
|
183
|
+
}
|
|
184
|
+
let internals;
|
|
185
|
+
try {
|
|
186
|
+
internals = validatedRefs(internal.refs);
|
|
187
|
+
} catch {
|
|
188
|
+
return [];
|
|
189
|
+
}
|
|
190
|
+
const values = cancelAnimationGroupHostFunction(internal.id, 0);
|
|
191
|
+
if (values.length > 0) {
|
|
192
|
+
return snapshotsFromPacket(internal.refs, values);
|
|
193
|
+
}
|
|
194
|
+
const snapshots = snapshotGroupHostFunction(internals.map(internalRefValue => internalRefValue.id));
|
|
195
|
+
return snapshots.length === 0 ? [] : snapshotsFromPacket(internal.refs, snapshots);
|
|
196
|
+
}
|
|
197
|
+
function validReactEntries(entries) {
|
|
198
|
+
if (entries.length === 0) return false;
|
|
199
|
+
const seen = new Set();
|
|
200
|
+
for (const entry of entries) {
|
|
201
|
+
const ref = unwrapSmoothClipRef(entry.clip);
|
|
202
|
+
if (ref === undefined || seen.has(ref.id) || canonicalizeClipPresentation(entry.target) === null) {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
seen.add(ref.id);
|
|
206
|
+
}
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
function settleRun(run, finished) {
|
|
210
|
+
if (run.settled) return;
|
|
211
|
+
run.settled = true;
|
|
212
|
+
run.resolve(finished);
|
|
213
|
+
}
|
|
214
|
+
function registerNativeGroupRun(controllerId, clientRunId, groupId) {
|
|
215
|
+
const run = clientRuns.get(clientRunId);
|
|
216
|
+
clientRuns.delete(clientRunId);
|
|
217
|
+
if (!run) return;
|
|
218
|
+
run.resolveNativeId(groupId);
|
|
219
|
+
const state = groupStates.get(controllerId);
|
|
220
|
+
if (!state || groupId <= 0) {
|
|
221
|
+
settleRun(run, false);
|
|
222
|
+
state?.callbackRef.current?.({
|
|
223
|
+
finished: false
|
|
224
|
+
});
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
state.runs.set(groupId, run);
|
|
228
|
+
const deferred = state.deferredCompletions.get(groupId);
|
|
229
|
+
if (deferred !== undefined) {
|
|
230
|
+
state.deferredCompletions.delete(groupId);
|
|
231
|
+
handleNativeGroupCompletion(controllerId, groupId, deferred.completionTag, deferred.finished, deferred.snapshots);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
function handleNativeGroupCompletion(controllerId, groupId, completionTag, finished, values) {
|
|
235
|
+
const state = groupStates.get(controllerId);
|
|
236
|
+
if (!state || state.deliveredCompletions.has(groupId)) return;
|
|
237
|
+
const run = state.runs.get(groupId);
|
|
238
|
+
if (!run) {
|
|
239
|
+
// Non-negative tags belong to UI-runtime runs, which deliberately have no
|
|
240
|
+
// Promise registry on React. Negative tags are private correlation keys
|
|
241
|
+
// for React runs and may arrive before scheduleOnRN registers the run.
|
|
242
|
+
if (completionTag >= 0) {
|
|
243
|
+
state.deliveredCompletions.add(groupId);
|
|
244
|
+
state.callbackRef.current?.({
|
|
245
|
+
finished,
|
|
246
|
+
...(completionTag > 0 ? {
|
|
247
|
+
completionTag
|
|
248
|
+
} : {})
|
|
249
|
+
});
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
state.deferredCompletions.set(groupId, {
|
|
253
|
+
completionTag,
|
|
254
|
+
finished,
|
|
255
|
+
snapshots: values
|
|
256
|
+
});
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
state.deliveredCompletions.add(groupId);
|
|
260
|
+
state.runs.delete(groupId);
|
|
261
|
+
settleRun(run, finished);
|
|
262
|
+
state.callbackRef.current?.({
|
|
263
|
+
finished,
|
|
264
|
+
...(completionTag > 0 ? {
|
|
265
|
+
completionTag
|
|
266
|
+
} : {})
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
function cancelRegisteredRun(controllerId, groupId, refs) {
|
|
270
|
+
scheduleOnUI((ownerId, id, clips) => {
|
|
271
|
+
'worklet';
|
|
272
|
+
|
|
273
|
+
cancelGroupOnUI(ownerId, {
|
|
274
|
+
controllerId: ownerId,
|
|
275
|
+
id,
|
|
276
|
+
refs: clips
|
|
277
|
+
});
|
|
278
|
+
}, controllerId, groupId, refs);
|
|
279
|
+
}
|
|
280
|
+
export function useSmoothClipGroup(options = {}) {
|
|
281
|
+
const controllerIdRef = useRef(0);
|
|
282
|
+
const groupRef = useRef(null);
|
|
283
|
+
const callbackRef = useRef(options.onAnimationComplete);
|
|
284
|
+
callbackRef.current = options.onAnimationComplete;
|
|
285
|
+
if (controllerIdRef.current === 0) {
|
|
286
|
+
controllerIdRef.current = allocateSmoothClipId();
|
|
287
|
+
}
|
|
288
|
+
const controllerId = controllerIdRef.current;
|
|
289
|
+
if (groupRef.current === null) {
|
|
290
|
+
groupRef.current = {
|
|
291
|
+
ui: {
|
|
292
|
+
setFrames(entries) {
|
|
293
|
+
'worklet';
|
|
294
|
+
|
|
295
|
+
setFramesOnUI(entries);
|
|
296
|
+
},
|
|
297
|
+
beginInteraction(refs) {
|
|
298
|
+
'worklet';
|
|
299
|
+
|
|
300
|
+
return beginGroupOnUI(refs);
|
|
301
|
+
},
|
|
302
|
+
animateTo(entries, animation, completionTag = 0) {
|
|
303
|
+
'worklet';
|
|
304
|
+
|
|
305
|
+
return animateGroupOnUI(controllerId, entries, animation, completionTag);
|
|
306
|
+
},
|
|
307
|
+
cancel(run) {
|
|
308
|
+
'worklet';
|
|
309
|
+
|
|
310
|
+
return cancelGroupOnUI(controllerId, run);
|
|
311
|
+
}
|
|
312
|
+
},
|
|
313
|
+
react: {
|
|
314
|
+
animateTo(entries, animation) {
|
|
315
|
+
if (!validReactEntries(entries) || !animationIsValid(animation)) {
|
|
316
|
+
callbackRef.current?.({
|
|
317
|
+
finished: false
|
|
318
|
+
});
|
|
319
|
+
return {
|
|
320
|
+
finished: Promise.resolve(false),
|
|
321
|
+
cancel() {}
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
let resolve;
|
|
325
|
+
let resolveNativeId;
|
|
326
|
+
const finished = new Promise(accept => {
|
|
327
|
+
resolve = accept;
|
|
328
|
+
});
|
|
329
|
+
const nativeId = new Promise(accept => {
|
|
330
|
+
resolveNativeId = accept;
|
|
331
|
+
});
|
|
332
|
+
const run = {
|
|
333
|
+
controllerId,
|
|
334
|
+
settled: false,
|
|
335
|
+
cancelRequested: false,
|
|
336
|
+
refs: entries.map(entry => entry.clip),
|
|
337
|
+
resolve,
|
|
338
|
+
resolveNativeId,
|
|
339
|
+
nativeId
|
|
340
|
+
};
|
|
341
|
+
nextClientRunId = nextClientRunId % 0x7ffffffe + 1;
|
|
342
|
+
const clientRunId = nextClientRunId;
|
|
343
|
+
clientRuns.set(clientRunId, run);
|
|
344
|
+
scheduleOnUI((id, motionEntries, spec, pendingRunId) => {
|
|
345
|
+
'worklet';
|
|
346
|
+
|
|
347
|
+
const handle = animateGroupOnUI(id, motionEntries, spec, -pendingRunId, true);
|
|
348
|
+
scheduleOnRN(registerNativeGroupRun, id, pendingRunId, handle?.id ?? 0);
|
|
349
|
+
}, controllerId, entries, animation, clientRunId);
|
|
350
|
+
return {
|
|
351
|
+
finished,
|
|
352
|
+
cancel() {
|
|
353
|
+
if (run.settled || run.cancelRequested) return;
|
|
354
|
+
run.cancelRequested = true;
|
|
355
|
+
nativeId.then(groupId => {
|
|
356
|
+
if (groupId > 0 && !run.settled) {
|
|
357
|
+
cancelRegisteredRun(run.controllerId, groupId, run.refs);
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
useEffect(() => {
|
|
367
|
+
const state = {
|
|
368
|
+
callbackRef,
|
|
369
|
+
runs: new Map(),
|
|
370
|
+
deferredCompletions: new Map(),
|
|
371
|
+
deliveredCompletions: new Set()
|
|
372
|
+
};
|
|
373
|
+
groupStates.set(controllerId, state);
|
|
374
|
+
const unsubscribe = subscribeGroupCompletion(controllerId, ({
|
|
375
|
+
groupId,
|
|
376
|
+
completionTag,
|
|
377
|
+
finished,
|
|
378
|
+
snapshots
|
|
379
|
+
}) => {
|
|
380
|
+
handleNativeGroupCompletion(controllerId, groupId, completionTag, finished, snapshots);
|
|
381
|
+
});
|
|
382
|
+
return () => {
|
|
383
|
+
unsubscribe();
|
|
384
|
+
if (groupStates.get(controllerId) === state) {
|
|
385
|
+
groupStates.delete(controllerId);
|
|
386
|
+
}
|
|
387
|
+
for (const run of state.runs.values()) settleRun(run, false);
|
|
388
|
+
state.runs.clear();
|
|
389
|
+
for (const [clientRunId, run] of clientRuns) {
|
|
390
|
+
if (run.controllerId !== controllerId) continue;
|
|
391
|
+
clientRuns.delete(clientRunId);
|
|
392
|
+
run.resolveNativeId(0);
|
|
393
|
+
settleRun(run, false);
|
|
394
|
+
}
|
|
395
|
+
};
|
|
396
|
+
}, [controllerId]);
|
|
397
|
+
return groupRef.current;
|
|
398
|
+
}
|
|
399
|
+
//# sourceMappingURL=groups.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","Platform","scheduleOnRN","scheduleOnUI","unwrapSmoothClipRef","allocateSmoothClipId","canonicalizeClipPresentation","subscribeGroupCompletion","appendPresentationPacket","PRESENTATION_STRIDE","presentationFromPacket","NativeSmoothClipModule","beginGroupInteractionHostFunction","beginGroupInteraction","snapshotGroupHostFunction","snapshotGroup","setClipPresentationBatchHostFunction","setClipPresentationBatch","animateTimingGroupHostFunction","animateTimingGroup","animateSpringGroupHostFunction","animateSpringGroup","cancelAnimationGroupHostFunction","cancelAnimationGroup","SNAPSHOT_STRIDE","MOTION_ENTRY_STRIDE","NEEDS_START_STAMP","OS","DEFAULT_MASS","DEFAULT_STIFFNESS","DEFAULT_DAMPING","DEFAULT_ENERGY_THRESHOLD","groupStates","Map","clientRuns","nextClientRunId","internalRef","ref","internal","Error","validatedRefs","refs","length","seen","map","key","String","id","snapshotsFromPacket","values","clip","index","offset","ready","frame","beginGroupOnUI","internals","setFramesOnUI","entries","entry","packet","forEach","push","reduceMotionCode","value","startTimestamp","Number","NaN","runtime","globalThis","__frameTimestamp","_getAnimationTimestamp","animationIsValid","animation","type","x1","x2","controlPoints","isFinite","duration","every","mass","stiffness","damping","velocity","energyThreshold","validCompletionTag","completionTag","isInteger","validInternalCompletionTag","animateGroupOnUI","controllerId","allowInternalCompletionTag","completionTagIsValid","target","undefined","timestamp","y1","y2","reduceMotion","cancelGroupOnUI","handle","Array","isArray","snapshots","internalRefValue","validReactEntries","Set","has","add","settleRun","run","finished","settled","resolve","registerNativeGroupRun","clientRunId","groupId","get","delete","resolveNativeId","state","callbackRef","current","runs","set","deferred","deferredCompletions","handleNativeGroupCompletion","deliveredCompletions","cancelRegisteredRun","ownerId","clips","useSmoothClipGroup","options","controllerIdRef","groupRef","onAnimationComplete","ui","setFrames","beginInteraction","animateTo","cancel","react","Promise","accept","nativeId","cancelRequested","motionEntries","spec","pendingRunId","then","unsubscribe","clear"],"sourceRoot":"../../src","sources":["groups.native.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["nextSmoothClipId","Date","now","allocateSmoothClipId"],"sourceRoot":"../../src","sources":["ids.ts"],"mappings":";;AAAA,IAAIA,gBAAgB,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,GAAG,IAAI;AAExC,OAAO,SAASC,oBAAoBA,CAAA,EAAW;EAC7CH,gBAAgB,IAAI,CAAC;EACrB,OAAOA,gBAAgB;AACzB","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
export { SmoothClipView } from './SmoothClipView';
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
4
|
+
export { useSmoothClipController } from './controllers';
|
|
5
|
+
export { useSmoothClipGroup } from './groups';
|
|
6
6
|
export { getSmoothClipCapabilities } from './capabilities';
|
|
7
7
|
export { ClipEasings } from "./easings.js";
|
|
8
|
-
export { canonicalizeClipGeometry, canonicalizeClipPresentation, createClipPresentation
|
|
8
|
+
export { canonicalizeClipGeometry, canonicalizeClipPresentation, createClipPresentation } from "./geometry.js";
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SmoothClipView","
|
|
1
|
+
{"version":3,"names":["SmoothClipView","useSmoothClipController","useSmoothClipGroup","getSmoothClipCapabilities","ClipEasings","canonicalizeClipGeometry","canonicalizeClipPresentation","createClipPresentation"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,kBAAkB;AAEjD,SAASC,uBAAuB,QAAQ,eAAe;AACvD,SAASC,kBAAkB,QAAQ,UAAU;AAC7C,SAASC,yBAAyB,QAAQ,gBAAgB;AAwB1D,SAASC,WAAW,QAAQ,cAAW;AACvC,SACEC,wBAAwB,EACxBC,4BAA4B,EAC5BC,sBAAsB,QACjB,eAAY","ignoreList":[]}
|
|
@@ -1,21 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import NativeSmoothClipModule from './smoothClipNative';
|
|
4
|
+
const driverListeners = new Map();
|
|
5
|
+
const groupListeners = new Map();
|
|
6
|
+
let driverSubscription;
|
|
7
|
+
let groupSubscription;
|
|
8
|
+
function ensureDriverSubscription() {
|
|
9
|
+
driverSubscription ??= NativeSmoothClipModule.onClipAnimationComplete(event => {
|
|
10
|
+
const listeners = driverListeners.get(event.driverId);
|
|
11
|
+
if (!listeners) return;
|
|
12
|
+
for (const listener of listeners) listener(event);
|
|
13
|
+
});
|
|
7
14
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
function ensureGroupSubscription() {
|
|
16
|
+
groupSubscription ??= NativeSmoothClipModule.onClipGroupAnimationComplete(event => {
|
|
17
|
+
const listeners = groupListeners.get(event.controllerId);
|
|
18
|
+
if (!listeners) return;
|
|
19
|
+
for (const listener of listeners) listener(event);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
export function subscribeDriverCompletion(driverId, listener) {
|
|
23
|
+
const listeners = driverListeners.get(driverId) ?? new Set();
|
|
24
|
+
listeners.add(listener);
|
|
25
|
+
driverListeners.set(driverId, listeners);
|
|
26
|
+
ensureDriverSubscription();
|
|
27
|
+
return () => {
|
|
28
|
+
listeners.delete(listener);
|
|
29
|
+
if (listeners.size === 0) driverListeners.delete(driverId);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function subscribeGroupCompletion(controllerId, listener) {
|
|
33
|
+
const listeners = groupListeners.get(controllerId) ?? new Set();
|
|
34
|
+
listeners.add(listener);
|
|
35
|
+
groupListeners.set(controllerId, listeners);
|
|
36
|
+
ensureGroupSubscription();
|
|
37
|
+
return () => {
|
|
38
|
+
listeners.delete(listener);
|
|
39
|
+
if (listeners.size === 0) groupListeners.delete(controllerId);
|
|
40
|
+
};
|
|
20
41
|
}
|
|
21
42
|
//# sourceMappingURL=nativeCompletion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["NativeSmoothClipModule","driverListeners","Map","groupListeners","driverSubscription","groupSubscription","ensureDriverSubscription","onClipAnimationComplete","event","listeners","get","driverId","listener","ensureGroupSubscription","onClipGroupAnimationComplete","controllerId","subscribeDriverCompletion","Set","add","set","delete","size","subscribeGroupCompletion"],"sourceRoot":"../../src","sources":["nativeCompletion.ts"],"mappings":";;AAAA,OAAOA,sBAAsB,MAAM,oBAAoB;AAiBvD,MAAMC,eAAe,GAAG,IAAIC,GAAG,CAG7B,CAAC;AACH,MAAMC,cAAc,GAAG,IAAID,GAAG,CAAgD,CAAC;AAC/E,IAAIE,kBAAkD;AACtD,IAAIC,iBAAiD;AAErD,SAASC,wBAAwBA,CAAA,EAAS;EACxCF,kBAAkB,KAAKJ,sBAAsB,CAACO,uBAAuB,CAClEC,KAAK,IAAK;IACT,MAAMC,SAAS,GAAGR,eAAe,CAACS,GAAG,CAACF,KAAK,CAACG,QAAQ,CAAC;IACrD,IAAI,CAACF,SAAS,EAAE;IAChB,KAAK,MAAMG,QAAQ,IAAIH,SAAS,EAAEG,QAAQ,CAACJ,KAAK,CAAC;EACnD,CACF,CAAC;AACH;AAEA,SAASK,uBAAuBA,CAAA,EAAS;EACvCR,iBAAiB,KAAKL,sBAAsB,CAACc,4BAA4B,CACtEN,KAAK,IAAK;IACT,MAAMC,SAAS,GAAGN,cAAc,CAACO,GAAG,CAACF,KAAK,CAACO,YAAY,CAAC;IACxD,IAAI,CAACN,SAAS,EAAE;IAChB,KAAK,MAAMG,QAAQ,IAAIH,SAAS,EAAEG,QAAQ,CAACJ,KAAK,CAAC;EACnD,CACF,CAAC;AACH;AAEA,OAAO,SAASQ,yBAAyBA,CACvCL,QAAgB,EAChBC,QAA2C,EAC/B;EACZ,MAAMH,SAAS,GAAGR,eAAe,CAACS,GAAG,CAACC,QAAQ,CAAC,IAAI,IAAIM,GAAG,CAAC,CAAC;EAC5DR,SAAS,CAACS,GAAG,CAACN,QAAQ,CAAC;EACvBX,eAAe,CAACkB,GAAG,CAACR,QAAQ,EAAEF,SAAS,CAAC;EACxCH,wBAAwB,CAAC,CAAC;EAC1B,OAAO,MAAM;IACXG,SAAS,CAACW,MAAM,CAACR,QAAQ,CAAC;IAC1B,IAAIH,SAAS,CAACY,IAAI,KAAK,CAAC,EAAEpB,eAAe,CAACmB,MAAM,CAACT,QAAQ,CAAC;EAC5D,CAAC;AACH;AAEA,OAAO,SAASW,wBAAwBA,CACtCP,YAAoB,EACpBH,QAA0C,EAC9B;EACZ,MAAMH,SAAS,GAAGN,cAAc,CAACO,GAAG,CAACK,YAAY,CAAC,IAAI,IAAIE,GAAG,CAAC,CAAC;EAC/DR,SAAS,CAACS,GAAG,CAACN,QAAQ,CAAC;EACvBT,cAAc,CAACgB,GAAG,CAACJ,YAAY,EAAEN,SAAS,CAAC;EAC3CI,uBAAuB,CAAC,CAAC;EACzB,OAAO,MAAM;IACXJ,SAAS,CAACW,MAAM,CAACR,QAAQ,CAAC;IAC1B,IAAIH,SAAS,CAACY,IAAI,KAAK,CAAC,EAAElB,cAAc,CAACiB,MAAM,CAACL,YAAY,CAAC;EAC/D,CAAC;AACH","ignoreList":[]}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* eslint-disable no-bitwise -- the native packet carries packed RRGGBBAA colors */
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Versionless native packet layout. Keep this as the single JS codec used by
|
|
7
|
+
* drivers, groups, snapshots, and cancellation.
|
|
8
|
+
*/
|
|
9
|
+
export const PRESENTATION_STRIDE = 21;
|
|
10
|
+
export function appendPresentationPacket(values, presentation) {
|
|
11
|
+
'worklet';
|
|
12
|
+
|
|
13
|
+
const {
|
|
14
|
+
clip,
|
|
15
|
+
contentTranslateX,
|
|
16
|
+
contentTranslateY,
|
|
17
|
+
contentScale,
|
|
18
|
+
boxShadow
|
|
19
|
+
} = presentation;
|
|
20
|
+
const color = (boxShadow?.color ?? 0x000000ff) >>> 0;
|
|
21
|
+
values.push(clip.x, clip.y, clip.width, clip.height, clip.topLeftRadius, clip.topRightRadius, clip.bottomRightRadius, clip.bottomLeftRadius, clip.curve === 'continuous' ? 1 : 0, contentTranslateX, contentTranslateY, contentScale, boxShadow === undefined ? 0 : 1, (color >>> 24 & 0xff) / 255, (color >>> 16 & 0xff) / 255, (color >>> 8 & 0xff) / 255, (color & 0xff) / 255, boxShadow?.offsetX ?? 0, boxShadow?.offsetY ?? 0, boxShadow?.blurRadius ?? 0, boxShadow?.spreadDistance ?? 0);
|
|
22
|
+
}
|
|
23
|
+
export function presentationPacket(presentation) {
|
|
24
|
+
'worklet';
|
|
25
|
+
|
|
26
|
+
const values = [];
|
|
27
|
+
appendPresentationPacket(values, presentation);
|
|
28
|
+
return values;
|
|
29
|
+
}
|
|
30
|
+
export function presentationFromPacket(values, offset = 0) {
|
|
31
|
+
'worklet';
|
|
32
|
+
|
|
33
|
+
if (values.length < offset + PRESENTATION_STRIDE) return null;
|
|
34
|
+
for (let index = offset; index < offset + PRESENTATION_STRIDE; index += 1) {
|
|
35
|
+
if (!Number.isFinite(values[index])) return null;
|
|
36
|
+
}
|
|
37
|
+
const topLeftRadius = values[offset + 4];
|
|
38
|
+
const topRightRadius = values[offset + 5];
|
|
39
|
+
const bottomRightRadius = values[offset + 6];
|
|
40
|
+
const bottomLeftRadius = values[offset + 7];
|
|
41
|
+
const curveCode = values[offset + 8];
|
|
42
|
+
const contentScale = values[offset + 11];
|
|
43
|
+
const shadowEnabledCode = values[offset + 12];
|
|
44
|
+
const red = values[offset + 13];
|
|
45
|
+
const green = values[offset + 14];
|
|
46
|
+
const blue = values[offset + 15];
|
|
47
|
+
const alpha = values[offset + 16];
|
|
48
|
+
const blurRadius = values[offset + 19];
|
|
49
|
+
if (curveCode !== 0 && curveCode !== 1 || contentScale <= 0 || shadowEnabledCode !== 0 && shadowEnabledCode !== 1 || red < 0 || red > 1 || green < 0 || green > 1 || blue < 0 || blue > 1 || alpha < 0 || alpha > 1 || blurRadius < 0) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
const shadowEnabled = shadowEnabledCode === 1;
|
|
53
|
+
const color = (Math.round(red * 255) << 24 | Math.round(green * 255) << 16 | Math.round(blue * 255) << 8 | Math.round(alpha * 255)) >>> 0;
|
|
54
|
+
return {
|
|
55
|
+
clip: {
|
|
56
|
+
x: values[offset],
|
|
57
|
+
y: values[offset + 1],
|
|
58
|
+
width: values[offset + 2],
|
|
59
|
+
height: values[offset + 3],
|
|
60
|
+
radius: topLeftRadius === topRightRadius && topLeftRadius === bottomRightRadius && topLeftRadius === bottomLeftRadius ? topLeftRadius : 0,
|
|
61
|
+
topLeftRadius,
|
|
62
|
+
topRightRadius,
|
|
63
|
+
bottomRightRadius,
|
|
64
|
+
bottomLeftRadius,
|
|
65
|
+
curve: curveCode === 1 ? 'continuous' : 'circular'
|
|
66
|
+
},
|
|
67
|
+
contentTranslateX: values[offset + 9],
|
|
68
|
+
contentTranslateY: values[offset + 10],
|
|
69
|
+
contentScale,
|
|
70
|
+
...(shadowEnabled ? {
|
|
71
|
+
boxShadow: {
|
|
72
|
+
color,
|
|
73
|
+
offsetX: values[offset + 17],
|
|
74
|
+
offsetY: values[offset + 18],
|
|
75
|
+
blurRadius,
|
|
76
|
+
spreadDistance: values[offset + 20]
|
|
77
|
+
}
|
|
78
|
+
} : {})
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=presentationCodec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PRESENTATION_STRIDE","appendPresentationPacket","values","presentation","clip","contentTranslateX","contentTranslateY","contentScale","boxShadow","color","push","x","y","width","height","topLeftRadius","topRightRadius","bottomRightRadius","bottomLeftRadius","curve","undefined","offsetX","offsetY","blurRadius","spreadDistance","presentationPacket","presentationFromPacket","offset","length","index","Number","isFinite","curveCode","shadowEnabledCode","red","green","blue","alpha","shadowEnabled","Math","round","radius"],"sourceRoot":"../../src","sources":["presentationCodec.ts"],"mappings":"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","ignoreList":[]}
|