@clipkit/runtime 1.0.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/LICENSE +54 -0
- package/README.md +98 -0
- package/dist/animation/easings.d.ts +9 -0
- package/dist/animation/easings.d.ts.map +1 -0
- package/dist/animation/easings.js +230 -0
- package/dist/animation/easings.js.map +1 -0
- package/dist/animation/expr.d.ts +44 -0
- package/dist/animation/expr.d.ts.map +1 -0
- package/dist/animation/expr.js +236 -0
- package/dist/animation/expr.js.map +1 -0
- package/dist/animation/keyframes.d.ts +23 -0
- package/dist/animation/keyframes.d.ts.map +1 -0
- package/dist/animation/keyframes.js +117 -0
- package/dist/animation/keyframes.js.map +1 -0
- package/dist/animation/motion-path.d.ts +18 -0
- package/dist/animation/motion-path.d.ts.map +1 -0
- package/dist/animation/motion-path.js +269 -0
- package/dist/animation/motion-path.js.map +1 -0
- package/dist/animation/noise1d.d.ts +5 -0
- package/dist/animation/noise1d.d.ts.map +1 -0
- package/dist/animation/noise1d.js +27 -0
- package/dist/animation/noise1d.js.map +1 -0
- package/dist/animation/presets.d.ts +60 -0
- package/dist/animation/presets.d.ts.map +1 -0
- package/dist/animation/presets.js +221 -0
- package/dist/animation/presets.js.map +1 -0
- package/dist/assets/cache.d.ts +18 -0
- package/dist/assets/cache.d.ts.map +1 -0
- package/dist/assets/cache.js +56 -0
- package/dist/assets/cache.js.map +1 -0
- package/dist/assets/fonts.d.ts +20 -0
- package/dist/assets/fonts.d.ts.map +1 -0
- package/dist/assets/fonts.js +127 -0
- package/dist/assets/fonts.js.map +1 -0
- package/dist/assets/loader.d.ts +18 -0
- package/dist/assets/loader.d.ts.map +1 -0
- package/dist/assets/loader.js +87 -0
- package/dist/assets/loader.js.map +1 -0
- package/dist/assets/lut.d.ts +5 -0
- package/dist/assets/lut.d.ts.map +1 -0
- package/dist/assets/lut.js +77 -0
- package/dist/assets/lut.js.map +1 -0
- package/dist/assets/media-time.d.ts +31 -0
- package/dist/assets/media-time.d.ts.map +1 -0
- package/dist/assets/media-time.js +65 -0
- package/dist/assets/media-time.js.map +1 -0
- package/dist/assets/mp4-frame-source.d.ts +44 -0
- package/dist/assets/mp4-frame-source.d.ts.map +1 -0
- package/dist/assets/mp4-frame-source.js +387 -0
- package/dist/assets/mp4-frame-source.js.map +1 -0
- package/dist/audio/encoder.d.ts +31 -0
- package/dist/audio/encoder.d.ts.map +1 -0
- package/dist/audio/encoder.js +96 -0
- package/dist/audio/encoder.js.map +1 -0
- package/dist/audio/fades.d.ts +16 -0
- package/dist/audio/fades.d.ts.map +1 -0
- package/dist/audio/fades.js +43 -0
- package/dist/audio/fades.js.map +1 -0
- package/dist/audio/limiter.d.ts +8 -0
- package/dist/audio/limiter.d.ts.map +1 -0
- package/dist/audio/limiter.js +39 -0
- package/dist/audio/limiter.js.map +1 -0
- package/dist/audio/loader.d.ts +6 -0
- package/dist/audio/loader.d.ts.map +1 -0
- package/dist/audio/loader.js +42 -0
- package/dist/audio/loader.js.map +1 -0
- package/dist/audio/mixer.d.ts +17 -0
- package/dist/audio/mixer.d.ts.map +1 -0
- package/dist/audio/mixer.js +204 -0
- package/dist/audio/mixer.js.map +1 -0
- package/dist/audio/varispeed.d.ts +24 -0
- package/dist/audio/varispeed.d.ts.map +1 -0
- package/dist/audio/varispeed.js +114 -0
- package/dist/audio/varispeed.js.map +1 -0
- package/dist/audio/wav.d.ts +6 -0
- package/dist/audio/wav.d.ts.map +1 -0
- package/dist/audio/wav.js +62 -0
- package/dist/audio/wav.js.map +1 -0
- package/dist/backend/backend.d.ts +579 -0
- package/dist/backend/backend.d.ts.map +1 -0
- package/dist/backend/backend.js +17 -0
- package/dist/backend/backend.js.map +1 -0
- package/dist/backend/webgl-backend.d.ts +97 -0
- package/dist/backend/webgl-backend.d.ts.map +1 -0
- package/dist/backend/webgl-backend.js +2142 -0
- package/dist/backend/webgl-backend.js.map +1 -0
- package/dist/backend/webgpu-backend.d.ts +121 -0
- package/dist/backend/webgpu-backend.d.ts.map +1 -0
- package/dist/backend/webgpu-backend.js +2481 -0
- package/dist/backend/webgpu-backend.js.map +1 -0
- package/dist/compositor/bitfont.d.ts +8 -0
- package/dist/compositor/bitfont.d.ts.map +1 -0
- package/dist/compositor/bitfont.js +52 -0
- package/dist/compositor/bitfont.js.map +1 -0
- package/dist/compositor/camera.d.ts +5 -0
- package/dist/compositor/camera.d.ts.map +1 -0
- package/dist/compositor/camera.js +114 -0
- package/dist/compositor/camera.js.map +1 -0
- package/dist/compositor/color.d.ts +26 -0
- package/dist/compositor/color.d.ts.map +1 -0
- package/dist/compositor/color.js +189 -0
- package/dist/compositor/color.js.map +1 -0
- package/dist/compositor/element-renderers/caption.d.ts +4 -0
- package/dist/compositor/element-renderers/caption.d.ts.map +1 -0
- package/dist/compositor/element-renderers/caption.js +376 -0
- package/dist/compositor/element-renderers/caption.js.map +1 -0
- package/dist/compositor/element-renderers/group.d.ts +12 -0
- package/dist/compositor/element-renderers/group.d.ts.map +1 -0
- package/dist/compositor/element-renderers/group.js +259 -0
- package/dist/compositor/element-renderers/group.js.map +1 -0
- package/dist/compositor/element-renderers/image.d.ts +4 -0
- package/dist/compositor/element-renderers/image.d.ts.map +1 -0
- package/dist/compositor/element-renderers/image.js +97 -0
- package/dist/compositor/element-renderers/image.js.map +1 -0
- package/dist/compositor/element-renderers/lit.d.ts +6 -0
- package/dist/compositor/element-renderers/lit.d.ts.map +1 -0
- package/dist/compositor/element-renderers/lit.js +82 -0
- package/dist/compositor/element-renderers/lit.js.map +1 -0
- package/dist/compositor/element-renderers/particles.d.ts +4 -0
- package/dist/compositor/element-renderers/particles.d.ts.map +1 -0
- package/dist/compositor/element-renderers/particles.js +212 -0
- package/dist/compositor/element-renderers/particles.js.map +1 -0
- package/dist/compositor/element-renderers/shape.d.ts +4 -0
- package/dist/compositor/element-renderers/shape.d.ts.map +1 -0
- package/dist/compositor/element-renderers/shape.js +171 -0
- package/dist/compositor/element-renderers/shape.js.map +1 -0
- package/dist/compositor/element-renderers/svg.d.ts +4 -0
- package/dist/compositor/element-renderers/svg.d.ts.map +1 -0
- package/dist/compositor/element-renderers/svg.js +210 -0
- package/dist/compositor/element-renderers/svg.js.map +1 -0
- package/dist/compositor/element-renderers/text.d.ts +25 -0
- package/dist/compositor/element-renderers/text.d.ts.map +1 -0
- package/dist/compositor/element-renderers/text.js +1358 -0
- package/dist/compositor/element-renderers/text.js.map +1 -0
- package/dist/compositor/element-renderers/video.d.ts +12 -0
- package/dist/compositor/element-renderers/video.d.ts.map +1 -0
- package/dist/compositor/element-renderers/video.js +109 -0
- package/dist/compositor/element-renderers/video.js.map +1 -0
- package/dist/compositor/fit.d.ts +18 -0
- package/dist/compositor/fit.d.ts.map +1 -0
- package/dist/compositor/fit.js +106 -0
- package/dist/compositor/fit.js.map +1 -0
- package/dist/compositor/lighting.d.ts +63 -0
- package/dist/compositor/lighting.d.ts.map +1 -0
- package/dist/compositor/lighting.js +141 -0
- package/dist/compositor/lighting.js.map +1 -0
- package/dist/compositor/mat4.d.ts +88 -0
- package/dist/compositor/mat4.d.ts.map +1 -0
- package/dist/compositor/mat4.js +245 -0
- package/dist/compositor/mat4.js.map +1 -0
- package/dist/compositor/project.d.ts +24 -0
- package/dist/compositor/project.d.ts.map +1 -0
- package/dist/compositor/project.js +105 -0
- package/dist/compositor/project.js.map +1 -0
- package/dist/compositor/render-context.d.ts +194 -0
- package/dist/compositor/render-context.d.ts.map +1 -0
- package/dist/compositor/render-context.js +10 -0
- package/dist/compositor/render-context.js.map +1 -0
- package/dist/compositor/resolve.d.ts +80 -0
- package/dist/compositor/resolve.d.ts.map +1 -0
- package/dist/compositor/resolve.js +276 -0
- package/dist/compositor/resolve.js.map +1 -0
- package/dist/compositor/scene.d.ts +10 -0
- package/dist/compositor/scene.d.ts.map +1 -0
- package/dist/compositor/scene.js +658 -0
- package/dist/compositor/scene.js.map +1 -0
- package/dist/compositor/transform.d.ts +73 -0
- package/dist/compositor/transform.d.ts.map +1 -0
- package/dist/compositor/transform.js +229 -0
- package/dist/compositor/transform.js.map +1 -0
- package/dist/compositor/unit.d.ts +27 -0
- package/dist/compositor/unit.d.ts.map +1 -0
- package/dist/compositor/unit.js +74 -0
- package/dist/compositor/unit.js.map +1 -0
- package/dist/encoder/exporter.d.ts +95 -0
- package/dist/encoder/exporter.d.ts.map +1 -0
- package/dist/encoder/exporter.js +341 -0
- package/dist/encoder/exporter.js.map +1 -0
- package/dist/encoder/index.d.ts +3 -0
- package/dist/encoder/index.d.ts.map +1 -0
- package/dist/encoder/index.js +2 -0
- package/dist/encoder/index.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +13 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +32 -0
- package/dist/logger.js.map +1 -0
- package/dist/runtime.d.ts +216 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +1012 -0
- package/dist/runtime.js.map +1 -0
- package/dist/svg/morph.d.ts +6 -0
- package/dist/svg/morph.d.ts.map +1 -0
- package/dist/svg/morph.js +62 -0
- package/dist/svg/morph.js.map +1 -0
- package/dist/svg/svg-renderer.d.ts +18 -0
- package/dist/svg/svg-renderer.d.ts.map +1 -0
- package/dist/svg/svg-renderer.js +142 -0
- package/dist/svg/svg-renderer.js.map +1 -0
- package/dist/text/caption-chunk.d.ts +17 -0
- package/dist/text/caption-chunk.d.ts.map +1 -0
- package/dist/text/caption-chunk.js +76 -0
- package/dist/text/caption-chunk.js.map +1 -0
- package/dist/text/font-atlas.d.ts +63 -0
- package/dist/text/font-atlas.d.ts.map +1 -0
- package/dist/text/font-atlas.js +225 -0
- package/dist/text/font-atlas.js.map +1 -0
- package/dist/text/measure.d.ts +38 -0
- package/dist/text/measure.d.ts.map +1 -0
- package/dist/text/measure.js +164 -0
- package/dist/text/measure.js.map +1 -0
- package/dist/text/text-animation.d.ts +52 -0
- package/dist/text/text-animation.d.ts.map +1 -0
- package/dist/text/text-animation.js +133 -0
- package/dist/text/text-animation.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
// Spatial motion paths (§6.7) — `keyframe_animations` entries with
|
|
2
|
+
// `property: "position"` and [x, y] or [x, y, z] keyframe values.
|
|
3
|
+
//
|
|
4
|
+
// Each pair of consecutive keyframes is a cubic bezier segment:
|
|
5
|
+
// P0 = a.value P3 = b.value
|
|
6
|
+
// P1 = P0 + a.out_tangent P2 = P3 + b.in_tangent
|
|
7
|
+
// with omitted tangents defaulting to the straight-line third-points
|
|
8
|
+
// (P1 = P0 + (P3−P0)/3, P2 = P3 − (P3−P0)/3) so handle-less paths are
|
|
9
|
+
// exact polyline motion. On a 3D path a 2-component tangent's z
|
|
10
|
+
// defaults to the straight-line third-point in z.
|
|
11
|
+
//
|
|
12
|
+
// Travel is ARC-LENGTH parameterized (normative): the destination
|
|
13
|
+
// keyframe's easing maps segment-local time to a fraction u of the
|
|
14
|
+
// segment's LENGTH, and the bezier parameter t is found on a 64-chord
|
|
15
|
+
// cumulative-length table (linear interpolation between chords). With
|
|
16
|
+
// linear easing the element moves at constant speed regardless of how
|
|
17
|
+
// the handles stretch the parameterization. 3D paths measure 3D chord
|
|
18
|
+
// lengths; 2D paths run the exact 2D expressions (byte-stable).
|
|
19
|
+
//
|
|
20
|
+
// auto_orient is strictly in-plane (§6.7): the tangent's xy projection
|
|
21
|
+
// drives z_rotation; dz never derives x_rotation/y_rotation.
|
|
22
|
+
import { applyEasing } from './easings.js';
|
|
23
|
+
const CHORDS = 64;
|
|
24
|
+
function isSpatial(v) {
|
|
25
|
+
return (Array.isArray(v) &&
|
|
26
|
+
(v.length === 2 || v.length === 3) &&
|
|
27
|
+
v.every((n) => typeof n === 'number'));
|
|
28
|
+
}
|
|
29
|
+
function numberOr(v, fallback) {
|
|
30
|
+
if (typeof v === 'number' && Number.isFinite(v))
|
|
31
|
+
return v;
|
|
32
|
+
if (typeof v === 'string') {
|
|
33
|
+
const n = parseFloat(v);
|
|
34
|
+
return Number.isFinite(n) ? n : fallback;
|
|
35
|
+
}
|
|
36
|
+
return fallback;
|
|
37
|
+
}
|
|
38
|
+
function bezier(p0, p1, p2, p3, t) {
|
|
39
|
+
const mt = 1 - t;
|
|
40
|
+
const a = mt * mt * mt;
|
|
41
|
+
const b = 3 * mt * mt * t;
|
|
42
|
+
const c = 3 * mt * t * t;
|
|
43
|
+
const d = t * t * t;
|
|
44
|
+
return [
|
|
45
|
+
a * p0[0] + b * p1[0] + c * p2[0] + d * p3[0],
|
|
46
|
+
a * p0[1] + b * p1[1] + c * p2[1] + d * p3[1],
|
|
47
|
+
];
|
|
48
|
+
}
|
|
49
|
+
function bezierDeriv(p0, p1, p2, p3, t) {
|
|
50
|
+
const mt = 1 - t;
|
|
51
|
+
const a = 3 * mt * mt;
|
|
52
|
+
const b = 6 * mt * t;
|
|
53
|
+
const c = 3 * t * t;
|
|
54
|
+
return [
|
|
55
|
+
a * (p1[0] - p0[0]) + b * (p2[0] - p1[0]) + c * (p3[0] - p2[0]),
|
|
56
|
+
a * (p1[1] - p0[1]) + b * (p2[1] - p1[1]) + c * (p3[1] - p2[1]),
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
function controlPoints(a, b) {
|
|
60
|
+
const p0 = a.value;
|
|
61
|
+
const p3 = b.value;
|
|
62
|
+
const p1 = a.out_tangent
|
|
63
|
+
? [p0[0] + a.out_tangent[0], p0[1] + a.out_tangent[1]]
|
|
64
|
+
: [p0[0] + (p3[0] - p0[0]) / 3, p0[1] + (p3[1] - p0[1]) / 3];
|
|
65
|
+
const p2 = b.in_tangent
|
|
66
|
+
? [p3[0] + b.in_tangent[0], p3[1] + b.in_tangent[1]]
|
|
67
|
+
: [p3[0] - (p3[0] - p0[0]) / 3, p3[1] - (p3[1] - p0[1]) / 3];
|
|
68
|
+
return [p0, p1, p2, p3];
|
|
69
|
+
}
|
|
70
|
+
/** Sample one 2D segment at length-fraction u ∈ [0, 1]. */
|
|
71
|
+
function sampleSegment(a, b, u) {
|
|
72
|
+
const [p0, p1, p2, p3] = controlPoints(a, b);
|
|
73
|
+
// 64-chord cumulative length table (normative).
|
|
74
|
+
const lengths = new Float64Array(CHORDS + 1);
|
|
75
|
+
let prev = p0;
|
|
76
|
+
for (let i = 1; i <= CHORDS; i++) {
|
|
77
|
+
const pt = bezier(p0, p1, p2, p3, i / CHORDS);
|
|
78
|
+
lengths[i] = lengths[i - 1] + Math.hypot(pt[0] - prev[0], pt[1] - prev[1]);
|
|
79
|
+
prev = pt;
|
|
80
|
+
}
|
|
81
|
+
const total = lengths[CHORDS];
|
|
82
|
+
let t;
|
|
83
|
+
if (total <= 0) {
|
|
84
|
+
t = u; // degenerate (all points coincide)
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
const target = u * total;
|
|
88
|
+
let i = 1;
|
|
89
|
+
while (i < CHORDS && lengths[i] < target)
|
|
90
|
+
i++;
|
|
91
|
+
const l0 = lengths[i - 1];
|
|
92
|
+
const l1 = lengths[i];
|
|
93
|
+
const f = l1 > l0 ? (target - l0) / (l1 - l0) : 0;
|
|
94
|
+
t = (i - 1 + f) / CHORDS;
|
|
95
|
+
}
|
|
96
|
+
const point = bezier(p0, p1, p2, p3, t);
|
|
97
|
+
let [dx, dy] = bezierDeriv(p0, p1, p2, p3, t);
|
|
98
|
+
if (dx === 0 && dy === 0) {
|
|
99
|
+
// Degenerate derivative (coincident control points) — fall back to
|
|
100
|
+
// the segment's chord direction.
|
|
101
|
+
dx = p3[0] - p0[0];
|
|
102
|
+
dy = p3[1] - p0[1];
|
|
103
|
+
}
|
|
104
|
+
const angle = (Math.atan2(dy, dx) * 180) / Math.PI;
|
|
105
|
+
return { point, angle };
|
|
106
|
+
}
|
|
107
|
+
// ── 3D variants (§6.7 3D paths) ─────────────────────────────────────
|
|
108
|
+
function vec3Of(v) {
|
|
109
|
+
return [v[0], v[1], v.length === 3 ? v[2] : 0];
|
|
110
|
+
}
|
|
111
|
+
function bezier3(p0, p1, p2, p3, t) {
|
|
112
|
+
const mt = 1 - t;
|
|
113
|
+
const a = mt * mt * mt;
|
|
114
|
+
const b = 3 * mt * mt * t;
|
|
115
|
+
const c = 3 * mt * t * t;
|
|
116
|
+
const d = t * t * t;
|
|
117
|
+
return [
|
|
118
|
+
a * p0[0] + b * p1[0] + c * p2[0] + d * p3[0],
|
|
119
|
+
a * p0[1] + b * p1[1] + c * p2[1] + d * p3[1],
|
|
120
|
+
a * p0[2] + b * p1[2] + c * p2[2] + d * p3[2],
|
|
121
|
+
];
|
|
122
|
+
}
|
|
123
|
+
function bezierDeriv3(p0, p1, p2, p3, t) {
|
|
124
|
+
const mt = 1 - t;
|
|
125
|
+
const a = 3 * mt * mt;
|
|
126
|
+
const b = 6 * mt * t;
|
|
127
|
+
const c = 3 * t * t;
|
|
128
|
+
return [
|
|
129
|
+
a * (p1[0] - p0[0]) + b * (p2[0] - p1[0]) + c * (p3[0] - p2[0]),
|
|
130
|
+
a * (p1[1] - p0[1]) + b * (p2[1] - p1[1]) + c * (p3[1] - p2[1]),
|
|
131
|
+
a * (p1[2] - p0[2]) + b * (p2[2] - p1[2]) + c * (p3[2] - p2[2]),
|
|
132
|
+
];
|
|
133
|
+
}
|
|
134
|
+
function controlPoints3(a, b) {
|
|
135
|
+
const p0 = vec3Of(a.value);
|
|
136
|
+
const p3 = vec3Of(b.value);
|
|
137
|
+
// A 2-component handle's z defaults to the straight-line third-point
|
|
138
|
+
// in z (mirrors the fully-omitted-handle rule, per axis).
|
|
139
|
+
const ot = a.out_tangent;
|
|
140
|
+
const p1 = ot
|
|
141
|
+
? [p0[0] + ot[0], p0[1] + ot[1], ot.length === 3 ? p0[2] + ot[2] : p0[2] + (p3[2] - p0[2]) / 3]
|
|
142
|
+
: [p0[0] + (p3[0] - p0[0]) / 3, p0[1] + (p3[1] - p0[1]) / 3, p0[2] + (p3[2] - p0[2]) / 3];
|
|
143
|
+
const it = b.in_tangent;
|
|
144
|
+
const p2 = it
|
|
145
|
+
? [p3[0] + it[0], p3[1] + it[1], it.length === 3 ? p3[2] + it[2] : p3[2] - (p3[2] - p0[2]) / 3]
|
|
146
|
+
: [p3[0] - (p3[0] - p0[0]) / 3, p3[1] - (p3[1] - p0[1]) / 3, p3[2] - (p3[2] - p0[2]) / 3];
|
|
147
|
+
return [p0, p1, p2, p3];
|
|
148
|
+
}
|
|
149
|
+
/** Sample one 3D segment at length-fraction u ∈ [0, 1]. */
|
|
150
|
+
function sampleSegment3(a, b, u) {
|
|
151
|
+
const [p0, p1, p2, p3] = controlPoints3(a, b);
|
|
152
|
+
// 64-chord cumulative length table over the 3D curve (normative).
|
|
153
|
+
const lengths = new Float64Array(CHORDS + 1);
|
|
154
|
+
let prev = p0;
|
|
155
|
+
for (let i = 1; i <= CHORDS; i++) {
|
|
156
|
+
const pt = bezier3(p0, p1, p2, p3, i / CHORDS);
|
|
157
|
+
lengths[i] = lengths[i - 1] + Math.hypot(pt[0] - prev[0], pt[1] - prev[1], pt[2] - prev[2]);
|
|
158
|
+
prev = pt;
|
|
159
|
+
}
|
|
160
|
+
const total = lengths[CHORDS];
|
|
161
|
+
let t;
|
|
162
|
+
if (total <= 0) {
|
|
163
|
+
t = u;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
const target = u * total;
|
|
167
|
+
let i = 1;
|
|
168
|
+
while (i < CHORDS && lengths[i] < target)
|
|
169
|
+
i++;
|
|
170
|
+
const l0 = lengths[i - 1];
|
|
171
|
+
const l1 = lengths[i];
|
|
172
|
+
const f = l1 > l0 ? (target - l0) / (l1 - l0) : 0;
|
|
173
|
+
t = (i - 1 + f) / CHORDS;
|
|
174
|
+
}
|
|
175
|
+
const point = bezier3(p0, p1, p2, p3, t);
|
|
176
|
+
let [dx, dy] = bezierDeriv3(p0, p1, p2, p3, t);
|
|
177
|
+
if (dx === 0 && dy === 0) {
|
|
178
|
+
// Degenerate xy derivative (z-only travel or coincident control
|
|
179
|
+
// points) — fall back to the segment chord's xy projection; if
|
|
180
|
+
// that is zero too the angle is 0 by atan2 convention.
|
|
181
|
+
dx = p3[0] - p0[0];
|
|
182
|
+
dy = p3[1] - p0[1];
|
|
183
|
+
}
|
|
184
|
+
const angle = (Math.atan2(dy, dx) * 180) / Math.PI;
|
|
185
|
+
return { point, angle };
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Resolve the element's `position` motion path at element-local time.
|
|
189
|
+
* Returns null when the element has no position path. Endpoint clamps
|
|
190
|
+
* hold the first/last point with the adjacent segment's end tangent.
|
|
191
|
+
*/
|
|
192
|
+
export function resolveMotionPath(element, localTime) {
|
|
193
|
+
const anims = element.keyframe_animations;
|
|
194
|
+
if (!anims)
|
|
195
|
+
return null;
|
|
196
|
+
const anim = anims.find((a) => a.property === 'position');
|
|
197
|
+
if (!anim)
|
|
198
|
+
return null;
|
|
199
|
+
const kfs = anim.keyframes.filter((k) => isSpatial(k.value));
|
|
200
|
+
if (kfs.length === 0)
|
|
201
|
+
return null;
|
|
202
|
+
const autoOrient = anim.auto_orient === true;
|
|
203
|
+
// A path is 3D when any keyframe carries [x, y, z] (validation
|
|
204
|
+
// requires agreement; the `some` is runtime defensiveness).
|
|
205
|
+
if (kfs.some((k) => k.value.length === 3)) {
|
|
206
|
+
return resolve3DPath(kfs, anim, localTime, autoOrient);
|
|
207
|
+
}
|
|
208
|
+
if (kfs.length === 1) {
|
|
209
|
+
const p = kfs[0].value;
|
|
210
|
+
return { x: p[0], y: p[1], z: null, angle: 0, autoOrient };
|
|
211
|
+
}
|
|
212
|
+
const first = kfs[0];
|
|
213
|
+
const last = kfs[kfs.length - 1];
|
|
214
|
+
if (localTime <= numberOr(first.time, 0)) {
|
|
215
|
+
const { point, angle } = sampleSegment(first, kfs[1], 0);
|
|
216
|
+
return { x: point[0], y: point[1], z: null, angle, autoOrient };
|
|
217
|
+
}
|
|
218
|
+
if (localTime >= numberOr(last.time, 0)) {
|
|
219
|
+
const { point, angle } = sampleSegment(kfs[kfs.length - 2], last, 1);
|
|
220
|
+
return { x: point[0], y: point[1], z: null, angle, autoOrient };
|
|
221
|
+
}
|
|
222
|
+
for (let i = 0; i < kfs.length - 1; i++) {
|
|
223
|
+
const a = kfs[i];
|
|
224
|
+
const b = kfs[i + 1];
|
|
225
|
+
const at = numberOr(a.time, 0);
|
|
226
|
+
const bt = numberOr(b.time, 0);
|
|
227
|
+
if (localTime >= at && localTime <= bt) {
|
|
228
|
+
const span = bt - at;
|
|
229
|
+
const localT = span > 0 ? (localTime - at) / span : 0;
|
|
230
|
+
const u = applyEasing(b.easing, localT);
|
|
231
|
+
const { point, angle } = sampleSegment(a, b, u);
|
|
232
|
+
return { x: point[0], y: point[1], z: null, angle, autoOrient };
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const p = last.value;
|
|
236
|
+
return { x: p[0], y: p[1], z: null, angle: 0, autoOrient };
|
|
237
|
+
}
|
|
238
|
+
function resolve3DPath(kfs, anim, localTime, autoOrient) {
|
|
239
|
+
if (kfs.length === 1) {
|
|
240
|
+
const p = vec3Of(kfs[0].value);
|
|
241
|
+
return { x: p[0], y: p[1], z: p[2], angle: 0, autoOrient };
|
|
242
|
+
}
|
|
243
|
+
const first = kfs[0];
|
|
244
|
+
const last = kfs[kfs.length - 1];
|
|
245
|
+
if (localTime <= numberOr(first.time, 0)) {
|
|
246
|
+
const { point, angle } = sampleSegment3(first, kfs[1], 0);
|
|
247
|
+
return { x: point[0], y: point[1], z: point[2], angle, autoOrient };
|
|
248
|
+
}
|
|
249
|
+
if (localTime >= numberOr(last.time, 0)) {
|
|
250
|
+
const { point, angle } = sampleSegment3(kfs[kfs.length - 2], last, 1);
|
|
251
|
+
return { x: point[0], y: point[1], z: point[2], angle, autoOrient };
|
|
252
|
+
}
|
|
253
|
+
for (let i = 0; i < kfs.length - 1; i++) {
|
|
254
|
+
const a = kfs[i];
|
|
255
|
+
const b = kfs[i + 1];
|
|
256
|
+
const at = numberOr(a.time, 0);
|
|
257
|
+
const bt = numberOr(b.time, 0);
|
|
258
|
+
if (localTime >= at && localTime <= bt) {
|
|
259
|
+
const span = bt - at;
|
|
260
|
+
const localT = span > 0 ? (localTime - at) / span : 0;
|
|
261
|
+
const u = applyEasing(b.easing, localT);
|
|
262
|
+
const { point, angle } = sampleSegment3(a, b, u);
|
|
263
|
+
return { x: point[0], y: point[1], z: point[2], angle, autoOrient };
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
const p = vec3Of(last.value);
|
|
267
|
+
return { x: p[0], y: p[1], z: p[2], angle: 0, autoOrient };
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=motion-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion-path.js","sourceRoot":"","sources":["../../src/animation/motion-path.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Deterministic, time-independent [0, 1) hash of a seed (for `random(seed)`). */
|
|
2
|
+
export declare function hash01(seed: number): number;
|
|
3
|
+
/** Smooth value noise in [0, 1] at coordinate x for a given seed. */
|
|
4
|
+
export declare function noise1d(x: number, seed: number): number;
|
|
5
|
+
//# sourceMappingURL=noise1d.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noise1d.d.ts","sourceRoot":"","sources":["../../src/animation/noise1d.ts"],"names":[],"mappings":"AAgBA,kFAAkF;AAClF,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,qEAAqE;AACrE,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAOvD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Normative 1D value noise (§6.2 `drift`) — the time-domain sibling of
|
|
2
|
+
// the §4.7 fractal-noise spec: the same PCG hash over an integer
|
|
3
|
+
// lattice, quintic-faded linear interpolation between corners.
|
|
4
|
+
// Integer math is wrapping 32-bit unsigned, so identical seeds produce
|
|
5
|
+
// identical motion on every runtime.
|
|
6
|
+
function pcg(v) {
|
|
7
|
+
const s = (Math.imul(v >>> 0, 747796405) + 2891336453) >>> 0;
|
|
8
|
+
const w = Math.imul(((s >>> ((s >>> 28) + 4)) ^ s) >>> 0, 277803737) >>> 0;
|
|
9
|
+
return ((w >>> 22) ^ w) >>> 0;
|
|
10
|
+
}
|
|
11
|
+
function h01(i, seed) {
|
|
12
|
+
return pcg(((i | 0) >>> 0) ^ pcg(seed >>> 0)) / 4294967295;
|
|
13
|
+
}
|
|
14
|
+
/** Deterministic, time-independent [0, 1) hash of a seed (for `random(seed)`). */
|
|
15
|
+
export function hash01(seed) {
|
|
16
|
+
return pcg(seed >>> 0) / 4294967296;
|
|
17
|
+
}
|
|
18
|
+
/** Smooth value noise in [0, 1] at coordinate x for a given seed. */
|
|
19
|
+
export function noise1d(x, seed) {
|
|
20
|
+
const i = Math.floor(x);
|
|
21
|
+
const f = x - i;
|
|
22
|
+
const u = f * f * f * (f * (f * 6 - 15) + 10);
|
|
23
|
+
const a = h01(i, seed);
|
|
24
|
+
const b = h01(i + 1, seed);
|
|
25
|
+
return a + (b - a) * u;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=noise1d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noise1d.js","sourceRoot":"","sources":["../../src/animation/noise1d.ts"],"names":[],"mappings":"AAAA,uEAAuE;AACvE,iEAAiE;AACjE,+DAA+D;AAC/D,uEAAuE;AACvE,qCAAqC;AAErC,SAAS,GAAG,CAAC,CAAS;IACpB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3E,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,GAAG,CAAC,CAAS,EAAE,IAAY;IAClC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;AAC7D,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;AACtC,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,OAAO,CAAC,CAAS,EAAE,IAAY;IAC7C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACvB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { Animation, Easing } from '@clipkit/protocol';
|
|
2
|
+
export interface PropertyTween {
|
|
3
|
+
/** Element property being animated (e.g. 'opacity', 'x', 'scale'). */
|
|
4
|
+
property: string;
|
|
5
|
+
/** Animation start time, in seconds, relative to the element's `time`. */
|
|
6
|
+
startTime: number;
|
|
7
|
+
/** Animation duration, in seconds. */
|
|
8
|
+
duration: number;
|
|
9
|
+
/** Value at startTime. */
|
|
10
|
+
from: number;
|
|
11
|
+
/** Value at startTime + duration. */
|
|
12
|
+
to: number;
|
|
13
|
+
/** Easing applied across the tween. */
|
|
14
|
+
easing: Easing;
|
|
15
|
+
/**
|
|
16
|
+
* If true, this tween's `from` should be added to whatever the static
|
|
17
|
+
* property value is (e.g. slide-up-in starts 100px below the resting Y).
|
|
18
|
+
* If false, the static value is overridden during the tween window.
|
|
19
|
+
*/
|
|
20
|
+
relative: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Oscillation. When set, `from`/`to` define an amplitude ENVELOPE
|
|
23
|
+
* (eased across the window) and the applied value is
|
|
24
|
+
* `amplitude × sin(2π · frequency · t)`. Used by shake (decaying
|
|
25
|
+
* envelope) and wiggle (constant envelope). Oscillating tweens are
|
|
26
|
+
* always relative.
|
|
27
|
+
*/
|
|
28
|
+
oscillate?: {
|
|
29
|
+
frequency: number;
|
|
30
|
+
/** Phase offset in radians (orbit's cos leg = π/2). */
|
|
31
|
+
phase?: number;
|
|
32
|
+
/** Drive with normative 1D value noise instead of sin (drift). */
|
|
33
|
+
noise?: {
|
|
34
|
+
seed: number;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Fill-forward (CSS `animation-fill-mode: forwards`): after the tween
|
|
39
|
+
* window ends, keep applying the `to` value instead of releasing back
|
|
40
|
+
* to the static value. Used by shift, which translates and settles.
|
|
41
|
+
*/
|
|
42
|
+
hold?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Fill-backward (CSS `animation-fill-mode: backwards`): before the
|
|
45
|
+
* tween window opens, hold the `from` value instead of releasing to
|
|
46
|
+
* the static value. Set on entrance presets so a delayed `fade-in`
|
|
47
|
+
* stays hidden at frame 0 rather than flashing its resting value and
|
|
48
|
+
* popping back in when the window opens.
|
|
49
|
+
*/
|
|
50
|
+
fillBackwards?: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Compile a schema Animation into per-property tweens.
|
|
54
|
+
*
|
|
55
|
+
* @param animation The schema Animation declaration.
|
|
56
|
+
* @param elementDuration Total visible duration of the element (seconds).
|
|
57
|
+
* Used to resolve `time: "end"` to a concrete number.
|
|
58
|
+
*/
|
|
59
|
+
export declare function compileAnimation(animation: Animation, elementDuration: number): PropertyTween[];
|
|
60
|
+
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/animation/presets.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,EAAkB,MAAM,mBAAmB,CAAC;AAE1F,MAAM,WAAW,aAAa;IAC5B,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,uDAAuD;QACvD,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,kEAAkE;QAClE,KAAK,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC;KAC1B,CAAC;IACF;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAiDD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,MAAM,GACtB,aAAa,EAAE,CAyCjB"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
// Named animation presets. The schema's `Animation` declares one of 16
|
|
2
|
+
// preset types (`fade-in`, `slide-up-in`, `scale-out`, …). At render time
|
|
3
|
+
// we compile each preset to one or more KeyframeAnimation-equivalent
|
|
4
|
+
// property tracks, applied over the animation's `duration` window at the
|
|
5
|
+
// animation's `time` ("start" | "end" | seconds).
|
|
6
|
+
//
|
|
7
|
+
// Pure function. The compositor calls compileAnimation once per element
|
|
8
|
+
// and pushes the resulting per-property tweens through the same
|
|
9
|
+
// keyframe-interpolation path as user keyframes.
|
|
10
|
+
const DEFAULT_DURATION = 0.5;
|
|
11
|
+
const DEFAULT_EASING = 'ease-out';
|
|
12
|
+
// Slide-in convention follows animate.css / Framer Motion:
|
|
13
|
+
// - Horizontal: slide-left-in starts on the LEFT, moves right into position;
|
|
14
|
+
// slide-right-in starts on the RIGHT, moves left into position.
|
|
15
|
+
// - Vertical: slide-up-in means motion direction is UP — the element starts
|
|
16
|
+
// BELOW its resting position and rises up. slide-down-in starts ABOVE.
|
|
17
|
+
// - Slide-out matches motion direction: slide-up-out moves UP (off the top),
|
|
18
|
+
// slide-down-out moves DOWN (off the bottom).
|
|
19
|
+
// Static, parameter-free presets. The dynamic presets (spin, shake,
|
|
20
|
+
// wiggle, squash, pan, shift) are compiled in compileDynamicPreset.
|
|
21
|
+
const PRESETS = {
|
|
22
|
+
'fade-in': [{ property: 'opacity', fromDelta: 0, toDelta: 1, relative: false }],
|
|
23
|
+
'fade-out': [{ property: 'opacity', fromDelta: 1, toDelta: 0, relative: false }],
|
|
24
|
+
'slide-left-in': [{ property: 'x', fromDelta: -200, toDelta: 0, relative: true }],
|
|
25
|
+
'slide-right-in': [{ property: 'x', fromDelta: 200, toDelta: 0, relative: true }],
|
|
26
|
+
'slide-up-in': [{ property: 'y', fromDelta: 200, toDelta: 0, relative: true }],
|
|
27
|
+
'slide-down-in': [{ property: 'y', fromDelta: -200, toDelta: 0, relative: true }],
|
|
28
|
+
'slide-left-out': [{ property: 'x', fromDelta: 0, toDelta: -200, relative: true }],
|
|
29
|
+
'slide-right-out': [{ property: 'x', fromDelta: 0, toDelta: 200, relative: true }],
|
|
30
|
+
'slide-up-out': [{ property: 'y', fromDelta: 0, toDelta: -200, relative: true }],
|
|
31
|
+
'slide-down-out': [{ property: 'y', fromDelta: 0, toDelta: 200, relative: true }],
|
|
32
|
+
'scale-in': [{ property: 'scale', fromDelta: 0, toDelta: 1, relative: false }],
|
|
33
|
+
'scale-out': [{ property: 'scale', fromDelta: 1, toDelta: 0, relative: false }],
|
|
34
|
+
'rotate-in': [{ property: 'rotation', fromDelta: -90, toDelta: 0, relative: true }],
|
|
35
|
+
'rotate-out': [{ property: 'rotation', fromDelta: 0, toDelta: 90, relative: true }],
|
|
36
|
+
'bounce-in': [{ property: 'scale', fromDelta: 0, toDelta: 1, relative: false, defaultEasing: 'ease-out-back' }],
|
|
37
|
+
'bounce-out': [{ property: 'scale', fromDelta: 1, toDelta: 0, relative: false, defaultEasing: 'ease-in-back' }],
|
|
38
|
+
};
|
|
39
|
+
// Presets whose natural reading is "for the whole element" — when both
|
|
40
|
+
// `time` and `duration` are omitted they span the element's full duration
|
|
41
|
+
// instead of the 0.5s accent default.
|
|
42
|
+
const FULL_LENGTH_TYPES = new Set(['spin', 'shake', 'wiggle', 'pan', 'drift', 'breathe', 'orbit']);
|
|
43
|
+
/**
|
|
44
|
+
* Compile a schema Animation into per-property tweens.
|
|
45
|
+
*
|
|
46
|
+
* @param animation The schema Animation declaration.
|
|
47
|
+
* @param elementDuration Total visible duration of the element (seconds).
|
|
48
|
+
* Used to resolve `time: "end"` to a concrete number.
|
|
49
|
+
*/
|
|
50
|
+
export function compileAnimation(animation, elementDuration) {
|
|
51
|
+
const fullLength = FULL_LENGTH_TYPES.has(animation.type) &&
|
|
52
|
+
animation.duration == null &&
|
|
53
|
+
animation.time == null;
|
|
54
|
+
const duration = fullLength
|
|
55
|
+
? elementDuration
|
|
56
|
+
: animation.duration ?? DEFAULT_DURATION;
|
|
57
|
+
const easing = animation.easing ?? DEFAULT_EASING;
|
|
58
|
+
let startTime;
|
|
59
|
+
if (animation.time === 'start' || animation.time == null) {
|
|
60
|
+
startTime = 0;
|
|
61
|
+
}
|
|
62
|
+
else if (animation.time === 'end') {
|
|
63
|
+
startTime = Math.max(0, elementDuration - duration);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
startTime = animation.time;
|
|
67
|
+
}
|
|
68
|
+
const dynamic = compileDynamicPreset(animation, startTime, duration);
|
|
69
|
+
if (dynamic)
|
|
70
|
+
return dynamic;
|
|
71
|
+
const specs = PRESETS[animation.type];
|
|
72
|
+
if (!specs)
|
|
73
|
+
return [];
|
|
74
|
+
// Entrance presets (`*-in`) fill backwards: before their window opens
|
|
75
|
+
// they hold the hidden/off-screen `from` value, so a delayed entrance
|
|
76
|
+
// doesn't flash the resting value at frame 0. Exits and oscillators
|
|
77
|
+
// release to the static value before they start, as before.
|
|
78
|
+
const fillBackwards = animation.type.endsWith('-in');
|
|
79
|
+
return specs.map((spec) => ({
|
|
80
|
+
property: spec.property,
|
|
81
|
+
startTime,
|
|
82
|
+
duration,
|
|
83
|
+
from: spec.fromDelta,
|
|
84
|
+
to: spec.toDelta,
|
|
85
|
+
easing: spec.defaultEasing ?? easing,
|
|
86
|
+
relative: spec.relative,
|
|
87
|
+
fillBackwards,
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
/** Direction → axis/sign for pan and shift. */
|
|
91
|
+
function directionVector(direction) {
|
|
92
|
+
switch (direction) {
|
|
93
|
+
case 'left': return { property: 'x', sign: -1 };
|
|
94
|
+
case 'up': return { property: 'y', sign: -1 };
|
|
95
|
+
case 'down': return { property: 'y', sign: 1 };
|
|
96
|
+
case 'right':
|
|
97
|
+
default: return { property: 'x', sign: 1 };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Presets that depend on the Animation's parameters (frequency, rotation,
|
|
102
|
+
* distance, direction, scale) and so can't live in the static PRESETS
|
|
103
|
+
* table. Returns null for table-driven types.
|
|
104
|
+
*/
|
|
105
|
+
function compileDynamicPreset(animation, startTime, duration) {
|
|
106
|
+
const easing = animation.easing ?? 'linear';
|
|
107
|
+
switch (animation.type) {
|
|
108
|
+
case 'spin': {
|
|
109
|
+
// Rotate by `rotation` degrees (default one full turn) on top of
|
|
110
|
+
// the element's static rotation.
|
|
111
|
+
const total = animation.rotation ?? 360;
|
|
112
|
+
return [{
|
|
113
|
+
property: 'rotation', startTime, duration,
|
|
114
|
+
from: 0, to: total, easing, relative: true,
|
|
115
|
+
}];
|
|
116
|
+
}
|
|
117
|
+
case 'shake': {
|
|
118
|
+
// Horizontal jitter with a decaying amplitude envelope.
|
|
119
|
+
const amplitude = animation.distance ?? 24;
|
|
120
|
+
return [{
|
|
121
|
+
property: 'x', startTime, duration,
|
|
122
|
+
from: amplitude, to: 0, easing, relative: true,
|
|
123
|
+
oscillate: { frequency: animation.frequency ?? 8 },
|
|
124
|
+
}];
|
|
125
|
+
}
|
|
126
|
+
case 'wiggle': {
|
|
127
|
+
// Rotational wobble at constant amplitude.
|
|
128
|
+
const amplitude = animation.rotation ?? 8;
|
|
129
|
+
return [{
|
|
130
|
+
property: 'rotation', startTime, duration,
|
|
131
|
+
from: amplitude, to: amplitude, easing, relative: true,
|
|
132
|
+
oscillate: { frequency: animation.frequency ?? 2 },
|
|
133
|
+
}];
|
|
134
|
+
}
|
|
135
|
+
case 'drift': {
|
|
136
|
+
// Seeded smooth random walk (§6.2): offsets are centered
|
|
137
|
+
// normative 1D value noise — organic, deterministic float.
|
|
138
|
+
const amplitude = animation.distance ?? 30;
|
|
139
|
+
const f = animation.frequency ?? 0.5;
|
|
140
|
+
const seed = Math.max(0, Math.round(animation.seed ?? 0));
|
|
141
|
+
return [
|
|
142
|
+
{
|
|
143
|
+
property: 'x', startTime, duration,
|
|
144
|
+
from: amplitude, to: amplitude, easing: 'linear', relative: true,
|
|
145
|
+
oscillate: { frequency: f, noise: { seed } },
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
property: 'y', startTime, duration,
|
|
149
|
+
from: amplitude, to: amplitude, easing: 'linear', relative: true,
|
|
150
|
+
oscillate: { frequency: f, noise: { seed: seed + 7919 } },
|
|
151
|
+
},
|
|
152
|
+
];
|
|
153
|
+
}
|
|
154
|
+
case 'breathe': {
|
|
155
|
+
// Gentle scale oscillation: scale × (1 + amp·sin(2πft)).
|
|
156
|
+
const amp = animation.scale ?? 0.05;
|
|
157
|
+
return [{
|
|
158
|
+
property: 'scale', startTime, duration,
|
|
159
|
+
from: amp, to: amp, easing: 'linear', relative: true,
|
|
160
|
+
oscillate: { frequency: animation.frequency ?? 0.4 },
|
|
161
|
+
}];
|
|
162
|
+
}
|
|
163
|
+
case 'orbit': {
|
|
164
|
+
// Circular position motion: x += r·cos(2πft), y += ±r·sin(2πft).
|
|
165
|
+
const r = animation.distance ?? 40;
|
|
166
|
+
const f = animation.frequency ?? 0.5;
|
|
167
|
+
const ccw = animation.direction === 'left';
|
|
168
|
+
return [
|
|
169
|
+
{
|
|
170
|
+
property: 'x', startTime, duration,
|
|
171
|
+
from: r, to: r, easing: 'linear', relative: true,
|
|
172
|
+
oscillate: { frequency: f, phase: Math.PI / 2 },
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
property: 'y', startTime, duration,
|
|
176
|
+
from: ccw ? -r : r, to: ccw ? -r : r, easing: 'linear', relative: true,
|
|
177
|
+
oscillate: { frequency: f },
|
|
178
|
+
},
|
|
179
|
+
];
|
|
180
|
+
}
|
|
181
|
+
case 'squash': {
|
|
182
|
+
// Squash & stretch accent: y compresses by `scale` while x bulges
|
|
183
|
+
// by ~60% of the depth, then both recover in the second half.
|
|
184
|
+
const depth = animation.scale ?? 0.3;
|
|
185
|
+
const half = duration / 2;
|
|
186
|
+
const mid = startTime + half;
|
|
187
|
+
const bulge = depth * 0.6;
|
|
188
|
+
return [
|
|
189
|
+
{ property: 'y_scale', startTime, duration: half, from: 1, to: 1 - depth, easing: 'ease-in-quad', relative: false },
|
|
190
|
+
{ property: 'y_scale', startTime: mid, duration: half, from: 1 - depth, to: 1, easing: 'ease-out-back', relative: false },
|
|
191
|
+
{ property: 'x_scale', startTime, duration: half, from: 1, to: 1 + bulge, easing: 'ease-in-quad', relative: false },
|
|
192
|
+
{ property: 'x_scale', startTime: mid, duration: half, from: 1 + bulge, to: 1, easing: 'ease-out-back', relative: false },
|
|
193
|
+
];
|
|
194
|
+
}
|
|
195
|
+
case 'pan': {
|
|
196
|
+
// Centered drift: travels `distance` px through the resting
|
|
197
|
+
// position (Ken Burns-style when run full-length).
|
|
198
|
+
const dist = animation.distance ?? 200;
|
|
199
|
+
const { property, sign } = directionVector(animation.direction);
|
|
200
|
+
return [{
|
|
201
|
+
property, startTime, duration,
|
|
202
|
+
from: (-dist / 2) * sign, to: (dist / 2) * sign, easing, relative: true,
|
|
203
|
+
}];
|
|
204
|
+
}
|
|
205
|
+
case 'shift': {
|
|
206
|
+
// One-shot translation by `distance` px that settles at the
|
|
207
|
+
// shifted position for the rest of the element's life (hold).
|
|
208
|
+
const dist = animation.distance ?? 200;
|
|
209
|
+
const { property, sign } = directionVector(animation.direction);
|
|
210
|
+
return [{
|
|
211
|
+
property, startTime, duration,
|
|
212
|
+
from: 0, to: dist * sign,
|
|
213
|
+
easing: animation.easing ?? DEFAULT_EASING, relative: true,
|
|
214
|
+
hold: true,
|
|
215
|
+
}];
|
|
216
|
+
}
|
|
217
|
+
default:
|
|
218
|
+
return null;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.js","sourceRoot":"","sources":["../../src/animation/presets.ts"],"names":[],"mappings":"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"}
|