animejs 4.1.2 → 4.2.0-beta.0

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 (191) hide show
  1. package/README.md +18 -8
  2. package/{lib → dist/bundles}/anime.esm.js +6549 -6265
  3. package/dist/bundles/anime.esm.min.js +7 -0
  4. package/dist/bundles/anime.umd.js +8621 -0
  5. package/dist/bundles/anime.umd.min.js +7 -0
  6. package/dist/modules/animatable/animatable.cjs +150 -0
  7. package/dist/modules/animatable/animatable.d.ts +28 -0
  8. package/dist/modules/animatable/animatable.js +147 -0
  9. package/dist/modules/animatable/index.cjs +15 -0
  10. package/dist/modules/animatable/index.d.ts +1 -0
  11. package/dist/modules/animatable/index.js +8 -0
  12. package/dist/modules/animation/additive.cjs +82 -0
  13. package/dist/modules/animation/additive.d.ts +15 -0
  14. package/dist/modules/animation/additive.js +79 -0
  15. package/dist/modules/animation/animation.cjs +660 -0
  16. package/dist/modules/animation/animation.d.ts +47 -0
  17. package/dist/modules/animation/animation.js +657 -0
  18. package/dist/modules/animation/composition.cjs +383 -0
  19. package/dist/modules/animation/composition.d.ts +10 -0
  20. package/dist/modules/animation/composition.js +377 -0
  21. package/dist/modules/animation/index.cjs +15 -0
  22. package/dist/modules/animation/index.d.ts +1 -0
  23. package/dist/modules/animation/index.js +8 -0
  24. package/dist/modules/core/clock.cjs +110 -0
  25. package/dist/modules/core/clock.d.ts +51 -0
  26. package/dist/modules/core/clock.js +108 -0
  27. package/dist/modules/core/colors.cjs +102 -0
  28. package/dist/modules/core/colors.d.ts +2 -0
  29. package/dist/modules/core/colors.js +100 -0
  30. package/dist/modules/core/consts.cjs +154 -0
  31. package/dist/modules/core/consts.d.ts +59 -0
  32. package/dist/modules/core/consts.js +121 -0
  33. package/dist/modules/core/globals.cjs +77 -0
  34. package/dist/modules/core/globals.d.ts +29 -0
  35. package/dist/modules/core/globals.js +72 -0
  36. package/dist/modules/core/helpers.cjs +304 -0
  37. package/dist/modules/core/helpers.d.ts +43 -0
  38. package/dist/modules/core/helpers.js +261 -0
  39. package/dist/modules/core/render.cjs +389 -0
  40. package/dist/modules/core/render.d.ts +4 -0
  41. package/dist/modules/core/render.js +386 -0
  42. package/dist/modules/core/styles.cjs +116 -0
  43. package/dist/modules/core/styles.d.ts +5 -0
  44. package/dist/modules/core/styles.js +113 -0
  45. package/dist/modules/core/targets.cjs +136 -0
  46. package/dist/modules/core/targets.d.ts +118 -0
  47. package/dist/modules/core/targets.js +132 -0
  48. package/dist/modules/core/transforms.cjs +49 -0
  49. package/dist/modules/core/transforms.d.ts +2 -0
  50. package/dist/modules/core/transforms.js +47 -0
  51. package/dist/modules/core/units.cjs +67 -0
  52. package/dist/modules/core/units.d.ts +3 -0
  53. package/dist/modules/core/units.js +65 -0
  54. package/dist/modules/core/values.cjs +215 -0
  55. package/dist/modules/core/values.d.ts +14 -0
  56. package/dist/modules/core/values.js +205 -0
  57. package/dist/modules/draggable/draggable.cjs +1226 -0
  58. package/dist/modules/draggable/draggable.d.ts +272 -0
  59. package/dist/modules/draggable/draggable.js +1223 -0
  60. package/dist/modules/draggable/index.cjs +15 -0
  61. package/dist/modules/draggable/index.d.ts +1 -0
  62. package/dist/modules/draggable/index.js +8 -0
  63. package/dist/modules/easings/cubic-bezier.cjs +64 -0
  64. package/dist/modules/easings/cubic-bezier.d.ts +2 -0
  65. package/dist/modules/easings/cubic-bezier.js +62 -0
  66. package/dist/modules/easings/eases.cjs +149 -0
  67. package/dist/modules/easings/eases.d.ts +111 -0
  68. package/dist/modules/easings/eases.js +146 -0
  69. package/dist/modules/easings/index.cjs +24 -0
  70. package/dist/modules/easings/index.d.ts +6 -0
  71. package/dist/modules/easings/index.js +13 -0
  72. package/dist/modules/easings/irregular.cjs +41 -0
  73. package/dist/modules/easings/irregular.d.ts +2 -0
  74. package/dist/modules/easings/irregular.js +39 -0
  75. package/dist/modules/easings/linear.cjs +59 -0
  76. package/dist/modules/easings/linear.d.ts +2 -0
  77. package/dist/modules/easings/linear.js +57 -0
  78. package/dist/modules/easings/none.cjs +19 -0
  79. package/dist/modules/easings/none.d.ts +8 -0
  80. package/dist/modules/easings/none.js +17 -0
  81. package/dist/modules/easings/parser.cjs +59 -0
  82. package/dist/modules/easings/parser.d.ts +21 -0
  83. package/dist/modules/easings/parser.js +55 -0
  84. package/dist/modules/easings/steps.cjs +30 -0
  85. package/dist/modules/easings/steps.d.ts +2 -0
  86. package/dist/modules/easings/steps.js +28 -0
  87. package/dist/modules/engine/engine.cjs +168 -0
  88. package/dist/modules/engine/engine.d.ts +21 -0
  89. package/dist/modules/engine/engine.js +166 -0
  90. package/dist/modules/engine/index.cjs +14 -0
  91. package/dist/modules/engine/index.d.ts +1 -0
  92. package/dist/modules/engine/index.js +8 -0
  93. package/dist/modules/events/index.cjs +16 -0
  94. package/dist/modules/events/index.d.ts +1 -0
  95. package/dist/modules/events/index.js +8 -0
  96. package/dist/modules/events/scroll.cjs +936 -0
  97. package/dist/modules/events/scroll.d.ts +189 -0
  98. package/dist/modules/events/scroll.js +932 -0
  99. package/dist/modules/index.cjs +103 -0
  100. package/dist/modules/index.d.ts +19 -0
  101. package/dist/modules/index.js +42 -0
  102. package/dist/modules/scope/index.cjs +15 -0
  103. package/dist/modules/scope/index.d.ts +1 -0
  104. package/dist/modules/scope/index.js +8 -0
  105. package/dist/modules/scope/scope.cjs +254 -0
  106. package/dist/modules/scope/scope.d.ts +115 -0
  107. package/dist/modules/scope/scope.js +251 -0
  108. package/dist/modules/spring/index.cjs +15 -0
  109. package/dist/modules/spring/index.d.ts +1 -0
  110. package/dist/modules/spring/index.js +8 -0
  111. package/dist/modules/spring/spring.cjs +133 -0
  112. package/dist/modules/spring/spring.d.ts +37 -0
  113. package/dist/modules/spring/spring.js +130 -0
  114. package/dist/modules/svg/drawable.cjs +119 -0
  115. package/dist/modules/svg/drawable.d.ts +3 -0
  116. package/dist/modules/svg/drawable.js +117 -0
  117. package/dist/modules/svg/helpers.cjs +30 -0
  118. package/dist/modules/svg/helpers.d.ts +2 -0
  119. package/dist/modules/svg/helpers.js +28 -0
  120. package/dist/modules/svg/index.cjs +18 -0
  121. package/dist/modules/svg/index.d.ts +3 -0
  122. package/dist/modules/svg/index.js +10 -0
  123. package/dist/modules/svg/morphto.cjs +58 -0
  124. package/dist/modules/svg/morphto.d.ts +3 -0
  125. package/dist/modules/svg/morphto.js +56 -0
  126. package/dist/modules/svg/motionpath.cjs +79 -0
  127. package/dist/modules/svg/motionpath.d.ts +7 -0
  128. package/dist/modules/svg/motionpath.js +77 -0
  129. package/dist/modules/text/index.cjs +16 -0
  130. package/dist/modules/text/index.d.ts +1 -0
  131. package/dist/modules/text/index.js +8 -0
  132. package/dist/modules/text/split.cjs +488 -0
  133. package/dist/modules/text/split.d.ts +62 -0
  134. package/dist/modules/text/split.js +484 -0
  135. package/dist/modules/timeline/index.cjs +15 -0
  136. package/dist/modules/timeline/index.d.ts +1 -0
  137. package/dist/modules/timeline/index.js +8 -0
  138. package/dist/modules/timeline/position.cjs +72 -0
  139. package/dist/modules/timeline/position.d.ts +3 -0
  140. package/dist/modules/timeline/position.js +70 -0
  141. package/dist/modules/timeline/timeline.cjs +312 -0
  142. package/dist/modules/timeline/timeline.d.ts +163 -0
  143. package/dist/modules/timeline/timeline.js +309 -0
  144. package/dist/modules/timer/index.cjs +15 -0
  145. package/dist/modules/timer/index.d.ts +1 -0
  146. package/dist/modules/timer/index.js +8 -0
  147. package/dist/modules/timer/timer.cjs +491 -0
  148. package/dist/modules/timer/timer.d.ts +141 -0
  149. package/dist/modules/timer/timer.js +488 -0
  150. package/dist/modules/types/index.d.ts +387 -0
  151. package/dist/modules/utils/chainable.cjs +190 -0
  152. package/dist/modules/utils/chainable.d.ts +135 -0
  153. package/dist/modules/utils/chainable.js +177 -0
  154. package/dist/modules/utils/index.cjs +43 -0
  155. package/dist/modules/utils/index.d.ts +5 -0
  156. package/dist/modules/utils/index.js +14 -0
  157. package/dist/modules/utils/number.cjs +97 -0
  158. package/dist/modules/utils/number.d.ts +9 -0
  159. package/dist/modules/utils/number.js +85 -0
  160. package/dist/modules/utils/random.cjs +77 -0
  161. package/dist/modules/utils/random.d.ts +22 -0
  162. package/dist/modules/utils/random.js +72 -0
  163. package/dist/modules/utils/stagger.cjs +122 -0
  164. package/dist/modules/utils/stagger.d.ts +30 -0
  165. package/dist/modules/utils/stagger.js +120 -0
  166. package/dist/modules/utils/target.cjs +130 -0
  167. package/dist/modules/utils/target.d.ts +126 -0
  168. package/dist/modules/utils/target.js +125 -0
  169. package/dist/modules/utils/time.cjs +57 -0
  170. package/dist/modules/utils/time.d.ts +5 -0
  171. package/dist/modules/utils/time.js +54 -0
  172. package/dist/modules/waapi/composition.cjs +89 -0
  173. package/dist/modules/waapi/composition.d.ts +4 -0
  174. package/dist/modules/waapi/composition.js +86 -0
  175. package/dist/modules/waapi/index.cjs +15 -0
  176. package/dist/modules/waapi/index.d.ts +1 -0
  177. package/dist/modules/waapi/index.js +8 -0
  178. package/dist/modules/waapi/waapi.cjs +473 -0
  179. package/dist/modules/waapi/waapi.d.ts +114 -0
  180. package/dist/modules/waapi/waapi.js +470 -0
  181. package/package.json +130 -33
  182. package/lib/anime.cjs +0 -9
  183. package/lib/anime.esm.min.js +0 -9
  184. package/lib/anime.iife.js +0 -9
  185. package/lib/anime.iife.min.js +0 -9
  186. package/lib/anime.min.cjs +0 -9
  187. package/lib/anime.umd.js +0 -9
  188. package/lib/anime.umd.min.js +0 -9
  189. package/lib/gui/index.js +0 -6341
  190. package/types/index.d.ts +0 -1081
  191. package/types/index.js +0 -7407
