@rafaelaugusto/jolt 0.1.0-beta.7 → 0.1.0-beta.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -2
- package/dist/animate.d.ts +2 -0
- package/dist/animate.d.ts.map +1 -1
- package/dist/animate.js +7 -2
- package/dist/animate.js.map +1 -1
- package/dist/drag-input.d.ts +15 -0
- package/dist/drag-input.d.ts.map +1 -0
- package/dist/drag-input.js +66 -0
- package/dist/drag-input.js.map +1 -0
- package/dist/drag-physics.d.ts +20 -0
- package/dist/drag-physics.d.ts.map +1 -0
- package/dist/drag-physics.js +75 -0
- package/dist/drag-physics.js.map +1 -0
- package/dist/drag.d.ts +58 -0
- package/dist/drag.d.ts.map +1 -0
- package/dist/drag.js +324 -0
- package/dist/drag.js.map +1 -0
- package/dist/driver/ios.d.ts.map +1 -1
- package/dist/driver/ios.js +38 -6
- package/dist/driver/ios.js.map +1 -1
- package/dist/engine.d.ts +2 -0
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +9 -0
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/interaction-surface.d.ts +12 -0
- package/dist/interaction-surface.d.ts.map +1 -0
- package/dist/interaction-surface.js +36 -0
- package/dist/interaction-surface.js.map +1 -0
- package/dist/motion-scope.d.ts +37 -0
- package/dist/motion-scope.d.ts.map +1 -0
- package/dist/motion-scope.js +232 -0
- package/dist/motion-scope.js.map +1 -0
- package/dist/motion-states.d.ts +36 -0
- package/dist/motion-states.d.ts.map +1 -0
- package/dist/motion-states.js +165 -0
- package/dist/motion-states.js.map +1 -0
- package/dist/press.d.ts.map +1 -1
- package/dist/press.js +14 -3
- package/dist/press.js.map +1 -1
- package/dist/track.d.ts.map +1 -1
- package/dist/track.js +21 -4
- package/dist/track.js.map +1 -1
- package/dist/transition.d.ts +2 -1
- package/dist/transition.d.ts.map +1 -1
- package/dist/transition.js.map +1 -1
- package/dist/vue/index.d.ts +3 -1
- package/dist/vue/index.d.ts.map +1 -1
- package/dist/vue/index.js +17 -4
- package/dist/vue/index.js.map +1 -1
- package/package.json +1 -1
- package/platforms/ios/src/JoltInteractiveAnimation.h +18 -0
- package/platforms/ios/src/JoltInteractiveAnimation.m +123 -0
- package/platforms/ios/src/module.modulemap +1 -0
- package/src/animate.ts +15 -8
- package/src/drag-input.ts +74 -0
- package/src/drag-physics.ts +110 -0
- package/src/drag.ts +395 -0
- package/src/driver/ios.ts +57 -8
- package/src/engine.ts +11 -0
- package/src/index.ts +14 -0
- package/src/interaction-surface.ts +41 -0
- package/src/ios-plugin.d.ts +22 -0
- package/src/motion-scope.ts +265 -0
- package/src/motion-states.ts +215 -0
- package/src/press.ts +15 -3
- package/src/track.ts +25 -4
- package/src/transition.ts +2 -0
- package/src/vue/index.ts +20 -3
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { View } from '@nativescript/core';
|
|
2
|
+
import type { Target } from './types.js';
|
|
3
|
+
export interface InteractionSurface {
|
|
4
|
+
readonly disposed: boolean;
|
|
5
|
+
/** Existing animations retain their driver until they end. Disables future opt-in. */
|
|
6
|
+
dispose(): void;
|
|
7
|
+
}
|
|
8
|
+
/** Opt a view/subtree into native geometry updates before starting its animations. */
|
|
9
|
+
export declare function interactionSurface(target: Target): InteractionSurface;
|
|
10
|
+
/** Evaluated at animation start; no per-frame JS traversal. */
|
|
11
|
+
export declare function hasInteractionSurface(view: View): boolean;
|
|
12
|
+
//# sourceMappingURL=interaction-surface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction-surface.d.ts","sourceRoot":"","sources":["../src/interaction-surface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAY,MAAM,oBAAoB,CAAA;AAExD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAGxC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,sFAAsF;IACtF,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,sFAAsF;AACtF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAkBrE;AAED,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAOzD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { toView } from './animate.js';
|
|
2
|
+
const surfaces = new WeakMap();
|
|
3
|
+
/** Opt a view/subtree into native geometry updates before starting its animations. */
|
|
4
|
+
export function interactionSurface(target) {
|
|
5
|
+
const view = toView(target);
|
|
6
|
+
let tokens = surfaces.get(view);
|
|
7
|
+
if (!tokens)
|
|
8
|
+
surfaces.set(view, (tokens = new Set()));
|
|
9
|
+
const token = {};
|
|
10
|
+
tokens.add(token);
|
|
11
|
+
let disposed = false;
|
|
12
|
+
return {
|
|
13
|
+
get disposed() {
|
|
14
|
+
return disposed;
|
|
15
|
+
},
|
|
16
|
+
dispose() {
|
|
17
|
+
if (disposed)
|
|
18
|
+
return;
|
|
19
|
+
disposed = true;
|
|
20
|
+
tokens.delete(token);
|
|
21
|
+
if (!tokens.size)
|
|
22
|
+
surfaces.delete(view);
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** Evaluated at animation start; no per-frame JS traversal. */
|
|
27
|
+
export function hasInteractionSurface(view) {
|
|
28
|
+
let current = view;
|
|
29
|
+
while (current) {
|
|
30
|
+
if (surfaces.get(current)?.size)
|
|
31
|
+
return true;
|
|
32
|
+
current = current.parent;
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=interaction-surface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction-surface.js","sourceRoot":"","sources":["../src/interaction-surface.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAGrC,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAyB,CAAA;AAOrD,sFAAsF;AACtF,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAC3B,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC/B,IAAI,CAAC,MAAM;QAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,CAAA;IACrD,MAAM,KAAK,GAAG,EAAE,CAAA;IAChB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IACjB,IAAI,QAAQ,GAAG,KAAK,CAAA;IACpB,OAAO;QACL,IAAI,QAAQ;YACV,OAAO,QAAQ,CAAA;QACjB,CAAC;QACD,OAAO;YACL,IAAI,QAAQ;gBAAE,OAAM;YACpB,QAAQ,GAAG,IAAI,CAAA;YACf,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACpB,IAAI,CAAC,MAAM,CAAC,IAAI;gBAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACzC,CAAC;KACF,CAAA;AACH,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,qBAAqB,CAAC,IAAU;IAC9C,IAAI,OAAO,GAAyB,IAAI,CAAA;IACxC,OAAO,OAAO,EAAE,CAAC;QACf,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI;YAAE,OAAO,IAAI,CAAA;QAC5C,OAAO,GAAG,OAAO,CAAC,MAAM,CAAA;IAC1B,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { animate, decay } from './animate.js';
|
|
2
|
+
import { press } from './press.js';
|
|
3
|
+
import { drag } from './drag.js';
|
|
4
|
+
import { sequence } from './sequence.js';
|
|
5
|
+
import { type MotionState, type MotionDefinitions, type MotionStates, type MotionStatesOptions } from './motion-states.js';
|
|
6
|
+
import type { Target } from './types.js';
|
|
7
|
+
/** A cleanup function or a handle owned exclusively by one scope. */
|
|
8
|
+
export type MotionResource = (() => void) | {
|
|
9
|
+
stop(): void;
|
|
10
|
+
} | {
|
|
11
|
+
dispose(): void;
|
|
12
|
+
};
|
|
13
|
+
export interface MotionScope {
|
|
14
|
+
readonly disposed: boolean;
|
|
15
|
+
readonly suspended: boolean;
|
|
16
|
+
/** Owned handles/subscriptions, including suspended subscription factories. */
|
|
17
|
+
readonly size: number;
|
|
18
|
+
animate: typeof animate;
|
|
19
|
+
decay: typeof decay;
|
|
20
|
+
sequence: typeof sequence;
|
|
21
|
+
press: typeof press;
|
|
22
|
+
drag: typeof drag;
|
|
23
|
+
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>>;
|
|
24
|
+
/** Adopt an existing handle. Completed animations are released automatically. */
|
|
25
|
+
add<T extends MotionResource>(resource: T): T;
|
|
26
|
+
/** Attach a subscription, detach on suspension, and recreate on resume. */
|
|
27
|
+
use(setup: () => MotionResource): () => void;
|
|
28
|
+
/** Pause playable handles; cancel non-playable ones; detach subscriptions. */
|
|
29
|
+
suspend(): void;
|
|
30
|
+
resume(): void;
|
|
31
|
+
/** Cancel all owned work without destroying the scope, e.g. when recycling a cell. */
|
|
32
|
+
reset(): void;
|
|
33
|
+
dispose(): void;
|
|
34
|
+
}
|
|
35
|
+
/** Framework-independent ownership. Native unload never permanently destroys a scope. */
|
|
36
|
+
export declare function motionScope(): MotionScope;
|
|
37
|
+
//# sourceMappingURL=motion-scope.d.ts.map
|
|
@@ -0,0 +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,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,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,CA6MzC"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { animate, decay } from './animate.js';
|
|
2
|
+
import { press } from './press.js';
|
|
3
|
+
import { drag } from './drag.js';
|
|
4
|
+
import { sequence } from './sequence.js';
|
|
5
|
+
import { motionStates, } from './motion-states.js';
|
|
6
|
+
const owners = new WeakMap();
|
|
7
|
+
/** Framework-independent ownership. Native unload never permanently destroys a scope. */
|
|
8
|
+
export function motionScope() {
|
|
9
|
+
const entries = new Set();
|
|
10
|
+
const adopted = new Map();
|
|
11
|
+
const identity = {};
|
|
12
|
+
let disposed = false;
|
|
13
|
+
let suspended = false;
|
|
14
|
+
let clearing = false;
|
|
15
|
+
const assertAlive = () => {
|
|
16
|
+
if (disposed)
|
|
17
|
+
throw new Error('Motion scope is disposed.');
|
|
18
|
+
if (clearing)
|
|
19
|
+
throw new Error('Motion scope is resetting.');
|
|
20
|
+
};
|
|
21
|
+
const assertActive = () => {
|
|
22
|
+
assertAlive();
|
|
23
|
+
if (suspended)
|
|
24
|
+
throw new Error('Motion scope is suspended; resume it before starting work.');
|
|
25
|
+
};
|
|
26
|
+
const validate = (resource) => {
|
|
27
|
+
if (typeof resource !== 'function' &&
|
|
28
|
+
(!resource ||
|
|
29
|
+
(typeof resource.dispose !== 'function' &&
|
|
30
|
+
typeof resource.stop !== 'function')))
|
|
31
|
+
throw new TypeError('A motion resource must be a cleanup function or expose stop()/dispose().');
|
|
32
|
+
const finished = resource.finished;
|
|
33
|
+
if (finished && typeof finished.then !== 'function')
|
|
34
|
+
throw new TypeError('Resource finished must be a promise.');
|
|
35
|
+
if (owners.has(resource) && owners.get(resource) !== identity)
|
|
36
|
+
throw new Error('Motion resource already belongs to another scope.');
|
|
37
|
+
};
|
|
38
|
+
const forget = (entry) => {
|
|
39
|
+
const resource = entry.resource;
|
|
40
|
+
if (resource) {
|
|
41
|
+
owners.delete(resource);
|
|
42
|
+
adopted.delete(resource);
|
|
43
|
+
entry.resource = undefined;
|
|
44
|
+
}
|
|
45
|
+
entry.resume = false;
|
|
46
|
+
};
|
|
47
|
+
const disposeResource = (resource) => {
|
|
48
|
+
if (typeof resource === 'function')
|
|
49
|
+
resource();
|
|
50
|
+
else if (typeof resource.dispose === 'function')
|
|
51
|
+
resource.dispose();
|
|
52
|
+
else
|
|
53
|
+
resource.stop();
|
|
54
|
+
};
|
|
55
|
+
const release = (entry) => {
|
|
56
|
+
const resource = entry.resource;
|
|
57
|
+
forget(entry);
|
|
58
|
+
if (!resource)
|
|
59
|
+
return;
|
|
60
|
+
disposeResource(resource);
|
|
61
|
+
};
|
|
62
|
+
const remove = (entry) => {
|
|
63
|
+
entries.delete(entry);
|
|
64
|
+
release(entry);
|
|
65
|
+
};
|
|
66
|
+
const attach = (entry, resource) => {
|
|
67
|
+
validate(resource);
|
|
68
|
+
if (adopted.has(resource))
|
|
69
|
+
throw new Error('Subscription factory returned an already owned resource.');
|
|
70
|
+
entry.resource = resource;
|
|
71
|
+
adopted.set(resource, entry);
|
|
72
|
+
owners.set(resource, identity);
|
|
73
|
+
const finished = resource.finished;
|
|
74
|
+
if (!entry.setup && finished) {
|
|
75
|
+
const settled = () => {
|
|
76
|
+
if (entry.resource !== resource)
|
|
77
|
+
return;
|
|
78
|
+
forget(entry);
|
|
79
|
+
entries.delete(entry);
|
|
80
|
+
};
|
|
81
|
+
void finished.then(settled, settled);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const startSubscription = (entry) => {
|
|
85
|
+
const resource = entry.setup();
|
|
86
|
+
validate(resource);
|
|
87
|
+
// Setup may synchronously navigate away, suspend or remove its own scope.
|
|
88
|
+
if (disposed || suspended || !entries.has(entry)) {
|
|
89
|
+
if (!owners.has(resource))
|
|
90
|
+
disposeResource(resource);
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
attach(entry, resource);
|
|
94
|
+
};
|
|
95
|
+
// One bad cleanup must not strand the other subscriptions.
|
|
96
|
+
const visit = (action) => {
|
|
97
|
+
const errors = [];
|
|
98
|
+
for (const entry of [...entries]) {
|
|
99
|
+
if (!entries.has(entry))
|
|
100
|
+
continue;
|
|
101
|
+
try {
|
|
102
|
+
action(entry);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
errors.push(error);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (errors.length)
|
|
109
|
+
throw new AggregateError(errors, 'Motion scope cleanup/lifecycle failed.');
|
|
110
|
+
};
|
|
111
|
+
const startOwned = (factory) => {
|
|
112
|
+
assertActive();
|
|
113
|
+
const resource = factory();
|
|
114
|
+
try {
|
|
115
|
+
return scope.add(resource);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
if (!owners.has(resource))
|
|
119
|
+
disposeResource(resource);
|
|
120
|
+
throw error;
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
const scope = {
|
|
124
|
+
get disposed() {
|
|
125
|
+
return disposed;
|
|
126
|
+
},
|
|
127
|
+
get suspended() {
|
|
128
|
+
return suspended;
|
|
129
|
+
},
|
|
130
|
+
get size() {
|
|
131
|
+
return entries.size;
|
|
132
|
+
},
|
|
133
|
+
animate(...args) {
|
|
134
|
+
return startOwned(() => animate(...args));
|
|
135
|
+
},
|
|
136
|
+
decay(...args) {
|
|
137
|
+
return startOwned(() => decay(...args));
|
|
138
|
+
},
|
|
139
|
+
sequence(...args) {
|
|
140
|
+
return startOwned(() => sequence(...args));
|
|
141
|
+
},
|
|
142
|
+
press(...args) {
|
|
143
|
+
return scope.use(() => press(...args));
|
|
144
|
+
},
|
|
145
|
+
drag(...args) {
|
|
146
|
+
return startOwned(() => drag(...args));
|
|
147
|
+
},
|
|
148
|
+
states(targets, definitions, options) {
|
|
149
|
+
return startOwned(() => motionStates(targets, definitions, options));
|
|
150
|
+
},
|
|
151
|
+
add(resource) {
|
|
152
|
+
assertActive();
|
|
153
|
+
validate(resource);
|
|
154
|
+
if (adopted.has(resource))
|
|
155
|
+
return resource;
|
|
156
|
+
const entry = { resume: false };
|
|
157
|
+
attach(entry, resource);
|
|
158
|
+
entries.add(entry);
|
|
159
|
+
return resource;
|
|
160
|
+
},
|
|
161
|
+
use(setup) {
|
|
162
|
+
assertAlive();
|
|
163
|
+
if (typeof setup !== 'function')
|
|
164
|
+
throw new TypeError('Motion subscription needs a factory.');
|
|
165
|
+
const entry = { setup, resume: false };
|
|
166
|
+
entries.add(entry);
|
|
167
|
+
try {
|
|
168
|
+
if (!suspended)
|
|
169
|
+
startSubscription(entry);
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
remove(entry);
|
|
173
|
+
throw error;
|
|
174
|
+
}
|
|
175
|
+
return () => remove(entry);
|
|
176
|
+
},
|
|
177
|
+
suspend() {
|
|
178
|
+
if (disposed || suspended)
|
|
179
|
+
return;
|
|
180
|
+
suspended = true;
|
|
181
|
+
visit((entry) => {
|
|
182
|
+
if (entry.setup) {
|
|
183
|
+
release(entry);
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const resource = entry.resource;
|
|
187
|
+
if (typeof resource?.pause === 'function' &&
|
|
188
|
+
typeof resource.play === 'function') {
|
|
189
|
+
entry.resume = resource.paused !== true;
|
|
190
|
+
if (entry.resume)
|
|
191
|
+
resource.pause();
|
|
192
|
+
}
|
|
193
|
+
else
|
|
194
|
+
remove(entry);
|
|
195
|
+
});
|
|
196
|
+
},
|
|
197
|
+
resume() {
|
|
198
|
+
if (disposed || !suspended)
|
|
199
|
+
return;
|
|
200
|
+
suspended = false;
|
|
201
|
+
visit((entry) => {
|
|
202
|
+
if (disposed || suspended)
|
|
203
|
+
return;
|
|
204
|
+
if (entry.setup)
|
|
205
|
+
startSubscription(entry);
|
|
206
|
+
else if (entry.resume) {
|
|
207
|
+
entry.resume = false;
|
|
208
|
+
entry.resource.play?.();
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
},
|
|
212
|
+
reset() {
|
|
213
|
+
if (disposed || clearing)
|
|
214
|
+
return;
|
|
215
|
+
clearing = true;
|
|
216
|
+
try {
|
|
217
|
+
visit(remove);
|
|
218
|
+
}
|
|
219
|
+
finally {
|
|
220
|
+
clearing = false;
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
dispose() {
|
|
224
|
+
if (disposed)
|
|
225
|
+
return;
|
|
226
|
+
disposed = true;
|
|
227
|
+
visit(remove);
|
|
228
|
+
},
|
|
229
|
+
};
|
|
230
|
+
return scope;
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=motion-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion-scope.js","sourceRoot":"","sources":["../src/motion-scope.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type ColorValue } from './color.js';
|
|
2
|
+
import type { Animation } from './engine.js';
|
|
3
|
+
import type { KeyframeProperty, Target } from './types.js';
|
|
4
|
+
import type { Spring, Tween, SpringName } from './transition.js';
|
|
5
|
+
import type { MotionScope } from './motion-scope.js';
|
|
6
|
+
/** Absolute endpoints only; keyframe arrays, paths and relative offsets are not states. */
|
|
7
|
+
export type MotionValues = {
|
|
8
|
+
[K in KeyframeProperty]?: K extends 'color' | 'backgroundColor' | 'borderColor' ? ColorValue : number;
|
|
9
|
+
};
|
|
10
|
+
export type MotionState<K extends PropertyKey = string> = Partial<Record<K, MotionValues>>;
|
|
11
|
+
/** Preserve inference while rejecting unknown target/property keys. */
|
|
12
|
+
export type MotionDefinitions<T, S> = S & {
|
|
13
|
+
[N in keyof S]: Record<Exclude<keyof S[N], keyof T>, never> & {
|
|
14
|
+
[K in keyof S[N]]: Record<Exclude<keyof S[N][K], KeyframeProperty>, never>;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export type StateTransition = SpringName | Omit<Spring, 'repeat' | 'repeatType'> | Omit<Tween, 'repeat' | 'repeatType'>;
|
|
18
|
+
export interface MotionStatesOptions {
|
|
19
|
+
transition?: StateTransition;
|
|
20
|
+
scope?: MotionScope;
|
|
21
|
+
}
|
|
22
|
+
export interface MotionStates<S extends string = string> {
|
|
23
|
+
/** Latest requested state, not a claim that playback has finished. */
|
|
24
|
+
readonly current: S | undefined;
|
|
25
|
+
readonly settled: S | undefined;
|
|
26
|
+
readonly disposed: boolean;
|
|
27
|
+
readonly paused: boolean;
|
|
28
|
+
to(state: S, transition?: StateTransition): Animation;
|
|
29
|
+
pause(): void;
|
|
30
|
+
play(): void;
|
|
31
|
+
stop(): void;
|
|
32
|
+
dispose(): void;
|
|
33
|
+
}
|
|
34
|
+
/** 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>>;
|
|
36
|
+
//# sourceMappingURL=motion-states.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { prepareAnimation, toView } from './animate.js';
|
|
2
|
+
import { isColorProperty } from './color.js';
|
|
3
|
+
import { isProperty } from './properties.js';
|
|
4
|
+
/** Coordinated named targets. Omitted properties freeze when leaving their previous state. */
|
|
5
|
+
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)
|
|
8
|
+
throw new TypeError('Motion state targets must refer to distinct views.');
|
|
9
|
+
const states = new Map();
|
|
10
|
+
const defaults = normalize(options.transition);
|
|
11
|
+
for (const [name, state] of Object.entries(definitions)) {
|
|
12
|
+
if (!state || typeof state !== 'object' || Array.isArray(state))
|
|
13
|
+
throw new TypeError(`Invalid motion state "${name}".`);
|
|
14
|
+
const rows = [];
|
|
15
|
+
for (const [target, values] of Object.entries(state)) {
|
|
16
|
+
const view = views.get(target);
|
|
17
|
+
if (!view)
|
|
18
|
+
throw new TypeError(`Unknown motion target "${target}".`);
|
|
19
|
+
if (!values || typeof values !== 'object' || Array.isArray(values))
|
|
20
|
+
throw new TypeError(`Invalid motion values for "${target}".`);
|
|
21
|
+
const frames = {};
|
|
22
|
+
for (const [property, value] of Object.entries(values)) {
|
|
23
|
+
if (value === undefined)
|
|
24
|
+
continue;
|
|
25
|
+
if (property !== 'scale' && !isProperty(property))
|
|
26
|
+
throw new TypeError(`Invalid motion state property "${property}".`);
|
|
27
|
+
if (!isColorProperty(property) &&
|
|
28
|
+
(typeof value !== 'number' || !Number.isFinite(value)))
|
|
29
|
+
throw new TypeError(`Motion state "${property}" requires a finite endpoint.`);
|
|
30
|
+
if (Array.isArray(value) || value === null)
|
|
31
|
+
throw new TypeError(`Motion state "${property}" requires a single endpoint.`);
|
|
32
|
+
Object.assign(frames, { [property]: value });
|
|
33
|
+
}
|
|
34
|
+
// Validate every definition up front without claiming any native property.
|
|
35
|
+
prepareAnimation(view, frames, defaults);
|
|
36
|
+
rows.push([view, frames]);
|
|
37
|
+
}
|
|
38
|
+
states.set(name, rows);
|
|
39
|
+
}
|
|
40
|
+
let current;
|
|
41
|
+
let settled;
|
|
42
|
+
let disposed = false;
|
|
43
|
+
let paused = false;
|
|
44
|
+
let active;
|
|
45
|
+
const controller = {
|
|
46
|
+
get current() {
|
|
47
|
+
return current;
|
|
48
|
+
},
|
|
49
|
+
get settled() {
|
|
50
|
+
return settled;
|
|
51
|
+
},
|
|
52
|
+
get disposed() {
|
|
53
|
+
return disposed;
|
|
54
|
+
},
|
|
55
|
+
get paused() {
|
|
56
|
+
return paused;
|
|
57
|
+
},
|
|
58
|
+
to(name, transition) {
|
|
59
|
+
if (disposed)
|
|
60
|
+
throw new Error('Motion states controller is disposed.');
|
|
61
|
+
const rows = states.get(name);
|
|
62
|
+
if (!rows)
|
|
63
|
+
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));
|
|
66
|
+
const previous = active;
|
|
67
|
+
const children = [];
|
|
68
|
+
// Start replacements first: the engine transfers visible position AND velocity.
|
|
69
|
+
try {
|
|
70
|
+
for (const start of prepared) {
|
|
71
|
+
const child = start();
|
|
72
|
+
children.push(child);
|
|
73
|
+
if (paused)
|
|
74
|
+
child.pause();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
children.forEach((child) => child.stop());
|
|
79
|
+
previous?.handle.stop();
|
|
80
|
+
active = undefined;
|
|
81
|
+
throw error;
|
|
82
|
+
}
|
|
83
|
+
let cancelled = false;
|
|
84
|
+
const finished = Promise.all(children.map((child) => child.finished)).then((results) => {
|
|
85
|
+
const completed = !cancelled && !disposed && active?.handle === handle && results.every(Boolean);
|
|
86
|
+
if (active?.handle === handle) {
|
|
87
|
+
active = undefined;
|
|
88
|
+
if (completed)
|
|
89
|
+
settled = name;
|
|
90
|
+
}
|
|
91
|
+
return completed;
|
|
92
|
+
});
|
|
93
|
+
const handle = {
|
|
94
|
+
finished,
|
|
95
|
+
stop() {
|
|
96
|
+
cancelled = true;
|
|
97
|
+
children.forEach((child) => child.stop());
|
|
98
|
+
},
|
|
99
|
+
then: (resolve, reject) => finished.then(resolve, reject),
|
|
100
|
+
};
|
|
101
|
+
active = { handle, children };
|
|
102
|
+
current = name;
|
|
103
|
+
// Also cancels old, omitted properties, without touching the new owners.
|
|
104
|
+
previous?.handle.stop();
|
|
105
|
+
return handle;
|
|
106
|
+
},
|
|
107
|
+
pause() {
|
|
108
|
+
if (disposed || paused)
|
|
109
|
+
return;
|
|
110
|
+
paused = true;
|
|
111
|
+
active?.children.forEach((child) => child.pause());
|
|
112
|
+
},
|
|
113
|
+
play() {
|
|
114
|
+
if (disposed || !paused)
|
|
115
|
+
return;
|
|
116
|
+
paused = false;
|
|
117
|
+
active?.children.forEach((child) => child.play());
|
|
118
|
+
},
|
|
119
|
+
stop() {
|
|
120
|
+
active?.handle.stop();
|
|
121
|
+
active = undefined;
|
|
122
|
+
},
|
|
123
|
+
dispose() {
|
|
124
|
+
if (disposed)
|
|
125
|
+
return;
|
|
126
|
+
disposed = true;
|
|
127
|
+
controller.stop();
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
return options.scope ? options.scope.add(controller) : controller;
|
|
131
|
+
}
|
|
132
|
+
function normalize(transition) {
|
|
133
|
+
if (transition === undefined)
|
|
134
|
+
return 'snappy';
|
|
135
|
+
if (typeof transition === 'string') {
|
|
136
|
+
if (!['smooth', 'snappy', 'bouncy'].includes(transition))
|
|
137
|
+
throw new TypeError('Unknown state spring.');
|
|
138
|
+
return transition;
|
|
139
|
+
}
|
|
140
|
+
if (!transition || typeof transition !== 'object')
|
|
141
|
+
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
|
+
for (const key of Object.keys(transition))
|
|
155
|
+
if (!allowed.has(key))
|
|
156
|
+
throw new TypeError(`State transitions do not support "${key}".`);
|
|
157
|
+
if (transition.duration !== undefined &&
|
|
158
|
+
(!Number.isFinite(transition.duration) || transition.duration < 0))
|
|
159
|
+
throw new RangeError('State transition duration must be finite and nonnegative.');
|
|
160
|
+
if (transition.delay !== undefined &&
|
|
161
|
+
(!Number.isFinite(transition.delay) || transition.delay < 0))
|
|
162
|
+
throw new RangeError('State transition delay must be finite and nonnegative.');
|
|
163
|
+
return { ...transition };
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=motion-states.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion-states.js","sourceRoot":"","sources":["../src/motion-states.ts"],"names":[],"mappings":"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"}
|
package/dist/press.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"press.d.ts","sourceRoot":"","sources":["../src/press.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"press.d.ts","sourceRoot":"","sources":["../src/press.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,iBAAiB,CAAA;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAKnE;;;;;;;;GAQG;AACH,wBAAgB,KAAK,CACnB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,SAA2B,EACpC,OAAO,CAAC,EAAE,cAAc,GAAG,UAAU,GACpC,MAAM,IAAI,CAwCZ"}
|
package/dist/press.js
CHANGED
|
@@ -17,6 +17,7 @@ export function press(target, pressed = { scale: 0.96 }, options) {
|
|
|
17
17
|
const view = toView(target);
|
|
18
18
|
const properties = [...startingValues(pressed, options).keys()];
|
|
19
19
|
let rest;
|
|
20
|
+
let active;
|
|
20
21
|
const onTouch = (event) => {
|
|
21
22
|
const { action } = event;
|
|
22
23
|
if (action === 'down' && !rest && view.isEnabled !== false) {
|
|
@@ -24,16 +25,26 @@ export function press(target, pressed = { scale: 0.96 }, options) {
|
|
|
24
25
|
p,
|
|
25
26
|
isColorProperty(p) ? new Color(readValue(view, p)) : readValue(view, p),
|
|
26
27
|
]));
|
|
27
|
-
animate(view, pressed, options ?? pressIn);
|
|
28
|
+
active = animate(view, pressed, options ?? pressIn);
|
|
28
29
|
}
|
|
29
30
|
else if ((action === 'up' || action === 'cancel') && rest) {
|
|
30
|
-
animate(view, rest, typeof options === 'object'
|
|
31
|
+
active = animate(view, rest, typeof options === 'object'
|
|
31
32
|
? { ...options, relative: false }
|
|
32
33
|
: (options ?? release));
|
|
33
34
|
rest = undefined;
|
|
34
35
|
}
|
|
35
36
|
};
|
|
37
|
+
const cancel = () => {
|
|
38
|
+
active?.stop();
|
|
39
|
+
active = undefined;
|
|
40
|
+
rest = undefined;
|
|
41
|
+
};
|
|
36
42
|
view.on('touch', onTouch);
|
|
37
|
-
|
|
43
|
+
view.on('unloaded', cancel);
|
|
44
|
+
return () => {
|
|
45
|
+
view.off('touch', onTouch);
|
|
46
|
+
view.off('unloaded', cancel);
|
|
47
|
+
cancel();
|
|
48
|
+
};
|
|
38
49
|
}
|
|
39
50
|
//# sourceMappingURL=press.js.map
|
package/dist/press.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"press.js","sourceRoot":"","sources":["../src/press.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAA8C,MAAM,oBAAoB,CAAA;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"press.js","sourceRoot":"","sources":["../src/press.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAA8C,MAAM,oBAAoB,CAAA;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAI3C,MAAM,OAAO,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAA;AACxE,MAAM,OAAO,GAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;AAE3E;;;;;;;;GAQG;AACH,MAAM,UAAU,KAAK,CACnB,MAAc,EACd,OAAO,GAAc,EAAE,KAAK,EAAE,IAAI,EAAE,EACpC,OAAqC;IAErC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAC3B,MAAM,UAAU,GAAG,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC/D,IAAI,IAA2B,CAAA;IAC/B,IAAI,MAAqC,CAAA;IAEzC,MAAM,OAAO,GAAG,CAAC,KAAgB,EAAE,EAAE;QACnC,MAAM,EAAE,MAAM,EAAE,GAAG,KAA8B,CAAA;QACjD,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC3D,IAAI,GAAG,MAAM,CAAC,WAAW,CACvB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACpB,CAAC;gBACD,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;aACxE,CAAC,CACH,CAAA;YACD,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,IAAI,OAAO,CAAC,CAAA;QACrD,CAAC;aAAM,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,QAAQ,CAAC,IAAI,IAAI,EAAE,CAAC;YAC5D,MAAM,GAAG,OAAO,CACd,IAAI,EACJ,IAAI,EACJ,OAAO,OAAO,KAAK,QAAQ;gBACzB,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE;gBACjC,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CACzB,CAAA;YACD,IAAI,GAAG,SAAS,CAAA;QAClB,CAAC;IACH,CAAC,CAAA;IAED,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,MAAM,EAAE,IAAI,EAAE,CAAA;QACd,MAAM,GAAG,SAAS,CAAA;QAClB,IAAI,GAAG,SAAS,CAAA;IAClB,CAAC,CAAA;IACD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACzB,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAC3B,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAC1B,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QAC5B,MAAM,EAAE,CAAA;IACV,CAAC,CAAA;AACH,CAAC"}
|
package/dist/track.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../src/track.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../src/track.ts"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1D,OAAO,KAAK,EAAS,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAIhE;;;GAGG;AACH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,sCAAsC;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;IAClC,yDAAyD;IACzD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,uEAAuE;IACvE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,mGAAmG;IACnG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;IAChC,wBAAwB;IACxB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;CACpC;AAcD,wBAAgB,WAAW,CACzB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,MAAM,EAAE,EAC5B,UAAU,EAAE,kBAAkB,EAC9B,QAAQ,EAAE,MAAM,GACf,KAAK,CAmEP;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAgBrE"}
|