@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.
Files changed (92) hide show
  1. package/README.md +55 -6
  2. package/dist/animate.d.ts +14 -4
  3. package/dist/animate.d.ts.map +1 -1
  4. package/dist/animate.js +50 -34
  5. package/dist/animate.js.map +1 -1
  6. package/dist/drag.d.ts +17 -3
  7. package/dist/drag.d.ts.map +1 -1
  8. package/dist/drag.js +34 -11
  9. package/dist/drag.js.map +1 -1
  10. package/dist/driver/android-gradient.d.ts +5 -0
  11. package/dist/driver/android-gradient.d.ts.map +1 -0
  12. package/dist/driver/android-gradient.js +89 -0
  13. package/dist/driver/android-gradient.js.map +1 -0
  14. package/dist/driver/ios-gradient.d.ts +5 -0
  15. package/dist/driver/ios-gradient.d.ts.map +1 -0
  16. package/dist/driver/ios-gradient.js +109 -0
  17. package/dist/driver/ios-gradient.js.map +1 -0
  18. package/dist/easing.d.ts +1 -1
  19. package/dist/easing.d.ts.map +1 -1
  20. package/dist/easing.js +11 -0
  21. package/dist/easing.js.map +1 -1
  22. package/dist/engine.d.ts +18 -1
  23. package/dist/engine.d.ts.map +1 -1
  24. package/dist/engine.js +143 -36
  25. package/dist/engine.js.map +1 -1
  26. package/dist/gradient.d.ts +90 -0
  27. package/dist/gradient.d.ts.map +1 -0
  28. package/dist/gradient.js +253 -0
  29. package/dist/gradient.js.map +1 -0
  30. package/dist/index.d.ts +7 -3
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +3 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/keyboard.d.ts.map +1 -1
  35. package/dist/keyboard.js +63 -10
  36. package/dist/keyboard.js.map +1 -1
  37. package/dist/mixer.d.ts +49 -0
  38. package/dist/mixer.d.ts.map +1 -0
  39. package/dist/mixer.js +238 -0
  40. package/dist/mixer.js.map +1 -0
  41. package/dist/motion-scope.d.ts +4 -1
  42. package/dist/motion-scope.d.ts.map +1 -1
  43. package/dist/motion-scope.js +8 -3
  44. package/dist/motion-scope.js.map +1 -1
  45. package/dist/motion-states.d.ts +18 -6
  46. package/dist/motion-states.d.ts.map +1 -1
  47. package/dist/motion-states.js +114 -26
  48. package/dist/motion-states.js.map +1 -1
  49. package/dist/motion-value.d.ts +115 -0
  50. package/dist/motion-value.d.ts.map +1 -0
  51. package/dist/motion-value.js +437 -0
  52. package/dist/motion-value.js.map +1 -0
  53. package/dist/path.d.ts.map +1 -1
  54. package/dist/path.js +2 -2
  55. package/dist/path.js.map +1 -1
  56. package/dist/track.d.ts.map +1 -1
  57. package/dist/track.js +31 -12
  58. package/dist/track.js.map +1 -1
  59. package/dist/transition.d.ts +30 -4
  60. package/dist/transition.d.ts.map +1 -1
  61. package/dist/transition.js +63 -7
  62. package/dist/transition.js.map +1 -1
  63. package/dist/types.d.ts +5 -0
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/vue/index.d.ts +28 -2
  66. package/dist/vue/index.d.ts.map +1 -1
  67. package/dist/vue/index.js +78 -2
  68. package/dist/vue/index.js.map +1 -1
  69. package/package.json +1 -1
  70. package/platforms/android/java/org/rafaelaugusto/jolt/GradientLayer.java +195 -0
  71. package/platforms/android/java/org/rafaelaugusto/jolt/KeyboardFrame.java +53 -0
  72. package/platforms/android/java/org/rafaelaugusto/jolt/KeyboardFrameFollower.java +57 -0
  73. package/platforms/android/proguard-rules.pro +2 -0
  74. package/src/android-plugin.d.ts +56 -0
  75. package/src/animate.ts +99 -16
  76. package/src/drag.ts +67 -21
  77. package/src/driver/android-gradient.ts +109 -0
  78. package/src/driver/ios-gradient.ts +114 -0
  79. package/src/easing.ts +14 -0
  80. package/src/engine.ts +158 -53
  81. package/src/gradient.ts +378 -0
  82. package/src/index.ts +34 -3
  83. package/src/keyboard.ts +83 -18
  84. package/src/mixer.ts +264 -0
  85. package/src/motion-scope.ts +14 -6
  86. package/src/motion-states.ts +145 -41
  87. package/src/motion-value.ts +563 -0
  88. package/src/path.ts +2 -1
  89. package/src/track.ts +37 -12
  90. package/src/transition.ts +99 -10
  91. package/src/types.ts +5 -0
  92. 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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"}
@@ -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
- states<T extends Record<string, Target>, const S extends Record<string, MotionState<keyof T>>>(targets: T, definitions: MotionDefinitions<T, S>, options?: Omit<MotionStatesOptions, 'scope'>): MotionStates<Extract<keyof S, string>>;
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,EAChC,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,EAAE,OAAO,CAAC,GAC3C,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IACzC,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,CAwNzC"}
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"}
@@ -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
  },
@@ -1 +1 @@
1
- {"version":3,"file":"motion-scope.js","sourceRoot":"","sources":["../src/motion-scope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"motion-scope.js","sourceRoot":"","sources":["../src/motion-scope.ts"],"names":[],"mappings":"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"}
@@ -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
- export type StateTransition = SpringName | Omit<Spring, 'repeat' | 'repeatType'> | Omit<Tween, 'repeat' | 'repeatType'>;
18
- export interface MotionStatesOptions {
19
- transition?: StateTransition;
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,EAAE,MAAM,YAAY,CAAA;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD,2FAA2F;AAC3F,MAAM,MAAM,YAAY,GAAG;KACxB,CAAC,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,GAAG,iBAAiB,GAAG,aAAa,GAC3E,UAAU,GACV,MAAM;CACX,CAAA;AACD,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,WAAW,GAAG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAA;AAC1F,uEAAuE;AACvE,MAAM,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;KACvC,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG;SAC3D,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,EAAE,KAAK,CAAC;KAC3E;CACF,CAAA;AACD,MAAM,MAAM,eAAe,GACvB,UAAU,GACV,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,YAAY,CAAC,GACrC,IAAI,CAAC,KAAK,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAA;AACxC,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,eAAe,CAAA;IAC5B,KAAK,CAAC,EAAE,WAAW,CAAA;CACpB;AACD,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACrD,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,CAAA;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,SAAS,CAAA;IACrD,KAAK,IAAI,IAAI,CAAA;IACb,IAAI,IAAI,IAAI,CAAA;IACZ,IAAI,IAAI,IAAI,CAAA;IACZ,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,8FAA8F;AAC9F,wBAAgB,YAAY,CAC1B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,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,GAAE,mBAAwB,GAChC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CA8HxC"}
1
+ {"version":3,"file":"motion-states.d.ts","sourceRoot":"","sources":["../src/motion-states.ts"],"names":[],"mappings":"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"}
@@ -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]) => [name, toView(target)]));
7
- if (new Set(views.values()).size !== views.size)
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
- const view = views.get(target);
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
- prepareAnimation(view, frames, defaults);
36
- rows.push([view, frames]);
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 === undefined ? defaults : normalize(transition);
65
- const prepared = rows.map(([view, frames]) => prepareAnimation(view, frames, timing));
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
- function normalize(transition) {
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 'snappy';
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 (!allowed.has(key))
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))