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.
Files changed (197) hide show
  1. package/dist/animation/Animation.d.ts +37 -0
  2. package/dist/animation/Animation.d.ts.map +1 -0
  3. package/dist/animation/Animation.js +232 -0
  4. package/dist/animation/Animation.js.map +1 -0
  5. package/dist/animation/public.d.ts +68 -0
  6. package/dist/animation/public.d.ts.map +1 -0
  7. package/dist/animation/public.js +115 -0
  8. package/dist/animation/public.js.map +1 -0
  9. package/dist/animator/Animator.d.ts +30 -0
  10. package/dist/animator/Animator.d.ts.map +1 -0
  11. package/dist/animator/Animator.js +97 -0
  12. package/dist/animator/Animator.js.map +1 -0
  13. package/dist/animator/index.d.ts +5 -0
  14. package/dist/animator/index.d.ts.map +1 -0
  15. package/dist/animator/index.js +53 -0
  16. package/dist/animator/index.js.map +1 -0
  17. package/dist/animator/public.d.ts +16 -0
  18. package/dist/animator/public.d.ts.map +1 -0
  19. package/dist/animator/public.js +50 -0
  20. package/dist/animator/public.js.map +1 -0
  21. package/dist/chnobli.d.ts +15 -0
  22. package/dist/chnobli.d.ts.map +1 -0
  23. package/dist/chnobli.js +59 -0
  24. package/dist/chnobli.js.map +1 -0
  25. package/dist/property/BasicProperty.d.ts +38 -0
  26. package/dist/property/BasicProperty.d.ts.map +1 -0
  27. package/dist/property/BasicProperty.js +72 -0
  28. package/dist/property/BasicProperty.js.map +1 -0
  29. package/dist/property/ClassProperty.d.ts +32 -0
  30. package/dist/property/ClassProperty.d.ts.map +1 -0
  31. package/dist/property/ClassProperty.js +108 -0
  32. package/dist/property/ClassProperty.js.map +1 -0
  33. package/dist/property/Property.d.ts +13 -0
  34. package/dist/property/Property.d.ts.map +1 -0
  35. package/dist/property/Property.js +22 -0
  36. package/dist/property/Property.js.map +1 -0
  37. package/dist/property/StyleProperty.d.ts +25 -0
  38. package/dist/property/StyleProperty.d.ts.map +1 -0
  39. package/dist/property/StyleProperty.js +221 -0
  40. package/dist/property/StyleProperty.js.map +1 -0
  41. package/dist/property/TransformProperty.d.ts +15 -0
  42. package/dist/property/TransformProperty.d.ts.map +1 -0
  43. package/dist/property/TransformProperty.js +43 -0
  44. package/dist/property/TransformProperty.js.map +1 -0
  45. package/dist/property/TransformXYProperty.d.ts +28 -0
  46. package/dist/property/TransformXYProperty.d.ts.map +1 -0
  47. package/dist/property/TransformXYProperty.js +65 -0
  48. package/dist/property/TransformXYProperty.js.map +1 -0
  49. package/dist/responsive/ResponsiveEvent.d.ts +17 -0
  50. package/dist/responsive/ResponsiveEvent.d.ts.map +1 -0
  51. package/dist/responsive/ResponsiveEvent.js +45 -0
  52. package/dist/responsive/ResponsiveEvent.js.map +1 -0
  53. package/dist/responsive/TestEvent.d.ts +11 -0
  54. package/dist/responsive/TestEvent.d.ts.map +1 -0
  55. package/dist/responsive/TestEvent.js +26 -0
  56. package/dist/responsive/TestEvent.js.map +1 -0
  57. package/dist/scroll/Scroll.d.ts +61 -0
  58. package/dist/scroll/Scroll.d.ts.map +1 -0
  59. package/dist/scroll/Scroll.js +280 -0
  60. package/dist/scroll/Scroll.js.map +1 -0
  61. package/dist/scroll/ScrollEvent.d.ts +17 -0
  62. package/dist/scroll/ScrollEvent.d.ts.map +1 -0
  63. package/dist/scroll/ScrollEvent.js +40 -0
  64. package/dist/scroll/ScrollEvent.js.map +1 -0
  65. package/dist/scroll/index.d.ts +8 -0
  66. package/dist/scroll/index.d.ts.map +1 -0
  67. package/dist/scroll/index.js +9 -0
  68. package/dist/scroll/index.js.map +1 -0
  69. package/dist/scroll/public.d.ts +35 -0
  70. package/dist/scroll/public.d.ts.map +1 -0
  71. package/dist/scroll/public.js +50 -0
  72. package/dist/scroll/public.js.map +1 -0
  73. package/dist/stagger/stagger.d.ts +20 -0
  74. package/dist/stagger/stagger.d.ts.map +1 -0
  75. package/dist/stagger/stagger.js +43 -0
  76. package/dist/stagger/stagger.js.map +1 -0
  77. package/dist/target/BaseTarget.old.d.ts +33 -0
  78. package/dist/target/BaseTarget.old.d.ts.map +1 -0
  79. package/dist/target/BaseTarget.old.js +73 -0
  80. package/dist/target/BaseTarget.old.js.map +1 -0
  81. package/dist/target/DomTarget.d.ts +41 -0
  82. package/dist/target/DomTarget.d.ts.map +1 -0
  83. package/dist/target/DomTarget.js +230 -0
  84. package/dist/target/DomTarget.js.map +1 -0
  85. package/dist/target/ObjectTarget.d.ts +31 -0
  86. package/dist/target/ObjectTarget.d.ts.map +1 -0
  87. package/dist/target/ObjectTarget.js +108 -0
  88. package/dist/target/ObjectTarget.js.map +1 -0
  89. package/dist/target/Target.d.ts +25 -0
  90. package/dist/target/Target.d.ts.map +1 -0
  91. package/dist/target/Target.js +25 -0
  92. package/dist/target/Target.js.map +1 -0
  93. package/dist/target/TestDomNode.d.ts +14 -0
  94. package/dist/target/TestDomNode.d.ts.map +1 -0
  95. package/dist/target/TestDomNode.js +55 -0
  96. package/dist/target/TestDomNode.js.map +1 -0
  97. package/dist/timeline/Nested.d.ts +30 -0
  98. package/dist/timeline/Nested.d.ts.map +1 -0
  99. package/dist/timeline/Nested.js +51 -0
  100. package/dist/timeline/Nested.js.map +1 -0
  101. package/dist/timeline/Timeline.d.ts +42 -0
  102. package/dist/timeline/Timeline.d.ts.map +1 -0
  103. package/dist/timeline/Timeline.js +306 -0
  104. package/dist/timeline/Timeline.js.map +1 -0
  105. package/dist/timeline/public.d.ts +167 -0
  106. package/dist/timeline/public.d.ts.map +1 -0
  107. package/dist/timeline/public.js +396 -0
  108. package/dist/timeline/public.js.map +1 -0
  109. package/dist/timing/AnimationFrameTicker.d.ts +32 -0
  110. package/dist/timing/AnimationFrameTicker.d.ts.map +1 -0
  111. package/dist/timing/AnimationFrameTicker.js +138 -0
  112. package/dist/timing/AnimationFrameTicker.js.map +1 -0
  113. package/dist/timing/Ease.d.ts +6 -0
  114. package/dist/timing/Ease.d.ts.map +1 -0
  115. package/dist/timing/Ease.js +15 -0
  116. package/dist/timing/Ease.js.map +1 -0
  117. package/dist/timing/TestTicker.d.ts +19 -0
  118. package/dist/timing/TestTicker.d.ts.map +1 -0
  119. package/dist/timing/TestTicker.js +85 -0
  120. package/dist/timing/TestTicker.js.map +1 -0
  121. package/dist/timing/Ticker.d.ts +16 -0
  122. package/dist/timing/Ticker.d.ts.map +1 -0
  123. package/dist/timing/Ticker.js +2 -0
  124. package/dist/timing/Ticker.js.map +1 -0
  125. package/dist/timing/Timing.d.ts +116 -0
  126. package/dist/timing/Timing.d.ts.map +1 -0
  127. package/dist/timing/Timing.js +310 -0
  128. package/dist/timing/Timing.js.map +1 -0
  129. package/dist/timing/easing.d.ts +158 -0
  130. package/dist/timing/easing.d.ts.map +1 -0
  131. package/dist/timing/easing.js +273 -0
  132. package/dist/timing/easing.js.map +1 -0
  133. package/dist/utils/Events.d.ts +9 -0
  134. package/dist/utils/Events.d.ts.map +1 -0
  135. package/dist/utils/Events.js +35 -0
  136. package/dist/utils/Events.js.map +1 -0
  137. package/dist/utils/internal.d.ts +5 -0
  138. package/dist/utils/internal.d.ts.map +1 -0
  139. package/dist/utils/internal.js +9 -0
  140. package/dist/utils/internal.js.map +1 -0
  141. package/dist/utils/motionpath.d.ts +16 -0
  142. package/dist/utils/motionpath.d.ts.map +1 -0
  143. package/dist/utils/motionpath.js +41 -0
  144. package/dist/utils/motionpath.js.map +1 -0
  145. package/dist/utils/utils.d.ts +44 -0
  146. package/dist/utils/utils.d.ts.map +1 -0
  147. package/dist/utils/utils.js +88 -0
  148. package/dist/utils/utils.js.map +1 -0
  149. package/dist/values/ColorValue.d.ts +12 -0
  150. package/dist/values/ColorValue.d.ts.map +1 -0
  151. package/dist/values/ColorValue.js +134 -0
  152. package/dist/values/ColorValue.js.map +1 -0
  153. package/dist/values/StyleValue.d.ts +41 -0
  154. package/dist/values/StyleValue.d.ts.map +1 -0
  155. package/dist/values/StyleValue.js +159 -0
  156. package/dist/values/StyleValue.js.map +1 -0
  157. package/dist/values/Value.d.ts +13 -0
  158. package/dist/values/Value.d.ts.map +1 -0
  159. package/dist/values/Value.js +38 -0
  160. package/dist/values/Value.js.map +1 -0
  161. package/dist/values/defaultcolors.d.ts +2 -0
  162. package/dist/values/defaultcolors.d.ts.map +1 -0
  163. package/dist/values/defaultcolors.js +149 -0
  164. package/dist/values/defaultcolors.js.map +1 -0
  165. package/eslint.config.js +23 -0
  166. package/package.json +10 -3
  167. package/src/animation/Animation.ts +6 -3
  168. package/src/animator/Animator.ts +130 -0
  169. package/src/animator/index.ts +56 -0
  170. package/src/animator/public.ts +66 -0
  171. package/src/chnobli.ts +3 -2
  172. package/src/property/ClassProperty.ts +1 -1
  173. package/src/property/TransformXYProperty.ts +1 -1
  174. package/src/scroll/Scroll.ts +202 -51
  175. package/src/scroll/ScrollEvent.ts +1 -0
  176. package/src/scroll/index.ts +3 -0
  177. package/src/scroll/public.ts +35 -2
  178. package/src/target/DomTarget.ts +1 -1
  179. package/src/target/ObjectTarget.ts +19 -13
  180. package/src/tests/properties.test.ts +44 -3
  181. package/src/tests/timeline.test.ts +1 -1
  182. package/src/tests/timing.test.ts +32 -0
  183. package/src/tests/usecases.test.ts +40 -2
  184. package/src/tests/values.test.ts +9 -9
  185. package/src/timeline/Timeline.ts +5 -4
  186. package/src/timeline/public.ts +34 -12
  187. package/src/timing/AnimationFrameTicker.ts +6 -1
  188. package/src/timing/TestTicker.ts +7 -1
  189. package/src/timing/Ticker.ts +5 -1
  190. package/src/timing/Timing.ts +127 -91
  191. package/src/utils/Events.ts +1 -1
  192. package/src/utils/motionpath.ts +5 -5
  193. package/src/utils/utils.ts +0 -10
  194. package/src/values/ColorValue.ts +1 -0
  195. package/src/values/Value.ts +1 -1
  196. package/.eslintrc.cjs +0 -39
  197. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Ticker.js.map
@@ -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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"}