react-native-smooth-clip-view 0.3.0 → 0.4.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 +132 -388
- package/android/build.gradle +3 -3
- 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 +344 -488
- 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
package/src/index.ts
CHANGED
|
@@ -1,51 +1,43 @@
|
|
|
1
1
|
export { SmoothClipView } from './SmoothClipView';
|
|
2
2
|
export type { SmoothClipViewProps } from './SmoothClipView';
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
3
|
+
export { useSmoothClipController } from './controllers';
|
|
4
|
+
export { useSmoothClipGroup } from './groups';
|
|
5
5
|
export { getSmoothClipCapabilities } from './capabilities';
|
|
6
6
|
export type { SmoothClipCapabilities } from './capabilityTypes';
|
|
7
7
|
export type {
|
|
8
|
-
ClipAnimationResult,
|
|
9
8
|
ClipReduceMotion,
|
|
10
|
-
KeyframedClipAnimation,
|
|
11
|
-
SmoothClipDriver,
|
|
12
|
-
SmoothClipDriverOptions,
|
|
13
|
-
SmoothClipReactControls,
|
|
14
|
-
SmoothClipUIControls,
|
|
15
|
-
SmoothClipAnimation,
|
|
16
9
|
SpringClipAnimation,
|
|
17
10
|
TimingClipAnimation,
|
|
18
|
-
|
|
11
|
+
SmoothClipAnimation,
|
|
12
|
+
SmoothClipCompletion,
|
|
13
|
+
SmoothClipController,
|
|
14
|
+
SmoothClipControllerOptions,
|
|
15
|
+
SmoothClipControllerReact,
|
|
16
|
+
SmoothClipControllerUI,
|
|
17
|
+
SmoothClipInitialFrame,
|
|
18
|
+
SmoothClipReactRun,
|
|
19
|
+
SmoothClipRef,
|
|
20
|
+
SmoothClipRunHandle,
|
|
21
|
+
} from './controllerTypes';
|
|
19
22
|
export type {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
SmoothClipGroupDriver,
|
|
24
|
-
SmoothClipGroupDriverOptions,
|
|
25
|
-
SmoothClipGroupKeyframeAnimation,
|
|
26
|
-
SmoothClipGroupKeyframeEntry,
|
|
27
|
-
SmoothClipGroupMotionAnimation,
|
|
28
|
-
SmoothClipGroupMotionEntry,
|
|
29
|
-
SmoothClipGroupReactControls,
|
|
23
|
+
SmoothClipGroup,
|
|
24
|
+
SmoothClipGroupFrame,
|
|
25
|
+
SmoothClipGroupOptions,
|
|
30
26
|
SmoothClipGroupSnapshot,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
SmoothClipGroupTimingAnimation,
|
|
34
|
-
SmoothClipGroupUIControls,
|
|
35
|
-
} from './groupDriverTypes';
|
|
27
|
+
SmoothClipGroupTarget,
|
|
28
|
+
} from './groupTypes';
|
|
36
29
|
export { ClipEasings } from './easings';
|
|
37
30
|
export {
|
|
38
31
|
canonicalizeClipGeometry,
|
|
39
32
|
canonicalizeClipPresentation,
|
|
40
33
|
createClipPresentation,
|
|
41
|
-
normalizeClipGeometry,
|
|
42
|
-
normalizeClipPresentation,
|
|
43
34
|
} from './geometry';
|
|
44
35
|
export type {
|
|
45
36
|
CanonicalClipGeometry,
|
|
37
|
+
CanonicalClipBoxShadow,
|
|
46
38
|
CanonicalSmoothClipPresentation,
|
|
47
|
-
ClipBounds,
|
|
48
39
|
ClipCurve,
|
|
49
40
|
ClipGeometry,
|
|
41
|
+
ClipBoxShadow,
|
|
50
42
|
SmoothClipPresentation,
|
|
51
43
|
} from './geometry';
|
package/src/nativeCompletion.ts
CHANGED
|
@@ -1,37 +1,72 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { deliverDriverCompletion } from './driverState';
|
|
1
|
+
import NativeSmoothClipModule from './smoothClipNative';
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
driverId: number
|
|
6
|
-
animationId: number
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
type DriverCompletion = Readonly<{
|
|
4
|
+
driverId: number;
|
|
5
|
+
animationId: number;
|
|
6
|
+
completionTag: number;
|
|
7
|
+
finished: boolean;
|
|
8
|
+
}>;
|
|
9
|
+
|
|
10
|
+
type GroupCompletion = Readonly<{
|
|
11
|
+
controllerId: number;
|
|
12
|
+
groupId: number;
|
|
13
|
+
completionTag: number;
|
|
14
|
+
finished: boolean;
|
|
15
|
+
snapshots: readonly number[];
|
|
16
|
+
}>;
|
|
17
|
+
|
|
18
|
+
const driverListeners = new Map<
|
|
19
|
+
number,
|
|
20
|
+
Set<(event: DriverCompletion) => void>
|
|
21
|
+
>();
|
|
22
|
+
const groupListeners = new Map<number, Set<(event: GroupCompletion) => void>>();
|
|
23
|
+
let driverSubscription: { remove(): void } | undefined;
|
|
24
|
+
let groupSubscription: { remove(): void } | undefined;
|
|
25
|
+
|
|
26
|
+
function ensureDriverSubscription(): void {
|
|
27
|
+
driverSubscription ??= NativeSmoothClipModule.onClipAnimationComplete(
|
|
28
|
+
(event) => {
|
|
29
|
+
const listeners = driverListeners.get(event.driverId);
|
|
30
|
+
if (!listeners) return;
|
|
31
|
+
for (const listener of listeners) listener(event);
|
|
32
|
+
}
|
|
33
|
+
);
|
|
10
34
|
}
|
|
11
35
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
)
|
|
18
|
-
|
|
19
|
-
// finished:false when the last participating view unmounts or the system
|
|
20
|
-
// strips the animation. Superseded ids are already filtered by the
|
|
21
|
-
// active-id comparison below, so no finished-based gate is needed.
|
|
22
|
-
scheduleOnUI(
|
|
23
|
-
(
|
|
24
|
-
active: { value: number },
|
|
25
|
-
owner: { value: number },
|
|
26
|
-
completedId: number
|
|
27
|
-
) => {
|
|
28
|
-
'worklet';
|
|
29
|
-
if (active.value !== completedId) return;
|
|
30
|
-
active.value = 0;
|
|
31
|
-
owner.value = 0;
|
|
32
|
-
},
|
|
33
|
-
activeAnimationId,
|
|
34
|
-
ownership,
|
|
35
|
-
animationId
|
|
36
|
+
function ensureGroupSubscription(): void {
|
|
37
|
+
groupSubscription ??= NativeSmoothClipModule.onClipGroupAnimationComplete(
|
|
38
|
+
(event) => {
|
|
39
|
+
const listeners = groupListeners.get(event.controllerId);
|
|
40
|
+
if (!listeners) return;
|
|
41
|
+
for (const listener of listeners) listener(event);
|
|
42
|
+
}
|
|
36
43
|
);
|
|
37
44
|
}
|
|
45
|
+
|
|
46
|
+
export function subscribeDriverCompletion(
|
|
47
|
+
driverId: number,
|
|
48
|
+
listener: (event: DriverCompletion) => void
|
|
49
|
+
): () => void {
|
|
50
|
+
const listeners = driverListeners.get(driverId) ?? new Set();
|
|
51
|
+
listeners.add(listener);
|
|
52
|
+
driverListeners.set(driverId, listeners);
|
|
53
|
+
ensureDriverSubscription();
|
|
54
|
+
return () => {
|
|
55
|
+
listeners.delete(listener);
|
|
56
|
+
if (listeners.size === 0) driverListeners.delete(driverId);
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function subscribeGroupCompletion(
|
|
61
|
+
controllerId: number,
|
|
62
|
+
listener: (event: GroupCompletion) => void
|
|
63
|
+
): () => void {
|
|
64
|
+
const listeners = groupListeners.get(controllerId) ?? new Set();
|
|
65
|
+
listeners.add(listener);
|
|
66
|
+
groupListeners.set(controllerId, listeners);
|
|
67
|
+
ensureGroupSubscription();
|
|
68
|
+
return () => {
|
|
69
|
+
listeners.delete(listener);
|
|
70
|
+
if (listeners.size === 0) groupListeners.delete(controllerId);
|
|
71
|
+
};
|
|
72
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/* eslint-disable no-bitwise -- the native packet carries packed RRGGBBAA colors */
|
|
2
|
+
import type { CanonicalSmoothClipPresentation } from './geometry';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Versionless native packet layout. Keep this as the single JS codec used by
|
|
6
|
+
* drivers, groups, snapshots, and cancellation.
|
|
7
|
+
*/
|
|
8
|
+
export const PRESENTATION_STRIDE = 21;
|
|
9
|
+
|
|
10
|
+
export function appendPresentationPacket(
|
|
11
|
+
values: number[],
|
|
12
|
+
presentation: CanonicalSmoothClipPresentation
|
|
13
|
+
): void {
|
|
14
|
+
'worklet';
|
|
15
|
+
const {
|
|
16
|
+
clip,
|
|
17
|
+
contentTranslateX,
|
|
18
|
+
contentTranslateY,
|
|
19
|
+
contentScale,
|
|
20
|
+
boxShadow,
|
|
21
|
+
} = presentation;
|
|
22
|
+
const color = ((boxShadow?.color as unknown as number) ?? 0x000000ff) >>> 0;
|
|
23
|
+
values.push(
|
|
24
|
+
clip.x,
|
|
25
|
+
clip.y,
|
|
26
|
+
clip.width,
|
|
27
|
+
clip.height,
|
|
28
|
+
clip.topLeftRadius,
|
|
29
|
+
clip.topRightRadius,
|
|
30
|
+
clip.bottomRightRadius,
|
|
31
|
+
clip.bottomLeftRadius,
|
|
32
|
+
clip.curve === 'continuous' ? 1 : 0,
|
|
33
|
+
contentTranslateX,
|
|
34
|
+
contentTranslateY,
|
|
35
|
+
contentScale,
|
|
36
|
+
boxShadow === undefined ? 0 : 1,
|
|
37
|
+
((color >>> 24) & 0xff) / 255,
|
|
38
|
+
((color >>> 16) & 0xff) / 255,
|
|
39
|
+
((color >>> 8) & 0xff) / 255,
|
|
40
|
+
(color & 0xff) / 255,
|
|
41
|
+
boxShadow?.offsetX ?? 0,
|
|
42
|
+
boxShadow?.offsetY ?? 0,
|
|
43
|
+
boxShadow?.blurRadius ?? 0,
|
|
44
|
+
boxShadow?.spreadDistance ?? 0
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function presentationPacket(
|
|
49
|
+
presentation: CanonicalSmoothClipPresentation
|
|
50
|
+
): number[] {
|
|
51
|
+
'worklet';
|
|
52
|
+
const values: number[] = [];
|
|
53
|
+
appendPresentationPacket(values, presentation);
|
|
54
|
+
return values;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function presentationFromPacket(
|
|
58
|
+
values: readonly number[],
|
|
59
|
+
offset = 0
|
|
60
|
+
): CanonicalSmoothClipPresentation | null {
|
|
61
|
+
'worklet';
|
|
62
|
+
if (values.length < offset + PRESENTATION_STRIDE) return null;
|
|
63
|
+
for (let index = offset; index < offset + PRESENTATION_STRIDE; index += 1) {
|
|
64
|
+
if (!Number.isFinite(values[index])) return null;
|
|
65
|
+
}
|
|
66
|
+
const topLeftRadius = values[offset + 4] as number;
|
|
67
|
+
const topRightRadius = values[offset + 5] as number;
|
|
68
|
+
const bottomRightRadius = values[offset + 6] as number;
|
|
69
|
+
const bottomLeftRadius = values[offset + 7] as number;
|
|
70
|
+
const curveCode = values[offset + 8] as number;
|
|
71
|
+
const contentScale = values[offset + 11] as number;
|
|
72
|
+
const shadowEnabledCode = values[offset + 12] as number;
|
|
73
|
+
const red = values[offset + 13] as number;
|
|
74
|
+
const green = values[offset + 14] as number;
|
|
75
|
+
const blue = values[offset + 15] as number;
|
|
76
|
+
const alpha = values[offset + 16] as number;
|
|
77
|
+
const blurRadius = values[offset + 19] as number;
|
|
78
|
+
if (
|
|
79
|
+
(curveCode !== 0 && curveCode !== 1) ||
|
|
80
|
+
contentScale <= 0 ||
|
|
81
|
+
(shadowEnabledCode !== 0 && shadowEnabledCode !== 1) ||
|
|
82
|
+
red < 0 ||
|
|
83
|
+
red > 1 ||
|
|
84
|
+
green < 0 ||
|
|
85
|
+
green > 1 ||
|
|
86
|
+
blue < 0 ||
|
|
87
|
+
blue > 1 ||
|
|
88
|
+
alpha < 0 ||
|
|
89
|
+
alpha > 1 ||
|
|
90
|
+
blurRadius < 0
|
|
91
|
+
) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
const shadowEnabled = shadowEnabledCode === 1;
|
|
95
|
+
const color =
|
|
96
|
+
((Math.round(red * 255) << 24) |
|
|
97
|
+
(Math.round(green * 255) << 16) |
|
|
98
|
+
(Math.round(blue * 255) << 8) |
|
|
99
|
+
Math.round(alpha * 255)) >>>
|
|
100
|
+
0;
|
|
101
|
+
return {
|
|
102
|
+
clip: {
|
|
103
|
+
x: values[offset] as number,
|
|
104
|
+
y: values[offset + 1] as number,
|
|
105
|
+
width: values[offset + 2] as number,
|
|
106
|
+
height: values[offset + 3] as number,
|
|
107
|
+
radius:
|
|
108
|
+
topLeftRadius === topRightRadius &&
|
|
109
|
+
topLeftRadius === bottomRightRadius &&
|
|
110
|
+
topLeftRadius === bottomLeftRadius
|
|
111
|
+
? topLeftRadius
|
|
112
|
+
: 0,
|
|
113
|
+
topLeftRadius,
|
|
114
|
+
topRightRadius,
|
|
115
|
+
bottomRightRadius,
|
|
116
|
+
bottomLeftRadius,
|
|
117
|
+
curve: curveCode === 1 ? 'continuous' : 'circular',
|
|
118
|
+
},
|
|
119
|
+
contentTranslateX: values[offset + 9] as number,
|
|
120
|
+
contentTranslateY: values[offset + 10] as number,
|
|
121
|
+
contentScale,
|
|
122
|
+
...(shadowEnabled
|
|
123
|
+
? {
|
|
124
|
+
boxShadow: {
|
|
125
|
+
color,
|
|
126
|
+
offsetX: values[offset + 17] as number,
|
|
127
|
+
offsetY: values[offset + 18] as number,
|
|
128
|
+
blurRadius,
|
|
129
|
+
spreadDistance: values[offset + 20] as number,
|
|
130
|
+
},
|
|
131
|
+
}
|
|
132
|
+
: {}),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const states = new WeakMap();
|
|
4
|
-
const statesById = new Map();
|
|
5
|
-
let nextDriverId = Date.now() * 1024;
|
|
6
|
-
export function allocateDriverId() {
|
|
7
|
-
nextDriverId += 1;
|
|
8
|
-
if (!Number.isSafeInteger(nextDriverId)) nextDriverId = 1;
|
|
9
|
-
return nextDriverId;
|
|
10
|
-
}
|
|
11
|
-
export function setDriverState(driver, state) {
|
|
12
|
-
// WeakMap-only: safe to call from render (discarded renders leave nothing
|
|
13
|
-
// reachable) and survives effect replays so getDriverState keeps working.
|
|
14
|
-
states.set(driver, state);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// The strong by-id index is attached in the driver hook's effect and detached
|
|
18
|
-
// in its cleanup, so discarded renders never leak entries and StrictMode /
|
|
19
|
-
// <Activity> effect replays can re-attach the same state.
|
|
20
|
-
export function attachDriverState(state) {
|
|
21
|
-
statesById.set(state.driverId, state);
|
|
22
|
-
}
|
|
23
|
-
export function detachDriverState(state) {
|
|
24
|
-
if (statesById.get(state.driverId) === state) {
|
|
25
|
-
statesById.delete(state.driverId);
|
|
26
|
-
}
|
|
27
|
-
// Requests pending at teardown were settled by rejectDriverRequests, but
|
|
28
|
-
// their completion deferrals can no longer be released: the late-scheduled
|
|
29
|
-
// resolver's releaseDriverCompletions no-ops against a detached state. An
|
|
30
|
-
// effect replay reattaches THIS same object, so a stale positive count
|
|
31
|
-
// would queue every future completion forever. The deferrals died with
|
|
32
|
-
// their requests — reset them.
|
|
33
|
-
state.completionDeferrals = 0;
|
|
34
|
-
state.deferredCompletions.length = 0;
|
|
35
|
-
}
|
|
36
|
-
export function createDriverState(driverId, initialPresentation, source, onAnimationComplete, activeAnimationId, ownership) {
|
|
37
|
-
return {
|
|
38
|
-
driverId,
|
|
39
|
-
initialPresentation,
|
|
40
|
-
source,
|
|
41
|
-
activeAnimationId,
|
|
42
|
-
ownership,
|
|
43
|
-
onAnimationComplete,
|
|
44
|
-
completionDeferrals: 0,
|
|
45
|
-
deferredCompletions: []
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
export function deliverDriverCompletion(driverId, animationId, finished) {
|
|
49
|
-
const state = statesById.get(driverId);
|
|
50
|
-
if (!state) return;
|
|
51
|
-
const result = {
|
|
52
|
-
animationId,
|
|
53
|
-
finished
|
|
54
|
-
};
|
|
55
|
-
if (state.completionDeferrals > 0) {
|
|
56
|
-
state.deferredCompletions.push(result);
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
state.onAnimationComplete.current?.(result);
|
|
60
|
-
}
|
|
61
|
-
export function deferDriverCompletions(driverId) {
|
|
62
|
-
const state = statesById.get(driverId);
|
|
63
|
-
if (state) state.completionDeferrals += 1;
|
|
64
|
-
}
|
|
65
|
-
export function releaseDriverCompletions(driverId) {
|
|
66
|
-
const state = statesById.get(driverId);
|
|
67
|
-
if (!state || state.completionDeferrals === 0) return;
|
|
68
|
-
state.completionDeferrals -= 1;
|
|
69
|
-
if (state.completionDeferrals !== 0) return;
|
|
70
|
-
const deferred = state.deferredCompletions.splice(0);
|
|
71
|
-
for (const result of deferred) {
|
|
72
|
-
state.onAnimationComplete.current?.(result);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
export function getDriverState(driver) {
|
|
76
|
-
const state = states.get(driver);
|
|
77
|
-
if (!state) {
|
|
78
|
-
throw new Error('[SmoothClipView] Drivers must be created by useSmoothClipDriver.');
|
|
79
|
-
}
|
|
80
|
-
return state;
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=driverState.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["states","WeakMap","statesById","Map","nextDriverId","Date","now","allocateDriverId","Number","isSafeInteger","setDriverState","driver","state","set","attachDriverState","driverId","detachDriverState","get","delete","completionDeferrals","deferredCompletions","length","createDriverState","initialPresentation","source","onAnimationComplete","activeAnimationId","ownership","deliverDriverCompletion","animationId","finished","result","push","current","deferDriverCompletions","releaseDriverCompletions","deferred","splice","getDriverState","Error"],"sourceRoot":"../../src","sources":["driverState.ts"],"mappings":";;AAkBA,MAAMA,MAAM,GAAG,IAAIC,OAAO,CAAgC,CAAC;AAC3D,MAAMC,UAAU,GAAG,IAAIC,GAAG,CAAsB,CAAC;AACjD,IAAIC,YAAY,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC,GAAG,IAAI;AAEpC,OAAO,SAASC,gBAAgBA,CAAA,EAAW;EACzCH,YAAY,IAAI,CAAC;EACjB,IAAI,CAACI,MAAM,CAACC,aAAa,CAACL,YAAY,CAAC,EAAEA,YAAY,GAAG,CAAC;EACzD,OAAOA,YAAY;AACrB;AAEA,OAAO,SAASM,cAAcA,CAC5BC,MAAwB,EACxBC,KAAkB,EACZ;EACN;EACA;EACAZ,MAAM,CAACa,GAAG,CAACF,MAAM,EAAEC,KAAK,CAAC;AAC3B;;AAEA;AACA;AACA;AACA,OAAO,SAASE,iBAAiBA,CAACF,KAAkB,EAAQ;EAC1DV,UAAU,CAACW,GAAG,CAACD,KAAK,CAACG,QAAQ,EAAEH,KAAK,CAAC;AACvC;AAEA,OAAO,SAASI,iBAAiBA,CAACJ,KAAkB,EAAQ;EAC1D,IAAIV,UAAU,CAACe,GAAG,CAACL,KAAK,CAACG,QAAQ,CAAC,KAAKH,KAAK,EAAE;IAC5CV,UAAU,CAACgB,MAAM,CAACN,KAAK,CAACG,QAAQ,CAAC;EACnC;EACA;EACA;EACA;EACA;EACA;EACA;EACAH,KAAK,CAACO,mBAAmB,GAAG,CAAC;EAC7BP,KAAK,CAACQ,mBAAmB,CAACC,MAAM,GAAG,CAAC;AACtC;AAEA,OAAO,SAASC,iBAAiBA,CAC/BP,QAAgB,EAChBQ,mBAA2C,EAC3CC,MAA2C,EAC3CC,mBAAuD,EACvDC,iBAAuC,EACvCC,SAA+B,EAClB;EACb,OAAO;IACLZ,QAAQ;IACRQ,mBAAmB;IACnBC,MAAM;IACNE,iBAAiB;IACjBC,SAAS;IACTF,mBAAmB;IACnBN,mBAAmB,EAAE,CAAC;IACtBC,mBAAmB,EAAE;EACvB,CAAC;AACH;AAEA,OAAO,SAASQ,uBAAuBA,CACrCb,QAAgB,EAChBc,WAAmB,EACnBC,QAAiB,EACX;EACN,MAAMlB,KAAK,GAAGV,UAAU,CAACe,GAAG,CAACF,QAAQ,CAAC;EACtC,IAAI,CAACH,KAAK,EAAE;EACZ,MAAMmB,MAAM,GAAG;IAAEF,WAAW;IAAEC;EAAS,CAAC;EACxC,IAAIlB,KAAK,CAACO,mBAAmB,GAAG,CAAC,EAAE;IACjCP,KAAK,CAACQ,mBAAmB,CAACY,IAAI,CAACD,MAAM,CAAC;IACtC;EACF;EACAnB,KAAK,CAACa,mBAAmB,CAACQ,OAAO,GAAGF,MAAM,CAAC;AAC7C;AAEA,OAAO,SAASG,sBAAsBA,CAACnB,QAAgB,EAAQ;EAC7D,MAAMH,KAAK,GAAGV,UAAU,CAACe,GAAG,CAACF,QAAQ,CAAC;EACtC,IAAIH,KAAK,EAAEA,KAAK,CAACO,mBAAmB,IAAI,CAAC;AAC3C;AAEA,OAAO,SAASgB,wBAAwBA,CAACpB,QAAgB,EAAQ;EAC/D,MAAMH,KAAK,GAAGV,UAAU,CAACe,GAAG,CAACF,QAAQ,CAAC;EACtC,IAAI,CAACH,KAAK,IAAIA,KAAK,CAACO,mBAAmB,KAAK,CAAC,EAAE;EAC/CP,KAAK,CAACO,mBAAmB,IAAI,CAAC;EAC9B,IAAIP,KAAK,CAACO,mBAAmB,KAAK,CAAC,EAAE;EACrC,MAAMiB,QAAQ,GAAGxB,KAAK,CAACQ,mBAAmB,CAACiB,MAAM,CAAC,CAAC,CAAC;EACpD,KAAK,MAAMN,MAAM,IAAIK,QAAQ,EAAE;IAC7BxB,KAAK,CAACa,mBAAmB,CAACQ,OAAO,GAAGF,MAAM,CAAC;EAC7C;AACF;AAEA,OAAO,SAASO,cAAcA,CAAC3B,MAAwB,EAAe;EACpE,MAAMC,KAAK,GAAGZ,MAAM,CAACiB,GAAG,CAACN,MAAM,CAAC;EAChC,IAAI,CAACC,KAAK,EAAE;IACV,MAAM,IAAI2B,KAAK,CACb,kEACF,CAAC;EACH;EACA,OAAO3B,KAAK;AACd","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../src","sources":["driverTypes.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useSmoothClipDriver"],"sourceRoot":"../../src","sources":["drivers.android.ts"],"mappings":";;AAAA;AACA;AACA,SAASA,mBAAmB,QAAQ,qBAAkB","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useSmoothClipDriver"],"sourceRoot":"../../src","sources":["drivers.ios.ts"],"mappings":";;AAAA;AACA;AACA,SAASA,mBAAmB,QAAQ,qBAAkB","ignoreList":[]}
|
package/lib/module/drivers.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useSmoothClipDriver"],"sourceRoot":"../../src","sources":["drivers.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAAQ,qBAAkB","ignoreList":[]}
|