animejs 4.4.0 → 4.5.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 (165) hide show
  1. package/README.md +4 -5
  2. package/dist/bundles/anime.esm.js +491 -272
  3. package/dist/bundles/anime.esm.min.js +2 -2
  4. package/dist/bundles/anime.umd.js +491 -272
  5. package/dist/bundles/anime.umd.min.js +2 -2
  6. package/dist/modules/adapters/index.cjs +14 -0
  7. package/dist/modules/adapters/index.d.ts +1 -0
  8. package/dist/modules/adapters/index.js +8 -0
  9. package/dist/modules/adapters/registry.cjs +149 -0
  10. package/dist/modules/adapters/registry.d.ts +65 -0
  11. package/dist/modules/adapters/registry.js +146 -0
  12. package/dist/modules/adapters/three/adapter.cjs +26 -0
  13. package/dist/modules/adapters/three/adapter.d.ts +15 -0
  14. package/dist/modules/adapters/three/adapter.js +24 -0
  15. package/dist/modules/adapters/three/helpers.cjs +297 -0
  16. package/dist/modules/adapters/three/helpers.d.ts +89 -0
  17. package/dist/modules/adapters/three/helpers.js +280 -0
  18. package/dist/modules/adapters/three/index.cjs +20 -0
  19. package/dist/modules/adapters/three/index.d.ts +2 -0
  20. package/dist/modules/adapters/three/index.js +12 -0
  21. package/dist/modules/adapters/three/instance.cjs +368 -0
  22. package/dist/modules/adapters/three/instance.d.ts +133 -0
  23. package/dist/modules/adapters/three/instance.js +365 -0
  24. package/dist/modules/adapters/three/object3d.cjs +214 -0
  25. package/dist/modules/adapters/three/object3d.d.ts +1 -0
  26. package/dist/modules/adapters/three/object3d.js +212 -0
  27. package/dist/modules/adapters/three/resolvers.cjs +105 -0
  28. package/dist/modules/adapters/three/resolvers.d.ts +1 -0
  29. package/dist/modules/adapters/three/resolvers.js +103 -0
  30. package/dist/modules/adapters/three/uniform.cjs +41 -0
  31. package/dist/modules/adapters/three/uniform.d.ts +1 -0
  32. package/dist/modules/adapters/three/uniform.js +39 -0
  33. package/dist/modules/animatable/animatable.cjs +2 -1
  34. package/dist/modules/animatable/animatable.d.ts +2 -1
  35. package/dist/modules/animatable/animatable.js +2 -1
  36. package/dist/modules/animatable/index.cjs +1 -1
  37. package/dist/modules/animatable/index.js +1 -1
  38. package/dist/modules/animation/additive.cjs +1 -1
  39. package/dist/modules/animation/additive.js +1 -1
  40. package/dist/modules/animation/animation.cjs +43 -16
  41. package/dist/modules/animation/animation.d.ts +5 -0
  42. package/dist/modules/animation/animation.js +45 -18
  43. package/dist/modules/animation/composition.cjs +38 -35
  44. package/dist/modules/animation/composition.js +38 -35
  45. package/dist/modules/animation/index.cjs +1 -1
  46. package/dist/modules/animation/index.js +1 -1
  47. package/dist/modules/core/clock.cjs +11 -15
  48. package/dist/modules/core/clock.d.ts +0 -2
  49. package/dist/modules/core/clock.js +11 -15
  50. package/dist/modules/core/colors.cjs +1 -1
  51. package/dist/modules/core/colors.js +1 -1
  52. package/dist/modules/core/consts.cjs +15 -1
  53. package/dist/modules/core/consts.d.ts +2 -0
  54. package/dist/modules/core/consts.js +14 -2
  55. package/dist/modules/core/globals.cjs +7 -4
  56. package/dist/modules/core/globals.d.ts +8 -2
  57. package/dist/modules/core/globals.js +8 -5
  58. package/dist/modules/core/helpers.cjs +2 -2
  59. package/dist/modules/core/helpers.js +3 -3
  60. package/dist/modules/core/render.cjs +93 -73
  61. package/dist/modules/core/render.js +96 -76
  62. package/dist/modules/core/styles.cjs +16 -2
  63. package/dist/modules/core/styles.js +16 -2
  64. package/dist/modules/core/targets.cjs +11 -13
  65. package/dist/modules/core/targets.js +11 -13
  66. package/dist/modules/core/transforms.cjs +1 -1
  67. package/dist/modules/core/transforms.js +1 -1
  68. package/dist/modules/core/units.cjs +1 -1
  69. package/dist/modules/core/units.js +1 -1
  70. package/dist/modules/core/values.cjs +73 -82
  71. package/dist/modules/core/values.d.ts +1 -2
  72. package/dist/modules/core/values.js +76 -84
  73. package/dist/modules/draggable/draggable.cjs +1 -1
  74. package/dist/modules/draggable/draggable.js +1 -1
  75. package/dist/modules/draggable/index.cjs +1 -1
  76. package/dist/modules/draggable/index.js +1 -1
  77. package/dist/modules/easings/cubic-bezier/index.cjs +1 -1
  78. package/dist/modules/easings/cubic-bezier/index.js +1 -1
  79. package/dist/modules/easings/eases/index.cjs +1 -1
  80. package/dist/modules/easings/eases/index.js +1 -1
  81. package/dist/modules/easings/eases/parser.cjs +3 -3
  82. package/dist/modules/easings/eases/parser.d.ts +4 -5
  83. package/dist/modules/easings/eases/parser.js +3 -3
  84. package/dist/modules/easings/index.cjs +1 -1
  85. package/dist/modules/easings/index.js +1 -1
  86. package/dist/modules/easings/irregular/index.cjs +1 -1
  87. package/dist/modules/easings/irregular/index.js +1 -1
  88. package/dist/modules/easings/linear/index.cjs +1 -1
  89. package/dist/modules/easings/linear/index.js +1 -1
  90. package/dist/modules/easings/none.cjs +1 -1
  91. package/dist/modules/easings/none.js +1 -1
  92. package/dist/modules/easings/spring/index.cjs +1 -1
  93. package/dist/modules/easings/spring/index.js +1 -1
  94. package/dist/modules/easings/steps/index.cjs +1 -1
  95. package/dist/modules/easings/steps/index.js +1 -1
  96. package/dist/modules/engine/engine.cjs +4 -2
  97. package/dist/modules/engine/engine.js +4 -2
  98. package/dist/modules/engine/index.cjs +1 -1
  99. package/dist/modules/engine/index.js +1 -1
  100. package/dist/modules/events/index.cjs +1 -1
  101. package/dist/modules/events/index.js +1 -1
  102. package/dist/modules/events/scroll.cjs +3 -1
  103. package/dist/modules/events/scroll.js +3 -1
  104. package/dist/modules/index.cjs +1 -1
  105. package/dist/modules/index.js +1 -1
  106. package/dist/modules/layout/index.cjs +1 -1
  107. package/dist/modules/layout/index.js +1 -1
  108. package/dist/modules/layout/layout.cjs +1 -1
  109. package/dist/modules/layout/layout.js +1 -1
  110. package/dist/modules/scope/index.cjs +1 -1
  111. package/dist/modules/scope/index.js +1 -1
  112. package/dist/modules/scope/scope.cjs +1 -1
  113. package/dist/modules/scope/scope.js +1 -1
  114. package/dist/modules/svg/drawable.cjs +1 -1
  115. package/dist/modules/svg/drawable.js +1 -1
  116. package/dist/modules/svg/helpers.cjs +1 -1
  117. package/dist/modules/svg/helpers.js +1 -1
  118. package/dist/modules/svg/index.cjs +1 -1
  119. package/dist/modules/svg/index.js +1 -1
  120. package/dist/modules/svg/morphto.cjs +1 -1
  121. package/dist/modules/svg/morphto.js +1 -1
  122. package/dist/modules/svg/motionpath.cjs +1 -1
  123. package/dist/modules/svg/motionpath.js +1 -1
  124. package/dist/modules/text/index.cjs +1 -1
  125. package/dist/modules/text/index.js +1 -1
  126. package/dist/modules/text/scramble.cjs +12 -2
  127. package/dist/modules/text/scramble.d.ts +9 -1
  128. package/dist/modules/text/scramble.js +12 -2
  129. package/dist/modules/text/split.cjs +2 -1
  130. package/dist/modules/text/split.js +2 -1
  131. package/dist/modules/timeline/index.cjs +1 -1
  132. package/dist/modules/timeline/index.js +1 -1
  133. package/dist/modules/timeline/position.cjs +1 -1
  134. package/dist/modules/timeline/position.js +1 -1
  135. package/dist/modules/timeline/timeline.cjs +14 -5
  136. package/dist/modules/timeline/timeline.d.ts +3 -3
  137. package/dist/modules/timeline/timeline.js +14 -5
  138. package/dist/modules/timer/index.cjs +1 -1
  139. package/dist/modules/timer/index.js +1 -1
  140. package/dist/modules/timer/timer.cjs +1 -1
  141. package/dist/modules/timer/timer.js +1 -1
  142. package/dist/modules/types/index.d.ts +36 -11
  143. package/dist/modules/utils/chainable.cjs +1 -1
  144. package/dist/modules/utils/chainable.js +1 -1
  145. package/dist/modules/utils/index.cjs +1 -1
  146. package/dist/modules/utils/index.js +1 -1
  147. package/dist/modules/utils/number.cjs +1 -1
  148. package/dist/modules/utils/number.js +1 -1
  149. package/dist/modules/utils/random.cjs +4 -3
  150. package/dist/modules/utils/random.d.ts +1 -1
  151. package/dist/modules/utils/random.js +4 -3
  152. package/dist/modules/utils/stagger.cjs +67 -13
  153. package/dist/modules/utils/stagger.js +69 -15
  154. package/dist/modules/utils/target.cjs +4 -1
  155. package/dist/modules/utils/target.js +4 -1
  156. package/dist/modules/utils/time.cjs +6 -5
  157. package/dist/modules/utils/time.d.ts +1 -1
  158. package/dist/modules/utils/time.js +6 -5
  159. package/dist/modules/waapi/composition.cjs +1 -1
  160. package/dist/modules/waapi/composition.js +1 -1
  161. package/dist/modules/waapi/index.cjs +1 -1
  162. package/dist/modules/waapi/index.js +1 -1
  163. package/dist/modules/waapi/waapi.cjs +1 -1
  164. package/dist/modules/waapi/waapi.js +1 -1
  165. package/package.json +38 -5
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Anime.js - adapters - CJS
3
+ * @version v4.5.0
4
+ * @license MIT
5
+ * @copyright 2026 - Julian Garnier
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ var registry = require('./registry.cjs');
11
+
12
+
13
+
14
+ exports.registerAdapter = registry.registerAdapter;
@@ -0,0 +1 @@
1
+ export { registerAdapter } from "./registry.js";
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Anime.js - adapters - ESM
3
+ * @version v4.5.0
4
+ * @license MIT
5
+ * @copyright 2026 - Julian Garnier
6
+ */
7
+
8
+ export { registerAdapter } from './registry.js';
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Anime.js - adapters - CJS
3
+ * @version v4.5.0
4
+ * @license MIT
5
+ * @copyright 2026 - Julian Garnier
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ /**
11
+ * Anime.js adapter API. Each library or class group that wants to extend `animate()` and `utils.set()` calls `registerAdapter()` to create its own `Adapter`. The returned `Adapter` exposes `registerTargetAdapter(detect)` for per-class detection and `registerPropertyResolver(fn)` for global Color / Vector / pattern-based fallbacks.
12
+ *
13
+ * import { registerAdapter } from 'animejs/adapters';
14
+ *
15
+ * const myAdapter = registerAdapter();
16
+ * const widget = myAdapter.registerTargetAdapter((t) => t instanceof MyWidget);
17
+ * widget.registerProperty('value',
18
+ * (t) => t.getValue(),
19
+ * (target, value) => target.setValue(value),
20
+ * );
21
+ *
22
+ * For scalar tweens, `value` is the interpolated number. For color and complex tweens it is `undefined`; read `tween._numbers` instead. `gate(target)` scopes the prop to a subset of matching targets.
23
+ *
24
+ * Resolution order: every Adapter's target adapters in registration order (first match wins) then every Adapter's property resolvers (first non-null wins) then engine direct property path.
25
+ */
26
+
27
+ /**
28
+ * @typedef TargetAdapterEntry
29
+ * @property {(t: any) => any} get
30
+ * @property {(target: any, value: number, tween: any) => void} set
31
+ * @property {(t: any) => boolean} [gate]
32
+ */
33
+
34
+ const alwaysTrue = () => true;
35
+
36
+ class TargetAdapter {
37
+ /**
38
+ * @param {(t: any) => boolean} detect
39
+ */
40
+ constructor(detect) {
41
+ this.detect = detect;
42
+ /** @type {Record<string, TargetAdapterEntry>} */
43
+ this.props = {};
44
+ }
45
+
46
+ /**
47
+ * Registers a property the adapter handles. `setter` receives `(target, value, tween)`. For color and complex tweens `value` is `undefined`, read `tween._numbers` instead. `gate(target)` scopes the prop to a subset of matching targets.
48
+ *
49
+ * @param {string} name
50
+ * @param {(t: any) => any} getter
51
+ * @param {(target: any, value: number, tween: any) => void} setter
52
+ * @param {(t: any) => boolean} [gate]
53
+ */
54
+ registerProperty(name, getter, setter, gate) {
55
+ this.props[name] = {
56
+ get: getter,
57
+ set: setter,
58
+ gate: gate || alwaysTrue,
59
+ };
60
+ }
61
+ }
62
+
63
+ class Adapter {
64
+ /**
65
+ * @param {((t: any) => boolean) | null} [detect]
66
+ * Optional gate. When provided, every lookup against this Adapter's target adapters and resolvers is skipped if `detect(target)` returns falsy. Lets the Adapter as a whole short-circuit on unrelated targets.
67
+ */
68
+ constructor(detect) {
69
+ /** @type {((t: any) => boolean) | null} */
70
+ this.detect = detect || null;
71
+ /** @type {TargetAdapter[]} */
72
+ this.targetAdapters = [];
73
+ /** @type {((target: any, name: string) => TargetAdapterEntry | null)[]} */
74
+ this.propertyResolvers = [];
75
+ }
76
+
77
+ /**
78
+ * Creates and registers a `TargetAdapter` scoped to this Adapter.
79
+ *
80
+ * @param {(t: any) => boolean} detect
81
+ * @return {TargetAdapter}
82
+ */
83
+ registerTargetAdapter(detect) {
84
+ const ta = new TargetAdapter(detect);
85
+ this.targetAdapters.push(ta);
86
+ return ta;
87
+ }
88
+
89
+ /**
90
+ * Registers a property resolver scoped to this Adapter. Resolvers are functions invoked at tween creation when no target adapter has claimed the name; the function returns an entry for names it handles or `null` to defer. Use for runtime-matched patterns (Color / Vector axis detection, name-prefix conventions, etc.).
91
+ *
92
+ * @param {(target: any, name: string) => TargetAdapterEntry | null} resolver
93
+ */
94
+ registerPropertyResolver(resolver) {
95
+ if (this.propertyResolvers.indexOf(resolver) === -1) this.propertyResolvers.push(resolver);
96
+ }
97
+ }
98
+
99
+ const adapters = /** @type {Adapter[]} */([]);
100
+
101
+ /**
102
+ * Creates and registers an Adapter. Each library extending `animate()` calls this once and uses the returned Adapter to wire up its target adapters and property resolvers. The optional `detect` short-circuits all lookups against the Adapter when the target is unrelated.
103
+ *
104
+ * @param {(t: any) => boolean} [detect]
105
+ * @return {Adapter}
106
+ */
107
+ function registerAdapter(detect) {
108
+ const a = new Adapter(detect);
109
+ adapters.push(a);
110
+ return a;
111
+ }
112
+
113
+ /**
114
+ * Internal resolution. Tries every Adapter's target adapters first (in registration order, first match wins), then every Adapter's property resolvers.
115
+ *
116
+ * @param {any} target
117
+ * @param {string} name
118
+ * @return {TargetAdapterEntry | null}
119
+ */
120
+ function resolveAdapterEntry(target, name) {
121
+ if (!target) return null;
122
+ const al = adapters.length;
123
+ outer: for (let i = 0; i < al; i++) {
124
+ const a = adapters[i];
125
+ if (a.detect && !a.detect(target)) continue;
126
+ const tas = a.targetAdapters;
127
+ for (let j = 0, m = tas.length; j < m; j++) {
128
+ const ta = tas[j];
129
+ if (ta.detect(target)) {
130
+ const entry = ta.props[name];
131
+ if (entry && (!entry.gate || entry.gate(target))) return entry;
132
+ break outer;
133
+ }
134
+ }
135
+ }
136
+ for (let i = 0; i < al; i++) {
137
+ const a = adapters[i];
138
+ if (a.detect && !a.detect(target)) continue;
139
+ const rs = a.propertyResolvers;
140
+ for (let j = 0, m = rs.length; j < m; j++) {
141
+ const entry = rs[j](target, name);
142
+ if (entry) return entry;
143
+ }
144
+ }
145
+ return null;
146
+ }
147
+
148
+ exports.registerAdapter = registerAdapter;
149
+ exports.resolveAdapterEntry = resolveAdapterEntry;
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Creates and registers an Adapter. Each library extending `animate()` calls this once and uses the returned Adapter to wire up its target adapters and property resolvers. The optional `detect` short-circuits all lookups against the Adapter when the target is unrelated.
3
+ *
4
+ * @param {(t: any) => boolean} [detect]
5
+ * @return {Adapter}
6
+ */
7
+ export function registerAdapter(detect?: (t: any) => boolean): Adapter;
8
+ /**
9
+ * Internal resolution. Tries every Adapter's target adapters first (in registration order, first match wins), then every Adapter's property resolvers.
10
+ *
11
+ * @param {any} target
12
+ * @param {string} name
13
+ * @return {TargetAdapterEntry | null}
14
+ */
15
+ export function resolveAdapterEntry(target: any, name: string): TargetAdapterEntry | null;
16
+ export type TargetAdapterEntry = {
17
+ get: (t: any) => any;
18
+ set: (target: any, value: number, tween: any) => void;
19
+ gate?: (t: any) => boolean;
20
+ };
21
+ declare class Adapter {
22
+ /**
23
+ * @param {((t: any) => boolean) | null} [detect]
24
+ * Optional gate. When provided, every lookup against this Adapter's target adapters and resolvers is skipped if `detect(target)` returns falsy. Lets the Adapter as a whole short-circuit on unrelated targets.
25
+ */
26
+ constructor(detect?: ((t: any) => boolean) | null);
27
+ /** @type {((t: any) => boolean) | null} */
28
+ detect: ((t: any) => boolean) | null;
29
+ /** @type {TargetAdapter[]} */
30
+ targetAdapters: TargetAdapter[];
31
+ /** @type {((target: any, name: string) => TargetAdapterEntry | null)[]} */
32
+ propertyResolvers: ((target: any, name: string) => TargetAdapterEntry | null)[];
33
+ /**
34
+ * Creates and registers a `TargetAdapter` scoped to this Adapter.
35
+ *
36
+ * @param {(t: any) => boolean} detect
37
+ * @return {TargetAdapter}
38
+ */
39
+ registerTargetAdapter(detect: (t: any) => boolean): TargetAdapter;
40
+ /**
41
+ * Registers a property resolver scoped to this Adapter. Resolvers are functions invoked at tween creation when no target adapter has claimed the name; the function returns an entry for names it handles or `null` to defer. Use for runtime-matched patterns (Color / Vector axis detection, name-prefix conventions, etc.).
42
+ *
43
+ * @param {(target: any, name: string) => TargetAdapterEntry | null} resolver
44
+ */
45
+ registerPropertyResolver(resolver: (target: any, name: string) => TargetAdapterEntry | null): void;
46
+ }
47
+ declare class TargetAdapter {
48
+ /**
49
+ * @param {(t: any) => boolean} detect
50
+ */
51
+ constructor(detect: (t: any) => boolean);
52
+ detect: (t: any) => boolean;
53
+ /** @type {Record<string, TargetAdapterEntry>} */
54
+ props: Record<string, TargetAdapterEntry>;
55
+ /**
56
+ * Registers a property the adapter handles. `setter` receives `(target, value, tween)`. For color and complex tweens `value` is `undefined`, read `tween._numbers` instead. `gate(target)` scopes the prop to a subset of matching targets.
57
+ *
58
+ * @param {string} name
59
+ * @param {(t: any) => any} getter
60
+ * @param {(target: any, value: number, tween: any) => void} setter
61
+ * @param {(t: any) => boolean} [gate]
62
+ */
63
+ registerProperty(name: string, getter: (t: any) => any, setter: (target: any, value: number, tween: any) => void, gate?: (t: any) => boolean): void;
64
+ }
65
+ export {};
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Anime.js - adapters - ESM
3
+ * @version v4.5.0
4
+ * @license MIT
5
+ * @copyright 2026 - Julian Garnier
6
+ */
7
+
8
+ /**
9
+ * Anime.js adapter API. Each library or class group that wants to extend `animate()` and `utils.set()` calls `registerAdapter()` to create its own `Adapter`. The returned `Adapter` exposes `registerTargetAdapter(detect)` for per-class detection and `registerPropertyResolver(fn)` for global Color / Vector / pattern-based fallbacks.
10
+ *
11
+ * import { registerAdapter } from 'animejs/adapters';
12
+ *
13
+ * const myAdapter = registerAdapter();
14
+ * const widget = myAdapter.registerTargetAdapter((t) => t instanceof MyWidget);
15
+ * widget.registerProperty('value',
16
+ * (t) => t.getValue(),
17
+ * (target, value) => target.setValue(value),
18
+ * );
19
+ *
20
+ * For scalar tweens, `value` is the interpolated number. For color and complex tweens it is `undefined`; read `tween._numbers` instead. `gate(target)` scopes the prop to a subset of matching targets.
21
+ *
22
+ * Resolution order: every Adapter's target adapters in registration order (first match wins) then every Adapter's property resolvers (first non-null wins) then engine direct property path.
23
+ */
24
+
25
+ /**
26
+ * @typedef TargetAdapterEntry
27
+ * @property {(t: any) => any} get
28
+ * @property {(target: any, value: number, tween: any) => void} set
29
+ * @property {(t: any) => boolean} [gate]
30
+ */
31
+
32
+ const alwaysTrue = () => true;
33
+
34
+ class TargetAdapter {
35
+ /**
36
+ * @param {(t: any) => boolean} detect
37
+ */
38
+ constructor(detect) {
39
+ this.detect = detect;
40
+ /** @type {Record<string, TargetAdapterEntry>} */
41
+ this.props = {};
42
+ }
43
+
44
+ /**
45
+ * Registers a property the adapter handles. `setter` receives `(target, value, tween)`. For color and complex tweens `value` is `undefined`, read `tween._numbers` instead. `gate(target)` scopes the prop to a subset of matching targets.
46
+ *
47
+ * @param {string} name
48
+ * @param {(t: any) => any} getter
49
+ * @param {(target: any, value: number, tween: any) => void} setter
50
+ * @param {(t: any) => boolean} [gate]
51
+ */
52
+ registerProperty(name, getter, setter, gate) {
53
+ this.props[name] = {
54
+ get: getter,
55
+ set: setter,
56
+ gate: gate || alwaysTrue,
57
+ };
58
+ }
59
+ }
60
+
61
+ class Adapter {
62
+ /**
63
+ * @param {((t: any) => boolean) | null} [detect]
64
+ * Optional gate. When provided, every lookup against this Adapter's target adapters and resolvers is skipped if `detect(target)` returns falsy. Lets the Adapter as a whole short-circuit on unrelated targets.
65
+ */
66
+ constructor(detect) {
67
+ /** @type {((t: any) => boolean) | null} */
68
+ this.detect = detect || null;
69
+ /** @type {TargetAdapter[]} */
70
+ this.targetAdapters = [];
71
+ /** @type {((target: any, name: string) => TargetAdapterEntry | null)[]} */
72
+ this.propertyResolvers = [];
73
+ }
74
+
75
+ /**
76
+ * Creates and registers a `TargetAdapter` scoped to this Adapter.
77
+ *
78
+ * @param {(t: any) => boolean} detect
79
+ * @return {TargetAdapter}
80
+ */
81
+ registerTargetAdapter(detect) {
82
+ const ta = new TargetAdapter(detect);
83
+ this.targetAdapters.push(ta);
84
+ return ta;
85
+ }
86
+
87
+ /**
88
+ * Registers a property resolver scoped to this Adapter. Resolvers are functions invoked at tween creation when no target adapter has claimed the name; the function returns an entry for names it handles or `null` to defer. Use for runtime-matched patterns (Color / Vector axis detection, name-prefix conventions, etc.).
89
+ *
90
+ * @param {(target: any, name: string) => TargetAdapterEntry | null} resolver
91
+ */
92
+ registerPropertyResolver(resolver) {
93
+ if (this.propertyResolvers.indexOf(resolver) === -1) this.propertyResolvers.push(resolver);
94
+ }
95
+ }
96
+
97
+ const adapters = /** @type {Adapter[]} */([]);
98
+
99
+ /**
100
+ * Creates and registers an Adapter. Each library extending `animate()` calls this once and uses the returned Adapter to wire up its target adapters and property resolvers. The optional `detect` short-circuits all lookups against the Adapter when the target is unrelated.
101
+ *
102
+ * @param {(t: any) => boolean} [detect]
103
+ * @return {Adapter}
104
+ */
105
+ function registerAdapter(detect) {
106
+ const a = new Adapter(detect);
107
+ adapters.push(a);
108
+ return a;
109
+ }
110
+
111
+ /**
112
+ * Internal resolution. Tries every Adapter's target adapters first (in registration order, first match wins), then every Adapter's property resolvers.
113
+ *
114
+ * @param {any} target
115
+ * @param {string} name
116
+ * @return {TargetAdapterEntry | null}
117
+ */
118
+ function resolveAdapterEntry(target, name) {
119
+ if (!target) return null;
120
+ const al = adapters.length;
121
+ outer: for (let i = 0; i < al; i++) {
122
+ const a = adapters[i];
123
+ if (a.detect && !a.detect(target)) continue;
124
+ const tas = a.targetAdapters;
125
+ for (let j = 0, m = tas.length; j < m; j++) {
126
+ const ta = tas[j];
127
+ if (ta.detect(target)) {
128
+ const entry = ta.props[name];
129
+ if (entry && (!entry.gate || entry.gate(target))) return entry;
130
+ break outer;
131
+ }
132
+ }
133
+ }
134
+ for (let i = 0; i < al; i++) {
135
+ const a = adapters[i];
136
+ if (a.detect && !a.detect(target)) continue;
137
+ const rs = a.propertyResolvers;
138
+ for (let j = 0, m = rs.length; j < m; j++) {
139
+ const entry = rs[j](target, name);
140
+ if (entry) return entry;
141
+ }
142
+ }
143
+ return null;
144
+ }
145
+
146
+ export { registerAdapter, resolveAdapterEntry };
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Anime.js - adapters - CJS
3
+ * @version v4.5.0
4
+ * @license MIT
5
+ * @copyright 2026 - Julian Garnier
6
+ */
7
+
8
+ 'use strict';
9
+
10
+ var registry = require('../registry.cjs');
11
+
12
+ // Duck-typed gate for three.js targets, used as threeAdapter's Adapter-level detect.
13
+ // Early-rejects DOM nodes via nodeType so the OR chain only runs on non-DOM objects.
14
+ // Includes the isAnimejsInstanceProxy marker set in instance.js for per-instance wrappers.
15
+ const isThreeTarget = (t) => !!(
16
+ t && !t.nodeType && (
17
+ t.isObject3D || t.isMaterial || t.isTexture ||
18
+ t.isFog || t.isFogExp2 || t.isUniformNode ||
19
+ t.isColor || t.isVector2 || t.isVector3 || t.isVector4 ||
20
+ t.isAnimejsInstanceProxy
21
+ )
22
+ );
23
+
24
+ const threeAdapter = registry.registerAdapter(isThreeTarget);
25
+
26
+ exports.threeAdapter = threeAdapter;
@@ -0,0 +1,15 @@
1
+ export const threeAdapter: {
2
+ detect: (t: any) => boolean;
3
+ targetAdapters: {
4
+ detect: (t: any) => boolean;
5
+ props: Record<string, import("../registry.js").TargetAdapterEntry>;
6
+ registerProperty(name: string, getter: (t: any) => any, setter: (target: any, value: number, tween: any) => void, gate?: (t: any) => boolean): void;
7
+ }[];
8
+ propertyResolvers: ((target: any, name: string) => import("../registry.js").TargetAdapterEntry | null)[];
9
+ registerTargetAdapter(detect: (t: any) => boolean): {
10
+ detect: (t: any) => boolean;
11
+ props: Record<string, import("../registry.js").TargetAdapterEntry>;
12
+ registerProperty(name: string, getter: (t: any) => any, setter: (target: any, value: number, tween: any) => void, gate?: (t: any) => boolean): void;
13
+ };
14
+ registerPropertyResolver(resolver: (target: any, name: string) => TargetAdapterEntry | null): void;
15
+ };
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Anime.js - adapters - ESM
3
+ * @version v4.5.0
4
+ * @license MIT
5
+ * @copyright 2026 - Julian Garnier
6
+ */
7
+
8
+ import { registerAdapter } from '../registry.js';
9
+
10
+ // Duck-typed gate for three.js targets, used as threeAdapter's Adapter-level detect.
11
+ // Early-rejects DOM nodes via nodeType so the OR chain only runs on non-DOM objects.
12
+ // Includes the isAnimejsInstanceProxy marker set in instance.js for per-instance wrappers.
13
+ const isThreeTarget = (t) => !!(
14
+ t && !t.nodeType && (
15
+ t.isObject3D || t.isMaterial || t.isTexture ||
16
+ t.isFog || t.isFogExp2 || t.isUniformNode ||
17
+ t.isColor || t.isVector2 || t.isVector3 || t.isVector4 ||
18
+ t.isAnimejsInstanceProxy
19
+ )
20
+ );
21
+
22
+ const threeAdapter = registerAdapter(isThreeTarget);
23
+
24
+ export { threeAdapter };