@rafaelaugusto/jolt 0.1.0-beta.12 → 0.1.0-beta.14
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 +9 -6
- package/dist/animate.d.ts +6 -4
- package/dist/animate.d.ts.map +1 -1
- package/dist/animate.js +3 -1
- package/dist/animate.js.map +1 -1
- package/dist/drag.js +3 -3
- package/dist/drag.js.map +1 -1
- package/dist/driver/android-gradient.d.ts.map +1 -1
- package/dist/driver/android-gradient.js +11 -1
- package/dist/driver/android-gradient.js.map +1 -1
- package/dist/driver/android-particles.d.ts +6 -0
- package/dist/driver/android-particles.d.ts.map +1 -0
- package/dist/driver/android-particles.js +93 -0
- package/dist/driver/android-particles.js.map +1 -0
- package/dist/driver/android.d.ts.map +1 -1
- package/dist/driver/android.js +2 -0
- package/dist/driver/android.js.map +1 -1
- package/dist/driver/frame.d.ts +3 -0
- package/dist/driver/frame.d.ts.map +1 -0
- package/dist/driver/frame.js +7 -0
- package/dist/driver/frame.js.map +1 -0
- package/dist/driver/index.d.ts +2 -0
- package/dist/driver/index.d.ts.map +1 -1
- package/dist/driver/index.js.map +1 -1
- package/dist/driver/ios-gradient.d.ts.map +1 -1
- package/dist/driver/ios-gradient.js +24 -2
- package/dist/driver/ios-gradient.js.map +1 -1
- package/dist/driver/ios.d.ts.map +1 -1
- package/dist/driver/ios.js +2 -0
- package/dist/driver/ios.js.map +1 -1
- package/dist/engine.d.ts +2 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +32 -5
- package/dist/engine.js.map +1 -1
- package/dist/gradient-binding.d.ts +38 -0
- package/dist/gradient-binding.d.ts.map +1 -0
- package/dist/gradient-binding.js +128 -0
- package/dist/gradient-binding.js.map +1 -0
- package/dist/gradient.d.ts +19 -4
- package/dist/gradient.d.ts.map +1 -1
- package/dist/gradient.js +331 -70
- package/dist/gradient.js.map +1 -1
- package/dist/haptics.d.ts.map +1 -1
- package/dist/haptics.js +101 -28
- package/dist/haptics.js.map +1 -1
- package/dist/image-effect.d.ts +1 -0
- package/dist/image-effect.d.ts.map +1 -1
- package/dist/image-effect.js +10 -2
- package/dist/image-effect.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/motion-scope.d.ts +3 -2
- package/dist/motion-scope.d.ts.map +1 -1
- package/dist/motion-scope.js +12 -2
- package/dist/motion-scope.js.map +1 -1
- package/dist/motion-value.d.ts +62 -8
- package/dist/motion-value.d.ts.map +1 -1
- package/dist/motion-value.js +327 -91
- package/dist/motion-value.js.map +1 -1
- package/dist/native/index.d.ts +7 -0
- package/dist/native/index.d.ts.map +1 -0
- package/dist/native/index.js +4 -0
- package/dist/native/index.js.map +1 -0
- package/dist/native-properties.d.ts +28 -0
- package/dist/native-properties.d.ts.map +1 -0
- package/dist/native-properties.js +154 -0
- package/dist/native-properties.js.map +1 -0
- package/dist/native-property-driver.d.ts +19 -0
- package/dist/native-property-driver.d.ts.map +1 -0
- package/dist/native-property-driver.js +69 -0
- package/dist/native-property-driver.js.map +1 -0
- package/dist/native-property.d.ts +35 -0
- package/dist/native-property.d.ts.map +1 -0
- package/dist/native-property.js +277 -0
- package/dist/native-property.js.map +1 -0
- package/dist/particles.d.ts +5 -2
- package/dist/particles.d.ts.map +1 -1
- package/dist/particles.js +16 -10
- package/dist/particles.js.map +1 -1
- package/dist/playback-group.d.ts.map +1 -1
- package/dist/playback-group.js +17 -1
- package/dist/playback-group.js.map +1 -1
- package/dist/playback.d.ts +15 -0
- package/dist/playback.d.ts.map +1 -1
- package/dist/playback.js +23 -0
- package/dist/playback.js.map +1 -1
- package/dist/scene-appearance.d.ts +14 -0
- package/dist/scene-appearance.d.ts.map +1 -0
- package/dist/scene-appearance.js +68 -0
- package/dist/scene-appearance.js.map +1 -0
- package/dist/sequence.d.ts +24 -0
- package/dist/sequence.d.ts.map +1 -1
- package/dist/sequence.js +181 -19
- package/dist/sequence.js.map +1 -1
- package/dist/timed-animation.d.ts +38 -0
- package/dist/timed-animation.d.ts.map +1 -0
- package/dist/timed-animation.js +177 -0
- package/dist/timed-animation.js.map +1 -0
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/value-observers.d.ts +19 -0
- package/dist/value-observers.d.ts.map +1 -0
- package/dist/value-observers.js +111 -0
- package/dist/value-observers.js.map +1 -0
- package/dist/value-track.d.ts +13 -0
- package/dist/value-track.d.ts.map +1 -0
- package/dist/value-track.js +59 -0
- package/dist/value-track.js.map +1 -0
- package/dist/vue/index.d.ts.map +1 -1
- package/dist/vue/index.js +28 -5
- package/dist/vue/index.js.map +1 -1
- package/package.json +6 -2
- package/platforms/android/java/org/rafaelaugusto/jolt/GradientLayer.java +30 -1
- package/platforms/android/java/org/rafaelaugusto/jolt/ParticleEmitter.java +192 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/ParticleSimulation.java +114 -0
- package/platforms/android/proguard-rules.pro +2 -0
- package/src/android-plugin.d.ts +93 -0
- package/src/animate.ts +13 -7
- package/src/drag.ts +3 -3
- package/src/driver/android-gradient.ts +8 -1
- package/src/driver/android-particles.ts +118 -0
- package/src/driver/android.ts +2 -0
- package/src/driver/frame.ts +10 -0
- package/src/driver/index.ts +2 -0
- package/src/driver/ios-gradient.ts +24 -2
- package/src/driver/ios.ts +2 -0
- package/src/engine.ts +33 -6
- package/src/gradient-binding.ts +158 -0
- package/src/gradient.ts +376 -91
- package/src/haptics.ts +106 -28
- package/src/image-effect.ts +10 -2
- package/src/index.ts +6 -0
- package/src/ios-plugin.d.ts +40 -0
- package/src/motion-scope.ts +14 -3
- package/src/motion-value.ts +374 -99
- package/src/native/index.ts +23 -0
- package/src/native-properties.ts +188 -0
- package/src/native-property-driver.ts +123 -0
- package/src/native-property.ts +353 -0
- package/src/particles.ts +18 -17
- package/src/playback-group.ts +17 -1
- package/src/playback.ts +41 -0
- package/src/scene-appearance.ts +92 -0
- package/src/sequence.ts +209 -20
- package/src/timed-animation.ts +192 -0
- package/src/types.ts +1 -1
- package/src/value-observers.ts +133 -0
- package/src/value-track.ts +71 -0
- package/src/vue/index.ts +29 -5
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface Coordinate {
|
|
2
|
+
latitude: number;
|
|
3
|
+
longitude: number;
|
|
4
|
+
}
|
|
5
|
+
export interface MapKitCamera extends Coordinate {
|
|
6
|
+
altitude: number;
|
|
7
|
+
pitch: number;
|
|
8
|
+
heading: number;
|
|
9
|
+
}
|
|
10
|
+
export interface MapLibreCamera extends Coordinate {
|
|
11
|
+
zoom: number;
|
|
12
|
+
tilt: number;
|
|
13
|
+
bearing: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ScenePose {
|
|
16
|
+
position: readonly [number, number, number];
|
|
17
|
+
orientation: readonly [number, number, number, number];
|
|
18
|
+
}
|
|
19
|
+
/** Shortest longitude/heading interpolation. Coordinates use a local linear path, not a geodesic. */
|
|
20
|
+
export declare function shortestAngle(from: number, to: number, fraction: number): number;
|
|
21
|
+
export declare const mapKitCoordinate: (target: object) => import("./native-property.js").NativeProperty<Coordinate>;
|
|
22
|
+
export declare const mapKitCamera: (target: object) => import("./native-property.js").NativeProperty<MapKitCamera>;
|
|
23
|
+
export declare const mapLibreCoordinate: (target: object) => import("./native-property.js").NativeProperty<Coordinate>;
|
|
24
|
+
export declare const mapLibreCamera: (target: object) => import("./native-property.js").NativeProperty<MapLibreCamera>;
|
|
25
|
+
/** Unit quaternion slerp; q and -q describe the same orientation. */
|
|
26
|
+
export declare function interpolatePose(a: ScenePose, b: ScenePose, t: number): ScenePose;
|
|
27
|
+
export declare const sceneKitPose: (target: object) => import("./native-property.js").NativeProperty<ScenePose>;
|
|
28
|
+
//# sourceMappingURL=native-properties.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-properties.d.ts","sourceRoot":"","sources":["../src/native-properties.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB;AACD,MAAM,WAAW,YAAa,SAAQ,UAAU;IAC9C,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AACD,MAAM,WAAW,cAAe,SAAQ,UAAU;IAChD,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AACD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3C,WAAW,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CACvD;AAED,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,UAGvE;AAmBD,eAAO,MAAM,gBAAgB,+EAU3B,CAAA;AACF,eAAO,MAAM,YAAY,iFA+BvB,CAAA;AACF,eAAO,MAAM,kBAAkB,+EAU7B,CAAA;AACF,eAAO,MAAM,cAAc,mFA+BzB,CAAA;AAEF,qEAAqE;AACrE,wBAAgB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CA0BhF;AACD,eAAO,MAAM,YAAY,8EA4BvB,CAAA"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { registerNativeProperty } from './native-property.js';
|
|
2
|
+
/** Shortest longitude/heading interpolation. Coordinates use a local linear path, not a geodesic. */
|
|
3
|
+
export function shortestAngle(from, to, fraction) {
|
|
4
|
+
const delta = ((((to - from + 180) % 360) + 360) % 360) - 180;
|
|
5
|
+
return from + delta * fraction;
|
|
6
|
+
}
|
|
7
|
+
function validateCoordinate(value) {
|
|
8
|
+
if (!Number.isFinite(value.latitude) ||
|
|
9
|
+
Math.abs(value.latitude) > 90 ||
|
|
10
|
+
!Number.isFinite(value.longitude))
|
|
11
|
+
throw new RangeError('Coordinates need latitude in -90..90 and a finite longitude.');
|
|
12
|
+
}
|
|
13
|
+
function coordinate(from, to, t) {
|
|
14
|
+
return {
|
|
15
|
+
latitude: Math.max(-90, Math.min(90, from.latitude + (to.latitude - from.latitude) * t)),
|
|
16
|
+
longitude: shortestAngle(from.longitude, to.longitude, t),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export const mapKitCoordinate = registerNativeProperty({
|
|
20
|
+
name: 'jolt.mapkit/coordinate',
|
|
21
|
+
units: ['latitude degrees', 'longitude degrees'],
|
|
22
|
+
platforms: ['ios'],
|
|
23
|
+
spatial: true,
|
|
24
|
+
encode: (v) => [v.latitude, v.longitude],
|
|
25
|
+
decode: (v) => ({ latitude: v[0], longitude: v[1] }),
|
|
26
|
+
validate: validateCoordinate,
|
|
27
|
+
interpolate: coordinate,
|
|
28
|
+
create: (target) => JoltReferenceProperties.mapCoordinate(target),
|
|
29
|
+
});
|
|
30
|
+
export const mapKitCamera = registerNativeProperty({
|
|
31
|
+
name: 'jolt.mapkit/camera',
|
|
32
|
+
units: [
|
|
33
|
+
'latitude degrees',
|
|
34
|
+
'longitude degrees',
|
|
35
|
+
'altitude meters',
|
|
36
|
+
'pitch degrees',
|
|
37
|
+
'heading degrees',
|
|
38
|
+
],
|
|
39
|
+
platforms: ['ios'],
|
|
40
|
+
spatial: true,
|
|
41
|
+
encode: (v) => [v.latitude, v.longitude, v.altitude, v.pitch, v.heading],
|
|
42
|
+
decode: (v) => ({
|
|
43
|
+
latitude: v[0],
|
|
44
|
+
longitude: v[1],
|
|
45
|
+
altitude: v[2],
|
|
46
|
+
pitch: v[3],
|
|
47
|
+
heading: v[4],
|
|
48
|
+
}),
|
|
49
|
+
validate(v) {
|
|
50
|
+
validateCoordinate(v);
|
|
51
|
+
if (v.altitude < 1 || v.pitch < 0 || v.pitch > 80)
|
|
52
|
+
throw new RangeError('MapKit camera needs altitude >= 1m and pitch 0..80 degrees.');
|
|
53
|
+
},
|
|
54
|
+
interpolate: (a, b, t) => ({
|
|
55
|
+
...coordinate(a, b, t),
|
|
56
|
+
altitude: Math.max(1, a.altitude + (b.altitude - a.altitude) * t),
|
|
57
|
+
pitch: Math.max(0, Math.min(80, a.pitch + (b.pitch - a.pitch) * t)),
|
|
58
|
+
heading: shortestAngle(a.heading, b.heading, t),
|
|
59
|
+
}),
|
|
60
|
+
create: (target) => JoltReferenceProperties.mapCamera(target),
|
|
61
|
+
});
|
|
62
|
+
export const mapLibreCoordinate = registerNativeProperty({
|
|
63
|
+
name: 'jolt.maplibre/coordinate',
|
|
64
|
+
units: ['latitude degrees', 'longitude degrees'],
|
|
65
|
+
platforms: ['android'],
|
|
66
|
+
spatial: true,
|
|
67
|
+
encode: (v) => [v.latitude, v.longitude],
|
|
68
|
+
decode: (v) => ({ latitude: v[0], longitude: v[1] }),
|
|
69
|
+
validate: validateCoordinate,
|
|
70
|
+
interpolate: coordinate,
|
|
71
|
+
create: (target) => new org.rafaelaugusto.jolt.MapLibrePropertySink(target, false),
|
|
72
|
+
});
|
|
73
|
+
export const mapLibreCamera = registerNativeProperty({
|
|
74
|
+
name: 'jolt.maplibre/camera',
|
|
75
|
+
units: [
|
|
76
|
+
'latitude degrees',
|
|
77
|
+
'longitude degrees',
|
|
78
|
+
'zoom level',
|
|
79
|
+
'tilt degrees',
|
|
80
|
+
'bearing degrees',
|
|
81
|
+
],
|
|
82
|
+
platforms: ['android'],
|
|
83
|
+
spatial: true,
|
|
84
|
+
encode: (v) => [v.latitude, v.longitude, v.zoom, v.tilt, v.bearing],
|
|
85
|
+
decode: (v) => ({
|
|
86
|
+
latitude: v[0],
|
|
87
|
+
longitude: v[1],
|
|
88
|
+
zoom: v[2],
|
|
89
|
+
tilt: v[3],
|
|
90
|
+
bearing: v[4],
|
|
91
|
+
}),
|
|
92
|
+
validate(v) {
|
|
93
|
+
validateCoordinate(v);
|
|
94
|
+
if (v.zoom < 0 || v.zoom > 24 || v.tilt < 0 || v.tilt > 60)
|
|
95
|
+
throw new RangeError('MapLibre camera needs zoom 0..24 and tilt 0..60 degrees.');
|
|
96
|
+
},
|
|
97
|
+
interpolate: (a, b, t) => ({
|
|
98
|
+
...coordinate(a, b, t),
|
|
99
|
+
zoom: Math.max(0, Math.min(24, a.zoom + (b.zoom - a.zoom) * t)),
|
|
100
|
+
tilt: Math.max(0, Math.min(60, a.tilt + (b.tilt - a.tilt) * t)),
|
|
101
|
+
bearing: shortestAngle(a.bearing, b.bearing, t),
|
|
102
|
+
}),
|
|
103
|
+
create: (target) => new org.rafaelaugusto.jolt.MapLibrePropertySink(target, true),
|
|
104
|
+
});
|
|
105
|
+
/** Unit quaternion slerp; q and -q describe the same orientation. */
|
|
106
|
+
export function interpolatePose(a, b, t) {
|
|
107
|
+
const normalize = (q) => {
|
|
108
|
+
const length = Math.hypot(...q);
|
|
109
|
+
if (!Number.isFinite(length) || length < 1e-12)
|
|
110
|
+
throw new RangeError('Orientation must be a nonzero finite quaternion.');
|
|
111
|
+
return q.map((v) => v / length);
|
|
112
|
+
};
|
|
113
|
+
const from = normalize(a.orientation), to = normalize(b.orientation);
|
|
114
|
+
let dot = from.reduce((sum, v, i) => sum + v * to[i], 0);
|
|
115
|
+
if (dot < 0) {
|
|
116
|
+
dot = -dot;
|
|
117
|
+
for (let i = 0; i < 4; i++)
|
|
118
|
+
to[i] = -to[i];
|
|
119
|
+
}
|
|
120
|
+
const theta = Math.acos(Math.min(1, dot)), sine = Math.sin(theta);
|
|
121
|
+
const x = sine < 1e-6 ? 1 - t : Math.sin((1 - t) * theta) / sine, y = sine < 1e-6 ? t : Math.sin(t * theta) / sine;
|
|
122
|
+
return {
|
|
123
|
+
position: a.position.map((v, i) => v + (b.position[i] - v) * t),
|
|
124
|
+
orientation: normalize(from.map((v, i) => v * x + to[i] * y)),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
export const sceneKitPose = registerNativeProperty({
|
|
128
|
+
name: 'jolt.scenekit/pose',
|
|
129
|
+
units: [
|
|
130
|
+
'x scene units',
|
|
131
|
+
'y scene units',
|
|
132
|
+
'z scene units',
|
|
133
|
+
'quaternion x',
|
|
134
|
+
'quaternion y',
|
|
135
|
+
'quaternion z',
|
|
136
|
+
'quaternion w',
|
|
137
|
+
],
|
|
138
|
+
platforms: ['ios'],
|
|
139
|
+
spatial: true,
|
|
140
|
+
encode: (v) => [...v.position, ...v.orientation],
|
|
141
|
+
decode: (v) => ({
|
|
142
|
+
position: [v[0], v[1], v[2]],
|
|
143
|
+
orientation: [v[3], v[4], v[5], v[6]],
|
|
144
|
+
}),
|
|
145
|
+
validate(v) {
|
|
146
|
+
if (v.position.length !== 3 ||
|
|
147
|
+
v.orientation.length !== 4 ||
|
|
148
|
+
Math.hypot(...v.orientation) < 1e-12)
|
|
149
|
+
throw new RangeError('Scene pose needs a 3D position and a nonzero quaternion.');
|
|
150
|
+
},
|
|
151
|
+
interpolate: interpolatePose,
|
|
152
|
+
create: (target) => JoltReferenceProperties.scenePose(target),
|
|
153
|
+
});
|
|
154
|
+
//# sourceMappingURL=native-properties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-properties.js","sourceRoot":"","sources":["../src/native-properties.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Track } from './track.js';
|
|
2
|
+
/** Opaque compiled JoltPropertySink / PropertySink instance. */
|
|
3
|
+
export type NativeSink = object;
|
|
4
|
+
export interface NativePlayer {
|
|
5
|
+
control(time: number, paused: boolean): void;
|
|
6
|
+
cancel(): void;
|
|
7
|
+
}
|
|
8
|
+
export interface NativePropertyDriver {
|
|
9
|
+
validate(sink: NativeSink, dimensions: number): void;
|
|
10
|
+
alive(sink: NativeSink): boolean;
|
|
11
|
+
read(sink: NativeSink): number[];
|
|
12
|
+
write(sink: NativeSink, values: readonly number[]): void;
|
|
13
|
+
dispose(sink: NativeSink): void;
|
|
14
|
+
play(sink: NativeSink, track: Track, samples: readonly (readonly number[])[], final: readonly number[], end: (completed: boolean) => void): NativePlayer;
|
|
15
|
+
}
|
|
16
|
+
/** Test injection; not part of the public package entry. */
|
|
17
|
+
export declare function setNativePropertyDriver(driver: NativePropertyDriver | undefined): void;
|
|
18
|
+
export declare function nativePropertyDriver(): NativePropertyDriver;
|
|
19
|
+
//# sourceMappingURL=native-property-driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-property-driver.d.ts","sourceRoot":"","sources":["../src/native-property-driver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAEvC,gEAAgE;AAChE,MAAM,MAAM,UAAU,GAAG,MAAM,CAAA;AAC/B,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IAC5C,MAAM,IAAI,IAAI,CAAA;CACf;AACD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACpD,KAAK,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAA;IAChC,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAAA;IAChC,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;IACxD,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;IAC/B,IAAI,CACF,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,EACvC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,GAAG,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,GAChC,YAAY,CAAA;CAChB;AAED,4DAA4D;AAC5D,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,QAE/E;AACD,wBAAgB,oBAAoB,IAAI,oBAAoB,CAW3D"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { isAndroid } from '@nativescript/core';
|
|
2
|
+
let override;
|
|
3
|
+
/** Test injection; not part of the public package entry. */
|
|
4
|
+
export function setNativePropertyDriver(driver) {
|
|
5
|
+
override = driver;
|
|
6
|
+
}
|
|
7
|
+
export function nativePropertyDriver() {
|
|
8
|
+
if (override)
|
|
9
|
+
return override;
|
|
10
|
+
const available = isAndroid
|
|
11
|
+
? typeof org !== 'undefined' &&
|
|
12
|
+
typeof org.rafaelaugusto.jolt.PropertySink?.scalar === 'function'
|
|
13
|
+
: typeof JoltPropertySink !== 'undefined';
|
|
14
|
+
if (!available)
|
|
15
|
+
throw new Error('Native property adapters require the optional @rafaelaugusto/jolt-native plugin. Install it and rebuild the native app.');
|
|
16
|
+
return isAndroid ? androidDriver : iosDriver;
|
|
17
|
+
}
|
|
18
|
+
function array(values) {
|
|
19
|
+
const result = Array.create('double', values.length);
|
|
20
|
+
values.forEach((value, i) => {
|
|
21
|
+
result[i] = value;
|
|
22
|
+
});
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
const androidDriver = {
|
|
26
|
+
validate(sink, dimensions) {
|
|
27
|
+
if (!(sink instanceof org.rafaelaugusto.jolt.PropertySink) ||
|
|
28
|
+
sink.getDimensions() !== dimensions ||
|
|
29
|
+
!sink.isCompiled())
|
|
30
|
+
throw new TypeError('Native adapters require a compiled PropertySink with matching dimensions, not a JavaScript setter.');
|
|
31
|
+
},
|
|
32
|
+
alive: (sink) => sink.isAlive(),
|
|
33
|
+
read(sink) {
|
|
34
|
+
const values = sink.read();
|
|
35
|
+
return Array.from({ length: values.length }, (_, i) => values[i]);
|
|
36
|
+
},
|
|
37
|
+
write: (sink, values) => sink.write(array(values)),
|
|
38
|
+
dispose: (sink) => sink.dispose(),
|
|
39
|
+
play(sink, track, samples, final, end) {
|
|
40
|
+
const player = new org.rafaelaugusto.jolt.PropertyPlayer(sink, array(track.times), array(samples.flat()), array(final), track.duration, track.delay, Number.isFinite(track.repeat) ? track.repeat : -1, track.reverse, new org.rafaelaugusto.jolt.PropertyPlayer.Listener({ onEnd: end }));
|
|
41
|
+
return {
|
|
42
|
+
control: (time, paused) => player.control(time, paused),
|
|
43
|
+
cancel: () => player.cancel(),
|
|
44
|
+
};
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
const iosDriver = {
|
|
48
|
+
validate(sink, dimensions) {
|
|
49
|
+
if (!(sink instanceof JoltPropertySink) ||
|
|
50
|
+
sink.dimensions !== dimensions ||
|
|
51
|
+
!sink.compiled)
|
|
52
|
+
throw new TypeError('Native adapters require a compiled JoltPropertySink with matching dimensions, not a JavaScript setter.');
|
|
53
|
+
},
|
|
54
|
+
alive: (sink) => sink.alive,
|
|
55
|
+
read(sink) {
|
|
56
|
+
const values = sink.read();
|
|
57
|
+
return Array.from({ length: values.count }, (_, i) => values.objectAtIndex(i));
|
|
58
|
+
},
|
|
59
|
+
write: (sink, values) => sink.write(NSArray.arrayWithArray([...values])),
|
|
60
|
+
dispose: (sink) => sink.dispose(),
|
|
61
|
+
play(sink, track, samples, final, end) {
|
|
62
|
+
const player = JoltPropertyPlayer.startSinkTimesValuesFinalValueDurationDelayRepeatReverseCompletion(sink, NSArray.arrayWithArray([...track.times]), NSArray.arrayWithArray(samples.flat()), NSArray.arrayWithArray([...final]), track.duration, track.delay, track.repeat, track.reverse, end);
|
|
63
|
+
return {
|
|
64
|
+
control: (time, paused) => player.controlPaused(time, paused),
|
|
65
|
+
cancel: () => player.cancel(),
|
|
66
|
+
};
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=native-property-driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-property-driver.js","sourceRoot":"","sources":["../src/native-property-driver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { DerivedValue } from './motion-value.js';
|
|
2
|
+
import type { PlaybackAnimation } from './playback.js';
|
|
3
|
+
import { type Transition, type SpringName } from './transition.js';
|
|
4
|
+
import { type NativeSink } from './native-property-driver.js';
|
|
5
|
+
export interface NativePropertyDefinition<T> {
|
|
6
|
+
/** Namespaced identity, e.g. 'acme.chart/reveal'. One registration per name. */
|
|
7
|
+
readonly name: string;
|
|
8
|
+
readonly units: readonly string[];
|
|
9
|
+
readonly platforms: readonly ('ios' | 'android')[];
|
|
10
|
+
/** Spatial properties jump to their destination under reduced motion. */
|
|
11
|
+
readonly spatial?: boolean;
|
|
12
|
+
encode(value: T): readonly number[];
|
|
13
|
+
decode(value: readonly number[]): T;
|
|
14
|
+
/** Called once per sampled keyframe in JS, never per native frame. */
|
|
15
|
+
interpolate?(from: T, to: T, fraction: number): T;
|
|
16
|
+
validate?(value: T): void;
|
|
17
|
+
/** Must return a compiled native sink, not a JavaScript implementation of its methods. */
|
|
18
|
+
create(target: object): NativeSink;
|
|
19
|
+
}
|
|
20
|
+
export interface NativeProperty<T> {
|
|
21
|
+
readonly name: string;
|
|
22
|
+
get(): T;
|
|
23
|
+
set(value: T): void;
|
|
24
|
+
animate(to: T, options?: Transition | SpringName): PlaybackAnimation;
|
|
25
|
+
/** Sample a pure mapping at setup/boundaries, then write the property entirely in native code. */
|
|
26
|
+
bind(value: DerivedValue, map: (value: number) => T): () => void;
|
|
27
|
+
stop(): void;
|
|
28
|
+
/** Release this owner's native resources. Call before destroying the SDK target. */
|
|
29
|
+
dispose(): void;
|
|
30
|
+
}
|
|
31
|
+
/** Optional plugin registry. No SDK is loaded until its adapter creates a target. */
|
|
32
|
+
export declare function registerNativeProperty<T>(definition: NativePropertyDefinition<T>): (target: object) => NativeProperty<T>;
|
|
33
|
+
/** Reusable conformance checks for setup/command behavior; frame/lifecycle checks require a native app. */
|
|
34
|
+
export declare function checkNativeProperty<T>(property: NativeProperty<T>, value: T): T;
|
|
35
|
+
//# sourceMappingURL=native-property.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-property.d.ts","sourceRoot":"","sources":["../src/native-property.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAGtD,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,UAAU,EAChB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAEL,KAAK,UAAU,EAEhB,MAAM,6BAA6B,CAAA;AAEpC,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACzC,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE,CAAA;IAClD,yEAAyE;IACzE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,MAAM,EAAE,CAAA;IACnC,MAAM,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,CAAC,CAAA;IACnC,sEAAsE;IACtE,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAA;IACjD,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;IACzB,0FAA0F;IAC1F,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAA;CACnC;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,GAAG,IAAI,CAAC,CAAA;IACR,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,iBAAiB,CAAA;IACpE,kGAAkG;IAClG,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,GAAG,MAAM,IAAI,CAAA;IAChE,IAAI,IAAI,IAAI,CAAA;IACZ,oFAAoF;IACpF,OAAO,IAAI,IAAI,CAAA;CAChB;AASD,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,UAAU,EAAE,wBAAwB,CAAC,CAAC,CAAC,GACtC,CAAC,MAAM,EAAE,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,CAuBvC;AAgPD,2GAA2G;AAC3G,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,KAQ3E"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { isAndroid, Trace } from '@nativescript/core';
|
|
2
|
+
import { reducedMotion } from './config.js';
|
|
3
|
+
import { valuePlayback } from './motion-value.js';
|
|
4
|
+
import { TimedAnimation } from './timed-animation.js';
|
|
5
|
+
import { createTrack, instantTrack } from './track.js';
|
|
6
|
+
import { resolveTransition, springs, } from './transition.js';
|
|
7
|
+
import { nativePropertyDriver, } from './native-property-driver.js';
|
|
8
|
+
const definitions = new Set();
|
|
9
|
+
const owners = new WeakMap();
|
|
10
|
+
/** Optional plugin registry. No SDK is loaded until its adapter creates a target. */
|
|
11
|
+
export function registerNativeProperty(definition) {
|
|
12
|
+
if (!/^[\w.-]+\/[\w.-]+$/.test(definition.name))
|
|
13
|
+
throw new TypeError('Native property names must be namespaced: plugin/property.');
|
|
14
|
+
if (definitions.has(definition.name))
|
|
15
|
+
throw new Error(`Native property "${definition.name}" is already registered.`);
|
|
16
|
+
if (!definition.units.length ||
|
|
17
|
+
definition.units.some((unit) => typeof unit !== 'string' || !unit))
|
|
18
|
+
throw new TypeError('Describe the units of every native property component.');
|
|
19
|
+
if (!definition.platforms.length ||
|
|
20
|
+
definition.platforms.some((p) => p !== 'ios' && p !== 'android'))
|
|
21
|
+
throw new TypeError('Declare supported native platforms.');
|
|
22
|
+
if (typeof definition.create !== 'function' ||
|
|
23
|
+
typeof definition.encode !== 'function' ||
|
|
24
|
+
typeof definition.decode !== 'function')
|
|
25
|
+
throw new TypeError('A native property needs create(), encode() and decode().');
|
|
26
|
+
definitions.add(definition.name);
|
|
27
|
+
return (target) => new PropertyTarget(target, definition);
|
|
28
|
+
}
|
|
29
|
+
class PropertyTarget {
|
|
30
|
+
target;
|
|
31
|
+
definition;
|
|
32
|
+
sink;
|
|
33
|
+
owned = new Set();
|
|
34
|
+
disposed = false;
|
|
35
|
+
name;
|
|
36
|
+
constructor(target, definition) {
|
|
37
|
+
this.target = target;
|
|
38
|
+
this.definition = definition;
|
|
39
|
+
this.name = definition.name;
|
|
40
|
+
if (!target || (typeof target !== 'object' && typeof target !== 'function'))
|
|
41
|
+
throw new TypeError('A native property needs a native target.');
|
|
42
|
+
const platform = isAndroid ? 'android' : 'ios';
|
|
43
|
+
if (!definition.platforms.includes(platform))
|
|
44
|
+
throw new Error(`${this.name} is unavailable on ${platform}.`);
|
|
45
|
+
const driver = nativePropertyDriver();
|
|
46
|
+
this.sink = definition.create(target);
|
|
47
|
+
try {
|
|
48
|
+
driver.validate(this.sink, definition.units.length);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
try {
|
|
52
|
+
driver.dispose(this.sink);
|
|
53
|
+
}
|
|
54
|
+
catch { }
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
alive() {
|
|
59
|
+
if (this.disposed)
|
|
60
|
+
throw new Error(`${this.name} has been disposed.`);
|
|
61
|
+
if (!nativePropertyDriver().alive(this.sink))
|
|
62
|
+
throw new Error(`${this.name} has lost its native target.`);
|
|
63
|
+
}
|
|
64
|
+
vector(value) {
|
|
65
|
+
this.definition.validate?.(value);
|
|
66
|
+
const numbers = [...this.definition.encode(value)];
|
|
67
|
+
if (numbers.length !== this.definition.units.length ||
|
|
68
|
+
numbers.some((n) => !Number.isFinite(n)))
|
|
69
|
+
throw new TypeError(`${this.name} expects ${this.definition.units.length} finite components.`);
|
|
70
|
+
return numbers;
|
|
71
|
+
}
|
|
72
|
+
get() {
|
|
73
|
+
this.alive();
|
|
74
|
+
return this.definition.decode(nativePropertyDriver().read(this.sink));
|
|
75
|
+
}
|
|
76
|
+
set(value) {
|
|
77
|
+
this.alive();
|
|
78
|
+
const vector = this.vector(value);
|
|
79
|
+
this.owner()?.stop();
|
|
80
|
+
nativePropertyDriver().write(this.sink, vector);
|
|
81
|
+
}
|
|
82
|
+
owner() {
|
|
83
|
+
return this.target ? owners.get(this.target)?.get(this.name) : undefined;
|
|
84
|
+
}
|
|
85
|
+
claim(owner) {
|
|
86
|
+
this.owner()?.stop();
|
|
87
|
+
let map = owners.get(this.target);
|
|
88
|
+
if (!map)
|
|
89
|
+
owners.set(this.target, (map = new Map()));
|
|
90
|
+
map.set(this.name, owner);
|
|
91
|
+
this.owned.add(owner);
|
|
92
|
+
}
|
|
93
|
+
release(owner) {
|
|
94
|
+
if (this.target && this.owner() === owner)
|
|
95
|
+
owners.get(this.target)?.delete(this.name);
|
|
96
|
+
this.owned.delete(owner);
|
|
97
|
+
}
|
|
98
|
+
animate(to, options = {}) {
|
|
99
|
+
this.alive();
|
|
100
|
+
const from = this.get(), first = this.vector(from), last = this.vector(to);
|
|
101
|
+
if (typeof options === 'object' && 'layer' in options)
|
|
102
|
+
throw new TypeError('Native property adapters do not support layers; bind a layered scalar value instead.');
|
|
103
|
+
if (typeof options === 'string' && !Object.hasOwn(springs, options))
|
|
104
|
+
throw new TypeError(`Unknown spring "${options}".`);
|
|
105
|
+
const transition = resolveTransition(typeof options === 'string' ? springs[options] : options, 'opacity', 2);
|
|
106
|
+
const velocity = this.owner()?.velocity();
|
|
107
|
+
const delta = last.map((v, i) => v - first[i]);
|
|
108
|
+
const length = delta.reduce((s, v) => s + v * v, 0);
|
|
109
|
+
const speed = length && velocity
|
|
110
|
+
? delta.reduce((s, v, i) => s + v * (velocity[i] ?? 0), 0) / length
|
|
111
|
+
: 0;
|
|
112
|
+
const track = dense(this.definition.spatial && reducedMotion()
|
|
113
|
+
? instantTrack('opacity', 1)
|
|
114
|
+
: createTrack('opacity', [0, 1], transition, speed));
|
|
115
|
+
const at = (fraction) => this.vector(this.definition.interpolate
|
|
116
|
+
? this.definition.interpolate(from, to, fraction)
|
|
117
|
+
: this.definition.decode(first.map((v, i) => v + delta[i] * fraction)));
|
|
118
|
+
const samples = track.values.map(at);
|
|
119
|
+
const final = at(track.to);
|
|
120
|
+
let player;
|
|
121
|
+
const animation = new TimedAnimation(track.end, track.arrival, (time, paused) => {
|
|
122
|
+
player?.control(time, paused);
|
|
123
|
+
}, (completed) => {
|
|
124
|
+
try {
|
|
125
|
+
if (completed && nativePropertyDriver().alive(this.sink))
|
|
126
|
+
nativePropertyDriver().write(this.sink, final);
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
player?.cancel();
|
|
130
|
+
player = undefined;
|
|
131
|
+
this.release(owner);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
const owner = {
|
|
135
|
+
stop: () => animation.stop(),
|
|
136
|
+
velocity: () => animation.paused
|
|
137
|
+
? first.map(() => 0)
|
|
138
|
+
: at(track.valueAt(animation.time + 0.5)).map((v, i) => (v - at(track.valueAt(animation.time - 0.5))[i]) * 1000),
|
|
139
|
+
};
|
|
140
|
+
this.claim(owner);
|
|
141
|
+
try {
|
|
142
|
+
if (track.end > 0) {
|
|
143
|
+
player = nativePropertyDriver().play(this.sink, track, samples, final, (completed) => {
|
|
144
|
+
if (!completed)
|
|
145
|
+
animation.stop();
|
|
146
|
+
});
|
|
147
|
+
if (animation.done) {
|
|
148
|
+
player.cancel();
|
|
149
|
+
player = undefined;
|
|
150
|
+
}
|
|
151
|
+
else
|
|
152
|
+
player.control(animation.time, false);
|
|
153
|
+
}
|
|
154
|
+
animation.start();
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
animation.stop();
|
|
158
|
+
throw error;
|
|
159
|
+
}
|
|
160
|
+
return animation;
|
|
161
|
+
}
|
|
162
|
+
bind(value, map) {
|
|
163
|
+
this.alive();
|
|
164
|
+
if (typeof map !== 'function')
|
|
165
|
+
throw new TypeError('A native binding needs a pure value mapping.');
|
|
166
|
+
const source = valuePlayback(value);
|
|
167
|
+
let player;
|
|
168
|
+
let off = () => { };
|
|
169
|
+
let stopped = false;
|
|
170
|
+
const prepare = () => {
|
|
171
|
+
const state = source.snapshot();
|
|
172
|
+
state.track = dense(state.track);
|
|
173
|
+
const spatial = this.definition.spatial && reducedMotion();
|
|
174
|
+
const samples = state.track.values.map((v) => this.vector(map(v)));
|
|
175
|
+
const current = this.vector(map(spatial ? state.track.to : state.value));
|
|
176
|
+
const final = this.vector(map(state.track.to));
|
|
177
|
+
return { ...state, samples, current, final, running: state.running && !spatial };
|
|
178
|
+
};
|
|
179
|
+
const initial = prepare(); // Validate all samples before interrupting another owner.
|
|
180
|
+
const owner = {
|
|
181
|
+
stop: () => {
|
|
182
|
+
if (stopped)
|
|
183
|
+
return;
|
|
184
|
+
stopped = true;
|
|
185
|
+
off();
|
|
186
|
+
player?.cancel();
|
|
187
|
+
player = undefined;
|
|
188
|
+
this.release(owner);
|
|
189
|
+
},
|
|
190
|
+
velocity: () => this.definition.units.map(() => 0),
|
|
191
|
+
};
|
|
192
|
+
const apply = (state) => {
|
|
193
|
+
player?.cancel();
|
|
194
|
+
player = undefined;
|
|
195
|
+
if (!state.running)
|
|
196
|
+
nativePropertyDriver().write(this.sink, state.current);
|
|
197
|
+
else {
|
|
198
|
+
player = nativePropertyDriver().play(this.sink, state.track, state.samples, state.final, (completed) => {
|
|
199
|
+
if (!completed)
|
|
200
|
+
owner.stop();
|
|
201
|
+
});
|
|
202
|
+
if (stopped) {
|
|
203
|
+
player.cancel();
|
|
204
|
+
player = undefined;
|
|
205
|
+
}
|
|
206
|
+
else
|
|
207
|
+
player.control(source.snapshot().elapsed, state.paused);
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
this.claim(owner);
|
|
211
|
+
try {
|
|
212
|
+
off = source.subscribe(() => {
|
|
213
|
+
if (stopped)
|
|
214
|
+
return;
|
|
215
|
+
try {
|
|
216
|
+
this.alive();
|
|
217
|
+
apply(prepare());
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
owner.stop();
|
|
221
|
+
Trace.write(`Jolt native binding failed: ${String(error)}`, Trace.categories.Error, Trace.messageType.error);
|
|
222
|
+
}
|
|
223
|
+
});
|
|
224
|
+
apply(initial);
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
owner.stop();
|
|
228
|
+
throw error;
|
|
229
|
+
}
|
|
230
|
+
return owner.stop;
|
|
231
|
+
}
|
|
232
|
+
stop() {
|
|
233
|
+
for (const owner of [...this.owned])
|
|
234
|
+
owner.stop();
|
|
235
|
+
}
|
|
236
|
+
dispose() {
|
|
237
|
+
if (this.disposed)
|
|
238
|
+
return;
|
|
239
|
+
this.stop();
|
|
240
|
+
this.disposed = true;
|
|
241
|
+
nativePropertyDriver().dispose(this.sink);
|
|
242
|
+
this.target = undefined;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/** Reusable conformance checks for setup/command behavior; frame/lifecycle checks require a native app. */
|
|
246
|
+
export function checkNativeProperty(property, value) {
|
|
247
|
+
const previous = property.get();
|
|
248
|
+
try {
|
|
249
|
+
property.set(value);
|
|
250
|
+
return property.get();
|
|
251
|
+
}
|
|
252
|
+
finally {
|
|
253
|
+
property.set(previous);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/** Uniform samples also capture nonlinear compound interpolation and pure binding maps. */
|
|
257
|
+
function dense(track) {
|
|
258
|
+
if (track.duration === 0)
|
|
259
|
+
return track;
|
|
260
|
+
const count = Math.max(1, Math.min(6000, Math.ceil((track.duration * 60) / 1000)));
|
|
261
|
+
const times = [
|
|
262
|
+
...new Set([
|
|
263
|
+
...track.times,
|
|
264
|
+
...Array.from({ length: count + 1 }, (_, i) => i / count),
|
|
265
|
+
]),
|
|
266
|
+
].sort((a, b) => a - b);
|
|
267
|
+
return {
|
|
268
|
+
...track,
|
|
269
|
+
times,
|
|
270
|
+
values: times.map((time) => time === 1
|
|
271
|
+
? track.values.at(-1)
|
|
272
|
+
: time === 0
|
|
273
|
+
? track.values[0]
|
|
274
|
+
: track.valueAt(track.delay + time * track.duration)),
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=native-property.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-property.js","sourceRoot":"","sources":["../src/native-property.ts"],"names":[],"mappings":"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"}
|