react-native-smooth-clip-view 0.1.0 → 0.2.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.
- package/README.md +164 -43
- package/SmoothClipView.podspec +8 -2
- package/android/CMakeLists.txt +39 -0
- package/android/build.gradle +69 -2
- package/android/proguard-rules.pro +6 -0
- package/android/src/main/cpp/SmoothClipAndroid.h +59 -0
- package/android/src/main/cpp/SmoothClipBindings.cpp +428 -0
- package/android/src/main/cpp/SmoothClipRegistry.cpp +913 -0
- package/android/src/main/java/com/smoothclipview/ClipGeometryNormalizer.kt +25 -0
- package/android/src/main/java/com/smoothclipview/SmoothClipBindings.kt +55 -0
- package/android/src/main/java/com/smoothclipview/SmoothClipModule.kt +128 -0
- package/android/src/main/java/com/smoothclipview/SmoothClipView.kt +164 -30
- package/android/src/main/java/com/smoothclipview/SmoothClipViewManager.kt +107 -10
- package/android/src/main/java/com/smoothclipview/SmoothClipViewPackage.kt +18 -2
- package/cpp/SmoothClipRegistry.h +93 -0
- package/cpp/SmoothClipSharedGeometry.h +50 -0
- package/ios/SmoothClipModuleProvider.h +9 -0
- package/ios/SmoothClipModuleProvider.mm +16 -0
- package/ios/SmoothClipRegistry.mm +717 -0
- package/ios/SmoothClipTurboModule.cpp +290 -0
- package/ios/SmoothClipTurboModule.h +132 -0
- package/ios/SmoothClipView.mm +976 -85
- package/ios/SmoothClipViewRegistry.h +27 -0
- package/lib/module/NativeSmoothClipModule.js +5 -0
- package/lib/module/NativeSmoothClipModule.js.map +1 -0
- package/lib/module/SmoothClipView.android.js +4 -0
- package/lib/module/SmoothClipView.android.js.map +1 -0
- package/lib/module/SmoothClipView.ios.js +34 -0
- package/lib/module/SmoothClipView.ios.js.map +1 -0
- package/lib/module/SmoothClipView.js +26 -12
- package/lib/module/SmoothClipView.js.map +1 -1
- package/lib/module/SmoothClipView.web.js +28 -12
- package/lib/module/SmoothClipView.web.js.map +1 -1
- package/lib/module/SmoothClipViewNativeComponent.ts +14 -1
- package/lib/module/driverState.js +102 -0
- package/lib/module/driverState.js.map +1 -0
- package/lib/module/driverTypes.js +4 -0
- package/lib/module/driverTypes.js.map +1 -0
- package/lib/module/drivers.android.js +4 -0
- package/lib/module/drivers.android.js.map +1 -0
- package/lib/module/drivers.ios.js +380 -0
- package/lib/module/drivers.ios.js.map +1 -0
- package/lib/module/drivers.js +276 -0
- package/lib/module/drivers.js.map +1 -0
- package/lib/module/geometry.js +19 -0
- package/lib/module/geometry.js.map +1 -1
- package/lib/module/index.js +2 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +2 -0
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/nativeCompletion.js +21 -0
- package/lib/module/nativeCompletion.js.map +1 -0
- package/lib/module/reactRequests.js +50 -0
- package/lib/module/reactRequests.js.map +1 -0
- package/lib/module/smoothClipNative.android.js +15 -0
- package/lib/module/smoothClipNative.android.js.map +1 -0
- package/lib/module/smoothClipNative.js +8 -0
- package/lib/module/smoothClipNative.js.map +1 -0
- package/lib/typescript/src/NativeSmoothClipModule.d.ts +19 -0
- package/lib/typescript/src/NativeSmoothClipModule.d.ts.map +1 -0
- package/lib/typescript/src/SmoothClipView.android.d.ts +3 -0
- package/lib/typescript/src/SmoothClipView.android.d.ts.map +1 -0
- package/lib/typescript/src/SmoothClipView.d.ts +5 -6
- package/lib/typescript/src/SmoothClipView.d.ts.map +1 -1
- package/lib/typescript/src/SmoothClipView.ios.d.ts +9 -0
- package/lib/typescript/src/SmoothClipView.ios.d.ts.map +1 -0
- package/lib/typescript/src/SmoothClipView.web.d.ts +5 -7
- package/lib/typescript/src/SmoothClipView.web.d.ts.map +1 -1
- package/lib/typescript/src/SmoothClipViewNativeComponent.d.ts +4 -0
- package/lib/typescript/src/SmoothClipViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/driverState.d.ts +31 -0
- package/lib/typescript/src/driverState.d.ts.map +1 -0
- package/lib/typescript/src/driverTypes.d.ts +61 -0
- package/lib/typescript/src/driverTypes.d.ts.map +1 -0
- package/lib/typescript/src/drivers.android.d.ts +3 -0
- package/lib/typescript/src/drivers.android.d.ts.map +1 -0
- package/lib/typescript/src/drivers.d.ts +5 -0
- package/lib/typescript/src/drivers.d.ts.map +1 -0
- package/lib/typescript/src/drivers.ios.d.ts +5 -0
- package/lib/typescript/src/drivers.ios.d.ts.map +1 -0
- package/lib/typescript/src/geometry.d.ts +8 -0
- package/lib/typescript/src/geometry.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +4 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/index.web.d.ts +4 -1
- package/lib/typescript/src/index.web.d.ts.map +1 -1
- package/lib/typescript/src/nativeCompletion.d.ts +7 -0
- package/lib/typescript/src/nativeCompletion.d.ts.map +1 -0
- package/lib/typescript/src/reactRequests.d.ts +7 -0
- package/lib/typescript/src/reactRequests.d.ts.map +1 -0
- package/lib/typescript/src/smoothClipNative.android.d.ts +4 -0
- package/lib/typescript/src/smoothClipNative.android.d.ts.map +1 -0
- package/lib/typescript/src/smoothClipNative.d.ts +3 -0
- package/lib/typescript/src/smoothClipNative.d.ts.map +1 -0
- package/package.json +12 -7
- package/src/NativeSmoothClipModule.ts +104 -0
- package/src/SmoothClipView.android.tsx +2 -0
- package/src/SmoothClipView.ios.tsx +36 -0
- package/src/SmoothClipView.tsx +31 -27
- package/src/SmoothClipView.web.tsx +26 -22
- package/src/SmoothClipViewNativeComponent.ts +14 -1
- package/src/driverState.ts +150 -0
- package/src/driverTypes.ts +91 -0
- package/src/drivers.android.ts +6 -0
- package/src/drivers.ios.ts +665 -0
- package/src/drivers.ts +416 -0
- package/src/geometry.ts +39 -0
- package/src/index.ts +19 -1
- package/src/index.web.ts +19 -1
- package/src/nativeCompletion.ts +37 -0
- package/src/reactRequests.ts +64 -0
- package/src/smoothClipNative.android.ts +20 -0
- package/src/smoothClipNative.ts +5 -0
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useEffect, useRef } from 'react';
|
|
4
|
+
import { useSharedValue } from 'react-native-reanimated';
|
|
5
|
+
import { isRNRuntime, scheduleOnRN, scheduleOnUI } from 'react-native-worklets';
|
|
6
|
+
import NativeSmoothClipModule from './smoothClipNative';
|
|
7
|
+
import { allocateDriverId, attachDriverState, createDriverState, detachDriverState, getDriverState, setDriverState } from "./driverState.js";
|
|
8
|
+
import { completeNativeAnimation, synchronizeNativeCompletion } from "./nativeCompletion.js";
|
|
9
|
+
import { clipPresentationEquals, createClipPresentation, isFiniteClipPresentation } from "./geometry.js";
|
|
10
|
+
import { createReactRequest, rejectDriverRequests, resolveReactRequest } from "./reactRequests.js";
|
|
11
|
+
const INTERACTIVE = 0;
|
|
12
|
+
const NATIVE = 1;
|
|
13
|
+
const setPresentationHostFunction = NativeSmoothClipModule.setClipPresentation;
|
|
14
|
+
const beginInteractionHostFunction = NativeSmoothClipModule.beginInteraction;
|
|
15
|
+
const animateTimingHostFunction = NativeSmoothClipModule.animateTiming;
|
|
16
|
+
const animateSpringHostFunction = NativeSmoothClipModule.animateSpring;
|
|
17
|
+
const animateKeyframesHostFunction = NativeSmoothClipModule.animateKeyframes;
|
|
18
|
+
const rejectAnimationHostFunction = NativeSmoothClipModule.rejectAnimation;
|
|
19
|
+
const cancelAnimationHostFunction = NativeSmoothClipModule.cancelAnimation;
|
|
20
|
+
const destroyDriverHostFunction = NativeSmoothClipModule.destroyDriver;
|
|
21
|
+
|
|
22
|
+
// Workaround for react-native-worklets 0.10: the RN-side serialization cache
|
|
23
|
+
// hands out one remote-function registry id per function forever, but the
|
|
24
|
+
// registry entry is deleted as soon as any transient UI-side proxy of that
|
|
25
|
+
// function is garbage collected. A later scheduleOnRN for the same function
|
|
26
|
+
// then reads `undefined` from the registry and aborts in Value::getObject.
|
|
27
|
+
// Pinning one UI-side reference for the app lifetime keeps the proxy — and
|
|
28
|
+
// with it the registry entry — alive. Remove once worklets decouples registry
|
|
29
|
+
// cleanup from proxy lifetime.
|
|
30
|
+
scheduleOnUI(resolver => {
|
|
31
|
+
'worklet';
|
|
32
|
+
|
|
33
|
+
globalThis.__smoothClipPinnedResolver = resolver;
|
|
34
|
+
}, resolveReactRequest);
|
|
35
|
+
function reduceMotionCode(value) {
|
|
36
|
+
switch (value) {
|
|
37
|
+
case 'always':
|
|
38
|
+
return 1;
|
|
39
|
+
case 'never':
|
|
40
|
+
return 2;
|
|
41
|
+
default:
|
|
42
|
+
return 0;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function animationIsFinite(target, animation) {
|
|
46
|
+
'worklet';
|
|
47
|
+
|
|
48
|
+
if (animation.type === 'timing') {
|
|
49
|
+
return Number.isFinite(animation.duration) && animation.controlPoints.every(Number.isFinite);
|
|
50
|
+
}
|
|
51
|
+
if (animation.type === 'spring') {
|
|
52
|
+
return [animation.mass ?? 1, animation.stiffness ?? 100, animation.damping ?? 10, animation.initialVelocity === 'inherit' ? 0 : animation.initialVelocity ?? 0].every(Number.isFinite);
|
|
53
|
+
}
|
|
54
|
+
if (!Number.isFinite(animation.duration) || animation.frames.length < 2) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
let previousOffset = -1;
|
|
58
|
+
for (const frame of animation.frames) {
|
|
59
|
+
if (!Number.isFinite(frame.offset) || frame.offset < 0 || frame.offset > 1 || frame.offset <= previousOffset || !isFiniteClipPresentation(frame.presentation)) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
previousOffset = frame.offset;
|
|
63
|
+
}
|
|
64
|
+
return animation.frames[0]?.offset === 0 && previousOffset === 1 && clipPresentationEquals(animation.frames[animation.frames.length - 1]?.presentation ?? null, target);
|
|
65
|
+
}
|
|
66
|
+
function presentationFromNative(values, fallback, offset = 0) {
|
|
67
|
+
'worklet';
|
|
68
|
+
|
|
69
|
+
if (values.length < offset + 7) return fallback;
|
|
70
|
+
const presentation = {
|
|
71
|
+
clip: {
|
|
72
|
+
x: values[offset],
|
|
73
|
+
y: values[offset + 1],
|
|
74
|
+
width: values[offset + 2],
|
|
75
|
+
height: values[offset + 3],
|
|
76
|
+
radius: values[offset + 4]
|
|
77
|
+
},
|
|
78
|
+
contentTranslateX: values[offset + 5],
|
|
79
|
+
contentTranslateY: values[offset + 6]
|
|
80
|
+
};
|
|
81
|
+
return isFiniteClipPresentation(presentation) ? presentation : fallback;
|
|
82
|
+
}
|
|
83
|
+
function flattenedKeyframes(animation) {
|
|
84
|
+
'worklet';
|
|
85
|
+
|
|
86
|
+
const values = [];
|
|
87
|
+
for (const frame of animation.frames) {
|
|
88
|
+
const {
|
|
89
|
+
clip,
|
|
90
|
+
contentTranslateX,
|
|
91
|
+
contentTranslateY
|
|
92
|
+
} = frame.presentation;
|
|
93
|
+
values.push(frame.offset, clip.x, clip.y, clip.width, clip.height, clip.radius, contentTranslateX, contentTranslateY);
|
|
94
|
+
}
|
|
95
|
+
return values;
|
|
96
|
+
}
|
|
97
|
+
function uiOnly() {
|
|
98
|
+
'worklet';
|
|
99
|
+
|
|
100
|
+
throw new Error('[SmoothClipView] driver.ui methods must run on the UI runtime. Use driver.react from React code.');
|
|
101
|
+
}
|
|
102
|
+
export function useSmoothClipDriver(initialValue, options = {}) {
|
|
103
|
+
const initialPresentation = 'clip' in initialValue ? initialValue : createClipPresentation(initialValue);
|
|
104
|
+
const presentation = useSharedValue(initialPresentation);
|
|
105
|
+
const ownership = useSharedValue(INTERACTIVE);
|
|
106
|
+
const suppressDeliveries = useSharedValue(0);
|
|
107
|
+
const activeAnimationId = useSharedValue(0);
|
|
108
|
+
// Non-zero after a setScalars hot write: driver.presentation is then stale,
|
|
109
|
+
// so animateTo must start from the native registry's latest value instead
|
|
110
|
+
// of snapping back to the stale SharedValue.
|
|
111
|
+
const scalarsStale = useSharedValue(0);
|
|
112
|
+
const callbackRef = useRef(options.onAnimationComplete);
|
|
113
|
+
const driverRef = useRef(null);
|
|
114
|
+
callbackRef.current = options.onAnimationComplete;
|
|
115
|
+
if (driverRef.current === null) {
|
|
116
|
+
const driverId = allocateDriverId();
|
|
117
|
+
const reduceMotion = reduceMotionCode(options.reduceMotion ?? 'system');
|
|
118
|
+
const seedPresentation = next => {
|
|
119
|
+
'worklet';
|
|
120
|
+
|
|
121
|
+
if (!clipPresentationEquals(presentation.value, next)) {
|
|
122
|
+
suppressDeliveries.value += 1;
|
|
123
|
+
presentation.value = next;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
const beginOnUI = () => {
|
|
127
|
+
'worklet';
|
|
128
|
+
|
|
129
|
+
const current = presentationFromNative(beginInteractionHostFunction(driverId), presentation.value);
|
|
130
|
+
activeAnimationId.value = 0;
|
|
131
|
+
ownership.value = INTERACTIVE;
|
|
132
|
+
scalarsStale.value = 0;
|
|
133
|
+
seedPresentation(current);
|
|
134
|
+
return current;
|
|
135
|
+
};
|
|
136
|
+
const setOnUI = next => {
|
|
137
|
+
'worklet';
|
|
138
|
+
|
|
139
|
+
if (!isFiniteClipPresentation(next)) return;
|
|
140
|
+
activeAnimationId.value = 0;
|
|
141
|
+
ownership.value = INTERACTIVE;
|
|
142
|
+
scalarsStale.value = 0;
|
|
143
|
+
const {
|
|
144
|
+
clip,
|
|
145
|
+
contentTranslateX,
|
|
146
|
+
contentTranslateY
|
|
147
|
+
} = next;
|
|
148
|
+
setPresentationHostFunction(driverId, clip.x, clip.y, clip.width, clip.height, clip.radius, contentTranslateX, contentTranslateY, true);
|
|
149
|
+
seedPresentation(next);
|
|
150
|
+
};
|
|
151
|
+
const setScalarsOnUI = (x, y, width, height, radius, contentTranslateX, contentTranslateY) => {
|
|
152
|
+
'worklet';
|
|
153
|
+
|
|
154
|
+
if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(width) || !Number.isFinite(height) || !Number.isFinite(radius) || !Number.isFinite(contentTranslateX) || !Number.isFinite(contentTranslateY)) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (activeAnimationId.value !== 0) activeAnimationId.value = 0;
|
|
158
|
+
if (ownership.value !== INTERACTIVE) ownership.value = INTERACTIVE;
|
|
159
|
+
if (scalarsStale.value === 0) scalarsStale.value = 1;
|
|
160
|
+
setPresentationHostFunction(driverId, x, y, width, height, radius, contentTranslateX, contentTranslateY, true);
|
|
161
|
+
};
|
|
162
|
+
const animateOnUI = (target, animation) => {
|
|
163
|
+
'worklet';
|
|
164
|
+
|
|
165
|
+
if (!isFiniteClipPresentation(target) || !animationIsFinite(target, animation)) {
|
|
166
|
+
return rejectAnimationHostFunction(driverId);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// After a setScalars hot write the SharedValue no longer matches what
|
|
170
|
+
// is on screen; passing it as the start would snap the animation back.
|
|
171
|
+
// Without an interactive start, native resolves the start from its own
|
|
172
|
+
// latest value instead.
|
|
173
|
+
const scalarsWereStale = scalarsStale.value !== 0;
|
|
174
|
+
const hasInteractiveStart = ownership.value === INTERACTIVE && !scalarsWereStale;
|
|
175
|
+
const start = presentation.value;
|
|
176
|
+
ownership.value = NATIVE;
|
|
177
|
+
presentation.value = target;
|
|
178
|
+
scalarsStale.value = 0;
|
|
179
|
+
const startClip = start.clip;
|
|
180
|
+
const targetClip = target.clip;
|
|
181
|
+
let animationId;
|
|
182
|
+
if (animation.type === 'timing') {
|
|
183
|
+
const [x1, y1, x2, y2] = animation.controlPoints;
|
|
184
|
+
animationId = animateTimingHostFunction(driverId, hasInteractiveStart, startClip.x, startClip.y, startClip.width, startClip.height, startClip.radius, start.contentTranslateX, start.contentTranslateY, targetClip.x, targetClip.y, targetClip.width, targetClip.height, targetClip.radius, target.contentTranslateX, target.contentTranslateY, Math.max(0, animation.duration), x1, y1, x2, y2, reduceMotion);
|
|
185
|
+
} else if (animation.type === 'spring') {
|
|
186
|
+
const inheritVelocity = animation.initialVelocity === undefined || animation.initialVelocity === 'inherit';
|
|
187
|
+
animationId = animateSpringHostFunction(driverId, hasInteractiveStart, startClip.x, startClip.y, startClip.width, startClip.height, startClip.radius, start.contentTranslateX, start.contentTranslateY, targetClip.x, targetClip.y, targetClip.width, targetClip.height, targetClip.radius, target.contentTranslateX, target.contentTranslateY, Math.max(0.0001, animation.mass ?? 1), Math.max(0.0001, animation.stiffness ?? 100), Math.max(0, animation.damping ?? 10), inheritVelocity ? 0 : animation.initialVelocity, inheritVelocity, reduceMotion);
|
|
188
|
+
} else {
|
|
189
|
+
animationId = animateKeyframesHostFunction(driverId, hasInteractiveStart, startClip.x, startClip.y, startClip.width, startClip.height, startClip.radius, start.contentTranslateX, start.contentTranslateY, targetClip.x, targetClip.y, targetClip.width, targetClip.height, targetClip.radius, target.contentTranslateX, target.contentTranslateY, Math.max(0, animation.duration), flattenedKeyframes(animation), reduceMotion);
|
|
190
|
+
}
|
|
191
|
+
if (animationId === 0) {
|
|
192
|
+
// Native rejected the transition after ownership was transferred.
|
|
193
|
+
// Restore interactive ownership and the pre-animation value, then
|
|
194
|
+
// emit a standalone finished:false completion so completion-driven
|
|
195
|
+
// state machines observe exactly one result per animateTo call.
|
|
196
|
+
ownership.value = INTERACTIVE;
|
|
197
|
+
presentation.value = start;
|
|
198
|
+
if (scalarsWereStale) scalarsStale.value = 1;
|
|
199
|
+
activeAnimationId.value = 0;
|
|
200
|
+
return rejectAnimationHostFunction(driverId);
|
|
201
|
+
}
|
|
202
|
+
activeAnimationId.value = animationId;
|
|
203
|
+
return animationId;
|
|
204
|
+
};
|
|
205
|
+
const cancelOnUI = (animationId = 0, behavior = 'current') => {
|
|
206
|
+
'worklet';
|
|
207
|
+
|
|
208
|
+
const values = cancelAnimationHostFunction(driverId, animationId, behavior === 'target' ? 1 : 0);
|
|
209
|
+
if (values.length < 8 || values[0] !== 1) return presentation.value;
|
|
210
|
+
const current = presentationFromNative(values, presentation.value, 1);
|
|
211
|
+
activeAnimationId.value = 0;
|
|
212
|
+
ownership.value = INTERACTIVE;
|
|
213
|
+
scalarsStale.value = 0;
|
|
214
|
+
seedPresentation(current);
|
|
215
|
+
return current;
|
|
216
|
+
};
|
|
217
|
+
const driver = {
|
|
218
|
+
kind: 'hybrid',
|
|
219
|
+
presentation,
|
|
220
|
+
ui: {
|
|
221
|
+
beginInteraction() {
|
|
222
|
+
'worklet';
|
|
223
|
+
|
|
224
|
+
if (isRNRuntime()) return uiOnly();
|
|
225
|
+
return beginOnUI();
|
|
226
|
+
},
|
|
227
|
+
set(next) {
|
|
228
|
+
'worklet';
|
|
229
|
+
|
|
230
|
+
if (isRNRuntime()) return uiOnly();
|
|
231
|
+
setOnUI(next);
|
|
232
|
+
},
|
|
233
|
+
setScalars(x, y, width, height, radius, contentTranslateX, contentTranslateY) {
|
|
234
|
+
'worklet';
|
|
235
|
+
|
|
236
|
+
if (isRNRuntime()) return uiOnly();
|
|
237
|
+
setScalarsOnUI(x, y, width, height, radius, contentTranslateX, contentTranslateY);
|
|
238
|
+
},
|
|
239
|
+
animateTo(target, animation) {
|
|
240
|
+
'worklet';
|
|
241
|
+
|
|
242
|
+
if (isRNRuntime()) return uiOnly();
|
|
243
|
+
return animateOnUI(target, animation);
|
|
244
|
+
},
|
|
245
|
+
cancel(animationId = 0, behavior = 'current') {
|
|
246
|
+
'worklet';
|
|
247
|
+
|
|
248
|
+
if (isRNRuntime()) return uiOnly();
|
|
249
|
+
return cancelOnUI(animationId, behavior);
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
react: {
|
|
253
|
+
beginInteraction() {
|
|
254
|
+
const {
|
|
255
|
+
requestId,
|
|
256
|
+
promise
|
|
257
|
+
} = createReactRequest(driverId);
|
|
258
|
+
scheduleOnUI(() => {
|
|
259
|
+
'worklet';
|
|
260
|
+
|
|
261
|
+
const result = beginOnUI();
|
|
262
|
+
scheduleOnRN(resolveReactRequest, driverId, requestId, result);
|
|
263
|
+
});
|
|
264
|
+
return promise;
|
|
265
|
+
},
|
|
266
|
+
set(next) {
|
|
267
|
+
const {
|
|
268
|
+
requestId,
|
|
269
|
+
promise
|
|
270
|
+
} = createReactRequest(driverId);
|
|
271
|
+
scheduleOnUI(() => {
|
|
272
|
+
'worklet';
|
|
273
|
+
|
|
274
|
+
setOnUI(next);
|
|
275
|
+
scheduleOnRN(resolveReactRequest, driverId, requestId, undefined);
|
|
276
|
+
});
|
|
277
|
+
return promise;
|
|
278
|
+
},
|
|
279
|
+
animateTo(target, animation) {
|
|
280
|
+
const {
|
|
281
|
+
requestId,
|
|
282
|
+
promise
|
|
283
|
+
} = createReactRequest(driverId, true);
|
|
284
|
+
scheduleOnUI(() => {
|
|
285
|
+
'worklet';
|
|
286
|
+
|
|
287
|
+
const result = animateOnUI(target, animation);
|
|
288
|
+
scheduleOnRN(resolveReactRequest, driverId, requestId, result, true);
|
|
289
|
+
});
|
|
290
|
+
return promise;
|
|
291
|
+
},
|
|
292
|
+
cancel(animationId = 0, behavior = 'current') {
|
|
293
|
+
const {
|
|
294
|
+
requestId,
|
|
295
|
+
promise
|
|
296
|
+
} = createReactRequest(driverId, true);
|
|
297
|
+
scheduleOnUI(() => {
|
|
298
|
+
'worklet';
|
|
299
|
+
|
|
300
|
+
const result = cancelOnUI(animationId, behavior);
|
|
301
|
+
scheduleOnRN(resolveReactRequest, driverId, requestId, result, true);
|
|
302
|
+
});
|
|
303
|
+
return promise;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
};
|
|
307
|
+
setDriverState(driver, createDriverState(driverId, initialPresentation, presentation, callbackRef, activeAnimationId, ownership));
|
|
308
|
+
driverRef.current = driver;
|
|
309
|
+
}
|
|
310
|
+
const driver = driverRef.current;
|
|
311
|
+
useEffect(() => {
|
|
312
|
+
const currentDriver = driverRef.current;
|
|
313
|
+
if (!currentDriver) return undefined;
|
|
314
|
+
const state = getDriverState(currentDriver);
|
|
315
|
+
const {
|
|
316
|
+
driverId
|
|
317
|
+
} = state;
|
|
318
|
+
// Re-attach on every effect run: StrictMode/<Activity> replay the effect
|
|
319
|
+
// after its cleanup detached this state and destroyed the native driver.
|
|
320
|
+
// The authoritative seed below recreates the native entry in that case.
|
|
321
|
+
attachDriverState(state);
|
|
322
|
+
const subscription = NativeSmoothClipModule.onClipAnimationComplete(result => {
|
|
323
|
+
if (result.driverId !== driverId) return;
|
|
324
|
+
synchronizeNativeCompletion(activeAnimationId, ownership, result.animationId, result.finished);
|
|
325
|
+
completeNativeAnimation(driverId, result.animationId, result.finished);
|
|
326
|
+
});
|
|
327
|
+
scheduleOnUI((source, listenerId, nativeDriverId, owner, suppressed, active, stale, setter) => {
|
|
328
|
+
'worklet';
|
|
329
|
+
|
|
330
|
+
let last = null;
|
|
331
|
+
const deliver = next => {
|
|
332
|
+
if (!isFiniteClipPresentation(next) || clipPresentationEquals(last, next)) {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
// Record `last` only for values native has actually observed:
|
|
336
|
+
// deliveries dropped during native ownership must stay eligible
|
|
337
|
+
// for re-delivery once interactive ownership returns.
|
|
338
|
+
if (owner.value !== INTERACTIVE) return;
|
|
339
|
+
if (suppressed.value > 0) {
|
|
340
|
+
suppressed.value -= 1;
|
|
341
|
+
last = next;
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
last = next;
|
|
345
|
+
if (stale.value !== 0) stale.value = 0;
|
|
346
|
+
const {
|
|
347
|
+
clip,
|
|
348
|
+
contentTranslateX,
|
|
349
|
+
contentTranslateY
|
|
350
|
+
} = next;
|
|
351
|
+
setter(nativeDriverId, clip.x, clip.y, clip.width, clip.height, clip.radius, contentTranslateX, contentTranslateY, false);
|
|
352
|
+
};
|
|
353
|
+
source.addListener(listenerId, deliver);
|
|
354
|
+
// Authoritative take-ownership seed. Creates the native entry before
|
|
355
|
+
// any view mounts on the first run, and revives a driver destroyed by
|
|
356
|
+
// an effect-replay cleanup (StrictMode/<Activity>) on later runs.
|
|
357
|
+
const current = source.value;
|
|
358
|
+
if (isFiniteClipPresentation(current)) {
|
|
359
|
+
active.value = 0;
|
|
360
|
+
owner.value = INTERACTIVE;
|
|
361
|
+
stale.value = 0;
|
|
362
|
+
last = current;
|
|
363
|
+
setter(nativeDriverId, current.clip.x, current.clip.y, current.clip.width, current.clip.height, current.clip.radius, current.contentTranslateX, current.contentTranslateY, true);
|
|
364
|
+
}
|
|
365
|
+
}, presentation, driverId, driverId, ownership, suppressDeliveries, activeAnimationId, scalarsStale, setPresentationHostFunction);
|
|
366
|
+
return () => {
|
|
367
|
+
subscription.remove();
|
|
368
|
+
rejectDriverRequests(driverId);
|
|
369
|
+
detachDriverState(state);
|
|
370
|
+
scheduleOnUI((source, listenerId, nativeDriverId, destroy) => {
|
|
371
|
+
'worklet';
|
|
372
|
+
|
|
373
|
+
source.removeListener(listenerId);
|
|
374
|
+
destroy(nativeDriverId);
|
|
375
|
+
}, presentation, driverId, driverId, destroyDriverHostFunction);
|
|
376
|
+
};
|
|
377
|
+
}, [activeAnimationId, ownership, presentation, scalarsStale, suppressDeliveries]);
|
|
378
|
+
return driver;
|
|
379
|
+
}
|
|
380
|
+
//# sourceMappingURL=drivers.ios.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useSharedValue","isRNRuntime","scheduleOnRN","scheduleOnUI","NativeSmoothClipModule","allocateDriverId","attachDriverState","createDriverState","detachDriverState","getDriverState","setDriverState","completeNativeAnimation","synchronizeNativeCompletion","clipPresentationEquals","createClipPresentation","isFiniteClipPresentation","createReactRequest","rejectDriverRequests","resolveReactRequest","INTERACTIVE","NATIVE","setPresentationHostFunction","setClipPresentation","beginInteractionHostFunction","beginInteraction","animateTimingHostFunction","animateTiming","animateSpringHostFunction","animateSpring","animateKeyframesHostFunction","animateKeyframes","rejectAnimationHostFunction","rejectAnimation","cancelAnimationHostFunction","cancelAnimation","destroyDriverHostFunction","destroyDriver","resolver","globalThis","__smoothClipPinnedResolver","reduceMotionCode","value","animationIsFinite","target","animation","type","Number","isFinite","duration","controlPoints","every","mass","stiffness","damping","initialVelocity","frames","length","previousOffset","frame","offset","presentation","presentationFromNative","values","fallback","clip","x","y","width","height","radius","contentTranslateX","contentTranslateY","flattenedKeyframes","push","uiOnly","Error","useSmoothClipDriver","initialValue","options","initialPresentation","ownership","suppressDeliveries","activeAnimationId","scalarsStale","callbackRef","onAnimationComplete","driverRef","current","driverId","reduceMotion","seedPresentation","next","beginOnUI","setOnUI","setScalarsOnUI","animateOnUI","scalarsWereStale","hasInteractiveStart","start","startClip","targetClip","animationId","x1","y1","x2","y2","Math","max","inheritVelocity","undefined","cancelOnUI","behavior","driver","kind","ui","set","setScalars","animateTo","cancel","react","requestId","promise","result","currentDriver","state","subscription","onClipAnimationComplete","finished","source","listenerId","nativeDriverId","owner","suppressed","active","stale","setter","last","deliver","addListener","remove","destroy","removeListener"],"sourceRoot":"../../src","sources":["drivers.ios.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SAASC,cAAc,QAA0B,yBAAyB;AAC1E,SAASC,WAAW,EAAEC,YAAY,EAAEC,YAAY,QAAQ,uBAAuB;AAC/E,OAAOC,sBAAsB,MAAM,oBAAoB;AAUvD,SACEC,gBAAgB,EAChBC,iBAAiB,EACjBC,iBAAiB,EACjBC,iBAAiB,EACjBC,cAAc,EACdC,cAAc,QACT,kBAAe;AACtB,SACEC,uBAAuB,EACvBC,2BAA2B,QACtB,uBAAoB;AAC3B,SACEC,sBAAsB,EACtBC,sBAAsB,EACtBC,wBAAwB,QAGnB,eAAY;AACnB,SACEC,kBAAkB,EAClBC,oBAAoB,EACpBC,mBAAmB,QACd,oBAAiB;AAExB,MAAMC,WAAW,GAAG,CAAC;AACrB,MAAMC,MAAM,GAAG,CAAC;AAEhB,MAAMC,2BAA2B,GAAGjB,sBAAsB,CAACkB,mBAAmB;AAC9E,MAAMC,4BAA4B,GAAGnB,sBAAsB,CAACoB,gBAAgB;AAC5E,MAAMC,yBAAyB,GAAGrB,sBAAsB,CAACsB,aAAa;AACtE,MAAMC,yBAAyB,GAAGvB,sBAAsB,CAACwB,aAAa;AACtE,MAAMC,4BAA4B,GAAGzB,sBAAsB,CAAC0B,gBAAgB;AAC5E,MAAMC,2BAA2B,GAAG3B,sBAAsB,CAAC4B,eAAe;AAC1E,MAAMC,2BAA2B,GAAG7B,sBAAsB,CAAC8B,eAAe;AAC1E,MAAMC,yBAAyB,GAAG/B,sBAAsB,CAACgC,aAAa;;AAEtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAjC,YAAY,CAAEkC,QAAoC,IAAK;EACrD,SAAS;;EACRC,UAAU,CAA6BC,0BAA0B,GAAGF,QAAQ;AAC/E,CAAC,EAAEnB,mBAAmB,CAAC;AAEvB,SAASsB,gBAAgBA,CAACC,KAAuB,EAAU;EACzD,QAAQA,KAAK;IACX,KAAK,QAAQ;MACX,OAAO,CAAC;IACV,KAAK,OAAO;MACV,OAAO,CAAC;IACV;MACE,OAAO,CAAC;EACZ;AACF;AAEA,SAASC,iBAAiBA,CACxBC,MAA8B,EAC9BC,SAA8B,EACrB;EACT,SAAS;;EACT,IAAIA,SAAS,CAACC,IAAI,KAAK,QAAQ,EAAE;IAC/B,OACEC,MAAM,CAACC,QAAQ,CAACH,SAAS,CAACI,QAAQ,CAAC,IACnCJ,SAAS,CAACK,aAAa,CAACC,KAAK,CAACJ,MAAM,CAACC,QAAQ,CAAC;EAElD;EACA,IAAIH,SAAS,CAACC,IAAI,KAAK,QAAQ,EAAE;IAC/B,OAAO,CACLD,SAAS,CAACO,IAAI,IAAI,CAAC,EACnBP,SAAS,CAACQ,SAAS,IAAI,GAAG,EAC1BR,SAAS,CAACS,OAAO,IAAI,EAAE,EACvBT,SAAS,CAACU,eAAe,KAAK,SAAS,GACnC,CAAC,GACAV,SAAS,CAACU,eAAe,IAAI,CAAE,CACrC,CAACJ,KAAK,CAACJ,MAAM,CAACC,QAAQ,CAAC;EAC1B;EACA,IAAI,CAACD,MAAM,CAACC,QAAQ,CAACH,SAAS,CAACI,QAAQ,CAAC,IAAIJ,SAAS,CAACW,MAAM,CAACC,MAAM,GAAG,CAAC,EAAE;IACvE,OAAO,KAAK;EACd;EACA,IAAIC,cAAc,GAAG,CAAC,CAAC;EACvB,KAAK,MAAMC,KAAK,IAAId,SAAS,CAACW,MAAM,EAAE;IACpC,IACE,CAACT,MAAM,CAACC,QAAQ,CAACW,KAAK,CAACC,MAAM,CAAC,IAC9BD,KAAK,CAACC,MAAM,GAAG,CAAC,IAChBD,KAAK,CAACC,MAAM,GAAG,CAAC,IAChBD,KAAK,CAACC,MAAM,IAAIF,cAAc,IAC9B,CAAC1C,wBAAwB,CAAC2C,KAAK,CAACE,YAAY,CAAC,EAC7C;MACA,OAAO,KAAK;IACd;IACAH,cAAc,GAAGC,KAAK,CAACC,MAAM;EAC/B;EACA,OACEf,SAAS,CAACW,MAAM,CAAC,CAAC,CAAC,EAAEI,MAAM,KAAK,CAAC,IACjCF,cAAc,KAAK,CAAC,IACpB5C,sBAAsB,CACpB+B,SAAS,CAACW,MAAM,CAACX,SAAS,CAACW,MAAM,CAACC,MAAM,GAAG,CAAC,CAAC,EAAEI,YAAY,IAAI,IAAI,EACnEjB,MACF,CAAC;AAEL;AAEA,SAASkB,sBAAsBA,CAC7BC,MAA6B,EAC7BC,QAAgC,EAChCJ,MAAM,GAAG,CAAC,EACc;EACxB,SAAS;;EACT,IAAIG,MAAM,CAACN,MAAM,GAAGG,MAAM,GAAG,CAAC,EAAE,OAAOI,QAAQ;EAC/C,MAAMH,YAAY,GAAG;IACnBI,IAAI,EAAE;MACJC,CAAC,EAAEH,MAAM,CAACH,MAAM,CAAW;MAC3BO,CAAC,EAAEJ,MAAM,CAACH,MAAM,GAAG,CAAC,CAAW;MAC/BQ,KAAK,EAAEL,MAAM,CAACH,MAAM,GAAG,CAAC,CAAW;MACnCS,MAAM,EAAEN,MAAM,CAACH,MAAM,GAAG,CAAC,CAAW;MACpCU,MAAM,EAAEP,MAAM,CAACH,MAAM,GAAG,CAAC;IAC3B,CAAC;IACDW,iBAAiB,EAAER,MAAM,CAACH,MAAM,GAAG,CAAC,CAAW;IAC/CY,iBAAiB,EAAET,MAAM,CAACH,MAAM,GAAG,CAAC;EACtC,CAAC;EACD,OAAO5C,wBAAwB,CAAC6C,YAAY,CAAC,GAAGA,YAAY,GAAGG,QAAQ;AACzE;AAEA,SAASS,kBAAkBA,CAAC5B,SAAiC,EAAY;EACvE,SAAS;;EACT,MAAMkB,MAAgB,GAAG,EAAE;EAC3B,KAAK,MAAMJ,KAAK,IAAId,SAAS,CAACW,MAAM,EAAE;IACpC,MAAM;MAAES,IAAI;MAAEM,iBAAiB;MAAEC;IAAkB,CAAC,GAAGb,KAAK,CAACE,YAAY;IACzEE,MAAM,CAACW,IAAI,CACTf,KAAK,CAACC,MAAM,EACZK,IAAI,CAACC,CAAC,EACND,IAAI,CAACE,CAAC,EACNF,IAAI,CAACG,KAAK,EACVH,IAAI,CAACI,MAAM,EACXJ,IAAI,CAACK,MAAM,EACXC,iBAAiB,EACjBC,iBACF,CAAC;EACH;EACA,OAAOT,MAAM;AACf;AAEA,SAASY,MAAMA,CAAA,EAAU;EACvB,SAAS;;EACT,MAAM,IAAIC,KAAK,CACb,kGACF,CAAC;AACH;AAEA,OAAO,SAASC,mBAAmBA,CACjCC,YAAmD,EACnDC,OAAgC,GAAG,CAAC,CAAC,EACnB;EAClB,MAAMC,mBAAmB,GACvB,MAAM,IAAIF,YAAY,GAClBA,YAAY,GACZ/D,sBAAsB,CAAC+D,YAAY,CAAC;EAC1C,MAAMjB,YAAY,GAAG5D,cAAc,CAAC+E,mBAAmB,CAAC;EACxD,MAAMC,SAAS,GAAGhF,cAAc,CAACmB,WAAW,CAAC;EAC7C,MAAM8D,kBAAkB,GAAGjF,cAAc,CAAC,CAAC,CAAC;EAC5C,MAAMkF,iBAAiB,GAAGlF,cAAc,CAAC,CAAC,CAAC;EAC3C;EACA;EACA;EACA,MAAMmF,YAAY,GAAGnF,cAAc,CAAC,CAAC,CAAC;EACtC,MAAMoF,WAAW,GAAGrF,MAAM,CAAC+E,OAAO,CAACO,mBAAmB,CAAC;EACvD,MAAMC,SAAS,GAAGvF,MAAM,CAA0B,IAAI,CAAC;EACvDqF,WAAW,CAACG,OAAO,GAAGT,OAAO,CAACO,mBAAmB;EAEjD,IAAIC,SAAS,CAACC,OAAO,KAAK,IAAI,EAAE;IAC9B,MAAMC,QAAQ,GAAGnF,gBAAgB,CAAC,CAAC;IACnC,MAAMoF,YAAY,GAAGjD,gBAAgB,CAACsC,OAAO,CAACW,YAAY,IAAI,QAAQ,CAAC;IAEvE,MAAMC,gBAAgB,GAAIC,IAA4B,IAAK;MACzD,SAAS;;MACT,IAAI,CAAC9E,sBAAsB,CAAC+C,YAAY,CAACnB,KAAK,EAAEkD,IAAI,CAAC,EAAE;QACrDV,kBAAkB,CAACxC,KAAK,IAAI,CAAC;QAC7BmB,YAAY,CAACnB,KAAK,GAAGkD,IAAI;MAC3B;IACF,CAAC;IAED,MAAMC,SAAS,GAAGA,CAAA,KAA8B;MAC9C,SAAS;;MACT,MAAML,OAAO,GAAG1B,sBAAsB,CACpCtC,4BAA4B,CAACiE,QAAQ,CAAC,EACtC5B,YAAY,CAACnB,KACf,CAAC;MACDyC,iBAAiB,CAACzC,KAAK,GAAG,CAAC;MAC3BuC,SAAS,CAACvC,KAAK,GAAGtB,WAAW;MAC7BgE,YAAY,CAAC1C,KAAK,GAAG,CAAC;MACtBiD,gBAAgB,CAACH,OAAO,CAAC;MACzB,OAAOA,OAAO;IAChB,CAAC;IAED,MAAMM,OAAO,GAAIF,IAA4B,IAAW;MACtD,SAAS;;MACT,IAAI,CAAC5E,wBAAwB,CAAC4E,IAAI,CAAC,EAAE;MACrCT,iBAAiB,CAACzC,KAAK,GAAG,CAAC;MAC3BuC,SAAS,CAACvC,KAAK,GAAGtB,WAAW;MAC7BgE,YAAY,CAAC1C,KAAK,GAAG,CAAC;MACtB,MAAM;QAAEuB,IAAI;QAAEM,iBAAiB;QAAEC;MAAkB,CAAC,GAAGoB,IAAI;MAC3DtE,2BAA2B,CACzBmE,QAAQ,EACRxB,IAAI,CAACC,CAAC,EACND,IAAI,CAACE,CAAC,EACNF,IAAI,CAACG,KAAK,EACVH,IAAI,CAACI,MAAM,EACXJ,IAAI,CAACK,MAAM,EACXC,iBAAiB,EACjBC,iBAAiB,EACjB,IACF,CAAC;MACDmB,gBAAgB,CAACC,IAAI,CAAC;IACxB,CAAC;IAED,MAAMG,cAAc,GAAGA,CACrB7B,CAAS,EACTC,CAAS,EACTC,KAAa,EACbC,MAAc,EACdC,MAAc,EACdC,iBAAyB,EACzBC,iBAAyB,KAChB;MACT,SAAS;;MACT,IACE,CAACzB,MAAM,CAACC,QAAQ,CAACkB,CAAC,CAAC,IACnB,CAACnB,MAAM,CAACC,QAAQ,CAACmB,CAAC,CAAC,IACnB,CAACpB,MAAM,CAACC,QAAQ,CAACoB,KAAK,CAAC,IACvB,CAACrB,MAAM,CAACC,QAAQ,CAACqB,MAAM,CAAC,IACxB,CAACtB,MAAM,CAACC,QAAQ,CAACsB,MAAM,CAAC,IACxB,CAACvB,MAAM,CAACC,QAAQ,CAACuB,iBAAiB,CAAC,IACnC,CAACxB,MAAM,CAACC,QAAQ,CAACwB,iBAAiB,CAAC,EACnC;QACA;MACF;MACA,IAAIW,iBAAiB,CAACzC,KAAK,KAAK,CAAC,EAAEyC,iBAAiB,CAACzC,KAAK,GAAG,CAAC;MAC9D,IAAIuC,SAAS,CAACvC,KAAK,KAAKtB,WAAW,EAAE6D,SAAS,CAACvC,KAAK,GAAGtB,WAAW;MAClE,IAAIgE,YAAY,CAAC1C,KAAK,KAAK,CAAC,EAAE0C,YAAY,CAAC1C,KAAK,GAAG,CAAC;MACpDpB,2BAA2B,CACzBmE,QAAQ,EACRvB,CAAC,EACDC,CAAC,EACDC,KAAK,EACLC,MAAM,EACNC,MAAM,EACNC,iBAAiB,EACjBC,iBAAiB,EACjB,IACF,CAAC;IACH,CAAC;IAED,MAAMwB,WAAW,GAAGA,CAClBpD,MAA8B,EAC9BC,SAA8B,KACnB;MACX,SAAS;;MACT,IACE,CAAC7B,wBAAwB,CAAC4B,MAAM,CAAC,IACjC,CAACD,iBAAiB,CAACC,MAAM,EAAEC,SAAS,CAAC,EACrC;QACA,OAAOb,2BAA2B,CAACyD,QAAQ,CAAC;MAC9C;;MAEA;MACA;MACA;MACA;MACA,MAAMQ,gBAAgB,GAAGb,YAAY,CAAC1C,KAAK,KAAK,CAAC;MACjD,MAAMwD,mBAAmB,GACvBjB,SAAS,CAACvC,KAAK,KAAKtB,WAAW,IAAI,CAAC6E,gBAAgB;MACtD,MAAME,KAAK,GAAGtC,YAAY,CAACnB,KAAK;MAChCuC,SAAS,CAACvC,KAAK,GAAGrB,MAAM;MACxBwC,YAAY,CAACnB,KAAK,GAAGE,MAAM;MAC3BwC,YAAY,CAAC1C,KAAK,GAAG,CAAC;MACtB,MAAM0D,SAAS,GAAGD,KAAK,CAAClC,IAAI;MAC5B,MAAMoC,UAAU,GAAGzD,MAAM,CAACqB,IAAI;MAC9B,IAAIqC,WAAmB;MAEvB,IAAIzD,SAAS,CAACC,IAAI,KAAK,QAAQ,EAAE;QAC/B,MAAM,CAACyD,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEC,EAAE,CAAC,GAAG7D,SAAS,CAACK,aAAa;QAChDoD,WAAW,GAAG5E,yBAAyB,CACrC+D,QAAQ,EACRS,mBAAmB,EACnBE,SAAS,CAAClC,CAAC,EACXkC,SAAS,CAACjC,CAAC,EACXiC,SAAS,CAAChC,KAAK,EACfgC,SAAS,CAAC/B,MAAM,EAChB+B,SAAS,CAAC9B,MAAM,EAChB6B,KAAK,CAAC5B,iBAAiB,EACvB4B,KAAK,CAAC3B,iBAAiB,EACvB6B,UAAU,CAACnC,CAAC,EACZmC,UAAU,CAAClC,CAAC,EACZkC,UAAU,CAACjC,KAAK,EAChBiC,UAAU,CAAChC,MAAM,EACjBgC,UAAU,CAAC/B,MAAM,EACjB1B,MAAM,CAAC2B,iBAAiB,EACxB3B,MAAM,CAAC4B,iBAAiB,EACxBmC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE/D,SAAS,CAACI,QAAQ,CAAC,EAC/BsD,EAAE,EACFC,EAAE,EACFC,EAAE,EACFC,EAAE,EACFhB,YACF,CAAC;MACH,CAAC,MAAM,IAAI7C,SAAS,CAACC,IAAI,KAAK,QAAQ,EAAE;QACtC,MAAM+D,eAAe,GACnBhE,SAAS,CAACU,eAAe,KAAKuD,SAAS,IACvCjE,SAAS,CAACU,eAAe,KAAK,SAAS;QACzC+C,WAAW,GAAG1E,yBAAyB,CACrC6D,QAAQ,EACRS,mBAAmB,EACnBE,SAAS,CAAClC,CAAC,EACXkC,SAAS,CAACjC,CAAC,EACXiC,SAAS,CAAChC,KAAK,EACfgC,SAAS,CAAC/B,MAAM,EAChB+B,SAAS,CAAC9B,MAAM,EAChB6B,KAAK,CAAC5B,iBAAiB,EACvB4B,KAAK,CAAC3B,iBAAiB,EACvB6B,UAAU,CAACnC,CAAC,EACZmC,UAAU,CAAClC,CAAC,EACZkC,UAAU,CAACjC,KAAK,EAChBiC,UAAU,CAAChC,MAAM,EACjBgC,UAAU,CAAC/B,MAAM,EACjB1B,MAAM,CAAC2B,iBAAiB,EACxB3B,MAAM,CAAC4B,iBAAiB,EACxBmC,IAAI,CAACC,GAAG,CAAC,MAAM,EAAE/D,SAAS,CAACO,IAAI,IAAI,CAAC,CAAC,EACrCuD,IAAI,CAACC,GAAG,CAAC,MAAM,EAAE/D,SAAS,CAACQ,SAAS,IAAI,GAAG,CAAC,EAC5CsD,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE/D,SAAS,CAACS,OAAO,IAAI,EAAE,CAAC,EACpCuD,eAAe,GAAG,CAAC,GAAIhE,SAAS,CAACU,eAA0B,EAC3DsD,eAAe,EACfnB,YACF,CAAC;MACH,CAAC,MAAM;QACLY,WAAW,GAAGxE,4BAA4B,CACxC2D,QAAQ,EACRS,mBAAmB,EACnBE,SAAS,CAAClC,CAAC,EACXkC,SAAS,CAACjC,CAAC,EACXiC,SAAS,CAAChC,KAAK,EACfgC,SAAS,CAAC/B,MAAM,EAChB+B,SAAS,CAAC9B,MAAM,EAChB6B,KAAK,CAAC5B,iBAAiB,EACvB4B,KAAK,CAAC3B,iBAAiB,EACvB6B,UAAU,CAACnC,CAAC,EACZmC,UAAU,CAAClC,CAAC,EACZkC,UAAU,CAACjC,KAAK,EAChBiC,UAAU,CAAChC,MAAM,EACjBgC,UAAU,CAAC/B,MAAM,EACjB1B,MAAM,CAAC2B,iBAAiB,EACxB3B,MAAM,CAAC4B,iBAAiB,EACxBmC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE/D,SAAS,CAACI,QAAQ,CAAC,EAC/BwB,kBAAkB,CAAC5B,SAAS,CAAC,EAC7B6C,YACF,CAAC;MACH;MACA,IAAIY,WAAW,KAAK,CAAC,EAAE;QACrB;QACA;QACA;QACA;QACArB,SAAS,CAACvC,KAAK,GAAGtB,WAAW;QAC7ByC,YAAY,CAACnB,KAAK,GAAGyD,KAAK;QAC1B,IAAIF,gBAAgB,EAAEb,YAAY,CAAC1C,KAAK,GAAG,CAAC;QAC5CyC,iBAAiB,CAACzC,KAAK,GAAG,CAAC;QAC3B,OAAOV,2BAA2B,CAACyD,QAAQ,CAAC;MAC9C;MACAN,iBAAiB,CAACzC,KAAK,GAAG4D,WAAW;MACrC,OAAOA,WAAW;IACpB,CAAC;IAED,MAAMS,UAAU,GAAGA,CACjBT,WAAW,GAAG,CAAC,EACfU,QAA8B,GAAG,SAAS,KACf;MAC3B,SAAS;;MACT,MAAMjD,MAAM,GAAG7B,2BAA2B,CACxCuD,QAAQ,EACRa,WAAW,EACXU,QAAQ,KAAK,QAAQ,GAAG,CAAC,GAAG,CAC9B,CAAC;MACD,IAAIjD,MAAM,CAACN,MAAM,GAAG,CAAC,IAAIM,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,OAAOF,YAAY,CAACnB,KAAK;MACnE,MAAM8C,OAAO,GAAG1B,sBAAsB,CAACC,MAAM,EAAEF,YAAY,CAACnB,KAAK,EAAE,CAAC,CAAC;MACrEyC,iBAAiB,CAACzC,KAAK,GAAG,CAAC;MAC3BuC,SAAS,CAACvC,KAAK,GAAGtB,WAAW;MAC7BgE,YAAY,CAAC1C,KAAK,GAAG,CAAC;MACtBiD,gBAAgB,CAACH,OAAO,CAAC;MACzB,OAAOA,OAAO;IAChB,CAAC;IAED,MAAMyB,MAAwB,GAAG;MAC/BC,IAAI,EAAE,QAAQ;MACdrD,YAAY;MACZsD,EAAE,EAAE;QACF1F,gBAAgBA,CAAA,EAAG;UACjB,SAAS;;UACT,IAAIvB,WAAW,CAAC,CAAC,EAAE,OAAOyE,MAAM,CAAC,CAAC;UAClC,OAAOkB,SAAS,CAAC,CAAC;QACpB,CAAC;QACDuB,GAAGA,CAACxB,IAAI,EAAE;UACR,SAAS;;UACT,IAAI1F,WAAW,CAAC,CAAC,EAAE,OAAOyE,MAAM,CAAC,CAAC;UAClCmB,OAAO,CAACF,IAAI,CAAC;QACf,CAAC;QACDyB,UAAUA,CACRnD,CAAC,EACDC,CAAC,EACDC,KAAK,EACLC,MAAM,EACNC,MAAM,EACNC,iBAAiB,EACjBC,iBAAiB,EACjB;UACA,SAAS;;UACT,IAAItE,WAAW,CAAC,CAAC,EAAE,OAAOyE,MAAM,CAAC,CAAC;UAClCoB,cAAc,CACZ7B,CAAC,EACDC,CAAC,EACDC,KAAK,EACLC,MAAM,EACNC,MAAM,EACNC,iBAAiB,EACjBC,iBACF,CAAC;QACH,CAAC;QACD8C,SAASA,CAAC1E,MAAM,EAAEC,SAAS,EAAE;UAC3B,SAAS;;UACT,IAAI3C,WAAW,CAAC,CAAC,EAAE,OAAOyE,MAAM,CAAC,CAAC;UAClC,OAAOqB,WAAW,CAACpD,MAAM,EAAEC,SAAS,CAAC;QACvC,CAAC;QACD0E,MAAMA,CAACjB,WAAW,GAAG,CAAC,EAAEU,QAAQ,GAAG,SAAS,EAAE;UAC5C,SAAS;;UACT,IAAI9G,WAAW,CAAC,CAAC,EAAE,OAAOyE,MAAM,CAAC,CAAC;UAClC,OAAOoC,UAAU,CAACT,WAAW,EAAEU,QAAQ,CAAC;QAC1C;MACF,CAAC;MACDQ,KAAK,EAAE;QACL/F,gBAAgBA,CAAA,EAAG;UACjB,MAAM;YAAEgG,SAAS;YAAEC;UAAQ,CAAC,GAC1BzG,kBAAkB,CAAyBwE,QAAQ,CAAC;UACtDrF,YAAY,CAAC,MAAM;YACjB,SAAS;;YACT,MAAMuH,MAAM,GAAG9B,SAAS,CAAC,CAAC;YAC1B1F,YAAY,CAACgB,mBAAmB,EAAEsE,QAAQ,EAAEgC,SAAS,EAAEE,MAAM,CAAC;UAChE,CAAC,CAAC;UACF,OAAOD,OAAO;QAChB,CAAC;QACDN,GAAGA,CAACxB,IAAI,EAAE;UACR,MAAM;YAAE6B,SAAS;YAAEC;UAAQ,CAAC,GAAGzG,kBAAkB,CAAOwE,QAAQ,CAAC;UACjErF,YAAY,CAAC,MAAM;YACjB,SAAS;;YACT0F,OAAO,CAACF,IAAI,CAAC;YACbzF,YAAY,CAACgB,mBAAmB,EAAEsE,QAAQ,EAAEgC,SAAS,EAAEX,SAAS,CAAC;UACnE,CAAC,CAAC;UACF,OAAOY,OAAO;QAChB,CAAC;QACDJ,SAASA,CAAC1E,MAAM,EAAEC,SAAS,EAAE;UAC3B,MAAM;YAAE4E,SAAS;YAAEC;UAAQ,CAAC,GAAGzG,kBAAkB,CAC/CwE,QAAQ,EACR,IACF,CAAC;UACDrF,YAAY,CAAC,MAAM;YACjB,SAAS;;YACT,MAAMuH,MAAM,GAAG3B,WAAW,CAACpD,MAAM,EAAEC,SAAS,CAAC;YAC7C1C,YAAY,CACVgB,mBAAmB,EACnBsE,QAAQ,EACRgC,SAAS,EACTE,MAAM,EACN,IACF,CAAC;UACH,CAAC,CAAC;UACF,OAAOD,OAAO;QAChB,CAAC;QACDH,MAAMA,CAACjB,WAAW,GAAG,CAAC,EAAEU,QAAQ,GAAG,SAAS,EAAE;UAC5C,MAAM;YAAES,SAAS;YAAEC;UAAQ,CAAC,GAC1BzG,kBAAkB,CAAyBwE,QAAQ,EAAE,IAAI,CAAC;UAC5DrF,YAAY,CAAC,MAAM;YACjB,SAAS;;YACT,MAAMuH,MAAM,GAAGZ,UAAU,CAACT,WAAW,EAAEU,QAAQ,CAAC;YAChD7G,YAAY,CACVgB,mBAAmB,EACnBsE,QAAQ,EACRgC,SAAS,EACTE,MAAM,EACN,IACF,CAAC;UACH,CAAC,CAAC;UACF,OAAOD,OAAO;QAChB;MACF;IACF,CAAC;IAED/G,cAAc,CACZsG,MAAM,EACNzG,iBAAiB,CACfiF,QAAQ,EACRT,mBAAmB,EACnBnB,YAAY,EACZwB,WAAW,EACXF,iBAAiB,EACjBF,SACF,CACF,CAAC;IACDM,SAAS,CAACC,OAAO,GAAGyB,MAAM;EAC5B;EAEA,MAAMA,MAAM,GAAG1B,SAAS,CAACC,OAAO;EAEhCzF,SAAS,CAAC,MAAM;IACd,MAAM6H,aAAa,GAAGrC,SAAS,CAACC,OAAO;IACvC,IAAI,CAACoC,aAAa,EAAE,OAAOd,SAAS;IACpC,MAAMe,KAAK,GAAGnH,cAAc,CAACkH,aAAa,CAAC;IAC3C,MAAM;MAAEnC;IAAS,CAAC,GAAGoC,KAAK;IAC1B;IACA;IACA;IACAtH,iBAAiB,CAACsH,KAAK,CAAC;IAExB,MAAMC,YAAY,GAAGzH,sBAAsB,CAAC0H,uBAAuB,CAChEJ,MAAM,IAAK;MACV,IAAIA,MAAM,CAAClC,QAAQ,KAAKA,QAAQ,EAAE;MAClC5E,2BAA2B,CACzBsE,iBAAiB,EACjBF,SAAS,EACT0C,MAAM,CAACrB,WAAW,EAClBqB,MAAM,CAACK,QACT,CAAC;MACDpH,uBAAuB,CAAC6E,QAAQ,EAAEkC,MAAM,CAACrB,WAAW,EAAEqB,MAAM,CAACK,QAAQ,CAAC;IACxE,CACF,CAAC;IAED5H,YAAY,CACV,CACE6H,MAA2C,EAC3CC,UAAkB,EAClBC,cAAsB,EACtBC,KAA0B,EAC1BC,UAA+B,EAC/BC,MAA2B,EAC3BC,KAA0B,EAC1BC,MAA0C,KACvC;MACH,SAAS;;MACT,IAAIC,IAAmC,GAAG,IAAI;MAC9C,MAAMC,OAAO,GAAI9C,IAA4B,IAAK;QAChD,IACE,CAAC5E,wBAAwB,CAAC4E,IAAI,CAAC,IAC/B9E,sBAAsB,CAAC2H,IAAI,EAAE7C,IAAI,CAAC,EAClC;UACA;QACF;QACA;QACA;QACA;QACA,IAAIwC,KAAK,CAAC1F,KAAK,KAAKtB,WAAW,EAAE;QACjC,IAAIiH,UAAU,CAAC3F,KAAK,GAAG,CAAC,EAAE;UACxB2F,UAAU,CAAC3F,KAAK,IAAI,CAAC;UACrB+F,IAAI,GAAG7C,IAAI;UACX;QACF;QACA6C,IAAI,GAAG7C,IAAI;QACX,IAAI2C,KAAK,CAAC7F,KAAK,KAAK,CAAC,EAAE6F,KAAK,CAAC7F,KAAK,GAAG,CAAC;QACtC,MAAM;UAAEuB,IAAI;UAAEM,iBAAiB;UAAEC;QAAkB,CAAC,GAAGoB,IAAI;QAC3D4C,MAAM,CACJL,cAAc,EACdlE,IAAI,CAACC,CAAC,EACND,IAAI,CAACE,CAAC,EACNF,IAAI,CAACG,KAAK,EACVH,IAAI,CAACI,MAAM,EACXJ,IAAI,CAACK,MAAM,EACXC,iBAAiB,EACjBC,iBAAiB,EACjB,KACF,CAAC;MACH,CAAC;MACDyD,MAAM,CAACU,WAAW,CAACT,UAAU,EAAEQ,OAAO,CAAC;MACvC;MACA;MACA;MACA,MAAMlD,OAAO,GAAGyC,MAAM,CAACvF,KAAK;MAC5B,IAAI1B,wBAAwB,CAACwE,OAAO,CAAC,EAAE;QACrC8C,MAAM,CAAC5F,KAAK,GAAG,CAAC;QAChB0F,KAAK,CAAC1F,KAAK,GAAGtB,WAAW;QACzBmH,KAAK,CAAC7F,KAAK,GAAG,CAAC;QACf+F,IAAI,GAAGjD,OAAO;QACdgD,MAAM,CACJL,cAAc,EACd3C,OAAO,CAACvB,IAAI,CAACC,CAAC,EACdsB,OAAO,CAACvB,IAAI,CAACE,CAAC,EACdqB,OAAO,CAACvB,IAAI,CAACG,KAAK,EAClBoB,OAAO,CAACvB,IAAI,CAACI,MAAM,EACnBmB,OAAO,CAACvB,IAAI,CAACK,MAAM,EACnBkB,OAAO,CAACjB,iBAAiB,EACzBiB,OAAO,CAAChB,iBAAiB,EACzB,IACF,CAAC;MACH;IACF,CAAC,EACDX,YAAY,EACZ4B,QAAQ,EACRA,QAAQ,EACRR,SAAS,EACTC,kBAAkB,EAClBC,iBAAiB,EACjBC,YAAY,EACZ9D,2BACF,CAAC;IAED,OAAO,MAAM;MACXwG,YAAY,CAACc,MAAM,CAAC,CAAC;MACrB1H,oBAAoB,CAACuE,QAAQ,CAAC;MAC9BhF,iBAAiB,CAACoH,KAAK,CAAC;MACxBzH,YAAY,CACV,CACE6H,MAA2C,EAC3CC,UAAkB,EAClBC,cAAsB,EACtBU,OAAyC,KACtC;QACH,SAAS;;QACTZ,MAAM,CAACa,cAAc,CAACZ,UAAU,CAAC;QACjCW,OAAO,CAACV,cAAc,CAAC;MACzB,CAAC,EACDtE,YAAY,EACZ4B,QAAQ,EACRA,QAAQ,EACRrD,yBACF,CAAC;IACH,CAAC;EACH,CAAC,EAAE,CACD+C,iBAAiB,EACjBF,SAAS,EACTpB,YAAY,EACZuB,YAAY,EACZF,kBAAkB,CACnB,CAAC;EAEF,OAAO+B,MAAM;AACf","ignoreList":[]}
|