@rafaelaugusto/jolt 0.1.0-beta.2 → 0.1.0-beta.3
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 +60 -6
- package/dist/animate.d.ts +3 -1
- package/dist/animate.d.ts.map +1 -1
- package/dist/animate.js +65 -1
- package/dist/animate.js.map +1 -1
- package/dist/decay.d.ts +11 -0
- package/dist/decay.d.ts.map +1 -0
- package/dist/decay.js +22 -0
- package/dist/decay.js.map +1 -0
- package/dist/driver/android.d.ts +1 -1
- package/dist/driver/android.d.ts.map +1 -1
- package/dist/driver/android.js +95 -5
- package/dist/driver/android.js.map +1 -1
- package/dist/driver/index.d.ts +3 -1
- package/dist/driver/index.d.ts.map +1 -1
- package/dist/driver/index.js.map +1 -1
- package/dist/engine.d.ts +1 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +6 -3
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts +19 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +172 -0
- package/dist/loader.js.map +1 -0
- package/dist/properties.d.ts +1 -1
- package/dist/properties.d.ts.map +1 -1
- package/dist/properties.js +1 -1
- package/dist/properties.js.map +1 -1
- package/dist/reveal.d.ts +25 -0
- package/dist/reveal.d.ts.map +1 -0
- package/dist/reveal.js +293 -0
- package/dist/reveal.js.map +1 -0
- package/dist/text-layout.d.ts +22 -0
- package/dist/text-layout.d.ts.map +1 -0
- package/dist/text-layout.js +179 -0
- package/dist/text-layout.js.map +1 -0
- package/dist/text.d.ts +17 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +264 -0
- package/dist/text.js.map +1 -0
- package/dist/track.d.ts.map +1 -1
- package/dist/track.js +25 -3
- package/dist/track.js.map +1 -1
- package/dist/transition.d.ts +5 -0
- package/dist/transition.d.ts.map +1 -1
- package/dist/transition.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/animate.ts +75 -1
- package/src/decay.ts +45 -0
- package/src/driver/android.ts +112 -6
- package/src/driver/index.ts +3 -1
- package/src/engine.ts +8 -4
- package/src/index.ts +7 -1
- package/src/loader.ts +201 -0
- package/src/properties.ts +1 -1
- package/src/reveal.ts +374 -0
- package/src/text-layout.ts +216 -0
- package/src/text.ts +296 -0
- package/src/track.ts +42 -3
- package/src/transition.ts +6 -0
- package/src/types.ts +13 -0
package/README.md
CHANGED
|
@@ -35,12 +35,16 @@ Jolt computes the motion once, in JavaScript, when the animation starts, and han
|
|
|
35
35
|
|
|
36
36
|
- [25 presets](#presets) to enter, exit and draw attention: `fadeInUp`, `popIn`, `shake`, `heartbeat`...
|
|
37
37
|
- [Springs](#springs) described by feel (`bouncy`), by `bounce` and `duration`, or by stiffness, damping and mass.
|
|
38
|
+
- [Decay](#decay) from a release velocity, with optional snap points.
|
|
38
39
|
- [Keyframes and tweens](#tweens) with an easing per segment and exact keyframe times.
|
|
39
40
|
- [Stagger](#several-views) across several views, from the first, the last or the center.
|
|
40
41
|
- [Sequences](#sequences) that start each step once the previous one looks done.
|
|
41
42
|
- [Press effects](#press) that follow the finger and let go when a scroll takes over.
|
|
43
|
+
- [Text entrances](#text) by letter or word on iOS, preserving the Label’s layout and accessibility.
|
|
42
44
|
- [SF Symbol effects](#sf-symbols) and animated icon replacement on iOS 17+.
|
|
43
45
|
- [Shimmer](#shimmer) for loading placeholders on iOS.
|
|
46
|
+
- [Loaders](#loaders) with dots, bars and ring styles on iOS.
|
|
47
|
+
- [Circular reveal](#circular-reveal) to show or hide content from a point on iOS.
|
|
44
48
|
- [Haptics](#haptics) at arrival or at marked points in an animation on iOS.
|
|
45
49
|
- [Particles and confetti](#particles-and-confetti) on iOS.
|
|
46
50
|
- [Interruptions](#interrupting-and-stopping) that pick up the value and velocity on screen, with no jump.
|
|
@@ -73,6 +77,8 @@ animate(card, { opacity: 0.5, y: -20 })
|
|
|
73
77
|
| `rotate` | degrees |
|
|
74
78
|
| `rotateX`, `rotateY` | degrees, with perspective |
|
|
75
79
|
|
|
80
|
+
3D rotations and flip presets use the view's `perspective` on both platforms (NativeScript defaults to 1000 DIPs). Set `card.perspective = 600` for stronger depth. Android applies the display density when configuring its camera distance; it keeps the perspective when a rotation ends or stops at an angle.
|
|
81
|
+
|
|
76
82
|
A single value animates from wherever the view is. An array is a list of keyframes, and `null` stands for the current value:
|
|
77
83
|
|
|
78
84
|
```ts
|
|
@@ -163,6 +169,19 @@ animate(
|
|
|
163
169
|
|
|
164
170
|
`delay` is in milliseconds, and the view takes the first keyframe during it. `repeat` is how many more times to play, `Infinity` until stopped. `repeatType: 'reverse'` plays every other repeat backwards. Repeats play natively too.
|
|
165
171
|
|
|
172
|
+
## Decay
|
|
173
|
+
|
|
174
|
+
```ts
|
|
175
|
+
import { decay } from '@rafaelaugusto/jolt'
|
|
176
|
+
|
|
177
|
+
decay(card, { x: 600 }) // DIPs per second
|
|
178
|
+
decay(card, { x: 600 }, { friction: 0.998, snap: [0, 320] })
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Starts from the current translation and slows down exponentially. `friction` multiplies velocity per millisecond; smaller values stop sooner. `snap` projects the landing and springs directly to the closest stop, preserving the supplied velocity. Use `{ snap: { x: [0, 320], y: [-200, 0] } }` for independent axes.
|
|
182
|
+
|
|
183
|
+
Shares interruption, `stop()` and awaitable completion with `animate()`. Both platforms use native keyframes with no JavaScript per frame. See the [decay guide](https://jolt.rafaelaugusto.dev/guide/decay).
|
|
184
|
+
|
|
166
185
|
## Presets
|
|
167
186
|
|
|
168
187
|
```ts
|
|
@@ -271,6 +290,39 @@ stopShimmer() // when the content is ready
|
|
|
271
290
|
|
|
272
291
|
A native gradient mask sweeps across the placeholder and its children. It follows layout changes, preserves existing masks and releases native resources while the view is unloaded, resuming on load. Reduce Motion keeps the placeholder static. iOS only for now; Android calls return a no-op cleanup function. See the [shimmer guide](https://jolt.rafaelaugusto.dev/guide/shimmer).
|
|
273
292
|
|
|
293
|
+
## Loaders
|
|
294
|
+
|
|
295
|
+
```ts
|
|
296
|
+
import { loader } from '@rafaelaugusto/jolt'
|
|
297
|
+
|
|
298
|
+
const stopLoading = loader(slot, { style: 'dots', color: '#71717a', size: 48 })
|
|
299
|
+
stopLoading() // when the content is ready
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
Choose `dots`, `bars` or `ring`. Each indicator uses one native animation replicated across a layer, fits inside its target and stays centered as the target resizes. Reduce Motion shows a static indicator. Unloading releases native resources; loading resumes until explicitly stopped. iOS only for now. See the [loaders guide](https://jolt.rafaelaugusto.dev/guide/loaders).
|
|
303
|
+
|
|
304
|
+
## Circular reveal
|
|
305
|
+
|
|
306
|
+
```ts
|
|
307
|
+
import { reveal, conceal } from '@rafaelaugusto/jolt'
|
|
308
|
+
|
|
309
|
+
await reveal(details, { from: { x: 40, y: 40 }, duration: 500 })
|
|
310
|
+
await conceal(details, { to: { x: 40, y: 40 } })
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
A native circle reveals the view's content or contracts to hide it. Reversing continues from the circle on screen. Existing masks are restored when the effect ends; conceal finishes with `visibility = 'hidden'`, preserving layout space. Reduce Motion applies the final visibility immediately. iOS only for now. See the [circular reveal guide](https://jolt.rafaelaugusto.dev/guide/reveal) for cancellation and layout behavior.
|
|
314
|
+
|
|
315
|
+
## Text
|
|
316
|
+
|
|
317
|
+
```ts
|
|
318
|
+
import { animateText } from '@rafaelaugusto/jolt'
|
|
319
|
+
|
|
320
|
+
await animateText(title)
|
|
321
|
+
await animateText(title, { by: 'word', stagger: 100 })
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
Reveal an iOS Label letter by letter or a word at a time. TextKit keeps the complete text layout, including wrapped lines, attributed styles and composed emoji. Core Animation plays temporary glyph images while the original Label remains the single accessibility element. Stop restores the full text; Reduce Motion skips the entrance. See the [text guide](https://jolt.rafaelaugusto.dev/guide/text) for options and limits.
|
|
325
|
+
|
|
274
326
|
## Haptics
|
|
275
327
|
|
|
276
328
|
```ts
|
|
@@ -312,7 +364,7 @@ If part of an animation is stopped, its `finished` promise resolves with `false`
|
|
|
312
364
|
|
|
313
365
|
## How it works
|
|
314
366
|
|
|
315
|
-
When an animation starts, Jolt resolves where each property starts from (the value on screen, or the keyframes you gave), and computes the whole curve: easing, keyframes, spring physics. It samples the curve 60 times per second of motion, and keeps keyframe times exact. Linear segments aren't sampled at all.
|
|
367
|
+
When an animation starts, Jolt resolves where each property starts from (the value on screen, or the keyframes you gave), and computes the whole curve: easing, keyframes, spring physics and exponential decay. It samples the curve 60 times per second of motion, and keeps keyframe times exact. Linear segments aren't sampled at all. Very long free decays cap sampling at 6,001 keyframes.
|
|
316
368
|
|
|
317
369
|
The samples go to the platform in one go:
|
|
318
370
|
|
|
@@ -321,25 +373,27 @@ The samples go to the platform in one go:
|
|
|
321
373
|
|
|
322
374
|
Before playing, the final values are set on the NativeScript view, like `view.animate()` does, so `view.translateX` already holds the target while the animation runs. Stopping writes back the values on screen.
|
|
323
375
|
|
|
324
|
-
|
|
376
|
+
On Android, opacity animations temporarily cache hardware-accelerated containers with children in a hardware layer. Jolt waits for the fade to start and restores the layer on completion, stop, replacement or unload. Existing app-configured layers are preserved; empty, unmeasured and larger-than-screen containers are skipped. See the [fade-layer benchmark](./benchmarks/android-fade.md) for measurement and memory tradeoffs.
|
|
377
|
+
|
|
378
|
+
Each running property remembers its curve and start time. On Android, interruptions read the displayed value and the animator's current play time, so inherited velocity follows the system's animator duration scale. Early spring arrivals use a native timing marker with completion callbacks only; other sequences advance on native completion. Delays, repeats and disabled animations follow the same platform clock, without JavaScript running per frame.
|
|
325
379
|
|
|
326
380
|
## Not there yet
|
|
327
381
|
|
|
328
382
|
- `animate()` covers transforms and opacity. Colors ([#12](https://github.com/rafaelaugustos/jolt/issues/12)), borders and shadows ([#13](https://github.com/rafaelaugustos/jolt/issues/13)), size and layout changes ([#21](https://github.com/rafaelaugustos/jolt/issues/21)) aren't animated yet.
|
|
329
|
-
-
|
|
383
|
+
- Gesture tracking and drag constraints are next ([#23](https://github.com/rafaelaugustos/jolt/issues/23)); `decay()` supplies the motion after release.
|
|
330
384
|
- No layout or shared element transitions ([#21](https://github.com/rafaelaugustos/jolt/issues/21), [#24](https://github.com/rafaelaugustos/jolt/issues/24)).
|
|
331
385
|
|
|
332
386
|
## API
|
|
333
387
|
|
|
334
|
-
**Animating**: `animate(target, keyframes | preset, transition?)`, `stop(target, properties?)`, `sequence(steps)`, `press(target, pressed?, transition?)`, `symbolEffect(image, effect, options?)`, `shimmer(target, options?)`, `confetti(target, options?)`, `particles(target, options?)`.
|
|
388
|
+
**Animating**: `animate(target, keyframes | preset, transition?)`, `decay(target, velocity, options?)`, `stop(target, properties?)`, `sequence(steps)`, `press(target, pressed?, transition?)`, `symbolEffect(image, effect, options?)`, `shimmer(target, options?)`, `loader(target, options?)`, `reveal(target, options?)`, `conceal(target, options?)`, `confetti(target, options?)`, `particles(target, options?)`.
|
|
335
389
|
|
|
336
|
-
**Animations** from `animate()`, `sequence()` and `
|
|
390
|
+
**Animations** from `animate()`, `decay()`, `sequence()`, `symbolEffect()`, `reveal()` and `conceal()`: `await`, `finished`, `stop()`. `press()`, `shimmer()`, `loader()`, `confetti()` and `particles()` return cleanup functions.
|
|
337
391
|
|
|
338
392
|
**Helpers**: `definePreset`, `presets`, `springs`, `cubicBezier`, plus the types (`Keyframes`, `Transition`, `Spring`, `Tween`, `Preset`, `Presets`, `PresetName`, `SpringName`, `Easing`, `Animation`, `Target`...).
|
|
339
393
|
|
|
340
394
|
## Demo
|
|
341
395
|
|
|
342
|
-
[`demo/`](./demo) is a NativeScript-Vue app with every preset, the three springs on a ball you can interrupt, stagger, press effects, SF Symbols, shimmer, haptics and particles on iOS, loops and a sequence on launch.
|
|
396
|
+
[`demo/`](./demo) is a NativeScript-Vue app with every preset, the three springs on a ball you can interrupt, decay and snapping, stagger, press effects, SF Symbols, shimmer, loaders, circular reveals, haptics and particles on iOS, loops and a sequence on launch.
|
|
343
397
|
|
|
344
398
|
With the [NativeScript CLI](https://docs.nativescript.org/setup/) installed:
|
|
345
399
|
|
package/dist/animate.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { type Animation } from './engine.js';
|
|
|
3
3
|
import { type PresetName } from './presets.js';
|
|
4
4
|
import { type Property } from './properties.js';
|
|
5
5
|
import { type SpringName } from './transition.js';
|
|
6
|
-
import type { AnimateOptions, Keyframes, Target } from './types.js';
|
|
6
|
+
import type { AnimateOptions, DecayOptions, DecayVelocity, Keyframes, Target } from './types.js';
|
|
7
7
|
/**
|
|
8
8
|
* Animates one view, or several. Takes keyframes or the name of a preset,
|
|
9
9
|
* and a transition or the name of a spring.
|
|
@@ -15,6 +15,8 @@ import type { AnimateOptions, Keyframes, Target } from './types.js';
|
|
|
15
15
|
* ```
|
|
16
16
|
*/
|
|
17
17
|
export declare function animate(target: Target | readonly Target[], animation: Keyframes | PresetName, options?: AnimateOptions | SpringName): Animation;
|
|
18
|
+
/** Starts at the current translation and slows down from a velocity in DIPs per second. */
|
|
19
|
+
export declare function decay(target: Target | readonly Target[], velocity: DecayVelocity, options?: DecayOptions): Animation;
|
|
18
20
|
/** Stops all or selected properties at their current values. `scale` stops both axes. */
|
|
19
21
|
export declare function stop(target: Target | readonly Target[], properties?: readonly (keyof Keyframes)[]): void;
|
|
20
22
|
/** Plays several animations as one: finished once they all are, and stopped together. */
|
package/dist/animate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animate.d.ts","sourceRoot":"","sources":["../src/animate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"animate.d.ts","sourceRoot":"","sources":["../src/animate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAEzC,OAAO,EAKL,KAAK,SAAS,EAEf,MAAM,aAAa,CAAA;AACpB,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzD,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAKL,KAAK,UAAU,EAEhB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EAGT,MAAM,EACP,MAAM,YAAY,CAAA;AAUnB;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAClC,SAAS,EAAE,SAAS,GAAG,UAAU,EACjC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,GACpC,SAAS,CAgCX;AAED,2FAA2F;AAC3F,wBAAgB,KAAK,CACnB,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAClC,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,YAAiB,GACzB,SAAS,CAgEX;AAED,yFAAyF;AACzF,wBAAgB,IAAI,CAClB,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAClC,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,SAAS,CAAC,EAAE,QAM1C;AAED,yFAAyF;AACzF,wBAAgB,KAAK,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAWjE;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAO3C;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,EAAE,CAElE;AAkFD,2FAA2F;AAC3F,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,GAAG,UAAU,EACjC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,gCAOtC"}
|
package/dist/animate.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { View } from '@nativescript/core';
|
|
2
|
+
import { DEFAULT_FRICTION, solveDecay } from './decay.js';
|
|
2
3
|
import { arrivalOf, setArrival, stopView, ViewAnimation, } from './engine.js';
|
|
3
4
|
import { getPreset } from './presets.js';
|
|
4
5
|
import { resolveHaptic } from './haptics.js';
|
|
5
|
-
import { isProperty } from './properties.js';
|
|
6
|
+
import { isProperty, precision } from './properties.js';
|
|
6
7
|
import { hasCurve, mergeTransitions, resolveTransition, springs, } from './transition.js';
|
|
7
8
|
/**
|
|
8
9
|
* Animates one view, or several. Takes keyframes or the name of a preset,
|
|
@@ -23,6 +24,69 @@ export function animate(target, animation, options) {
|
|
|
23
24
|
const views = target.map(toView);
|
|
24
25
|
return group(views.map((view, index) => new ViewAnimation(view, plan(keyframes, base, overrides, staggerDelay(stagger, index, views.length), relative), feedback)));
|
|
25
26
|
}
|
|
27
|
+
/** Starts at the current translation and slows down from a velocity in DIPs per second. */
|
|
28
|
+
export function decay(target, velocity, options = {}) {
|
|
29
|
+
const friction = options.friction ?? DEFAULT_FRICTION;
|
|
30
|
+
if (!Number.isFinite(friction) || friction <= 0 || friction >= 1) {
|
|
31
|
+
throw new RangeError('Decay friction must be between 0 and 1 exclusively.');
|
|
32
|
+
}
|
|
33
|
+
const stops = (values) => {
|
|
34
|
+
if (values === undefined)
|
|
35
|
+
return undefined;
|
|
36
|
+
if (!Array.isArray(values) ||
|
|
37
|
+
values.length === 0 ||
|
|
38
|
+
![...values].every(Number.isFinite)) {
|
|
39
|
+
throw new RangeError('Decay snap needs a nonempty array of finite positions.');
|
|
40
|
+
}
|
|
41
|
+
return [...values];
|
|
42
|
+
};
|
|
43
|
+
const snap = options.snap;
|
|
44
|
+
if (snap !== undefined &&
|
|
45
|
+
!Array.isArray(snap) &&
|
|
46
|
+
(snap === null ||
|
|
47
|
+
typeof snap !== 'object' ||
|
|
48
|
+
Object.keys(snap).some((key) => key !== 'x' && key !== 'y'))) {
|
|
49
|
+
throw new TypeError('Decay snap must be an array or an object with x and y stops.');
|
|
50
|
+
}
|
|
51
|
+
const shared = Array.isArray(snap);
|
|
52
|
+
const perAxis = snap;
|
|
53
|
+
const snapped = shared ? stops(snap) : undefined;
|
|
54
|
+
const snapX = shared ? snapped : stops(perAxis?.x);
|
|
55
|
+
const snapY = shared ? snapped : stops(perAxis?.y);
|
|
56
|
+
const plans = Object.entries(velocity).flatMap(([property, value]) => {
|
|
57
|
+
if (property !== 'x' && property !== 'y') {
|
|
58
|
+
throw new Error(`Can't decay "${property}". Use x or y.`);
|
|
59
|
+
}
|
|
60
|
+
if (value === undefined)
|
|
61
|
+
return [];
|
|
62
|
+
if (!Number.isFinite(value)) {
|
|
63
|
+
throw new RangeError(`Invalid decay velocity for "${property}".`);
|
|
64
|
+
}
|
|
65
|
+
// Validate every axis before handing any plans to the engine.
|
|
66
|
+
solveDecay(0, value, friction, precision[property]);
|
|
67
|
+
return [
|
|
68
|
+
{
|
|
69
|
+
property,
|
|
70
|
+
keyframes: [null, null],
|
|
71
|
+
transition: {
|
|
72
|
+
curve: {
|
|
73
|
+
type: 'decay',
|
|
74
|
+
friction,
|
|
75
|
+
velocity: value,
|
|
76
|
+
snap: property === 'x' ? snapX : snapY,
|
|
77
|
+
},
|
|
78
|
+
delay: 0,
|
|
79
|
+
repeat: 0,
|
|
80
|
+
reverse: false,
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
];
|
|
84
|
+
});
|
|
85
|
+
const views = toViews(target);
|
|
86
|
+
if (plans.length === 0)
|
|
87
|
+
return group([]);
|
|
88
|
+
return group(views.map((view) => new ViewAnimation(view, plans)));
|
|
89
|
+
}
|
|
26
90
|
/** Stops all or selected properties at their current values. `scale` stops both axes. */
|
|
27
91
|
export function stop(target, properties) {
|
|
28
92
|
const expanded = properties?.flatMap((property) => property === 'scale' ? ['scaleX', 'scaleY'] : [property]);
|
package/dist/animate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animate.js","sourceRoot":"","sources":["../src/animate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,aAAa,GAGd,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,SAAS,EAAmB,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,aAAa,EAAe,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,UAAU,EAAiB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"animate.js","sourceRoot":"","sources":["../src/animate.ts"],"names":[],"mappings":"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"}
|
package/dist/decay.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface DecayMotion {
|
|
2
|
+
duration: number;
|
|
3
|
+
to: number;
|
|
4
|
+
position(time: number): number;
|
|
5
|
+
velocity(time: number): number;
|
|
6
|
+
}
|
|
7
|
+
/** Velocity retains this fraction every millisecond, independently of the display's refresh rate. */
|
|
8
|
+
export declare const DEFAULT_FRICTION = 0.998;
|
|
9
|
+
/** Exponential motion, with velocity in units per second and time in milliseconds. */
|
|
10
|
+
export declare function solveDecay(from: number, velocity: number, friction: number, precision: number): DecayMotion;
|
|
11
|
+
//# sourceMappingURL=decay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decay.d.ts","sourceRoot":"","sources":["../src/decay.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAC/B;AAED,qGAAqG;AACrG,eAAO,MAAM,gBAAgB,QAAQ,CAAA;AAErC,sFAAsF;AACtF,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,WAAW,CA4Bb"}
|
package/dist/decay.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** Velocity retains this fraction every millisecond, independently of the display's refresh rate. */
|
|
2
|
+
export const DEFAULT_FRICTION = 0.998;
|
|
3
|
+
/** Exponential motion, with velocity in units per second and time in milliseconds. */
|
|
4
|
+
export function solveDecay(from, velocity, friction, precision) {
|
|
5
|
+
const rate = -Math.log(friction);
|
|
6
|
+
const distance = velocity / (1000 * rate);
|
|
7
|
+
const to = from + distance;
|
|
8
|
+
// Stop only when both the remaining distance and speed are imperceptible.
|
|
9
|
+
const duration = velocity === 0
|
|
10
|
+
? 0
|
|
11
|
+
: Math.ceil(Math.max(0, Math.log(Math.abs(distance) / precision) / rate, Math.log(Math.abs(velocity) / (precision * 10)) / rate));
|
|
12
|
+
if (!Number.isFinite(to) || !Number.isFinite(duration) || duration > 2_147_483_647) {
|
|
13
|
+
throw new RangeError('Decay velocity and friction produce an unplayable motion.');
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
duration,
|
|
17
|
+
to,
|
|
18
|
+
position: (time) => time >= duration ? to : from - distance * Math.expm1(-rate * Math.max(0, time)),
|
|
19
|
+
velocity: (time) => time >= duration ? 0 : velocity * Math.exp(-rate * Math.max(0, time)),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=decay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decay.js","sourceRoot":"","sources":["../src/decay.ts"],"names":[],"mappings":"AAOA,qGAAqG;AACrG,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAA;AAErC,sFAAsF;AACtF,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,QAAgB,EAChB,QAAgB,EAChB,SAAiB;IAEjB,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAChC,MAAM,QAAQ,GAAG,QAAQ,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IACzC,MAAM,EAAE,GAAG,IAAI,GAAG,QAAQ,CAAA;IAC1B,0EAA0E;IAC1E,MAAM,QAAQ,GACZ,QAAQ,KAAK,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,IAAI,CAAC,IAAI,CACP,IAAI,CAAC,GAAG,CACN,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,GAAG,IAAI,EAC/C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CACvD,CACF,CAAA;IAEP,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,aAAa,EAAE,CAAC;QACnF,MAAM,IAAI,UAAU,CAAC,2DAA2D,CAAC,CAAA;IACnF,CAAC;IAED,OAAO;QACL,QAAQ;QACR,EAAE;QACF,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CACjB,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACjF,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CACjB,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;KACxE,CAAA;AACH,CAAC"}
|
package/dist/driver/android.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"android.d.ts","sourceRoot":"","sources":["../../src/driver/android.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"android.d.ts","sourceRoot":"","sources":["../../src/driver/android.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AA4DxC,wBAAgB,mBAAmB,IAAI,MAAM,CAgJ5C"}
|
package/dist/driver/android.js
CHANGED
|
@@ -1,5 +1,34 @@
|
|
|
1
1
|
import { Utils } from '@nativescript/core';
|
|
2
|
-
|
|
2
|
+
/** Own only layers we create; keep app-configured hardware/software layers and paints intact. */
|
|
3
|
+
function fadeLayer(view, nativeView) {
|
|
4
|
+
const { View, ViewGroup } = android.view;
|
|
5
|
+
if (!view.isLoaded ||
|
|
6
|
+
view.nativeViewProtected !== nativeView ||
|
|
7
|
+
!(nativeView instanceof ViewGroup) ||
|
|
8
|
+
nativeView.getChildCount() === 0 ||
|
|
9
|
+
!nativeView.isHardwareAccelerated() ||
|
|
10
|
+
nativeView.getLayerType() !== View.LAYER_TYPE_NONE)
|
|
11
|
+
return undefined;
|
|
12
|
+
// Do not cache an entire oversized scrolling/content tree into a GPU texture.
|
|
13
|
+
const { widthPixels, heightPixels } = nativeView.getResources().getDisplayMetrics();
|
|
14
|
+
const width = nativeView.getWidth();
|
|
15
|
+
const height = nativeView.getHeight();
|
|
16
|
+
if (width <= 0 || height <= 0 || width > widthPixels || height > heightPixels)
|
|
17
|
+
return undefined;
|
|
18
|
+
nativeView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
|
|
19
|
+
let active = true;
|
|
20
|
+
const restore = () => {
|
|
21
|
+
if (!active)
|
|
22
|
+
return;
|
|
23
|
+
active = false;
|
|
24
|
+
view.off('unloaded', restore);
|
|
25
|
+
if (nativeView.getLayerType() === View.LAYER_TYPE_HARDWARE) {
|
|
26
|
+
nativeView.setLayerType(View.LAYER_TYPE_NONE, null);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
view.on('unloaded', restore);
|
|
30
|
+
return restore;
|
|
31
|
+
}
|
|
3
32
|
const accessors = {
|
|
4
33
|
opacity: { get: (v) => v.getAlpha(), set: (v, value) => v.setAlpha(value) },
|
|
5
34
|
x: { get: (v) => v.getTranslationX(), set: (v, value) => v.setTranslationX(value) },
|
|
@@ -29,6 +58,9 @@ export function createAndroidDriver() {
|
|
|
29
58
|
play(view, track, _startedAt, onEnd) {
|
|
30
59
|
const nativeView = view.nativeViewProtected;
|
|
31
60
|
const scale = unit(track.property);
|
|
61
|
+
if (track.property === 'rotateX' || track.property === 'rotateY') {
|
|
62
|
+
nativeView.setCameraDistance((view.perspective || 300) * Utils.layout.getDisplayDensity());
|
|
63
|
+
}
|
|
32
64
|
const keyframes = Array.create(android.animation.Keyframe, track.values.length);
|
|
33
65
|
track.values.forEach((value, i) => {
|
|
34
66
|
keyframes[i] = android.animation.Keyframe.ofFloat(track.times[i], value * scale);
|
|
@@ -36,6 +68,14 @@ export function createAndroidDriver() {
|
|
|
36
68
|
const holders = Array.create(android.animation.PropertyValuesHolder, 1);
|
|
37
69
|
holders[0] = android.animation.PropertyValuesHolder.ofKeyframe(nativeProperties[track.property], keyframes);
|
|
38
70
|
const animator = android.animation.ObjectAnimator.ofPropertyValuesHolder(nativeView, holders);
|
|
71
|
+
let cancelled = false;
|
|
72
|
+
let ended = false;
|
|
73
|
+
let started = false;
|
|
74
|
+
let restoreLayer;
|
|
75
|
+
const releaseLayer = () => {
|
|
76
|
+
restoreLayer?.();
|
|
77
|
+
restoreLayer = undefined;
|
|
78
|
+
};
|
|
39
79
|
animator.setDuration(Math.max(track.duration, 1));
|
|
40
80
|
animator.setStartDelay(track.delay);
|
|
41
81
|
animator.setInterpolator(interpolator);
|
|
@@ -48,26 +88,76 @@ export function createAndroidDriver() {
|
|
|
48
88
|
: android.animation.ValueAnimator.RESTART);
|
|
49
89
|
}
|
|
50
90
|
animator.addListener(new android.animation.Animator.AnimatorListener({
|
|
51
|
-
onAnimationStart() {
|
|
91
|
+
onAnimationStart() {
|
|
92
|
+
started = true;
|
|
93
|
+
if (!cancelled &&
|
|
94
|
+
!ended &&
|
|
95
|
+
track.property === 'opacity' &&
|
|
96
|
+
track.values.some((value) => value !== track.values[0]))
|
|
97
|
+
restoreLayer = fadeLayer(view, nativeView);
|
|
98
|
+
},
|
|
52
99
|
onAnimationRepeat() { },
|
|
53
|
-
onAnimationCancel() {
|
|
100
|
+
onAnimationCancel() {
|
|
101
|
+
cancelled = true;
|
|
102
|
+
releaseLayer();
|
|
103
|
+
},
|
|
54
104
|
onAnimationEnd() {
|
|
105
|
+
if (ended)
|
|
106
|
+
return;
|
|
107
|
+
ended = true;
|
|
108
|
+
releaseLayer();
|
|
55
109
|
onEnd();
|
|
56
110
|
},
|
|
57
111
|
}));
|
|
58
112
|
accessors[track.property].set(nativeView, track.values[0] * scale);
|
|
59
113
|
animator.start();
|
|
60
|
-
return
|
|
114
|
+
return {
|
|
115
|
+
elapsed: () => (started ? track.delay + animator.getCurrentPlayTime() : 0),
|
|
116
|
+
cancel() {
|
|
117
|
+
// Cancel before native callbacks: Android can send onStart while cancelling a delay.
|
|
118
|
+
cancelled = true;
|
|
119
|
+
releaseLayer();
|
|
120
|
+
animator.cancel();
|
|
121
|
+
},
|
|
122
|
+
};
|
|
61
123
|
},
|
|
62
124
|
stop(_view, handle) {
|
|
63
125
|
;
|
|
64
126
|
handle.cancel();
|
|
65
127
|
},
|
|
128
|
+
elapsed: (handle) => handle.elapsed(),
|
|
66
129
|
presented(view, property) {
|
|
67
130
|
const nativeView = view.nativeViewProtected;
|
|
68
131
|
return nativeView ? accessors[property].get(nativeView) / unit(property) : undefined;
|
|
69
132
|
},
|
|
70
|
-
after,
|
|
133
|
+
after(ms, callback) {
|
|
134
|
+
// A native marker follows animator duration scale, including changes during playback.
|
|
135
|
+
// Only completion crosses the bridge; there is no JavaScript update listener.
|
|
136
|
+
const values = Array.create('float', 2);
|
|
137
|
+
values[0] = 0;
|
|
138
|
+
values[1] = 1;
|
|
139
|
+
const marker = android.animation.ValueAnimator.ofFloat(values);
|
|
140
|
+
marker.setDuration(ms);
|
|
141
|
+
let active = true;
|
|
142
|
+
marker.addListener(new android.animation.Animator.AnimatorListener({
|
|
143
|
+
onAnimationStart() { },
|
|
144
|
+
onAnimationRepeat() { },
|
|
145
|
+
onAnimationCancel() {
|
|
146
|
+
active = false;
|
|
147
|
+
},
|
|
148
|
+
onAnimationEnd() {
|
|
149
|
+
if (!active)
|
|
150
|
+
return;
|
|
151
|
+
active = false;
|
|
152
|
+
callback();
|
|
153
|
+
},
|
|
154
|
+
}));
|
|
155
|
+
marker.start();
|
|
156
|
+
return () => {
|
|
157
|
+
active = false;
|
|
158
|
+
marker.cancel();
|
|
159
|
+
};
|
|
160
|
+
},
|
|
71
161
|
};
|
|
72
162
|
}
|
|
73
163
|
//# sourceMappingURL=android.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"android.js","sourceRoot":"","sources":["../../src/driver/android.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAa,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"android.js","sourceRoot":"","sources":["../../src/driver/android.ts"],"names":[],"mappings":"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"}
|
package/dist/driver/index.d.ts
CHANGED
|
@@ -7,9 +7,11 @@ export interface Driver {
|
|
|
7
7
|
/** Starts the track at `startedAt + track.delay` and calls `onEnd` once, however it ends. */
|
|
8
8
|
play(view: View, track: Track, startedAt: number, onEnd: () => void): unknown;
|
|
9
9
|
stop(view: View, handle: unknown): void;
|
|
10
|
+
/** Track time, including its delay, when the native clock differs from `now()`. */
|
|
11
|
+
elapsed?(handle: unknown): number;
|
|
10
12
|
/** The value on screen, when the platform knows it better than the track does. */
|
|
11
13
|
presented(view: View, property: Property): number | undefined;
|
|
12
|
-
/** Calls back after `ms`
|
|
14
|
+
/** Calls back after `ms` of animation time, respecting platform speed settings. */
|
|
13
15
|
after(ms: number, callback: () => void): () => void;
|
|
14
16
|
}
|
|
15
17
|
export declare function after(ms: number, callback: () => void): () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/driver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,WAAW,MAAM;IACrB,mEAAmE;IACnE,GAAG,IAAI,MAAM,CAAA;IACb,6FAA6F;IAC7F,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,OAAO,CAAA;IAC7E,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IACvC,kFAAkF;IAClF,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;IAC7D,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/driver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAIxC,MAAM,WAAW,MAAM;IACrB,mEAAmE;IACnE,GAAG,IAAI,MAAM,CAAA;IACb,6FAA6F;IAC7F,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,GAAG,OAAO,CAAA;IAC7E,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,CAAA;IACvC,mFAAmF;IACnF,OAAO,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAA;IACjC,kFAAkF;IAClF,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;IAC7D,mFAAmF;IACnF,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CACpD;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,cAGrD;AAID,wBAAgB,SAAS,IAAI,MAAM,CAElC;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,QAEjD"}
|
package/dist/driver/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/driver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,oBAAoB,CAAA;AAGzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/driver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,oBAAoB,CAAA;AAGzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAgB1C,MAAM,UAAU,KAAK,CAAC,EAAU,EAAE,QAAoB;IACpD,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IACtC,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;AAClC,CAAC;AAED,IAAI,MAA0B,CAAA;AAE9B,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAA;AAC3E,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAwB;IAChD,MAAM,GAAG,IAAI,CAAA;AACf,CAAC"}
|
package/dist/engine.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export interface Animation extends PromiseLike<boolean> {
|
|
|
9
9
|
* Never rejects.
|
|
10
10
|
*/
|
|
11
11
|
readonly finished: Promise<boolean>;
|
|
12
|
-
/** Stops playback.
|
|
12
|
+
/** Stops playback. Each effect documents whether it preserves or restores its visual state. */
|
|
13
13
|
stop(): void;
|
|
14
14
|
}
|
|
15
15
|
export interface Plan {
|
package/dist/engine.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE9C,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAEtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEzD,MAAM,WAAW,SAAU,SAAQ,WAAW,CAAC,OAAO,CAAC;IACrD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACnC
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE9C,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAyB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAEtE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEzD,MAAM,WAAW,SAAU,SAAQ,WAAW,CAAC,OAAO,CAAC;IACrD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACnC,+FAA+F;IAC/F,IAAI,IAAI,IAAI,CAAA;CACb;AAED,MAAM,WAAW,IAAI;IACnB,QAAQ,EAAE,QAAQ,CAAA;IAClB,8EAA8E;IAC9E,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAA;IACrC,UAAU,EAAE,kBAAkB,CAAA;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAaD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAEhE;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAEzE;AAED,qBAAa,aAAc,YAAW,SAAS;IAa3C,QAAQ,CAAC,IAAI,EAAE,IAAI;IAEnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IAd1B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;IACnC,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,QAAQ,CAAO;IACvB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,OAAO,CAAgC;IAE/C,YACW,IAAI,EAAE,IAAI,EACnB,KAAK,EAAE,SAAS,IAAI,EAAE,EACL,MAAM,CAAC,EAAE,aAAa,YAAA,EAMxC;IAED,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,KAAK,EACzB,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAChE,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAC5D,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAEhB;IAED,IAAI,SAUH;IAED,KAAK,CAAC,QAAQ,EAAE,OAAO,QAMtB;IAED,OAAO,CAAC,KAAK;IAiEb,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,MAAM;CAUf;AAED,gFAAgF;AAChF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,SAAS,QAAQ,EAAE,QAOpE"}
|
package/dist/engine.js
CHANGED
|
@@ -70,7 +70,7 @@ export class ViewAnimation {
|
|
|
70
70
|
let current;
|
|
71
71
|
let velocity = 0;
|
|
72
72
|
if (previous) {
|
|
73
|
-
const elapsed = now
|
|
73
|
+
const elapsed = elapsedOf(previous, now);
|
|
74
74
|
current = driver.presented(this.view, property) ?? previous.track.valueAt(elapsed);
|
|
75
75
|
velocity = previous.track.velocityAt(elapsed);
|
|
76
76
|
release(previous, now, false);
|
|
@@ -117,7 +117,7 @@ export class ViewAnimation {
|
|
|
117
117
|
const arrival = Math.max(...this.entries.map((entry) => entry.track.arrival));
|
|
118
118
|
if (this.pending === 0)
|
|
119
119
|
this.settle();
|
|
120
|
-
else if (Number.isFinite(arrival)) {
|
|
120
|
+
else if (Number.isFinite(arrival) && tracks.some((track) => track.end > arrival)) {
|
|
121
121
|
this.cancelArrival = driver.after(arrival, this.arrive);
|
|
122
122
|
}
|
|
123
123
|
}
|
|
@@ -182,10 +182,13 @@ function release(entry, now, commit) {
|
|
|
182
182
|
entry.done = true;
|
|
183
183
|
forget(entry);
|
|
184
184
|
if (commit) {
|
|
185
|
-
const value = driver.presented(view, property) ?? entry.track.valueAt(now
|
|
185
|
+
const value = driver.presented(view, property) ?? entry.track.valueAt(elapsedOf(entry, now));
|
|
186
186
|
writeValue(view, property, value);
|
|
187
187
|
}
|
|
188
188
|
driver.stop(view, entry.handle);
|
|
189
189
|
entry.owner.ended(false);
|
|
190
190
|
}
|
|
191
|
+
function elapsedOf(entry, now) {
|
|
192
|
+
return getDriver().elapsed?.(entry.handle) ?? now - entry.startedAt;
|
|
193
|
+
}
|
|
191
194
|
//# sourceMappingURL=engine.js.map
|