chnobli 0.1.9 → 0.1.11
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/dist/animation/Animation.d.ts +37 -0
- package/dist/animation/Animation.d.ts.map +1 -0
- package/dist/animation/Animation.js +232 -0
- package/dist/animation/Animation.js.map +1 -0
- package/dist/animation/public.d.ts +68 -0
- package/dist/animation/public.d.ts.map +1 -0
- package/dist/animation/public.js +115 -0
- package/dist/animation/public.js.map +1 -0
- package/dist/animator/Animator.d.ts +30 -0
- package/dist/animator/Animator.d.ts.map +1 -0
- package/dist/animator/Animator.js +97 -0
- package/dist/animator/Animator.js.map +1 -0
- package/dist/animator/index.d.ts +5 -0
- package/dist/animator/index.d.ts.map +1 -0
- package/dist/animator/index.js +53 -0
- package/dist/animator/index.js.map +1 -0
- package/dist/animator/public.d.ts +16 -0
- package/dist/animator/public.d.ts.map +1 -0
- package/dist/animator/public.js +50 -0
- package/dist/animator/public.js.map +1 -0
- package/dist/chnobli.d.ts +15 -0
- package/dist/chnobli.d.ts.map +1 -0
- package/dist/chnobli.js +59 -0
- package/dist/chnobli.js.map +1 -0
- package/dist/property/BasicProperty.d.ts +38 -0
- package/dist/property/BasicProperty.d.ts.map +1 -0
- package/dist/property/BasicProperty.js +72 -0
- package/dist/property/BasicProperty.js.map +1 -0
- package/dist/property/ClassProperty.d.ts +32 -0
- package/dist/property/ClassProperty.d.ts.map +1 -0
- package/dist/property/ClassProperty.js +108 -0
- package/dist/property/ClassProperty.js.map +1 -0
- package/dist/property/Property.d.ts +13 -0
- package/dist/property/Property.d.ts.map +1 -0
- package/dist/property/Property.js +22 -0
- package/dist/property/Property.js.map +1 -0
- package/dist/property/StyleProperty.d.ts +25 -0
- package/dist/property/StyleProperty.d.ts.map +1 -0
- package/dist/property/StyleProperty.js +221 -0
- package/dist/property/StyleProperty.js.map +1 -0
- package/dist/property/TransformProperty.d.ts +15 -0
- package/dist/property/TransformProperty.d.ts.map +1 -0
- package/dist/property/TransformProperty.js +43 -0
- package/dist/property/TransformProperty.js.map +1 -0
- package/dist/property/TransformXYProperty.d.ts +28 -0
- package/dist/property/TransformXYProperty.d.ts.map +1 -0
- package/dist/property/TransformXYProperty.js +65 -0
- package/dist/property/TransformXYProperty.js.map +1 -0
- package/dist/responsive/ResponsiveEvent.d.ts +17 -0
- package/dist/responsive/ResponsiveEvent.d.ts.map +1 -0
- package/dist/responsive/ResponsiveEvent.js +45 -0
- package/dist/responsive/ResponsiveEvent.js.map +1 -0
- package/dist/responsive/TestEvent.d.ts +11 -0
- package/dist/responsive/TestEvent.d.ts.map +1 -0
- package/dist/responsive/TestEvent.js +26 -0
- package/dist/responsive/TestEvent.js.map +1 -0
- package/dist/scroll/Scroll.d.ts +61 -0
- package/dist/scroll/Scroll.d.ts.map +1 -0
- package/dist/scroll/Scroll.js +280 -0
- package/dist/scroll/Scroll.js.map +1 -0
- package/dist/scroll/ScrollEvent.d.ts +17 -0
- package/dist/scroll/ScrollEvent.d.ts.map +1 -0
- package/dist/scroll/ScrollEvent.js +40 -0
- package/dist/scroll/ScrollEvent.js.map +1 -0
- package/dist/scroll/index.d.ts +8 -0
- package/dist/scroll/index.d.ts.map +1 -0
- package/dist/scroll/index.js +9 -0
- package/dist/scroll/index.js.map +1 -0
- package/dist/scroll/public.d.ts +35 -0
- package/dist/scroll/public.d.ts.map +1 -0
- package/dist/scroll/public.js +50 -0
- package/dist/scroll/public.js.map +1 -0
- package/dist/stagger/stagger.d.ts +20 -0
- package/dist/stagger/stagger.d.ts.map +1 -0
- package/dist/stagger/stagger.js +43 -0
- package/dist/stagger/stagger.js.map +1 -0
- package/dist/target/BaseTarget.old.d.ts +33 -0
- package/dist/target/BaseTarget.old.d.ts.map +1 -0
- package/dist/target/BaseTarget.old.js +73 -0
- package/dist/target/BaseTarget.old.js.map +1 -0
- package/dist/target/DomTarget.d.ts +41 -0
- package/dist/target/DomTarget.d.ts.map +1 -0
- package/dist/target/DomTarget.js +230 -0
- package/dist/target/DomTarget.js.map +1 -0
- package/dist/target/ObjectTarget.d.ts +31 -0
- package/dist/target/ObjectTarget.d.ts.map +1 -0
- package/dist/target/ObjectTarget.js +108 -0
- package/dist/target/ObjectTarget.js.map +1 -0
- package/dist/target/Target.d.ts +25 -0
- package/dist/target/Target.d.ts.map +1 -0
- package/dist/target/Target.js +25 -0
- package/dist/target/Target.js.map +1 -0
- package/dist/target/TestDomNode.d.ts +14 -0
- package/dist/target/TestDomNode.d.ts.map +1 -0
- package/dist/target/TestDomNode.js +55 -0
- package/dist/target/TestDomNode.js.map +1 -0
- package/dist/timeline/Nested.d.ts +30 -0
- package/dist/timeline/Nested.d.ts.map +1 -0
- package/dist/timeline/Nested.js +51 -0
- package/dist/timeline/Nested.js.map +1 -0
- package/dist/timeline/Timeline.d.ts +42 -0
- package/dist/timeline/Timeline.d.ts.map +1 -0
- package/dist/timeline/Timeline.js +306 -0
- package/dist/timeline/Timeline.js.map +1 -0
- package/dist/timeline/public.d.ts +167 -0
- package/dist/timeline/public.d.ts.map +1 -0
- package/dist/timeline/public.js +396 -0
- package/dist/timeline/public.js.map +1 -0
- package/dist/timing/AnimationFrameTicker.d.ts +32 -0
- package/dist/timing/AnimationFrameTicker.d.ts.map +1 -0
- package/dist/timing/AnimationFrameTicker.js +138 -0
- package/dist/timing/AnimationFrameTicker.js.map +1 -0
- package/dist/timing/Ease.d.ts +6 -0
- package/dist/timing/Ease.d.ts.map +1 -0
- package/dist/timing/Ease.js +15 -0
- package/dist/timing/Ease.js.map +1 -0
- package/dist/timing/TestTicker.d.ts +19 -0
- package/dist/timing/TestTicker.d.ts.map +1 -0
- package/dist/timing/TestTicker.js +85 -0
- package/dist/timing/TestTicker.js.map +1 -0
- package/dist/timing/Ticker.d.ts +16 -0
- package/dist/timing/Ticker.d.ts.map +1 -0
- package/dist/timing/Ticker.js +2 -0
- package/dist/timing/Ticker.js.map +1 -0
- package/dist/timing/Timing.d.ts +116 -0
- package/dist/timing/Timing.d.ts.map +1 -0
- package/dist/timing/Timing.js +310 -0
- package/dist/timing/Timing.js.map +1 -0
- package/dist/timing/easing.d.ts +158 -0
- package/dist/timing/easing.d.ts.map +1 -0
- package/dist/timing/easing.js +273 -0
- package/dist/timing/easing.js.map +1 -0
- package/dist/utils/Events.d.ts +9 -0
- package/dist/utils/Events.d.ts.map +1 -0
- package/dist/utils/Events.js +35 -0
- package/dist/utils/Events.js.map +1 -0
- package/dist/utils/internal.d.ts +5 -0
- package/dist/utils/internal.d.ts.map +1 -0
- package/dist/utils/internal.js +9 -0
- package/dist/utils/internal.js.map +1 -0
- package/dist/utils/motionpath.d.ts +16 -0
- package/dist/utils/motionpath.d.ts.map +1 -0
- package/dist/utils/motionpath.js +41 -0
- package/dist/utils/motionpath.js.map +1 -0
- package/dist/utils/utils.d.ts +44 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +88 -0
- package/dist/utils/utils.js.map +1 -0
- package/dist/values/ColorValue.d.ts +12 -0
- package/dist/values/ColorValue.d.ts.map +1 -0
- package/dist/values/ColorValue.js +134 -0
- package/dist/values/ColorValue.js.map +1 -0
- package/dist/values/StyleValue.d.ts +41 -0
- package/dist/values/StyleValue.d.ts.map +1 -0
- package/dist/values/StyleValue.js +159 -0
- package/dist/values/StyleValue.js.map +1 -0
- package/dist/values/Value.d.ts +13 -0
- package/dist/values/Value.d.ts.map +1 -0
- package/dist/values/Value.js +38 -0
- package/dist/values/Value.js.map +1 -0
- package/dist/values/defaultcolors.d.ts +2 -0
- package/dist/values/defaultcolors.d.ts.map +1 -0
- package/dist/values/defaultcolors.js +149 -0
- package/dist/values/defaultcolors.js.map +1 -0
- package/eslint.config.js +23 -0
- package/package.json +10 -3
- package/src/animation/Animation.ts +6 -3
- package/src/animator/Animator.ts +130 -0
- package/src/animator/index.ts +56 -0
- package/src/animator/public.ts +66 -0
- package/src/chnobli.ts +3 -2
- package/src/property/ClassProperty.ts +1 -1
- package/src/property/TransformXYProperty.ts +1 -1
- package/src/scroll/Scroll.ts +202 -51
- package/src/scroll/ScrollEvent.ts +1 -0
- package/src/scroll/index.ts +3 -0
- package/src/scroll/public.ts +35 -2
- package/src/target/DomTarget.ts +1 -1
- package/src/target/ObjectTarget.ts +19 -13
- package/src/tests/properties.test.ts +44 -3
- package/src/tests/timeline.test.ts +1 -1
- package/src/tests/timing.test.ts +32 -0
- package/src/tests/usecases.test.ts +40 -2
- package/src/tests/values.test.ts +9 -9
- package/src/timeline/Timeline.ts +5 -4
- package/src/timeline/public.ts +34 -12
- package/src/timing/AnimationFrameTicker.ts +6 -1
- package/src/timing/TestTicker.ts +7 -1
- package/src/timing/Ticker.ts +5 -1
- package/src/timing/Timing.ts +127 -91
- package/src/utils/Events.ts +1 -1
- package/src/utils/motionpath.ts +5 -5
- package/src/utils/utils.ts +0 -10
- package/src/values/ColorValue.ts +1 -0
- package/src/values/Value.ts +1 -1
- package/.eslintrc.cjs +0 -39
- package/src/animator.js +0 -187
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { GlobalTargets } from './AnimationFrameTicker.js';
|
|
2
|
+
export default class TestTicker {
|
|
3
|
+
_listeners;
|
|
4
|
+
targets;
|
|
5
|
+
running;
|
|
6
|
+
_previousTick;
|
|
7
|
+
constructor() {
|
|
8
|
+
this._listeners = new Set();
|
|
9
|
+
this.targets = new GlobalTargets();
|
|
10
|
+
this.running = false;
|
|
11
|
+
this._previousTick = null;
|
|
12
|
+
// @ts-ignore
|
|
13
|
+
globalThis.chnobliTicker = this;
|
|
14
|
+
}
|
|
15
|
+
registerTarget(target) {
|
|
16
|
+
return this.targets.register(target);
|
|
17
|
+
}
|
|
18
|
+
unregisterTarget(target) {
|
|
19
|
+
return this.targets.unregister(target);
|
|
20
|
+
}
|
|
21
|
+
applyTargets() {
|
|
22
|
+
return this.targets.apply();
|
|
23
|
+
}
|
|
24
|
+
add(fn) {
|
|
25
|
+
this._listeners.add(fn);
|
|
26
|
+
if (!this.running)
|
|
27
|
+
this.running = true;
|
|
28
|
+
return {
|
|
29
|
+
remove: () => {
|
|
30
|
+
this.remove(fn);
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
remove(fn) {
|
|
35
|
+
this._listeners.delete(fn);
|
|
36
|
+
}
|
|
37
|
+
/// max expects a number for how many ms the ticker should run
|
|
38
|
+
///
|
|
39
|
+
/// runs until the ticker ends this allows to run
|
|
40
|
+
run(max = 3000, step = 1) {
|
|
41
|
+
if (!this.running)
|
|
42
|
+
return true;
|
|
43
|
+
if (this._previousTick === null)
|
|
44
|
+
this.tick(0);
|
|
45
|
+
let i = 0;
|
|
46
|
+
const start = this._previousTick ?? 0;
|
|
47
|
+
for (i = 1; i <= max; i += step) {
|
|
48
|
+
if (!this.tick(start + i))
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
// elapsed in ms
|
|
54
|
+
tick(elapsed) {
|
|
55
|
+
if (!this.running)
|
|
56
|
+
return false;
|
|
57
|
+
if (this._previousTick === null)
|
|
58
|
+
this._previousTick = elapsed;
|
|
59
|
+
let change = elapsed - this._previousTick;
|
|
60
|
+
// lagSmoothing
|
|
61
|
+
if (change > 500) {
|
|
62
|
+
console.log('ticker lagged');
|
|
63
|
+
change = 33;
|
|
64
|
+
}
|
|
65
|
+
this._previousTick = elapsed;
|
|
66
|
+
const onApplied = [];
|
|
67
|
+
for (const fn of this._listeners) {
|
|
68
|
+
fn(change, {
|
|
69
|
+
remove: () => this.remove(fn),
|
|
70
|
+
onApplied: fn => onApplied.push(fn),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
this.targets.apply();
|
|
74
|
+
for (const fn of onApplied) {
|
|
75
|
+
fn();
|
|
76
|
+
}
|
|
77
|
+
if (this._listeners.size === 0) {
|
|
78
|
+
this.running = false;
|
|
79
|
+
this._previousTick = null;
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=TestTicker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestTicker.js","sourceRoot":"","sources":["../../src/timing/TestTicker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Target } from '../target/Target.js';
|
|
2
|
+
export type CallbackApi = {
|
|
3
|
+
remove: () => void;
|
|
4
|
+
onApplied: (fn: () => void) => void;
|
|
5
|
+
};
|
|
6
|
+
export type Callback = (change: number, api: CallbackApi) => void;
|
|
7
|
+
export default interface Ticker {
|
|
8
|
+
registerTarget(target: any): Target;
|
|
9
|
+
unregisterTarget(target: any): void;
|
|
10
|
+
applyTargets(): void;
|
|
11
|
+
add(fn: Callback): {
|
|
12
|
+
remove: () => void;
|
|
13
|
+
};
|
|
14
|
+
remove(fn: Callback): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=Ticker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Ticker.d.ts","sourceRoot":"","sources":["../../src/timing/Ticker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,MAAM,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACpC,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC;AAElE,MAAM,CAAC,OAAO,WAAW,MAAM;IAC9B,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC;IACpC,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IACpC,YAAY,IAAI,IAAI,CAAC;IACrB,GAAG,CAAC,EAAE,EAAE,QAAQ,GAAG;QAAE,MAAM,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IAC1C,MAAM,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Ticker.js","sourceRoot":"","sources":["../../src/timing/Ticker.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export declare const STATE_BEFORE = 0;
|
|
2
|
+
export declare const STATE_START = 1;
|
|
3
|
+
export declare const STATE_RUNNING = 2;
|
|
4
|
+
export declare const STATE_ENDED = 3;
|
|
5
|
+
export declare const STATE_AFTER = 4;
|
|
6
|
+
export type Position = {
|
|
7
|
+
progress: number;
|
|
8
|
+
};
|
|
9
|
+
export type TimingProps = {
|
|
10
|
+
duration: number;
|
|
11
|
+
ease?: (t: number) => number;
|
|
12
|
+
repeat?: number;
|
|
13
|
+
alternate?: boolean;
|
|
14
|
+
reversed?: boolean;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* This class handles everything timing related
|
|
18
|
+
*
|
|
19
|
+
* It manages easing, keeps track of where we are at the moment
|
|
20
|
+
*
|
|
21
|
+
* The most important property is position which gives the calculated position
|
|
22
|
+
*
|
|
23
|
+
*
|
|
24
|
+
* Timing works the same as in after effects
|
|
25
|
+
* if the duration is not at least 1ms the position is always 1 and either
|
|
26
|
+
* STATE_BEFORE or STATE_AFTER
|
|
27
|
+
*
|
|
28
|
+
* if the duration is 1ms seek 0 or 1 will always result in position 1
|
|
29
|
+
* because it is like one frame, so it's an image
|
|
30
|
+
*/
|
|
31
|
+
export default class Timing {
|
|
32
|
+
/**
|
|
33
|
+
* The duration of a single iteration
|
|
34
|
+
*/
|
|
35
|
+
iterDuration: number;
|
|
36
|
+
/**
|
|
37
|
+
* The total duration of the timing
|
|
38
|
+
*/
|
|
39
|
+
duration: number;
|
|
40
|
+
ease: (t: number) => number;
|
|
41
|
+
/**
|
|
42
|
+
* The number of repeats
|
|
43
|
+
*
|
|
44
|
+
* -1 is infinite
|
|
45
|
+
*/
|
|
46
|
+
repeat: number;
|
|
47
|
+
/**
|
|
48
|
+
* If the iteration should alternate
|
|
49
|
+
*/
|
|
50
|
+
alternate: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* If the iteration should be reversed
|
|
53
|
+
*/
|
|
54
|
+
reversed: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* The position of the current iteration
|
|
57
|
+
*
|
|
58
|
+
* will never be outside of the range 0-1 (inclusive)
|
|
59
|
+
*/
|
|
60
|
+
position: number;
|
|
61
|
+
/**
|
|
62
|
+
* The state of the timing
|
|
63
|
+
*/
|
|
64
|
+
state: number;
|
|
65
|
+
/**
|
|
66
|
+
* Progress is a value which always counts up
|
|
67
|
+
* does not take alternate or easing into account
|
|
68
|
+
*/
|
|
69
|
+
private progress;
|
|
70
|
+
constructor(props: TimingProps);
|
|
71
|
+
setDuration(iterDuration: number): void;
|
|
72
|
+
/**
|
|
73
|
+
* Returns the current position in milliseconds
|
|
74
|
+
*
|
|
75
|
+
* This is equivalent to position * iteration duration
|
|
76
|
+
*/
|
|
77
|
+
positionMs(): number;
|
|
78
|
+
/**
|
|
79
|
+
* Returns the position in milliseconds
|
|
80
|
+
*
|
|
81
|
+
* If the state is before or after the position might be more/less than
|
|
82
|
+
* required
|
|
83
|
+
*/
|
|
84
|
+
positionMsUnbounded(): number;
|
|
85
|
+
isFinite(): boolean;
|
|
86
|
+
advance(change: number): void;
|
|
87
|
+
seekMs(ms: number): void;
|
|
88
|
+
/**
|
|
89
|
+
* Returns the position of time (ms) position
|
|
90
|
+
*/
|
|
91
|
+
normalizeMs(ms: number): number;
|
|
92
|
+
positionAbsolute(): number;
|
|
93
|
+
seek(pos: number): void;
|
|
94
|
+
savePosition(): Position;
|
|
95
|
+
restorePosition(pos: Position): void;
|
|
96
|
+
/**
|
|
97
|
+
* Sets the alternate
|
|
98
|
+
*/
|
|
99
|
+
setAlternate(alternate: boolean): void;
|
|
100
|
+
reverse(): void;
|
|
101
|
+
_shouldInvert(): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Updates the progress and the state
|
|
104
|
+
*
|
|
105
|
+
* newProgress should follow the same rules as _progress
|
|
106
|
+
*/
|
|
107
|
+
_updateProgress(newProgress: number): void;
|
|
108
|
+
}
|
|
109
|
+
export declare function newTiming(props: Record<string, any>): Timing;
|
|
110
|
+
export declare function parseDuration(dur: any): number;
|
|
111
|
+
export declare function parseEase(ease: any): (t: number) => number;
|
|
112
|
+
export declare function parseRepeat(repeat: any): number;
|
|
113
|
+
export declare function parseDelay(delay: any): number;
|
|
114
|
+
export declare function parseAlternate(alternate: any): boolean;
|
|
115
|
+
export declare function parseReversed(reversed: any): boolean;
|
|
116
|
+
//# sourceMappingURL=Timing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Timing.d.ts","sourceRoot":"","sources":["../../src/timing/Timing.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,WAAW,IAAI,CAAC;AAE7B,MAAM,MAAM,QAAQ,GAAG;IACtB,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IAC1B;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5B;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAS;gBAEb,KAAK,EAAE,WAAW;IAmB9B,WAAW,CAAC,YAAY,EAAE,MAAM;IAShC;;;;OAIG;IACH,UAAU;IAMV;;;;;OAKG;IACH,mBAAmB;IAgBnB,QAAQ;IAIR,OAAO,CAAC,MAAM,EAAE,MAAM;IAoBtB,MAAM,CAAC,EAAE,EAAE,MAAM;IAIjB;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,MAAM;IAWtB,gBAAgB,IAAI,MAAM;IAY1B,IAAI,CAAC,GAAG,EAAE,MAAM;IAShB,YAAY,IAAI,QAAQ;IAMxB,eAAe,CAAC,GAAG,EAAE,QAAQ;IAI7B;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,OAAO;IAO/B,OAAO;IAWP,aAAa;IAQb;;;;OAIG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM;CA4DnC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAU5D;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAM9C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAK1D;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAY/C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAK7C;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,GAAG,GAAG,OAAO,CAKtD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAKpD"}
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { takeProp } from '../utils/internal.js';
|
|
2
|
+
export const STATE_BEFORE = 0;
|
|
3
|
+
/// start only occurs if the current position is exactly 0 or 1 if reversed
|
|
4
|
+
export const STATE_START = 1;
|
|
5
|
+
export const STATE_RUNNING = 2;
|
|
6
|
+
/// ended only occurs if the current position is exactly 1 or 0 if reversed
|
|
7
|
+
export const STATE_ENDED = 3;
|
|
8
|
+
export const STATE_AFTER = 4;
|
|
9
|
+
/**
|
|
10
|
+
* This class handles everything timing related
|
|
11
|
+
*
|
|
12
|
+
* It manages easing, keeps track of where we are at the moment
|
|
13
|
+
*
|
|
14
|
+
* The most important property is position which gives the calculated position
|
|
15
|
+
*
|
|
16
|
+
*
|
|
17
|
+
* Timing works the same as in after effects
|
|
18
|
+
* if the duration is not at least 1ms the position is always 1 and either
|
|
19
|
+
* STATE_BEFORE or STATE_AFTER
|
|
20
|
+
*
|
|
21
|
+
* if the duration is 1ms seek 0 or 1 will always result in position 1
|
|
22
|
+
* because it is like one frame, so it's an image
|
|
23
|
+
*/
|
|
24
|
+
export default class Timing {
|
|
25
|
+
/**
|
|
26
|
+
* The duration of a single iteration
|
|
27
|
+
*/
|
|
28
|
+
iterDuration;
|
|
29
|
+
/**
|
|
30
|
+
* The total duration of the timing
|
|
31
|
+
*/
|
|
32
|
+
duration;
|
|
33
|
+
ease;
|
|
34
|
+
/**
|
|
35
|
+
* The number of repeats
|
|
36
|
+
*
|
|
37
|
+
* -1 is infinite
|
|
38
|
+
*/
|
|
39
|
+
repeat;
|
|
40
|
+
/**
|
|
41
|
+
* If the iteration should alternate
|
|
42
|
+
*/
|
|
43
|
+
alternate;
|
|
44
|
+
/**
|
|
45
|
+
* If the iteration should be reversed
|
|
46
|
+
*/
|
|
47
|
+
reversed;
|
|
48
|
+
/**
|
|
49
|
+
* The position of the current iteration
|
|
50
|
+
*
|
|
51
|
+
* will never be outside of the range 0-1 (inclusive)
|
|
52
|
+
*/
|
|
53
|
+
position;
|
|
54
|
+
/**
|
|
55
|
+
* The state of the timing
|
|
56
|
+
*/
|
|
57
|
+
state;
|
|
58
|
+
/**
|
|
59
|
+
* Progress is a value which always counts up
|
|
60
|
+
* does not take alternate or easing into account
|
|
61
|
+
*/
|
|
62
|
+
progress;
|
|
63
|
+
constructor(props) {
|
|
64
|
+
// these vars are only readonly
|
|
65
|
+
// use functions to update them
|
|
66
|
+
this.ease = props.ease ?? (t => t);
|
|
67
|
+
this.repeat = props.repeat ?? 0;
|
|
68
|
+
this.alternate = props.alternate ?? true;
|
|
69
|
+
this.reversed = props.reversed ?? false;
|
|
70
|
+
this.iterDuration = 0;
|
|
71
|
+
this.duration = 0;
|
|
72
|
+
this.setDuration(props.duration);
|
|
73
|
+
this.position = 0;
|
|
74
|
+
this.state = STATE_BEFORE;
|
|
75
|
+
this.progress = 0;
|
|
76
|
+
this.seek(-1);
|
|
77
|
+
}
|
|
78
|
+
setDuration(iterDuration) {
|
|
79
|
+
this.iterDuration = iterDuration;
|
|
80
|
+
this.duration = this.iterDuration;
|
|
81
|
+
if (this.isFinite()) {
|
|
82
|
+
this.duration = (this.repeat + 1) * this.iterDuration;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Returns the current position in milliseconds
|
|
87
|
+
*
|
|
88
|
+
* This is equivalent to position * iteration duration
|
|
89
|
+
*/
|
|
90
|
+
positionMs() {
|
|
91
|
+
// todo should this not return pos * duration?
|
|
92
|
+
return this.position * this.iterDuration;
|
|
93
|
+
}
|
|
94
|
+
// todo find a better name
|
|
95
|
+
/**
|
|
96
|
+
* Returns the position in milliseconds
|
|
97
|
+
*
|
|
98
|
+
* If the state is before or after the position might be more/less than
|
|
99
|
+
* required
|
|
100
|
+
*/
|
|
101
|
+
positionMsUnbounded() {
|
|
102
|
+
let reversed = this.reversed;
|
|
103
|
+
if (this._shouldInvert())
|
|
104
|
+
reversed = !reversed;
|
|
105
|
+
let pos = this.position;
|
|
106
|
+
if (this.state <= STATE_BEFORE) {
|
|
107
|
+
pos = reversed ? 2 : -1;
|
|
108
|
+
}
|
|
109
|
+
else if (this.state >= STATE_AFTER) {
|
|
110
|
+
pos = reversed ? -1 : 2;
|
|
111
|
+
}
|
|
112
|
+
return pos * this.iterDuration;
|
|
113
|
+
}
|
|
114
|
+
isFinite() {
|
|
115
|
+
return this.repeat > -1;
|
|
116
|
+
}
|
|
117
|
+
advance(change) {
|
|
118
|
+
if (this.state >= STATE_AFTER)
|
|
119
|
+
return;
|
|
120
|
+
if (this.iterDuration <= 0) {
|
|
121
|
+
this._updateProgress(1);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (this.isFinite()) {
|
|
125
|
+
this._updateProgress(this.positionAbsolute() + change / this.iterDuration);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// to make sure we don't mess up the alternate
|
|
129
|
+
this._updateProgress(Math.max(0, this.progress) + change / this.iterDuration);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
seekMs(ms) {
|
|
133
|
+
return this.seek(this.normalizeMs(ms));
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Returns the position of time (ms) position
|
|
137
|
+
*/
|
|
138
|
+
normalizeMs(ms) {
|
|
139
|
+
if (this.iterDuration <= 0) {
|
|
140
|
+
return Math.sign(ms);
|
|
141
|
+
}
|
|
142
|
+
return ms / this.duration;
|
|
143
|
+
}
|
|
144
|
+
// Returns the position without easing or reversing
|
|
145
|
+
//
|
|
146
|
+
// Returns 0..=(repeat + 1)
|
|
147
|
+
positionAbsolute() {
|
|
148
|
+
if (this.isFinite()) {
|
|
149
|
+
return Math.min(this.repeat + 1, Math.max(0, this.progress));
|
|
150
|
+
}
|
|
151
|
+
// the iterations should be inclusive
|
|
152
|
+
const prog = Math.max(0, this.progress) % 1;
|
|
153
|
+
if (prog === 0 && this.progress > 0)
|
|
154
|
+
return 1;
|
|
155
|
+
return prog;
|
|
156
|
+
}
|
|
157
|
+
// should be between 0-1 if outside might change the state
|
|
158
|
+
seek(pos) {
|
|
159
|
+
if (this.isFinite()) {
|
|
160
|
+
this._updateProgress(pos * (this.repeat + 1));
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
// to make sure we don't mess up the alternate
|
|
164
|
+
this._updateProgress(Math.floor(this.progress) + pos);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
savePosition() {
|
|
168
|
+
return {
|
|
169
|
+
progress: this.progress,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
restorePosition(pos) {
|
|
173
|
+
this._updateProgress(pos.progress);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Sets the alternate
|
|
177
|
+
*/
|
|
178
|
+
setAlternate(alternate) {
|
|
179
|
+
if (this.alternate == alternate)
|
|
180
|
+
return;
|
|
181
|
+
this.reversed = !this.reversed;
|
|
182
|
+
this.alternate = alternate;
|
|
183
|
+
}
|
|
184
|
+
reverse() {
|
|
185
|
+
this.reversed = !this.reversed;
|
|
186
|
+
if (this.isFinite()) {
|
|
187
|
+
this._updateProgress(this.repeat + 1 - this.progress);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
const fract = this.progress % 1;
|
|
191
|
+
this._updateProgress(Math.floor(this.progress) + 1 - fract);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
_shouldInvert() {
|
|
195
|
+
return (this.alternate &&
|
|
196
|
+
Math.floor(this.progress) % 2 === 1 &&
|
|
197
|
+
this.progress % 1 !== 0);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Updates the progress and the state
|
|
201
|
+
*
|
|
202
|
+
* newProgress should follow the same rules as _progress
|
|
203
|
+
*/
|
|
204
|
+
_updateProgress(newProgress) {
|
|
205
|
+
// if duration is zero the position is always 1
|
|
206
|
+
// and the state is either BEFORE or AFTER
|
|
207
|
+
if (this.iterDuration <= 0) {
|
|
208
|
+
newProgress = Math.sign(newProgress);
|
|
209
|
+
this.progress = newProgress;
|
|
210
|
+
this.position = 1;
|
|
211
|
+
if (newProgress < 0)
|
|
212
|
+
this.state = STATE_BEFORE;
|
|
213
|
+
else
|
|
214
|
+
this.state = STATE_AFTER;
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
this.progress = newProgress;
|
|
218
|
+
// update state
|
|
219
|
+
//
|
|
220
|
+
// is this not wrong if we are in reversed?
|
|
221
|
+
//
|
|
222
|
+
// since infinite repeat can never end let's ignore it
|
|
223
|
+
if (this.isFinite()) {
|
|
224
|
+
const end = this.repeat + 1;
|
|
225
|
+
if (this.progress > end) {
|
|
226
|
+
this.progress = end + 1;
|
|
227
|
+
this.state = STATE_AFTER;
|
|
228
|
+
}
|
|
229
|
+
else if (this.progress === end) {
|
|
230
|
+
this.state = STATE_ENDED;
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
this.state = STATE_RUNNING;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
this.state = STATE_RUNNING;
|
|
238
|
+
}
|
|
239
|
+
// override state if not running
|
|
240
|
+
if (this.progress < 0) {
|
|
241
|
+
this.progress = -1;
|
|
242
|
+
this.state = STATE_BEFORE;
|
|
243
|
+
}
|
|
244
|
+
else if (this.progress === 0) {
|
|
245
|
+
this.state = STATE_START;
|
|
246
|
+
}
|
|
247
|
+
// now calculate the position
|
|
248
|
+
this.position = this.positionAbsolute() % 1;
|
|
249
|
+
// the iterations should be inclusive
|
|
250
|
+
if (this.position === 0 && this.progress > 0) {
|
|
251
|
+
this.position = 1;
|
|
252
|
+
}
|
|
253
|
+
// alternate
|
|
254
|
+
if (this._shouldInvert())
|
|
255
|
+
this.position = 1 - this.position;
|
|
256
|
+
// calc if we are in a reversed iteration or not
|
|
257
|
+
// and we are we should invert the position
|
|
258
|
+
if (this.reversed)
|
|
259
|
+
this.position = 1 - this.position;
|
|
260
|
+
this.position = this.ease(this.position);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
export function newTiming(props) {
|
|
264
|
+
const nProps = {
|
|
265
|
+
duration: parseDuration(takeProp(props, 'duration', 1000)),
|
|
266
|
+
ease: parseEase(takeProp(props, 'ease', null)),
|
|
267
|
+
repeat: parseRepeat(takeProp(props, 'repeat', false)),
|
|
268
|
+
alternate: parseAlternate(takeProp(props, 'alternate', true)),
|
|
269
|
+
};
|
|
270
|
+
// this._delay = parseDelay(takeProp(props, 'delay', 0));
|
|
271
|
+
return new Timing(nProps);
|
|
272
|
+
}
|
|
273
|
+
export function parseDuration(dur) {
|
|
274
|
+
if (typeof dur !== 'number')
|
|
275
|
+
throw new Error('duration is not a number');
|
|
276
|
+
dur = Math.round(dur);
|
|
277
|
+
return Math.max(dur, 0);
|
|
278
|
+
}
|
|
279
|
+
export function parseEase(ease) {
|
|
280
|
+
if (ease !== null && typeof ease !== 'function')
|
|
281
|
+
throw new Error('ease needs to be null or a function');
|
|
282
|
+
return ease;
|
|
283
|
+
}
|
|
284
|
+
export function parseRepeat(repeat) {
|
|
285
|
+
if (repeat !== true &&
|
|
286
|
+
repeat !== false &&
|
|
287
|
+
(typeof repeat !== 'number' || repeat < 0))
|
|
288
|
+
throw new Error('repeat needs to be true|false|0+');
|
|
289
|
+
if (repeat === true)
|
|
290
|
+
repeat = -1;
|
|
291
|
+
else if (repeat === false)
|
|
292
|
+
repeat = 0;
|
|
293
|
+
return repeat;
|
|
294
|
+
}
|
|
295
|
+
export function parseDelay(delay) {
|
|
296
|
+
if (typeof delay !== 'number' || delay < 0)
|
|
297
|
+
throw new Error('delay needs to be 0+');
|
|
298
|
+
return delay;
|
|
299
|
+
}
|
|
300
|
+
export function parseAlternate(alternate) {
|
|
301
|
+
if (alternate !== true && alternate !== false)
|
|
302
|
+
throw new Error('alternate needs to be true|false');
|
|
303
|
+
return alternate;
|
|
304
|
+
}
|
|
305
|
+
export function parseReversed(reversed) {
|
|
306
|
+
if (reversed !== true && reversed !== false)
|
|
307
|
+
throw new Error('reversed needs to be true|false');
|
|
308
|
+
return reversed;
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=Timing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Timing.js","sourceRoot":"","sources":["../../src/timing/Timing.ts"],"names":[],"mappings":"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"}
|