@rafaelaugusto/jolt 0.1.0-beta.10 → 0.1.0-beta.12
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 +55 -6
- package/dist/animate.d.ts +14 -4
- package/dist/animate.d.ts.map +1 -1
- package/dist/animate.js +50 -34
- package/dist/animate.js.map +1 -1
- package/dist/drag.d.ts +17 -3
- package/dist/drag.d.ts.map +1 -1
- package/dist/drag.js +34 -11
- package/dist/drag.js.map +1 -1
- package/dist/driver/android-gradient.d.ts +5 -0
- package/dist/driver/android-gradient.d.ts.map +1 -0
- package/dist/driver/android-gradient.js +89 -0
- package/dist/driver/android-gradient.js.map +1 -0
- package/dist/driver/ios-gradient.d.ts +5 -0
- package/dist/driver/ios-gradient.d.ts.map +1 -0
- package/dist/driver/ios-gradient.js +109 -0
- package/dist/driver/ios-gradient.js.map +1 -0
- package/dist/easing.d.ts +1 -1
- package/dist/easing.d.ts.map +1 -1
- package/dist/easing.js +11 -0
- package/dist/easing.js.map +1 -1
- package/dist/engine.d.ts +18 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +143 -36
- package/dist/engine.js.map +1 -1
- package/dist/gradient.d.ts +90 -0
- package/dist/gradient.d.ts.map +1 -0
- package/dist/gradient.js +253 -0
- package/dist/gradient.js.map +1 -0
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/keyboard.d.ts.map +1 -1
- package/dist/keyboard.js +63 -10
- package/dist/keyboard.js.map +1 -1
- package/dist/mixer.d.ts +49 -0
- package/dist/mixer.d.ts.map +1 -0
- package/dist/mixer.js +238 -0
- package/dist/mixer.js.map +1 -0
- package/dist/motion-scope.d.ts +4 -1
- package/dist/motion-scope.d.ts.map +1 -1
- package/dist/motion-scope.js +8 -3
- package/dist/motion-scope.js.map +1 -1
- package/dist/motion-states.d.ts +18 -6
- package/dist/motion-states.d.ts.map +1 -1
- package/dist/motion-states.js +114 -26
- package/dist/motion-states.js.map +1 -1
- package/dist/motion-value.d.ts +115 -0
- package/dist/motion-value.d.ts.map +1 -0
- package/dist/motion-value.js +437 -0
- package/dist/motion-value.js.map +1 -0
- package/dist/path.d.ts.map +1 -1
- package/dist/path.js +2 -2
- package/dist/path.js.map +1 -1
- package/dist/track.d.ts.map +1 -1
- package/dist/track.js +31 -12
- package/dist/track.js.map +1 -1
- package/dist/transition.d.ts +30 -4
- package/dist/transition.d.ts.map +1 -1
- package/dist/transition.js +63 -7
- package/dist/transition.js.map +1 -1
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/vue/index.d.ts +28 -2
- package/dist/vue/index.d.ts.map +1 -1
- package/dist/vue/index.js +78 -2
- package/dist/vue/index.js.map +1 -1
- package/package.json +1 -1
- package/platforms/android/java/org/rafaelaugusto/jolt/GradientLayer.java +195 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/KeyboardFrame.java +53 -0
- package/platforms/android/java/org/rafaelaugusto/jolt/KeyboardFrameFollower.java +57 -0
- package/platforms/android/proguard-rules.pro +2 -0
- package/src/android-plugin.d.ts +56 -0
- package/src/animate.ts +99 -16
- package/src/drag.ts +67 -21
- package/src/driver/android-gradient.ts +109 -0
- package/src/driver/ios-gradient.ts +114 -0
- package/src/easing.ts +14 -0
- package/src/engine.ts +158 -53
- package/src/gradient.ts +378 -0
- package/src/index.ts +34 -3
- package/src/keyboard.ts +83 -18
- package/src/mixer.ts +264 -0
- package/src/motion-scope.ts +14 -6
- package/src/motion-states.ts +145 -41
- package/src/motion-value.ts +563 -0
- package/src/path.ts +2 -1
- package/src/track.ts +37 -12
- package/src/transition.ts +99 -10
- package/src/types.ts +5 -0
- package/src/vue/index.ts +98 -1
package/dist/mixer.js
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { getDriver } from './driver/index.js';
|
|
2
|
+
import { readValue, writeValue } from './properties.js';
|
|
3
|
+
/** The channel of regular animations; layers are named next to it. */
|
|
4
|
+
export const BASE = '';
|
|
5
|
+
const SAMPLES_PER_SECOND = 60;
|
|
6
|
+
const MAX_SAMPLES = 6000;
|
|
7
|
+
/** Endless channels loop natively over the least common multiple of their periods, up to this. */
|
|
8
|
+
const MAX_LOOP = 30000;
|
|
9
|
+
/** Beyond it, the composition is played in windows and sampled again at each one. */
|
|
10
|
+
const WINDOW = 4000;
|
|
11
|
+
export const multiplies = (property) => property === 'opacity' || property === 'scaleX' || property === 'scaleY';
|
|
12
|
+
export const identity = (property) => (multiplies(property) ? 1 : 0);
|
|
13
|
+
export const layerable = (property) => multiplies(property) ||
|
|
14
|
+
property === 'x' ||
|
|
15
|
+
property === 'y' ||
|
|
16
|
+
property === 'rotate' ||
|
|
17
|
+
property === 'rotateX' ||
|
|
18
|
+
property === 'rotateY';
|
|
19
|
+
/** What the engine holds instead of a driver handle while a property is mixed. */
|
|
20
|
+
export class MixHandle {
|
|
21
|
+
mix;
|
|
22
|
+
key;
|
|
23
|
+
constructor(mix, key) {
|
|
24
|
+
this.mix = mix;
|
|
25
|
+
this.key = key;
|
|
26
|
+
}
|
|
27
|
+
elapsed() {
|
|
28
|
+
return this.mix.elapsed(this.key);
|
|
29
|
+
}
|
|
30
|
+
control(position, paused) {
|
|
31
|
+
this.mix.control(this.key, position, paused);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const mixes = new WeakMap();
|
|
35
|
+
export function mixOf(view, property) {
|
|
36
|
+
return mixes.get(view)?.get(property);
|
|
37
|
+
}
|
|
38
|
+
export function mixesOf(view) {
|
|
39
|
+
return [...(mixes.get(view)?.values() ?? [])];
|
|
40
|
+
}
|
|
41
|
+
export function mixFor(view, property) {
|
|
42
|
+
let properties = mixes.get(view);
|
|
43
|
+
if (!properties)
|
|
44
|
+
mixes.set(view, (properties = new Map()));
|
|
45
|
+
let mix = properties.get(property);
|
|
46
|
+
if (!mix)
|
|
47
|
+
properties.set(property, (mix = new Mix(view, property)));
|
|
48
|
+
return mix;
|
|
49
|
+
}
|
|
50
|
+
/** One property of one view: a base and named layers, played natively as one composite track. */
|
|
51
|
+
export class Mix {
|
|
52
|
+
view;
|
|
53
|
+
property;
|
|
54
|
+
rests = new Map();
|
|
55
|
+
channels = new Map();
|
|
56
|
+
native;
|
|
57
|
+
generation = 0;
|
|
58
|
+
constructor(view, property) {
|
|
59
|
+
this.view = view;
|
|
60
|
+
this.property = property;
|
|
61
|
+
this.rests.set(BASE, readValue(view, property));
|
|
62
|
+
}
|
|
63
|
+
rest(key) {
|
|
64
|
+
return (this.rests.get(key) ??
|
|
65
|
+
(key === BASE ? readValue(this.view, this.property) : identity(this.property)));
|
|
66
|
+
}
|
|
67
|
+
setRest(key, value) {
|
|
68
|
+
this.rests.set(key, value);
|
|
69
|
+
this.compose();
|
|
70
|
+
}
|
|
71
|
+
adopt(key, track, startedAt, onEnd) {
|
|
72
|
+
this.channels.get(key)?.timer?.();
|
|
73
|
+
const channel = { track, anchor: startedAt, offset: 0, paused: false, onEnd };
|
|
74
|
+
this.channels.set(key, channel);
|
|
75
|
+
this.schedule(key, channel);
|
|
76
|
+
this.compose();
|
|
77
|
+
return new MixHandle(this, key);
|
|
78
|
+
}
|
|
79
|
+
elapsed(key, now = getDriver().now()) {
|
|
80
|
+
const channel = this.channels.get(key);
|
|
81
|
+
if (!channel)
|
|
82
|
+
return 0;
|
|
83
|
+
return channel.paused ? channel.offset : channel.offset + now - channel.anchor;
|
|
84
|
+
}
|
|
85
|
+
control(key, position, paused) {
|
|
86
|
+
const channel = this.channels.get(key);
|
|
87
|
+
if (!channel)
|
|
88
|
+
return;
|
|
89
|
+
channel.timer?.();
|
|
90
|
+
channel.timer = undefined;
|
|
91
|
+
channel.offset = position;
|
|
92
|
+
channel.anchor = getDriver().now();
|
|
93
|
+
channel.paused = paused;
|
|
94
|
+
if (!paused)
|
|
95
|
+
this.schedule(key, channel);
|
|
96
|
+
this.compose();
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* A channel leaves: replaced, stopped or done. A stopped layer takes its contribution
|
|
100
|
+
* with it; anything else rests where it is.
|
|
101
|
+
*/
|
|
102
|
+
detach(key, stopped) {
|
|
103
|
+
const channel = this.channels.get(key);
|
|
104
|
+
if (!channel)
|
|
105
|
+
return;
|
|
106
|
+
const value = channel.track.valueAt(this.elapsed(key));
|
|
107
|
+
channel.timer?.();
|
|
108
|
+
this.channels.delete(key);
|
|
109
|
+
this.rests.set(key, stopped && key !== BASE ? identity(this.property) : value);
|
|
110
|
+
this.compose();
|
|
111
|
+
}
|
|
112
|
+
/** Everything stops: what is on screen becomes the base, and layers are cleared. */
|
|
113
|
+
freeze() {
|
|
114
|
+
const value = this.value();
|
|
115
|
+
for (const [key, channel] of [...this.channels]) {
|
|
116
|
+
channel.timer?.();
|
|
117
|
+
this.channels.delete(key);
|
|
118
|
+
channel.onEnd(false);
|
|
119
|
+
}
|
|
120
|
+
this.rests.clear();
|
|
121
|
+
this.rests.set(BASE, value);
|
|
122
|
+
this.compose();
|
|
123
|
+
}
|
|
124
|
+
/** The composed value on screen at `time`. */
|
|
125
|
+
value(time = getDriver().now()) {
|
|
126
|
+
const now = getDriver().now();
|
|
127
|
+
let result = this.part(BASE, time, now);
|
|
128
|
+
const keys = new Set([...this.rests.keys(), ...this.channels.keys()]);
|
|
129
|
+
for (const key of keys) {
|
|
130
|
+
if (key === BASE)
|
|
131
|
+
continue;
|
|
132
|
+
const part = this.part(key, time, now);
|
|
133
|
+
result = multiplies(this.property) ? result * part : result + part;
|
|
134
|
+
}
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
part(key, time, now) {
|
|
138
|
+
const channel = this.channels.get(key);
|
|
139
|
+
if (!channel)
|
|
140
|
+
return this.rest(key);
|
|
141
|
+
const elapsed = channel.paused
|
|
142
|
+
? channel.offset
|
|
143
|
+
: channel.offset + now - channel.anchor + (time - now);
|
|
144
|
+
return channel.track.valueAt(elapsed);
|
|
145
|
+
}
|
|
146
|
+
schedule(key, channel) {
|
|
147
|
+
const remaining = channel.track.end - this.elapsed(key);
|
|
148
|
+
if (!Number.isFinite(remaining))
|
|
149
|
+
return;
|
|
150
|
+
channel.timer = getDriver().after(Math.max(0, remaining), () => {
|
|
151
|
+
if (this.channels.get(key) !== channel)
|
|
152
|
+
return;
|
|
153
|
+
this.channels.delete(key);
|
|
154
|
+
this.rests.set(key, channel.track.valueAt(channel.track.end));
|
|
155
|
+
channel.onEnd(true);
|
|
156
|
+
this.compose();
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
/** Samples the composition from now and plays it as one native track. */
|
|
160
|
+
compose() {
|
|
161
|
+
const driver = getDriver();
|
|
162
|
+
const now = driver.now();
|
|
163
|
+
const instance = ++this.generation;
|
|
164
|
+
const previous = this.native;
|
|
165
|
+
this.native = undefined;
|
|
166
|
+
let finite = 0;
|
|
167
|
+
const periods = [];
|
|
168
|
+
for (const [key, channel] of this.channels) {
|
|
169
|
+
if (channel.paused)
|
|
170
|
+
continue;
|
|
171
|
+
const elapsed = this.elapsed(key, now);
|
|
172
|
+
const { track } = channel;
|
|
173
|
+
if (Number.isFinite(track.end))
|
|
174
|
+
finite = Math.max(finite, track.end - elapsed);
|
|
175
|
+
else if (elapsed < track.delay)
|
|
176
|
+
finite = Math.max(finite, track.delay - elapsed);
|
|
177
|
+
else
|
|
178
|
+
periods.push(Math.max(1, Math.round(track.duration * (track.reverse ? 2 : 1))));
|
|
179
|
+
}
|
|
180
|
+
if (previous !== undefined)
|
|
181
|
+
driver.stop(this.view, previous);
|
|
182
|
+
const loop = finite <= 0 && periods.length ? leastCommonMultiple(periods) : undefined;
|
|
183
|
+
if (finite <= 0 && !periods.length) {
|
|
184
|
+
writeValue(this.view, this.property, this.value(now));
|
|
185
|
+
driver.sync?.(this.view);
|
|
186
|
+
this.dissolve();
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const span = finite > 0 ? finite : (loop ?? WINDOW);
|
|
190
|
+
const steps = Math.max(1, Math.min(MAX_SAMPLES, Math.ceil((span / 1000) * SAMPLES_PER_SECOND)));
|
|
191
|
+
const times = Array.from({ length: steps + 1 }, (_, i) => i / steps);
|
|
192
|
+
const values = times.map((time) => this.value(now + time * span));
|
|
193
|
+
const endless = loop !== undefined;
|
|
194
|
+
const at = (elapsed) => this.value(now + (endless ? elapsed % span : Math.min(Math.max(elapsed, 0), span)));
|
|
195
|
+
const track = {
|
|
196
|
+
property: this.property,
|
|
197
|
+
delay: 0,
|
|
198
|
+
duration: span,
|
|
199
|
+
repeat: endless ? Infinity : 0,
|
|
200
|
+
reverse: false,
|
|
201
|
+
times,
|
|
202
|
+
values,
|
|
203
|
+
to: endless ? values[0] : values[steps],
|
|
204
|
+
end: endless ? Infinity : span,
|
|
205
|
+
arrival: endless ? Infinity : span,
|
|
206
|
+
valueAt: at,
|
|
207
|
+
velocityAt: (elapsed) => (at(elapsed + 0.5) - at(elapsed - 0.5)) * 1000,
|
|
208
|
+
};
|
|
209
|
+
writeValue(this.view, this.property, track.to);
|
|
210
|
+
this.native = driver.play(this.view, track, now, (finished = true) => {
|
|
211
|
+
if (instance !== this.generation || !finished)
|
|
212
|
+
return;
|
|
213
|
+
this.native = undefined;
|
|
214
|
+
this.compose();
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
dissolve() {
|
|
218
|
+
if (this.channels.size)
|
|
219
|
+
return;
|
|
220
|
+
for (const [key, value] of this.rests)
|
|
221
|
+
if (key !== BASE && value !== identity(this.property))
|
|
222
|
+
return;
|
|
223
|
+
const properties = mixes.get(this.view);
|
|
224
|
+
if (properties?.get(this.property) === this)
|
|
225
|
+
properties.delete(this.property);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
function leastCommonMultiple(periods) {
|
|
229
|
+
const gcd = (a, b) => (b ? gcd(b, a % b) : a);
|
|
230
|
+
let result = periods[0];
|
|
231
|
+
for (const period of periods.slice(1)) {
|
|
232
|
+
result = (result / gcd(result, period)) * period;
|
|
233
|
+
if (result > MAX_LOOP)
|
|
234
|
+
return undefined;
|
|
235
|
+
}
|
|
236
|
+
return result;
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=mixer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mixer.js","sourceRoot":"","sources":["../src/mixer.ts"],"names":[],"mappings":"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"}
|
package/dist/motion-scope.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { animate, decay } from './animate.js';
|
|
2
2
|
import { press } from './press.js';
|
|
3
3
|
import { drag } from './drag.js';
|
|
4
|
+
import { gradient } from './gradient.js';
|
|
4
5
|
import { animateLayout } from './layout.js';
|
|
5
6
|
import { sequence } from './sequence.js';
|
|
6
7
|
import { type MotionState, type MotionDefinitions, type MotionStates, type MotionStatesOptions } from './motion-states.js';
|
|
@@ -22,7 +23,9 @@ export interface MotionScope {
|
|
|
22
23
|
sequence: typeof sequence;
|
|
23
24
|
press: typeof press;
|
|
24
25
|
drag: typeof drag;
|
|
25
|
-
|
|
26
|
+
/** Removed with the scope; suspending it stops a gradient animation where it is. */
|
|
27
|
+
gradient: typeof gradient;
|
|
28
|
+
states<T extends Record<string, Target | null>, const S extends Record<string, MotionState<keyof T>>>(targets: T, definitions: MotionDefinitions<T, S>, options?: Omit<MotionStatesOptions<Extract<keyof T, string>>, 'scope'>): MotionStates<Extract<keyof S, string>, Extract<keyof T, string>>;
|
|
26
29
|
/** Adopt an existing handle. Completed animations are released automatically. */
|
|
27
30
|
add<T extends MotionResource>(resource: T): T;
|
|
28
31
|
/** Attach a subscription, detach on suspension, and recreate on resume. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"motion-scope.d.ts","sourceRoot":"","sources":["../src/motion-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAA;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,qEAAqE;AACrE,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG;IAAE,IAAI,IAAI,IAAI,CAAA;CAAE,GAAG;IAAE,OAAO,IAAI,IAAI,CAAA;CAAE,CAAA;AAclF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,OAAO,aAAa,CAAA;IACnC,OAAO,EAAE,OAAO,OAAO,CAAA;IACvB,KAAK,EAAE,OAAO,KAAK,CAAA;IACnB,QAAQ,EAAE,OAAO,QAAQ,CAAA;IACzB,KAAK,EAAE,OAAO,KAAK,CAAA;IACnB,IAAI,EAAE,OAAO,IAAI,CAAA;IACjB,MAAM,CACJ,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"motion-scope.d.ts","sourceRoot":"","sources":["../src/motion-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAA;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,qEAAqE;AACrE,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG;IAAE,IAAI,IAAI,IAAI,CAAA;CAAE,GAAG;IAAE,OAAO,IAAI,IAAI,CAAA;CAAE,CAAA;AAclF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,OAAO,aAAa,CAAA;IACnC,OAAO,EAAE,OAAO,OAAO,CAAA;IACvB,KAAK,EAAE,OAAO,KAAK,CAAA;IACnB,QAAQ,EAAE,OAAO,QAAQ,CAAA;IACzB,KAAK,EAAE,OAAO,KAAK,CAAA;IACnB,IAAI,EAAE,OAAO,IAAI,CAAA;IACjB,oFAAoF;IACpF,QAAQ,EAAE,OAAO,QAAQ,CAAA;IACzB,MAAM,CACJ,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,EACvC,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAEpD,OAAO,EAAE,CAAC,EACV,WAAW,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,EACpC,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,GACrE,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IACnE,iFAAiF;IACjF,GAAG,CAAC,CAAC,SAAS,cAAc,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAA;IAC7C,2EAA2E;IAC3E,GAAG,CAAC,KAAK,EAAE,MAAM,cAAc,GAAG,MAAM,IAAI,CAAA;IAC5C,8EAA8E;IAC9E,OAAO,IAAI,IAAI,CAAA;IACf,MAAM,IAAI,IAAI,CAAA;IACd,sFAAsF;IACtF,KAAK,IAAI,IAAI,CAAA;IACb,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,yFAAyF;AACzF,wBAAgB,WAAW,IAAI,WAAW,CA6NzC"}
|
package/dist/motion-scope.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { animate, decay } from './animate.js';
|
|
2
2
|
import { press } from './press.js';
|
|
3
3
|
import { drag } from './drag.js';
|
|
4
|
+
import { gradient } from './gradient.js';
|
|
4
5
|
import { animateLayout } from './layout.js';
|
|
5
6
|
import { sequence } from './sequence.js';
|
|
6
7
|
import { motionStates, } from './motion-states.js';
|
|
@@ -136,9 +137,7 @@ export function motionScope() {
|
|
|
136
137
|
? animateLayout(container, changeOrOptions, options)
|
|
137
138
|
: animateLayout(container, changeOrOptions));
|
|
138
139
|
},
|
|
139
|
-
animate(...args)
|
|
140
|
-
return startOwned(() => animate(...args));
|
|
141
|
-
},
|
|
140
|
+
animate: ((...args) => startOwned(() => animate(...args))),
|
|
142
141
|
decay(...args) {
|
|
143
142
|
return startOwned(() => decay(...args));
|
|
144
143
|
},
|
|
@@ -151,6 +150,12 @@ export function motionScope() {
|
|
|
151
150
|
drag(...args) {
|
|
152
151
|
return startOwned(() => drag(...args));
|
|
153
152
|
},
|
|
153
|
+
gradient(target, options) {
|
|
154
|
+
assertActive();
|
|
155
|
+
const made = gradient(target, options);
|
|
156
|
+
scope.add({ pause: () => made.stop(), play() { }, dispose: () => made.remove() });
|
|
157
|
+
return made;
|
|
158
|
+
},
|
|
154
159
|
states(targets, definitions, options) {
|
|
155
160
|
return startOwned(() => motionStates(targets, definitions, options));
|
|
156
161
|
},
|
package/dist/motion-scope.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"motion-scope.js","sourceRoot":"","sources":["../src/motion-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAA;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EACL,YAAY,GAKb,MAAM,oBAAoB,CAAA;AAgB3B,MAAM,MAAM,GAAG,IAAI,OAAO,EAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"motion-scope.js","sourceRoot":"","sources":["../src/motion-scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAA;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EACL,YAAY,GAKb,MAAM,oBAAoB,CAAA;AAgB3B,MAAM,MAAM,GAAG,IAAI,OAAO,EAAkB,CAAA;AAmC5C,yFAAyF;AACzF,MAAM,UAAU,WAAW;IACzB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAS,CAAA;IAChC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAA;IAChD,MAAM,QAAQ,GAAG,EAAE,CAAA;IACnB,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;QAC1D,IAAI,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;IAC7D,CAAC,CAAA;IACD,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,WAAW,EAAE,CAAA;QACb,IAAI,SAAS;YACX,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;IACjF,CAAC,CAAA;IACD,MAAM,QAAQ,GAAG,CAAC,QAAwB,EAAE,EAAE;QAC5C,IACE,OAAO,QAAQ,KAAK,UAAU;YAC9B,CAAC,CAAC,QAAQ;gBACR,CAAC,OAAQ,QAAkC,CAAC,OAAO,KAAK,UAAU;oBAChE,OAAQ,QAA+B,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YAEjE,MAAM,IAAI,SAAS,CACjB,0EAA0E,CAC3E,CAAA;QACH,MAAM,QAAQ,GAAI,QAAuB,CAAC,QAAQ,CAAA;QAClD,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU;YACjD,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAA;QAC7D,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,QAAQ;YAC3D,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;IACxE,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,CAAC,KAAY,EAAE,EAAE;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;QAC/B,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACxB,KAAK,CAAC,QAAQ,GAAG,SAAS,CAAA;QAC5B,CAAC;QACD,KAAK,CAAC,MAAM,GAAG,KAAK,CAAA;IACtB,CAAC,CAAA;IACD,MAAM,eAAe,GAAG,CAAC,QAAwB,EAAE,EAAE;QACnD,IAAI,OAAO,QAAQ,KAAK,UAAU;YAAE,QAAQ,EAAE,CAAA;aACzC,IAAI,OAAQ,QAAkC,CAAC,OAAO,KAAK,UAAU;YACvE,QAAgC,CAAC,OAAO,EAAE,CAAA;;YACvC,QAA6B,CAAC,IAAI,EAAE,CAAA;IAC5C,CAAC,CAAA;IACD,MAAM,OAAO,GAAG,CAAC,KAAY,EAAE,EAAE;QAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;QAC/B,MAAM,CAAC,KAAK,CAAC,CAAA;QACb,IAAI,CAAC,QAAQ;YAAE,OAAM;QACrB,eAAe,CAAC,QAAQ,CAAC,CAAA;IAC3B,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,CAAC,KAAY,EAAE,EAAE;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACrB,OAAO,CAAC,KAAK,CAAC,CAAA;IAChB,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,CAAC,KAAY,EAAE,QAAwB,EAAE,EAAE;QACxD,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAClB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;QAC7E,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACzB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;QAC5B,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;QAC9B,MAAM,QAAQ,GAAI,QAAuB,CAAC,QAAQ,CAAA;QAClD,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ;oBAAE,OAAM;gBACvC,MAAM,CAAC,KAAK,CAAC,CAAA;gBACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACvB,CAAC,CAAA;YACD,KAAK,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACtC,CAAC;IACH,CAAC,CAAA;IACD,MAAM,iBAAiB,GAAG,CAAC,KAAY,EAAE,EAAE;QACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAM,EAAE,CAAA;QAC/B,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAClB,0EAA0E;QAC1E,IAAI,QAAQ,IAAI,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;YACpD,OAAM;QACR,CAAC;QACD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACzB,CAAC,CAAA;IACD,2DAA2D;IAC3D,MAAM,KAAK,GAAG,CAAC,MAA8B,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAc,EAAE,CAAA;QAC5B,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAQ;YACjC,IAAI,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,CAAA;YACf,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACpB,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM;YACf,MAAM,IAAI,cAAc,CAAC,MAAM,EAAE,wCAAwC,CAAC,CAAA;IAC9E,CAAC,CAAA;IACD,MAAM,UAAU,GAAG,CAA2B,OAAgB,EAAK,EAAE;QACnE,YAAY,EAAE,CAAA;QACd,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAA;QAC1B,IAAI,CAAC;YACH,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;YACpD,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC,CAAA;IACD,MAAM,KAAK,GAAgB;QACzB,IAAI,QAAQ;YACV,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,IAAI,SAAS;YACX,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,IAAI,IAAI;YACN,OAAO,OAAO,CAAC,IAAI,CAAA;QACrB,CAAC;QACD,aAAa,CACX,SAAiB,EACjB,eAA2D,EAC3D,OAAoC;YAEpC,OAAO,UAAU,CAAC,GAAG,EAAE,CACrB,OAAO,eAAe,KAAK,UAAU;gBACnC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC;gBACpD,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,eAAe,CAAC,CAC9C,CAAA;QACH,CAAC;QACD,OAAO,EAAE,CAAC,CAAC,GAAG,IAAgC,EAAE,EAAE,CAChD,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAmB;QACvD,KAAK,CAAC,GAAG,IAAI;YACX,OAAO,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QACzC,CAAC;QACD,QAAQ,CAAC,GAAG,IAAI;YACd,OAAO,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QAC5C,CAAC;QACD,KAAK,CAAC,GAAG,IAAI;YACX,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QACxC,CAAC;QACD,IAAI,CAAC,GAAG,IAAI;YACV,OAAO,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QACxC,CAAC;QACD,QAAQ,CAAC,MAAM,EAAE,OAAO;YACtB,YAAY,EAAE,CAAA;YACd,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YACtC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,KAAI,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;YAChF,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO;YAClC,OAAO,UAAU,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;QACtE,CAAC;QACD,GAAG,CAAC,QAAQ;YACV,YAAY,EAAE,CAAA;YACd,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAClB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;gBAAE,OAAO,QAAQ,CAAA;YAC1C,MAAM,KAAK,GAAU,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;YACtC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAClB,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,GAAG,CAAC,KAAK;YACP,WAAW,EAAE,CAAA;YACb,IAAI,OAAO,KAAK,KAAK,UAAU;gBAC7B,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAA;YAC7D,MAAM,KAAK,GAAU,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;YAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAClB,IAAI,CAAC;gBACH,IAAI,CAAC,SAAS;oBAAE,iBAAiB,CAAC,KAAK,CAAC,CAAA;YAC1C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,CAAA;gBACb,MAAM,KAAK,CAAA;YACb,CAAC;YACD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QACD,OAAO;YACL,IAAI,QAAQ,IAAI,SAAS;gBAAE,OAAM;YACjC,SAAS,GAAG,IAAI,CAAA;YAChB,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACd,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChB,OAAO,CAAC,KAAK,CAAC,CAAA;oBACd,OAAM;gBACR,CAAC;gBACD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAkC,CAAA;gBACzD,IACE,OAAO,QAAQ,EAAE,KAAK,KAAK,UAAU;oBACrC,OAAO,QAAQ,CAAC,IAAI,KAAK,UAAU,EACnC,CAAC;oBACD,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAA;oBACvC,IAAI,KAAK,CAAC,MAAM;wBAAE,QAAQ,CAAC,KAAK,EAAE,CAAA;gBACpC,CAAC;;oBAAM,MAAM,CAAC,KAAK,CAAC,CAAA;YACtB,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,MAAM;YACJ,IAAI,QAAQ,IAAI,CAAC,SAAS;gBAAE,OAAM;YAClC,SAAS,GAAG,KAAK,CAAA;YACjB,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACd,IAAI,QAAQ,IAAI,SAAS;oBAAE,OAAM;gBACjC,IAAI,KAAK,CAAC,KAAK;oBAAE,iBAAiB,CAAC,KAAK,CAAC,CAAA;qBACpC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBACtB,KAAK,CAAC,MAAM,GAAG,KAAK,CACnB;oBAAC,KAAK,CAAC,QAAuB,CAAC,IAAI,EAAE,EAAE,CAAA;gBAC1C,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,KAAK;YACH,IAAI,QAAQ,IAAI,QAAQ;gBAAE,OAAM;YAChC,QAAQ,GAAG,IAAI,CAAA;YACf,IAAI,CAAC;gBACH,KAAK,CAAC,MAAM,CAAC,CAAA;YACf,CAAC;oBAAS,CAAC;gBACT,QAAQ,GAAG,KAAK,CAAA;YAClB,CAAC;QACH,CAAC;QACD,OAAO;YACL,IAAI,QAAQ;gBAAE,OAAM;YACpB,QAAQ,GAAG,IAAI,CAAA;YACf,KAAK,CAAC,MAAM,CAAC,CAAA;QACf,CAAC;KACF,CAAA;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
|
package/dist/motion-states.d.ts
CHANGED
|
@@ -14,23 +14,35 @@ export type MotionDefinitions<T, S> = S & {
|
|
|
14
14
|
[K in keyof S[N]]: Record<Exclude<keyof S[N][K], KeyframeProperty>, never>;
|
|
15
15
|
};
|
|
16
16
|
};
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
type StateCurve = SpringName | Omit<Spring, 'repeat' | 'repeatType'> | Omit<Tween, 'repeat' | 'repeatType'>;
|
|
18
|
+
/** One transition for every target, or a main one with some targets set apart by name. */
|
|
19
|
+
export type StateTransition<T extends string = string> = StateCurve | (Exclude<StateCurve, SpringName> & (string extends T ? unknown : {
|
|
20
|
+
[K in T]?: StateCurve;
|
|
21
|
+
}));
|
|
22
|
+
export interface MotionStatesOptions<T extends string = string> {
|
|
23
|
+
transition?: StateTransition<T>;
|
|
20
24
|
scope?: MotionScope;
|
|
21
25
|
}
|
|
22
|
-
export interface MotionStates<S extends string = string> {
|
|
26
|
+
export interface MotionStates<S extends string = string, T extends string = string> {
|
|
23
27
|
/** Latest requested state, not a claim that playback has finished. */
|
|
24
28
|
readonly current: S | undefined;
|
|
25
29
|
readonly settled: S | undefined;
|
|
26
30
|
readonly disposed: boolean;
|
|
27
31
|
readonly paused: boolean;
|
|
28
|
-
to(state: S, transition?: StateTransition): Animation;
|
|
32
|
+
to(state: S, transition?: StateTransition<T>): Animation;
|
|
33
|
+
/**
|
|
34
|
+
* Point a target at a new view, or at none with `null`. The new view takes the current
|
|
35
|
+
* state at once, or joins the transition in progress from where it is.
|
|
36
|
+
*/
|
|
37
|
+
attach(target: T, view: Target | null): void;
|
|
38
|
+
/** A stable callback for a template ref: attaches the element and detaches it on unmount. */
|
|
39
|
+
ref(target: T): (view: Target | null) => void;
|
|
29
40
|
pause(): void;
|
|
30
41
|
play(): void;
|
|
31
42
|
stop(): void;
|
|
32
43
|
dispose(): void;
|
|
33
44
|
}
|
|
34
45
|
/** Coordinated named targets. Omitted properties freeze when leaving their previous state. */
|
|
35
|
-
export declare function motionStates<T extends Record<string, Target>, const S extends Record<string, MotionState<keyof T>>>(targets: T, definitions: MotionDefinitions<T, S>, options?: MotionStatesOptions): MotionStates<Extract<keyof S, string>>;
|
|
46
|
+
export declare function motionStates<T extends Record<string, Target | null>, const S extends Record<string, MotionState<keyof T>>>(targets: T, definitions: MotionDefinitions<T, S>, options?: MotionStatesOptions<Extract<keyof T, string>>): MotionStates<Extract<keyof S, string>, Extract<keyof T, string>>;
|
|
47
|
+
export {};
|
|
36
48
|
//# sourceMappingURL=motion-states.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"motion-states.d.ts","sourceRoot":"","sources":["../src/motion-states.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAE7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"motion-states.d.ts","sourceRoot":"","sources":["../src/motion-states.ts"],"names":[],"mappings":"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"}
|
package/dist/motion-states.js
CHANGED
|
@@ -1,21 +1,29 @@
|
|
|
1
|
-
import { prepareAnimation, toView } from './animate.js';
|
|
1
|
+
import { endingValues, prepareAnimation, set, toView } from './animate.js';
|
|
2
2
|
import { isColorProperty } from './color.js';
|
|
3
3
|
import { isProperty } from './properties.js';
|
|
4
|
+
import { mergeTransitions, springs } from './transition.js';
|
|
4
5
|
/** Coordinated named targets. Omitted properties freeze when leaving their previous state. */
|
|
5
6
|
export function motionStates(targets, definitions, options = {}) {
|
|
6
|
-
const views = new Map(Object.entries(targets).map(([name, target]) => [
|
|
7
|
-
|
|
7
|
+
const views = new Map(Object.entries(targets).map(([name, target]) => [
|
|
8
|
+
name,
|
|
9
|
+
target === null ? null : toView(target),
|
|
10
|
+
]));
|
|
11
|
+
const assigned = [...views.values()].filter(Boolean);
|
|
12
|
+
if (new Set(assigned).size !== assigned.length)
|
|
8
13
|
throw new TypeError('Motion state targets must refer to distinct views.');
|
|
14
|
+
for (const name of views.keys())
|
|
15
|
+
if (curveKeys.has(name))
|
|
16
|
+
throw new TypeError(`A motion target can't be named "${name}", like a transition option.`);
|
|
9
17
|
const states = new Map();
|
|
10
|
-
const defaults = normalize(options.transition);
|
|
18
|
+
const defaults = normalize(options.transition, views);
|
|
11
19
|
for (const [name, state] of Object.entries(definitions)) {
|
|
12
20
|
if (!state || typeof state !== 'object' || Array.isArray(state))
|
|
13
21
|
throw new TypeError(`Invalid motion state "${name}".`);
|
|
14
22
|
const rows = [];
|
|
15
23
|
for (const [target, values] of Object.entries(state)) {
|
|
16
|
-
|
|
17
|
-
if (!view)
|
|
24
|
+
if (!views.has(target))
|
|
18
25
|
throw new TypeError(`Unknown motion target "${target}".`);
|
|
26
|
+
const view = views.get(target);
|
|
19
27
|
if (!values || typeof values !== 'object' || Array.isArray(values))
|
|
20
28
|
throw new TypeError(`Invalid motion values for "${target}".`);
|
|
21
29
|
const frames = {};
|
|
@@ -32,8 +40,11 @@ export function motionStates(targets, definitions, options = {}) {
|
|
|
32
40
|
Object.assign(frames, { [property]: value });
|
|
33
41
|
}
|
|
34
42
|
// Validate every definition up front without claiming any native property.
|
|
35
|
-
|
|
36
|
-
|
|
43
|
+
if (view)
|
|
44
|
+
prepareAnimation(view, frames, timingFor(defaults, target));
|
|
45
|
+
else
|
|
46
|
+
endingValues(frames, timingFor(defaults, target));
|
|
47
|
+
rows.push([target, frames]);
|
|
37
48
|
}
|
|
38
49
|
states.set(name, rows);
|
|
39
50
|
}
|
|
@@ -42,6 +53,10 @@ export function motionStates(targets, definitions, options = {}) {
|
|
|
42
53
|
let disposed = false;
|
|
43
54
|
let paused = false;
|
|
44
55
|
let active;
|
|
56
|
+
const refs = new Map();
|
|
57
|
+
const framesFor = (state, target) => state === undefined
|
|
58
|
+
? undefined
|
|
59
|
+
: states.get(state).find(([slot]) => slot === target)?.[1];
|
|
45
60
|
const controller = {
|
|
46
61
|
get current() {
|
|
47
62
|
return current;
|
|
@@ -61,8 +76,11 @@ export function motionStates(targets, definitions, options = {}) {
|
|
|
61
76
|
const rows = states.get(name);
|
|
62
77
|
if (!rows)
|
|
63
78
|
throw new TypeError(`Unknown motion state "${name}".`);
|
|
64
|
-
const timing = transition
|
|
65
|
-
const prepared = rows.
|
|
79
|
+
const timing = normalize(transition, views, defaults);
|
|
80
|
+
const prepared = rows.flatMap(([target, frames]) => {
|
|
81
|
+
const view = views.get(target);
|
|
82
|
+
return view ? [prepareAnimation(view, frames, timingFor(timing, target))] : [];
|
|
83
|
+
});
|
|
66
84
|
const previous = active;
|
|
67
85
|
const children = [];
|
|
68
86
|
// Start replacements first: the engine transfers visible position AND velocity.
|
|
@@ -98,12 +116,53 @@ export function motionStates(targets, definitions, options = {}) {
|
|
|
98
116
|
},
|
|
99
117
|
then: (resolve, reject) => finished.then(resolve, reject),
|
|
100
118
|
};
|
|
101
|
-
active = { handle, children };
|
|
119
|
+
active = { handle, children, timing };
|
|
102
120
|
current = name;
|
|
103
121
|
// Also cancels old, omitted properties, without touching the new owners.
|
|
104
122
|
previous?.handle.stop();
|
|
105
123
|
return handle;
|
|
106
124
|
},
|
|
125
|
+
attach(target, next) {
|
|
126
|
+
if (disposed)
|
|
127
|
+
throw new Error('Motion states controller is disposed.');
|
|
128
|
+
if (!views.has(target))
|
|
129
|
+
throw new TypeError(`Unknown motion target "${target}".`);
|
|
130
|
+
const view = next === null ? null : toView(next);
|
|
131
|
+
if (views.get(target) === view)
|
|
132
|
+
return;
|
|
133
|
+
if (view)
|
|
134
|
+
for (const [other, assignedView] of views)
|
|
135
|
+
if (other !== target && assignedView === view)
|
|
136
|
+
throw new TypeError('Motion state targets must refer to distinct views.');
|
|
137
|
+
if (view)
|
|
138
|
+
for (const [, rows] of states)
|
|
139
|
+
for (const [slot, frames] of rows)
|
|
140
|
+
if (slot === target)
|
|
141
|
+
prepareAnimation(view, frames, timingFor(defaults, target));
|
|
142
|
+
views.set(target, view);
|
|
143
|
+
const frames = view ? framesFor(current, target) : undefined;
|
|
144
|
+
if (!view || !frames)
|
|
145
|
+
return;
|
|
146
|
+
if (active) {
|
|
147
|
+
const child = prepareAnimation(view, frames, timingFor(active.timing, target))();
|
|
148
|
+
active.children.push(child);
|
|
149
|
+
if (paused)
|
|
150
|
+
child.pause();
|
|
151
|
+
}
|
|
152
|
+
else
|
|
153
|
+
set(view, frames);
|
|
154
|
+
},
|
|
155
|
+
ref(target) {
|
|
156
|
+
let callback = refs.get(target);
|
|
157
|
+
if (!callback) {
|
|
158
|
+
callback = (view) => {
|
|
159
|
+
if (!disposed)
|
|
160
|
+
controller.attach(target, view);
|
|
161
|
+
};
|
|
162
|
+
refs.set(target, callback);
|
|
163
|
+
}
|
|
164
|
+
return callback;
|
|
165
|
+
},
|
|
107
166
|
pause() {
|
|
108
167
|
if (disposed || paused)
|
|
109
168
|
return;
|
|
@@ -129,9 +188,50 @@ export function motionStates(targets, definitions, options = {}) {
|
|
|
129
188
|
};
|
|
130
189
|
return options.scope ? options.scope.add(controller) : controller;
|
|
131
190
|
}
|
|
132
|
-
|
|
191
|
+
const curveKeys = new Set([
|
|
192
|
+
'type',
|
|
193
|
+
'delay',
|
|
194
|
+
'duration',
|
|
195
|
+
'ease',
|
|
196
|
+
'times',
|
|
197
|
+
'stiffness',
|
|
198
|
+
'damping',
|
|
199
|
+
'mass',
|
|
200
|
+
'bounce',
|
|
201
|
+
'velocity',
|
|
202
|
+
]);
|
|
203
|
+
/** The transition one target plays: its own merged over the main one, or the main one. */
|
|
204
|
+
function timingFor(timing, target) {
|
|
205
|
+
const own = timing.targets.get(target);
|
|
206
|
+
if (own === undefined)
|
|
207
|
+
return timing.main;
|
|
208
|
+
const main = typeof timing.main === 'string' ? springs[timing.main] : timing.main;
|
|
209
|
+
return mergeTransitions(main, typeof own === 'string' ? springs[own] : own);
|
|
210
|
+
}
|
|
211
|
+
const snappy = { main: 'snappy', targets: new Map() };
|
|
212
|
+
/** A transition that only names targets keeps the fallback for everything else. */
|
|
213
|
+
function normalize(transition, targets, fallback = snappy) {
|
|
133
214
|
if (transition === undefined)
|
|
134
|
-
return
|
|
215
|
+
return fallback;
|
|
216
|
+
if (typeof transition === 'string')
|
|
217
|
+
return { main: curve(transition), targets: new Map() };
|
|
218
|
+
if (!transition || typeof transition !== 'object')
|
|
219
|
+
throw new TypeError('Invalid state transition.');
|
|
220
|
+
const main = {};
|
|
221
|
+
const own = new Map();
|
|
222
|
+
for (const [key, value] of Object.entries(transition)) {
|
|
223
|
+
if (targets.has(key)) {
|
|
224
|
+
if (value !== undefined)
|
|
225
|
+
own.set(key, curve(value));
|
|
226
|
+
}
|
|
227
|
+
else
|
|
228
|
+
main[key] = value;
|
|
229
|
+
}
|
|
230
|
+
if (own.size && !Object.keys(main).length)
|
|
231
|
+
return { main: fallback.main, targets: new Map([...fallback.targets, ...own]) };
|
|
232
|
+
return { main: curve(main), targets: own };
|
|
233
|
+
}
|
|
234
|
+
function curve(transition) {
|
|
135
235
|
if (typeof transition === 'string') {
|
|
136
236
|
if (!['smooth', 'snappy', 'bouncy'].includes(transition))
|
|
137
237
|
throw new TypeError('Unknown state spring.');
|
|
@@ -139,20 +239,8 @@ function normalize(transition) {
|
|
|
139
239
|
}
|
|
140
240
|
if (!transition || typeof transition !== 'object')
|
|
141
241
|
throw new TypeError('Invalid state transition.');
|
|
142
|
-
const allowed = new Set([
|
|
143
|
-
'type',
|
|
144
|
-
'delay',
|
|
145
|
-
'duration',
|
|
146
|
-
'ease',
|
|
147
|
-
'times',
|
|
148
|
-
'stiffness',
|
|
149
|
-
'damping',
|
|
150
|
-
'mass',
|
|
151
|
-
'bounce',
|
|
152
|
-
'velocity',
|
|
153
|
-
]);
|
|
154
242
|
for (const key of Object.keys(transition))
|
|
155
|
-
if (!
|
|
243
|
+
if (!curveKeys.has(key))
|
|
156
244
|
throw new TypeError(`State transitions do not support "${key}".`);
|
|
157
245
|
if (transition.duration !== undefined &&
|
|
158
246
|
(!Number.isFinite(transition.duration) || transition.duration < 0))
|