@@ -0,0 +1,389 @@
1
+ /**
2
+ * Anime.js - core - CJS
3
+ * @version v4.2.0
4
+ * @license MIT
5
+ * @copyright 2025 - Julian Garnier
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ var globals = require('./globals.cjs');
11
+ var consts = require('./consts.cjs');
12
+ var helpers = require('./helpers.cjs');
13
+
14
+ /**
15
+ * @import {
16
+ * Tickable,
17
+ * Renderable,
18
+ * CallbackArgument,
19
+ * Tween,
20
+ * DOMTarget,
21
+ * } from '../types/index.js'
22
+ */
23
+
24
+ /**
25
+ * @import {
26
+ * JSAnimation,
27
+ * } from '../animation/animation.js'
28
+ */
29
+
30
+ /**
31
+ * @import {
32
+ * Timeline,
33
+ * } from '../timeline/timeline.js'
34
+ */
35
+
36
+ /**
37
+ * @param {Tickable} tickable
38
+ * @param {Number} time
39
+ * @param {Number} muteCallbacks
40
+ * @param {Number} internalRender
41
+ * @param {tickModes} tickMode
42
+ * @return {Number}
43
+ */
44
+ const render = (tickable, time, muteCallbacks, internalRender, tickMode) => {
45
+
46
+ const parent = tickable.parent;
47
+ const duration = tickable.duration;
48
+ const completed = tickable.completed;
49
+ const iterationDuration = tickable.iterationDuration;
50
+ const iterationCount = tickable.iterationCount;
51
+ const _currentIteration = tickable._currentIteration;
52
+ const _loopDelay = tickable._loopDelay;
53
+ const _reversed = tickable._reversed;
54
+ const _alternate = tickable._alternate;
55
+ const _hasChildren = tickable._hasChildren;
56
+ const tickableDelay = tickable._delay;
57
+ const tickablePrevAbsoluteTime = tickable._currentTime; // TODO: rename ._currentTime to ._absoluteCurrentTime
58
+
59
+ const tickableEndTime = tickableDelay + iterationDuration;
60
+ const tickableAbsoluteTime = time - tickableDelay;
61
+ const tickablePrevTime = helpers.clamp(tickablePrevAbsoluteTime, -tickableDelay, duration);
62
+ const tickableCurrentTime = helpers.clamp(tickableAbsoluteTime, -tickableDelay, duration);
63
+ const deltaTime = tickableAbsoluteTime - tickablePrevAbsoluteTime;
64
+ const isCurrentTimeAboveZero = tickableCurrentTime > 0;
65
+ const isCurrentTimeEqualOrAboveDuration = tickableCurrentTime >= duration;
66
+ const isSetter = duration <= consts.minValue;
67
+ const forcedTick = tickMode === consts.tickModes.FORCE;
68
+
69
+ let isOdd = 0;
70
+ let iterationElapsedTime = tickableAbsoluteTime;
71
+ // Render checks
72
+ // Used to also check if the children have rendered in order to trigger the onRender callback on the parent timer
73
+ let hasRendered = 0;
74
+
75
+ // Execute the "expensive" iterations calculations only when necessary
76
+ if (iterationCount > 1) {
77
+ // bitwise NOT operator seems to be generally faster than Math.floor() across browsers
78
+ const currentIteration = ~~(tickableCurrentTime / (iterationDuration + (isCurrentTimeEqualOrAboveDuration ? 0 : _loopDelay)));
79
+ tickable._currentIteration = helpers.clamp(currentIteration, 0, iterationCount);
80
+ // Prevent the iteration count to go above the max iterations when reaching the end of the animation
81
+ if (isCurrentTimeEqualOrAboveDuration) tickable._currentIteration--;
82
+ isOdd = tickable._currentIteration % 2;
83
+ iterationElapsedTime = tickableCurrentTime % (iterationDuration + _loopDelay) || 0;
84
+ }
85
+
86
+ // Checks if exactly one of _reversed and (_alternate && isOdd) is true
87
+ const isReversed = _reversed ^ (_alternate && isOdd);
88
+ const _ease = /** @type {Renderable} */(tickable)._ease;
89
+ let iterationTime = isCurrentTimeEqualOrAboveDuration ? isReversed ? 0 : duration : isReversed ? iterationDuration - iterationElapsedTime : iterationElapsedTime;
90
+ if (_ease) iterationTime = iterationDuration * _ease(iterationTime / iterationDuration) || 0;
91
+ const isRunningBackwards = (parent ? parent.backwards : tickableAbsoluteTime < tickablePrevAbsoluteTime) ? !isReversed : !!isReversed;
92
+
93
+ tickable._currentTime = tickableAbsoluteTime;
94
+ tickable._iterationTime = iterationTime;
95
+ tickable.backwards = isRunningBackwards;
96
+
97
+ if (isCurrentTimeAboveZero && !tickable.began) {
98
+ tickable.began = true;
99
+ if (!muteCallbacks && !(parent && (isRunningBackwards || !parent.began))) {
100
+ tickable.onBegin(/** @type {CallbackArgument} */(tickable));
101
+ }
102
+ } else if (tickableAbsoluteTime <= 0) {
103
+ tickable.began = false;
104
+ }
105
+
106
+ // Only triggers onLoop for tickable without children, otherwise call the the onLoop callback in the tick function
107
+ // Make sure to trigger the onLoop before rendering to allow .refresh() to pickup the current values
108
+ if (!muteCallbacks && !_hasChildren && isCurrentTimeAboveZero && tickable._currentIteration !== _currentIteration) {
109
+ tickable.onLoop(/** @type {CallbackArgument} */(tickable));
110
+ }
111
+
112
+ if (
113
+ forcedTick ||
114
+ tickMode === consts.tickModes.AUTO && (
115
+ time >= tickableDelay && time <= tickableEndTime || // Normal render
116
+ time <= tickableDelay && tickablePrevTime > tickableDelay || // Playhead is before the animation start time so make sure the animation is at its initial state
117
+ time >= tickableEndTime && tickablePrevTime !== duration // Playhead is after the animation end time so make sure the animation is at its end state
118
+ ) ||
119
+ iterationTime >= tickableEndTime && tickablePrevTime !== duration ||
120
+ iterationTime <= tickableDelay && tickablePrevTime > 0 ||
121
+ time <= tickablePrevTime && tickablePrevTime === duration && completed || // Force a render if a seek occurs on an completed animation
122
+ isCurrentTimeEqualOrAboveDuration && !completed && isSetter // This prevents 0 duration tickables to be skipped
123
+ ) {
124
+
125
+ if (isCurrentTimeAboveZero) {
126
+ // Trigger onUpdate callback before rendering
127
+ tickable.computeDeltaTime(tickablePrevTime);
128
+ if (!muteCallbacks) tickable.onBeforeUpdate(/** @type {CallbackArgument} */(tickable));
129
+ }
130
+
131
+ // Start tweens rendering
132
+ if (!_hasChildren) {
133
+
134
+ // Time has jumped more than globals.tickThreshold so consider this tick manual
135
+ const forcedRender = forcedTick || (isRunningBackwards ? deltaTime * -1 : deltaTime) >= globals.globals.tickThreshold;
136
+ const absoluteTime = tickable._offset + (parent ? parent._offset : 0) + tickableDelay + iterationTime;
137
+
138
+ // Only Animation can have tweens, Timer returns undefined
139
+ let tween = /** @type {Tween} */(/** @type {JSAnimation} */(tickable)._head);
140
+ let tweenTarget;
141
+ let tweenStyle;
142
+ let tweenTargetTransforms;
143
+ let tweenTargetTransformsProperties;
144
+ let tweenTransformsNeedUpdate = 0;
145
+
146
+ while (tween) {
147
+
148
+ const tweenComposition = tween._composition;
149
+ const tweenCurrentTime = tween._currentTime;
150
+ const tweenChangeDuration = tween._changeDuration;
151
+ const tweenAbsEndTime = tween._absoluteStartTime + tween._changeDuration;
152
+ const tweenNextRep = tween._nextRep;
153
+ const tweenPrevRep = tween._prevRep;
154
+ const tweenHasComposition = tweenComposition !== consts.compositionTypes.none;
155
+
156
+ if ((forcedRender || (
157
+ (tweenCurrentTime !== tweenChangeDuration || absoluteTime <= tweenAbsEndTime + (tweenNextRep ? tweenNextRep._delay : 0)) &&
158
+ (tweenCurrentTime !== 0 || absoluteTime >= tween._absoluteStartTime)
159
+ )) && (!tweenHasComposition || (
160
+ !tween._isOverridden &&
161
+ (!tween._isOverlapped || absoluteTime <= tweenAbsEndTime) &&
162
+ (!tweenNextRep || (tweenNextRep._isOverridden || absoluteTime <= tweenNextRep._absoluteStartTime)) &&
163
+ (!tweenPrevRep || (tweenPrevRep._isOverridden || (absoluteTime >= (tweenPrevRep._absoluteStartTime + tweenPrevRep._changeDuration) + tween._delay)))
164
+ ))
165
+ ) {
166
+
167
+ const tweenNewTime = tween._currentTime = helpers.clamp(iterationTime - tween._startTime, 0, tweenChangeDuration);
168
+ const tweenProgress = tween._ease(tweenNewTime / tween._updateDuration);
169
+ const tweenModifier = tween._modifier;
170
+ const tweenValueType = tween._valueType;
171
+ const tweenType = tween._tweenType;
172
+ const tweenIsObject = tweenType === consts.tweenTypes.OBJECT;
173
+ const tweenIsNumber = tweenValueType === consts.valueTypes.NUMBER;
174
+ // Only round the in-between frames values if the final value is a string
175
+ const tweenPrecision = (tweenIsNumber && tweenIsObject) || tweenProgress === 0 || tweenProgress === 1 ? -1 : globals.globals.precision;
176
+
177
+ // Recompose tween value
178
+ /** @type {String|Number} */
179
+ let value;
180
+ /** @type {Number} */
181
+ let number;
182
+
183
+ if (tweenIsNumber) {
184
+ value = number = /** @type {Number} */(tweenModifier(helpers.round(helpers.lerp(tween._fromNumber, tween._toNumber, tweenProgress), tweenPrecision )));
185
+ } else if (tweenValueType === consts.valueTypes.UNIT) {
186
+ // Rounding the values speed up string composition
187
+ number = /** @type {Number} */(tweenModifier(helpers.round(helpers.lerp(tween._fromNumber, tween._toNumber, tweenProgress), tweenPrecision)));
188
+ value = `${number}${tween._unit}`;
189
+ } else if (tweenValueType === consts.valueTypes.COLOR) {
190
+ const fn = tween._fromNumbers;
191
+ const tn = tween._toNumbers;
192
+ const r = helpers.round(helpers.clamp(/** @type {Number} */(tweenModifier(helpers.lerp(fn[0], tn[0], tweenProgress))), 0, 255), 0);
193
+ const g = helpers.round(helpers.clamp(/** @type {Number} */(tweenModifier(helpers.lerp(fn[1], tn[1], tweenProgress))), 0, 255), 0);
194
+ const b = helpers.round(helpers.clamp(/** @type {Number} */(tweenModifier(helpers.lerp(fn[2], tn[2], tweenProgress))), 0, 255), 0);
195
+ const a = helpers.clamp(/** @type {Number} */(tweenModifier(helpers.round(helpers.lerp(fn[3], tn[3], tweenProgress), tweenPrecision))), 0, 1);
196
+ value = `rgba(${r},${g},${b},${a})`;
197
+ if (tweenHasComposition) {
198
+ const ns = tween._numbers;
199
+ ns[0] = r;
200
+ ns[1] = g;
201
+ ns[2] = b;
202
+ ns[3] = a;
203
+ }
204
+ } else if (tweenValueType === consts.valueTypes.COMPLEX) {
205
+ value = tween._strings[0];
206
+ for (let j = 0, l = tween._toNumbers.length; j < l; j++) {
207
+ const n = /** @type {Number} */(tweenModifier(helpers.round(helpers.lerp(tween._fromNumbers[j], tween._toNumbers[j], tweenProgress), tweenPrecision)));
208
+ const s = tween._strings[j + 1];
209
+ value += `${s ? n + s : n}`;
210
+ if (tweenHasComposition) {
211
+ tween._numbers[j] = n;
212
+ }
213
+ }
214
+ }
215
+
216
+ // For additive tweens and Animatables
217
+ if (tweenHasComposition) {
218
+ tween._number = number;
219
+ }
220
+
221
+ if (!internalRender && tweenComposition !== consts.compositionTypes.blend) {
222
+
223
+ const tweenProperty = tween.property;
224
+ tweenTarget = tween.target;
225
+
226
+ if (tweenIsObject) {
227
+ tweenTarget[tweenProperty] = value;
228
+ } else if (tweenType === consts.tweenTypes.ATTRIBUTE) {
229
+ /** @type {DOMTarget} */(tweenTarget).setAttribute(tweenProperty, /** @type {String} */(value));
230
+ } else {
231
+ tweenStyle = /** @type {DOMTarget} */(tweenTarget).style;
232
+ if (tweenType === consts.tweenTypes.TRANSFORM) {
233
+ if (tweenTarget !== tweenTargetTransforms) {
234
+ tweenTargetTransforms = tweenTarget;
235
+ // NOTE: Referencing the cachedTransforms in the tween property directly can be a little bit faster but appears to increase memory usage.
236
+ tweenTargetTransformsProperties = tweenTarget[consts.transformsSymbol];
237
+ }
238
+ tweenTargetTransformsProperties[tweenProperty] = value;
239
+ tweenTransformsNeedUpdate = 1;
240
+ } else if (tweenType === consts.tweenTypes.CSS) {
241
+ tweenStyle[tweenProperty] = value;
242
+ } else if (tweenType === consts.tweenTypes.CSS_VAR) {
243
+ tweenStyle.setProperty(tweenProperty,/** @type {String} */(value));
244
+ }
245
+ }
246
+
247
+ if (isCurrentTimeAboveZero) hasRendered = 1;
248
+
249
+ } else {
250
+ // Used for composing timeline tweens without having to do a real render
251
+ tween._value = value;
252
+ }
253
+
254
+ }
255
+
256
+ // NOTE: Possible improvement: Use translate(x,y) / translate3d(x,y,z) syntax
257
+ // to reduce memory usage on string composition
258
+ if (tweenTransformsNeedUpdate && tween._renderTransforms) {
259
+ let str = consts.emptyString;
260
+ for (let key in tweenTargetTransformsProperties) {
261
+ str += `${consts.transformsFragmentStrings[key]}${tweenTargetTransformsProperties[key]}) `;
262
+ }
263
+ tweenStyle.transform = str;
264
+ tweenTransformsNeedUpdate = 0;
265
+ }
266
+
267
+ tween = tween._next;
268
+ }
269
+
270
+ if (!muteCallbacks && hasRendered) {
271
+ /** @type {JSAnimation} */(tickable).onRender(/** @type {JSAnimation} */(tickable));
272
+ }
273
+ }
274
+
275
+ if (!muteCallbacks && isCurrentTimeAboveZero) {
276
+ tickable.onUpdate(/** @type {CallbackArgument} */(tickable));
277
+ }
278
+
279
+ }
280
+
281
+ // End tweens rendering
282
+
283
+ // Handle setters on timeline differently and allow re-trigering the onComplete callback when seeking backwards
284
+ if (parent && isSetter) {
285
+ if (!muteCallbacks && (
286
+ (parent.began && !isRunningBackwards && tickableAbsoluteTime >= duration && !completed) ||
287
+ (isRunningBackwards && tickableAbsoluteTime <= consts.minValue && completed)
288
+ )) {
289
+ tickable.onComplete(/** @type {CallbackArgument} */(tickable));
290
+ tickable.completed = !isRunningBackwards;
291
+ }
292
+ // If currentTime is both above 0 and at least equals to duration, handles normal onComplete or infinite loops
293
+ } else if (isCurrentTimeAboveZero && isCurrentTimeEqualOrAboveDuration) {
294
+ if (iterationCount === Infinity) {
295
+ // Offset the tickable _startTime with its duration to reset _currentTime to 0 and continue the infinite timer
296
+ tickable._startTime += tickable.duration;
297
+ } else if (tickable._currentIteration >= iterationCount - 1) {
298
+ // By setting paused to true, we tell the engine loop to not render this tickable and removes it from the list on the next tick
299
+ tickable.paused = true;
300
+ if (!completed && !_hasChildren) {
301
+ // If the tickable has children, triggers onComplete() only when all children have completed in the tick function
302
+ tickable.completed = true;
303
+ if (!muteCallbacks && !(parent && (isRunningBackwards || !parent.began))) {
304
+ tickable.onComplete(/** @type {CallbackArgument} */(tickable));
305
+ tickable._resolve(/** @type {CallbackArgument} */(tickable));
306
+ }
307
+ }
308
+ }
309
+ // Otherwise set the completed flag to false
310
+ } else {
311
+ tickable.completed = false;
312
+ }
313
+
314
+ // NOTE: hasRendered * direction (negative for backwards) this way we can remove the tickable.backwards property completly ?
315
+ return hasRendered;
316
+ };
317
+
318
+ /**
319
+ * @param {Tickable} tickable
320
+ * @param {Number} time
321
+ * @param {Number} muteCallbacks
322
+ * @param {Number} internalRender
323
+ * @param {Number} tickMode
324
+ * @return {void}
325
+ */
326
+ const tick = (tickable, time, muteCallbacks, internalRender, tickMode) => {
327
+ const _currentIteration = tickable._currentIteration;
328
+ render(tickable, time, muteCallbacks, internalRender, tickMode);
329
+ if (tickable._hasChildren) {
330
+ const tl = /** @type {Timeline} */(tickable);
331
+ const tlIsRunningBackwards = tl.backwards;
332
+ const tlChildrenTime = internalRender ? time : tl._iterationTime;
333
+ const tlCildrenTickTime = helpers.now();
334
+
335
+ let tlChildrenHasRendered = 0;
336
+ let tlChildrenHaveCompleted = true;
337
+
338
+ // If the timeline has looped forward, we need to manually triggers children skipped callbacks
339
+ if (!internalRender && tl._currentIteration !== _currentIteration) {
340
+ const tlIterationDuration = tl.iterationDuration;
341
+ helpers.forEachChildren(tl, (/** @type {JSAnimation} */child) => {
342
+ if (!tlIsRunningBackwards) {
343
+ // Force an internal render to trigger the callbacks if the child has not completed on loop
344
+ if (!child.completed && !child.backwards && child._currentTime < child.iterationDuration) {
345
+ render(child, tlIterationDuration, muteCallbacks, 1, consts.tickModes.FORCE);
346
+ }
347
+ // Reset their began and completed flags to allow retrigering callbacks on the next iteration
348
+ child.began = false;
349
+ child.completed = false;
350
+ } else {
351
+ const childDuration = child.duration;
352
+ const childStartTime = child._offset + child._delay;
353
+ const childEndTime = childStartTime + childDuration;
354
+ // Triggers the onComplete callback on reverse for children on the edges of the timeline
355
+ if (!muteCallbacks && childDuration <= consts.minValue && (!childStartTime || childEndTime === tlIterationDuration)) {
356
+ child.onComplete(child);
357
+ }
358
+ }
359
+ });
360
+ if (!muteCallbacks) tl.onLoop(/** @type {CallbackArgument} */(tl));
361
+ }
362
+
363
+ helpers.forEachChildren(tl, (/** @type {JSAnimation} */child) => {
364
+ const childTime = helpers.round((tlChildrenTime - child._offset) * child._speed, 12); // Rounding is needed when using seconds
365
+ const childTickMode = child._fps < tl._fps ? child.requestTick(tlCildrenTickTime) : tickMode;
366
+ tlChildrenHasRendered += render(child, childTime, muteCallbacks, internalRender, childTickMode);
367
+ if (!child.completed && tlChildrenHaveCompleted) tlChildrenHaveCompleted = false;
368
+ }, tlIsRunningBackwards);
369
+
370
+ // Renders on timeline are triggered by its children so it needs to be set after rendering the children
371
+ if (!muteCallbacks && tlChildrenHasRendered) tl.onRender(/** @type {CallbackArgument} */(tl));
372
+
373
+ // Triggers the timeline onComplete() once all chindren all completed and the current time has reached the end
374
+ if ((tlChildrenHaveCompleted || tlIsRunningBackwards) && tl._currentTime >= tl.duration) {
375
+ // Make sure the paused flag is false in case it has been skipped in the render function
376
+ tl.paused = true;
377
+ if (!tl.completed) {
378
+ tl.completed = true;
379
+ if (!muteCallbacks) {
380
+ tl.onComplete(/** @type {CallbackArgument} */(tl));
381
+ tl._resolve(/** @type {CallbackArgument} */(tl));
382
+ }
383
+ }
384
+ }
385
+ }
386
+ };
387
+
388
+ exports.render = render;
389
+ exports.tick = tick;
@@ -0,0 +1,4 @@
1
+ export function render(tickable: Tickable, time: number, muteCallbacks: number, internalRender: number, tickMode: tickModes): number;
2
+ export function tick(tickable: Tickable, time: number, muteCallbacks: number, internalRender: number, tickMode: number): void;
3
+ import type { Tickable } from '../types/index.js';
4
+ import { tickModes } from './consts.js';