animejs 4.1.3 → 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 +12 -8
  2. package/{lib → dist/bundles}/anime.esm.js +5237 -5049
  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 -1126
  191. package/types/index.js +0 -7388
@@ -0,0 +1,383 @@
1
+ /**
2
+ * Anime.js - animation - CJS
3
+ * @version v4.2.0
4
+ * @license MIT
5
+ * @copyright 2025 - Julian Garnier
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ var consts = require('../core/consts.cjs');
11
+ var helpers = require('../core/helpers.cjs');
12
+ var styles = require('../core/styles.cjs');
13
+ var engine = require('../engine/engine.cjs');
14
+ var additive = require('./additive.cjs');
15
+
16
+ /**
17
+ * @import {
18
+ * TweenReplaceLookups,
19
+ * TweenAdditiveLookups,
20
+ * TweenPropertySiblings,
21
+ * Tween,
22
+ * Target,
23
+ * TargetsArray,
24
+ * Renderable,
25
+ * } from '../types/index.js'
26
+ *
27
+ * @import {
28
+ * JSAnimation,
29
+ * } from '../animation/animation.js'
30
+ */
31
+
32
+ const lookups = {
33
+ /** @type {TweenReplaceLookups} */
34
+ _rep: new WeakMap(),
35
+ /** @type {TweenAdditiveLookups} */
36
+ _add: new Map(),
37
+ };
38
+
39
+ /**
40
+ * @param {Target} target
41
+ * @param {String} property
42
+ * @param {String} lookup
43
+ * @return {TweenPropertySiblings}
44
+ */
45
+ const getTweenSiblings = (target, property, lookup = '_rep') => {
46
+ const lookupMap = lookups[lookup];
47
+ let targetLookup = lookupMap.get(target);
48
+ if (!targetLookup) {
49
+ targetLookup = {};
50
+ lookupMap.set(target, targetLookup);
51
+ }
52
+ return targetLookup[property] ? targetLookup[property] : targetLookup[property] = {
53
+ _head: null,
54
+ _tail: null,
55
+ }
56
+ };
57
+
58
+ /**
59
+ * @param {Tween} p
60
+ * @param {Tween} c
61
+ * @return {Number|Boolean}
62
+ */
63
+ const addTweenSortMethod = (p, c) => {
64
+ return p._isOverridden || p._absoluteStartTime > c._absoluteStartTime;
65
+ };
66
+
67
+ /**
68
+ * @param {Tween} tween
69
+ */
70
+ const overrideTween = tween => {
71
+ tween._isOverlapped = 1;
72
+ tween._isOverridden = 1;
73
+ tween._changeDuration = consts.minValue;
74
+ tween._currentTime = consts.minValue;
75
+ };
76
+
77
+ /**
78
+ * @param {Tween} tween
79
+ * @param {TweenPropertySiblings} siblings
80
+ * @return {Tween}
81
+ */
82
+ const composeTween = (tween, siblings) => {
83
+
84
+ const tweenCompositionType = tween._composition;
85
+
86
+ // Handle replaced tweens
87
+
88
+ if (tweenCompositionType === consts.compositionTypes.replace) {
89
+
90
+ const tweenAbsStartTime = tween._absoluteStartTime;
91
+
92
+ helpers.addChild(siblings, tween, addTweenSortMethod, '_prevRep', '_nextRep');
93
+
94
+ const prevSibling = tween._prevRep;
95
+
96
+ // Update the previous siblings for composition replace tweens
97
+
98
+ if (prevSibling) {
99
+
100
+ const prevParent = prevSibling.parent;
101
+ const prevAbsEndTime = prevSibling._absoluteStartTime + prevSibling._changeDuration;
102
+
103
+ // Handle looped animations tween
104
+
105
+ if (
106
+ // Check if the previous tween is from a different animation
107
+ tween.parent.id !== prevParent.id &&
108
+ // Check if the animation has loops
109
+ prevParent.iterationCount> 1 &&
110
+ // Check if _absoluteChangeEndTime of last loop overlaps the current tween
111
+ prevAbsEndTime + (prevParent.duration - prevParent.iterationDuration) > tweenAbsStartTime
112
+ ) {
113
+
114
+ // TODO: Find a way to only override the iterations overlapping with the tween
115
+ overrideTween(prevSibling);
116
+
117
+ let prevPrevSibling = prevSibling._prevRep;
118
+
119
+ // If the tween was part of a set of keyframes, override its siblings
120
+ while (prevPrevSibling && prevPrevSibling.parent.id === prevParent.id) {
121
+ overrideTween(prevPrevSibling);
122
+ prevPrevSibling = prevPrevSibling._prevRep;
123
+ }
124
+
125
+ }
126
+
127
+ const absoluteUpdateStartTime = tweenAbsStartTime - tween._delay;
128
+
129
+ if (prevAbsEndTime > absoluteUpdateStartTime) {
130
+
131
+ const prevChangeStartTime = prevSibling._startTime;
132
+ const prevTLOffset = prevAbsEndTime - (prevChangeStartTime + prevSibling._updateDuration);
133
+ // Rounding is necessary here to minimize floating point errors when working in seconds
134
+ const updatedPrevChangeDuration = helpers.round(absoluteUpdateStartTime - prevTLOffset - prevChangeStartTime, 12);
135
+
136
+ prevSibling._changeDuration = updatedPrevChangeDuration;
137
+ prevSibling._currentTime = updatedPrevChangeDuration;
138
+ prevSibling._isOverlapped = 1;
139
+
140
+ // Override the previous tween if its new _changeDuration is lower than minValue
141
+ // TODO: See if it's even neceseeary to test against minValue, checking for 0 might be enough
142
+ if (updatedPrevChangeDuration < consts.minValue) {
143
+ overrideTween(prevSibling);
144
+ }
145
+ }
146
+
147
+ // Pause (and cancel) the parent if it only contains overlapped tweens
148
+
149
+ let pausePrevParentAnimation = true;
150
+
151
+ helpers.forEachChildren(prevParent, (/** @type Tween */t) => {
152
+ if (!t._isOverlapped) pausePrevParentAnimation = false;
153
+ });
154
+
155
+ if (pausePrevParentAnimation) {
156
+ const prevParentTL = prevParent.parent;
157
+ if (prevParentTL) {
158
+ let pausePrevParentTL = true;
159
+ helpers.forEachChildren(prevParentTL, (/** @type JSAnimation */a) => {
160
+ if (a !== prevParent) {
161
+ helpers.forEachChildren(a, (/** @type Tween */t) => {
162
+ if (!t._isOverlapped) pausePrevParentTL = false;
163
+ });
164
+ }
165
+ });
166
+ if (pausePrevParentTL) {
167
+ prevParentTL.cancel();
168
+ }
169
+ } else {
170
+ prevParent.cancel();
171
+ // Previously, calling .cancel() on a timeline child would affect the render order of other children
172
+ // Worked around this by marking it as .completed and using .pause() for safe removal in the engine loop
173
+ // This is no longer needed since timeline tween composition is now handled separately
174
+ // Keeping this here for reference
175
+ // prevParent.completed = true;
176
+ // prevParent.pause();
177
+ }
178
+ }
179
+
180
+ }
181
+
182
+ // let nextSibling = tween._nextRep;
183
+
184
+ // // All the next siblings are automatically overridden
185
+
186
+ // if (nextSibling && nextSibling._absoluteStartTime >= tweenAbsStartTime) {
187
+ // while (nextSibling) {
188
+ // overrideTween(nextSibling);
189
+ // nextSibling = nextSibling._nextRep;
190
+ // }
191
+ // }
192
+
193
+ // if (nextSibling && nextSibling._absoluteStartTime < tweenAbsStartTime) {
194
+ // while (nextSibling) {
195
+ // overrideTween(nextSibling);
196
+ // console.log(tween.id, nextSibling.id);
197
+ // nextSibling = nextSibling._nextRep;
198
+ // }
199
+ // }
200
+
201
+ // Handle additive tweens composition
202
+
203
+ } else if (tweenCompositionType === consts.compositionTypes.blend) {
204
+
205
+ const additiveTweenSiblings = getTweenSiblings(tween.target, tween.property, '_add');
206
+ const additiveAnimation = additive.addAdditiveAnimation(lookups._add);
207
+
208
+ let lookupTween = additiveTweenSiblings._head;
209
+
210
+ if (!lookupTween) {
211
+ lookupTween = { ...tween };
212
+ lookupTween._composition = consts.compositionTypes.replace;
213
+ lookupTween._updateDuration = consts.minValue;
214
+ lookupTween._startTime = 0;
215
+ lookupTween._numbers = helpers.cloneArray(tween._fromNumbers);
216
+ lookupTween._number = 0;
217
+ lookupTween._next = null;
218
+ lookupTween._prev = null;
219
+ helpers.addChild(additiveTweenSiblings, lookupTween);
220
+ helpers.addChild(additiveAnimation, lookupTween);
221
+ }
222
+
223
+ // Convert the values of TO to FROM and set TO to 0
224
+
225
+ const toNumber = tween._toNumber;
226
+ tween._fromNumber = lookupTween._fromNumber - toNumber;
227
+ tween._toNumber = 0;
228
+ tween._numbers = helpers.cloneArray(tween._fromNumbers);
229
+ tween._number = 0;
230
+ lookupTween._fromNumber = toNumber;
231
+
232
+ if (tween._toNumbers) {
233
+ const toNumbers = helpers.cloneArray(tween._toNumbers);
234
+ if (toNumbers) {
235
+ toNumbers.forEach((value, i) => {
236
+ tween._fromNumbers[i] = lookupTween._fromNumbers[i] - value;
237
+ tween._toNumbers[i] = 0;
238
+ });
239
+ }
240
+ lookupTween._fromNumbers = toNumbers;
241
+ }
242
+
243
+ helpers.addChild(additiveTweenSiblings, tween, null, '_prevAdd', '_nextAdd');
244
+
245
+ }
246
+
247
+ return tween;
248
+
249
+ };
250
+
251
+ /**
252
+ * @param {Tween} tween
253
+ * @return {Tween}
254
+ */
255
+ const removeTweenSliblings = tween => {
256
+ const tweenComposition = tween._composition;
257
+ if (tweenComposition !== consts.compositionTypes.none) {
258
+ const tweenTarget = tween.target;
259
+ const tweenProperty = tween.property;
260
+ const replaceTweensLookup = lookups._rep;
261
+ const replaceTargetProps = replaceTweensLookup.get(tweenTarget);
262
+ const tweenReplaceSiblings = replaceTargetProps[tweenProperty];
263
+ helpers.removeChild(tweenReplaceSiblings, tween, '_prevRep', '_nextRep');
264
+ if (tweenComposition === consts.compositionTypes.blend) {
265
+ const addTweensLookup = lookups._add;
266
+ const addTargetProps = addTweensLookup.get(tweenTarget);
267
+ if (!addTargetProps) return;
268
+ const additiveTweenSiblings = addTargetProps[tweenProperty];
269
+ const additiveAnimation = additive.additive.animation;
270
+ helpers.removeChild(additiveTweenSiblings, tween, '_prevAdd', '_nextAdd');
271
+ // If only one tween is left in the additive lookup, it's the tween lookup
272
+ const lookupTween = additiveTweenSiblings._head;
273
+ if (lookupTween && lookupTween === additiveTweenSiblings._tail) {
274
+ helpers.removeChild(additiveTweenSiblings, lookupTween, '_prevAdd', '_nextAdd');
275
+ helpers.removeChild(additiveAnimation, lookupTween);
276
+ let shouldClean = true;
277
+ for (let prop in addTargetProps) {
278
+ if (addTargetProps[prop]._head) {
279
+ shouldClean = false;
280
+ break;
281
+ }
282
+ }
283
+ if (shouldClean) {
284
+ addTweensLookup.delete(tweenTarget);
285
+ }
286
+ }
287
+ }
288
+ }
289
+ return tween;
290
+ };
291
+
292
+ /**
293
+ * @param {TargetsArray} targetsArray
294
+ * @param {JSAnimation} animation
295
+ * @param {String} [propertyName]
296
+ * @return {Boolean}
297
+ */
298
+ const removeTargetsFromJSAnimation = (targetsArray, animation, propertyName) => {
299
+ let tweensMatchesTargets = false;
300
+ helpers.forEachChildren(animation, (/**@type {Tween} */tween) => {
301
+ const tweenTarget = tween.target;
302
+ if (targetsArray.includes(tweenTarget)) {
303
+ const tweenName = tween.property;
304
+ const tweenType = tween._tweenType;
305
+ const normalizePropName = styles.sanitizePropertyName(propertyName, tweenTarget, tweenType);
306
+ if (!normalizePropName || normalizePropName && normalizePropName === tweenName) {
307
+ // Make sure to flag the previous CSS transform tween to renderTransform
308
+ if (tween.parent._tail === tween &&
309
+ tween._tweenType === consts.tweenTypes.TRANSFORM &&
310
+ tween._prev &&
311
+ tween._prev._tweenType === consts.tweenTypes.TRANSFORM
312
+ ) {
313
+ tween._prev._renderTransforms = 1;
314
+ }
315
+ // Removes the tween from the selected animation
316
+ helpers.removeChild(animation, tween);
317
+ // Detach the tween from its siblings to make sure blended tweens are correctlly removed
318
+ removeTweenSliblings(tween);
319
+ tweensMatchesTargets = true;
320
+ }
321
+ }
322
+ }, true);
323
+ return tweensMatchesTargets;
324
+ };
325
+
326
+ /**
327
+ * @param {TargetsArray} targetsArray
328
+ * @param {Renderable} [renderable]
329
+ * @param {String} [propertyName]
330
+ */
331
+ const removeTargetsFromRenderable = (targetsArray, renderable, propertyName) => {
332
+ const parent = /** @type {Renderable|typeof engine} **/(renderable ? renderable : engine.engine);
333
+ let removeMatches;
334
+ if (parent._hasChildren) {
335
+ let iterationDuration = 0;
336
+ helpers.forEachChildren(parent, (/** @type {Renderable} */child) => {
337
+ if (!child._hasChildren) {
338
+ removeMatches = removeTargetsFromJSAnimation(targetsArray, /** @type {JSAnimation} */(child), propertyName);
339
+ // Remove the child from its parent if no tweens and no children left after the removal
340
+ if (removeMatches && !child._head) {
341
+ child.cancel();
342
+ helpers.removeChild(parent, child);
343
+ } else {
344
+ // Calculate the new iterationDuration value to handle onComplete with last child in render()
345
+ const childTLOffset = child._offset + child._delay;
346
+ const childDur = childTLOffset + child.duration;
347
+ if (childDur > iterationDuration) {
348
+ iterationDuration = childDur;
349
+ }
350
+ }
351
+ }
352
+ // Make sure to also remove engine's children targets
353
+ // NOTE: Avoid recursion?
354
+ if (child._head) {
355
+ removeTargetsFromRenderable(targetsArray, child, propertyName);
356
+ } else {
357
+ child._hasChildren = false;
358
+ }
359
+ }, true);
360
+ // Update iterationDuration value to handle onComplete with last child in render()
361
+ if (!helpers.isUnd(/** @type {Renderable} */(parent).iterationDuration)) {
362
+ /** @type {Renderable} */(parent).iterationDuration = iterationDuration;
363
+ }
364
+ } else {
365
+ removeMatches = removeTargetsFromJSAnimation(
366
+ targetsArray,
367
+ /** @type {JSAnimation} */(parent),
368
+ propertyName
369
+ );
370
+ }
371
+ if (removeMatches && !parent._head) {
372
+ parent._hasChildren = false;
373
+ // Cancel the parent if there are no tweens and no children left after the removal
374
+ // We have to check if the .cancel() method exist to handle cases where the parent is the engine itself
375
+ if (/** @type {Renderable} */(parent).cancel) /** @type {Renderable} */(parent).cancel();
376
+ }
377
+ };
378
+
379
+ exports.composeTween = composeTween;
380
+ exports.getTweenSiblings = getTweenSiblings;
381
+ exports.overrideTween = overrideTween;
382
+ exports.removeTargetsFromRenderable = removeTargetsFromRenderable;
383
+ exports.removeTweenSliblings = removeTweenSliblings;
@@ -0,0 +1,10 @@
1
+ export function getTweenSiblings(target: Target, property: string, lookup?: string): TweenPropertySiblings;
2
+ export function overrideTween(tween: Tween): void;
3
+ export function composeTween(tween: Tween, siblings: TweenPropertySiblings): Tween;
4
+ export function removeTweenSliblings(tween: Tween): Tween;
5
+ export function removeTargetsFromRenderable(targetsArray: TargetsArray, renderable?: Renderable, propertyName?: string): void;
6
+ import type { Target } from '../types/index.js';
7
+ import type { TweenPropertySiblings } from '../types/index.js';
8
+ import type { Tween } from '../types/index.js';
9
+ import type { TargetsArray } from '../types/index.js';
10
+ import type { Renderable } from '../types/index.js';