tensum 0.1.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 (134) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/LICENSE +21 -0
  3. package/README.md +340 -0
  4. package/dist/coupled-system.d.ts +50 -0
  5. package/dist/coupled-system.d.ts.map +1 -0
  6. package/dist/coupled-system.js +269 -0
  7. package/dist/coupled-system.js.map +1 -0
  8. package/dist/coupled.d.ts +3 -0
  9. package/dist/coupled.d.ts.map +1 -0
  10. package/dist/coupled.js +2 -0
  11. package/dist/coupled.js.map +1 -0
  12. package/dist/css-linear.d.ts +20 -0
  13. package/dist/css-linear.d.ts.map +1 -0
  14. package/dist/css-linear.js +95 -0
  15. package/dist/css-linear.js.map +1 -0
  16. package/dist/css.d.ts +3 -0
  17. package/dist/css.d.ts.map +1 -0
  18. package/dist/css.js +2 -0
  19. package/dist/css.js.map +1 -0
  20. package/dist/gsap/active-tracks.d.ts +32 -0
  21. package/dist/gsap/active-tracks.d.ts.map +1 -0
  22. package/dist/gsap/active-tracks.js +177 -0
  23. package/dist/gsap/active-tracks.js.map +1 -0
  24. package/dist/gsap/gsap-time.d.ts +10 -0
  25. package/dist/gsap/gsap-time.d.ts.map +1 -0
  26. package/dist/gsap/gsap-time.js +62 -0
  27. package/dist/gsap/gsap-time.js.map +1 -0
  28. package/dist/gsap/plugin-tween-coordinator.d.ts +30 -0
  29. package/dist/gsap/plugin-tween-coordinator.d.ts.map +1 -0
  30. package/dist/gsap/plugin-tween-coordinator.js +72 -0
  31. package/dist/gsap/plugin-tween-coordinator.js.map +1 -0
  32. package/dist/gsap/plugin.d.ts +84 -0
  33. package/dist/gsap/plugin.d.ts.map +1 -0
  34. package/dist/gsap/plugin.js +552 -0
  35. package/dist/gsap/plugin.js.map +1 -0
  36. package/dist/gsap/spring-to.d.ts +93 -0
  37. package/dist/gsap/spring-to.d.ts.map +1 -0
  38. package/dist/gsap/spring-to.js +569 -0
  39. package/dist/gsap/spring-to.js.map +1 -0
  40. package/dist/gsap/spring-track-policy.d.ts +24 -0
  41. package/dist/gsap/spring-track-policy.d.ts.map +1 -0
  42. package/dist/gsap/spring-track-policy.js +76 -0
  43. package/dist/gsap/spring-track-policy.js.map +1 -0
  44. package/dist/gsap/track-lifecycle.d.ts +16 -0
  45. package/dist/gsap/track-lifecycle.d.ts.map +1 -0
  46. package/dist/gsap/track-lifecycle.js +33 -0
  47. package/dist/gsap/track-lifecycle.js.map +1 -0
  48. package/dist/index.d.ts +28 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +16 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/math.d.ts +9 -0
  53. package/dist/math.d.ts.map +1 -0
  54. package/dist/math.js +38 -0
  55. package/dist/math.js.map +1 -0
  56. package/dist/model.d.ts +14 -0
  57. package/dist/model.d.ts.map +1 -0
  58. package/dist/model.js +38 -0
  59. package/dist/model.js.map +1 -0
  60. package/dist/motion-compatibility.d.ts +18 -0
  61. package/dist/motion-compatibility.d.ts.map +1 -0
  62. package/dist/motion-compatibility.js +83 -0
  63. package/dist/motion-compatibility.js.map +1 -0
  64. package/dist/parameters.d.ts +52 -0
  65. package/dist/parameters.d.ts.map +1 -0
  66. package/dist/parameters.js +124 -0
  67. package/dist/parameters.js.map +1 -0
  68. package/dist/settling.d.ts +12 -0
  69. package/dist/settling.d.ts.map +1 -0
  70. package/dist/settling.js +107 -0
  71. package/dist/settling.js.map +1 -0
  72. package/dist/solver.d.ts +17 -0
  73. package/dist/solver.d.ts.map +1 -0
  74. package/dist/solver.js +190 -0
  75. package/dist/solver.js.map +1 -0
  76. package/dist/spring.d.ts +9 -0
  77. package/dist/spring.d.ts.map +1 -0
  78. package/dist/spring.js +91 -0
  79. package/dist/spring.js.map +1 -0
  80. package/dist/support/additive-spring-value.d.ts +39 -0
  81. package/dist/support/additive-spring-value.d.ts.map +1 -0
  82. package/dist/support/additive-spring-value.js +281 -0
  83. package/dist/support/additive-spring-value.js.map +1 -0
  84. package/dist/support/inertia.d.ts +34 -0
  85. package/dist/support/inertia.d.ts.map +1 -0
  86. package/dist/support/inertia.js +293 -0
  87. package/dist/support/inertia.js.map +1 -0
  88. package/dist/support/keyframes.d.ts +34 -0
  89. package/dist/support/keyframes.d.ts.map +1 -0
  90. package/dist/support/keyframes.js +117 -0
  91. package/dist/support/keyframes.js.map +1 -0
  92. package/dist/support/spring-value.d.ts +38 -0
  93. package/dist/support/spring-value.d.ts.map +1 -0
  94. package/dist/support/spring-value.js +289 -0
  95. package/dist/support/spring-value.js.map +1 -0
  96. package/dist/support/velocity.d.ts +14 -0
  97. package/dist/support/velocity.d.ts.map +1 -0
  98. package/dist/support/velocity.js +75 -0
  99. package/dist/support/velocity.js.map +1 -0
  100. package/dist/types.d.ts +61 -0
  101. package/dist/types.d.ts.map +1 -0
  102. package/dist/types.js +2 -0
  103. package/dist/types.js.map +1 -0
  104. package/dist/vector.d.ts +32 -0
  105. package/dist/vector.d.ts.map +1 -0
  106. package/dist/vector.js +121 -0
  107. package/dist/vector.js.map +1 -0
  108. package/package.json +68 -0
  109. package/src/coupled-system.ts +383 -0
  110. package/src/coupled.ts +10 -0
  111. package/src/css-linear.ts +148 -0
  112. package/src/css.ts +6 -0
  113. package/src/gsap/active-tracks.ts +244 -0
  114. package/src/gsap/gsap-time.ts +91 -0
  115. package/src/gsap/plugin-tween-coordinator.ts +112 -0
  116. package/src/gsap/plugin.ts +861 -0
  117. package/src/gsap/spring-to.ts +836 -0
  118. package/src/gsap/spring-track-policy.ts +133 -0
  119. package/src/gsap/track-lifecycle.ts +53 -0
  120. package/src/index.ts +130 -0
  121. package/src/math.ts +46 -0
  122. package/src/model.ts +70 -0
  123. package/src/motion-compatibility.ts +131 -0
  124. package/src/parameters.ts +226 -0
  125. package/src/settling.ts +141 -0
  126. package/src/solver.ts +262 -0
  127. package/src/spring.ts +119 -0
  128. package/src/support/additive-spring-value.ts +343 -0
  129. package/src/support/inertia.ts +367 -0
  130. package/src/support/keyframes.ts +188 -0
  131. package/src/support/spring-value.ts +399 -0
  132. package/src/support/velocity.ts +119 -0
  133. package/src/types.ts +70 -0
  134. package/src/vector.ts +191 -0
@@ -0,0 +1,177 @@
1
+ const objectTracks = new WeakMap();
2
+ let nextTrackOrder = 0;
3
+ function isObjectKey(target) {
4
+ return ((typeof target === 'object' && target !== null) ||
5
+ typeof target === 'function');
6
+ }
7
+ function tracksFor(target, create) {
8
+ if (!isObjectKey(target)) {
9
+ if (create) {
10
+ throw new TypeError('active spring tracks require an object target');
11
+ }
12
+ return undefined;
13
+ }
14
+ const existing = objectTracks.get(target);
15
+ if (existing || !create)
16
+ return existing;
17
+ const tracks = new Map();
18
+ objectTracks.set(target, tracks);
19
+ return tracks;
20
+ }
21
+ function stackFor(target, property, create) {
22
+ const tracks = tracksFor(target, create);
23
+ if (!tracks)
24
+ return undefined;
25
+ const existing = tracks.get(property);
26
+ if (existing || !create)
27
+ return existing;
28
+ const stack = [];
29
+ tracks.set(property, stack);
30
+ return stack;
31
+ }
32
+ function cleanup(target, property) {
33
+ const tracks = tracksFor(target, false);
34
+ if (!tracks)
35
+ return;
36
+ const stack = tracks.get(property);
37
+ if (stack?.length === 0)
38
+ tracks.delete(property);
39
+ if (tracks.size !== 0)
40
+ return;
41
+ if (isObjectKey(target))
42
+ objectTracks.delete(target);
43
+ }
44
+ export function activeTrackState(target, property, globalTime) {
45
+ const owner = stackFor(target, property, false)?.at(-1);
46
+ if (!owner)
47
+ return undefined;
48
+ return {
49
+ ...owner.source.state(globalTime),
50
+ ...(owner.terminal ? { terminal: true } : {}),
51
+ };
52
+ }
53
+ /**
54
+ * Invalidates a terminal handoff baseline after an external write. The whole
55
+ * property history is discarded so reversing an older tween cannot restore a
56
+ * value that no longer represents the target.
57
+ */
58
+ function discardTerminalTrackHistory(target, property) {
59
+ const stack = stackFor(target, property, false);
60
+ if (!stack?.at(-1)?.terminal)
61
+ return false;
62
+ for (const entry of stack) {
63
+ entry.active = false;
64
+ entry.discarded = true;
65
+ entry.terminal = false;
66
+ }
67
+ stack.length = 0;
68
+ cleanup(target, property);
69
+ return true;
70
+ }
71
+ function positionsMatch(first, second) {
72
+ const floatingPointTolerance = Number.EPSILON * Math.max(1, Math.abs(first), Math.abs(second)) * 8;
73
+ return Math.abs(first - second) <= Math.max(1e-9, floatingPointTolerance);
74
+ }
75
+ /**
76
+ * Preserves a live/unchanged handoff, but atomically invalidates terminal
77
+ * history when the target was externally changed after completion.
78
+ */
79
+ export function reconcileActiveTrackHandoff(target, property, inherited, actualPosition, actualUnit) {
80
+ if (!inherited?.terminal ||
81
+ (positionsMatch(inherited.position, actualPosition) &&
82
+ inherited.unit === actualUnit)) {
83
+ return inherited;
84
+ }
85
+ discardTerminalTrackHistory(target, property);
86
+ return undefined;
87
+ }
88
+ export function registerActiveTrack(target, property, source) {
89
+ const entry = {
90
+ active: false,
91
+ discarded: false,
92
+ order: nextTrackOrder++,
93
+ source,
94
+ terminal: false,
95
+ };
96
+ const activate = () => {
97
+ if (entry.active || entry.discarded)
98
+ return;
99
+ const stack = stackFor(target, property, true);
100
+ const nextIndex = stack.findIndex((candidate) => candidate.order > entry.order);
101
+ if (nextIndex < 0)
102
+ stack.push(entry);
103
+ else
104
+ stack.splice(nextIndex, 0, entry);
105
+ entry.active = true;
106
+ };
107
+ const release = (options = {}) => {
108
+ if (!entry.active)
109
+ return false;
110
+ const stack = stackFor(target, property, false);
111
+ if (!stack) {
112
+ entry.active = false;
113
+ entry.terminal = false;
114
+ return false;
115
+ }
116
+ const index = stack.indexOf(entry);
117
+ if (index < 0) {
118
+ entry.active = false;
119
+ entry.terminal = false;
120
+ return false;
121
+ }
122
+ const wasOwner = index === stack.length - 1;
123
+ stack.splice(index, 1);
124
+ entry.active = false;
125
+ entry.terminal = false;
126
+ const previous = wasOwner ? stack.at(-1) : undefined;
127
+ if (previous && options.restore !== false)
128
+ previous.source.restore();
129
+ cleanup(target, property);
130
+ return previous !== undefined && options.restore !== false;
131
+ };
132
+ const retire = () => {
133
+ if (!entry.active || entry.discarded)
134
+ return false;
135
+ const stack = stackFor(target, property, false);
136
+ if (!stack) {
137
+ entry.active = false;
138
+ entry.terminal = false;
139
+ return false;
140
+ }
141
+ const index = stack.indexOf(entry);
142
+ if (index < 0) {
143
+ entry.active = false;
144
+ entry.terminal = false;
145
+ return false;
146
+ }
147
+ if (index === stack.length - 1) {
148
+ const covered = stack.splice(0, index);
149
+ for (const candidate of covered) {
150
+ candidate.active = false;
151
+ candidate.terminal = false;
152
+ }
153
+ entry.terminal = true;
154
+ return true;
155
+ }
156
+ stack.splice(index, 1);
157
+ entry.active = false;
158
+ entry.terminal = false;
159
+ cleanup(target, property);
160
+ return true;
161
+ };
162
+ activate();
163
+ return Object.freeze({
164
+ isActive() {
165
+ return entry.active;
166
+ },
167
+ isOwner() {
168
+ if (!entry.active)
169
+ return false;
170
+ return stackFor(target, property, false)?.at(-1) === entry;
171
+ },
172
+ activate,
173
+ retire,
174
+ release,
175
+ });
176
+ }
177
+ //# sourceMappingURL=active-tracks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"active-tracks.js","sourceRoot":"","sources":["../../src/gsap/active-tracks.ts"],"names":[],"mappings":"AAqCA,MAAM,YAAY,GAAG,IAAI,OAAO,EAA0B,CAAC;AAC3D,IAAI,cAAc,GAAG,CAAC,CAAC;AAEvB,SAAS,WAAW,CAAC,MAAe;IAClC,OAAO,CACL,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,CAAC;QAC/C,OAAO,MAAM,KAAK,UAAU,CAC7B,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAChB,MAAe,EACf,MAAe;IAEf,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,QAAQ,IAAI,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACzC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC/C,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CACf,MAAe,EACf,QAAgB,EAChB,MAAe;IAEf,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,QAAQ,IAAI,CAAC,MAAM;QAAE,OAAO,QAAQ,CAAC;IACzC,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,OAAO,CAAC,MAAe,EAAE,QAAgB;IAChD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,KAAK,EAAE,MAAM,KAAK,CAAC;QAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IAC9B,IAAI,WAAW,CAAC,MAAM,CAAC;QAAE,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,MAAe,EACf,QAAgB,EAChB,UAAmB;IAEnB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO;QACL,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC;QACjC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,2BAA2B,CAClC,MAAe,EACf,QAAgB;IAEhB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QACrB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;QACvB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;IACzB,CAAC;IACD,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IACjB,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,MAAc;IACnD,MAAM,sBAAsB,GAC1B,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAAe,EACf,QAAgB,EAChB,SAA8C,EAC9C,cAAsB,EACtB,UAA8B;IAE9B,IACE,CAAC,SAAS,EAAE,QAAQ;QACpB,CAAC,cAAc,CAAC,SAAS,CAAC,QAAQ,EAAE,cAAc,CAAC;YACjD,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,EAChC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,2BAA2B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAe,EACf,QAAgB,EAChB,MAAyB;IAEzB,MAAM,KAAK,GAAe;QACxB,MAAM,EAAE,KAAK;QACb,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,cAAc,EAAE;QACvB,MAAM;QACN,QAAQ,EAAE,KAAK;KAChB,CAAC;IAEF,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS;YAAE,OAAO;QAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAE,CAAC;QAChD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAC/B,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAC7C,CAAC;QACF,IAAI,SAAS,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YAChC,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACvC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;IACtB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,UAAiC,EAAE,EAAW,EAAE;QAC/D,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YACrB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YACrB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5C,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACvB,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QACrB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;QACvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrD,IAAI,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK;YAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACrE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC1B,OAAO,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC;IAC7D,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,GAAY,EAAE;QAC3B,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS;YAAE,OAAO,KAAK,CAAC;QACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YACrB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;YACrB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACvC,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;gBAChC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;gBACzB,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC7B,CAAC;YACD,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACvB,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;QACrB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;QACvB,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,QAAQ,EAAE,CAAC;IACX,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,QAAQ;YACN,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QACD,OAAO;YACL,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAChC,OAAO,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;QAC7D,CAAC;QACD,QAAQ;QACR,MAAM;QACN,OAAO;KACR,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare function globalTimeAt(animation: gsap.core.Tween, localTime: number): number;
2
+ export declare function localTimeAt(animation: gsap.core.Tween, globalTime: number): number;
3
+ export interface LocalCycle {
4
+ time: number;
5
+ direction: 1 | 0 | -1;
6
+ }
7
+ export declare function currentLocalCycle(animation: gsap.core.Tween): LocalCycle;
8
+ /** Maps a global instant to GSAP's cycle-local time, including repeat/yoyo. */
9
+ export declare function localCycleAt(animation: gsap.core.Tween, globalTime: number): LocalCycle;
10
+ //# sourceMappingURL=gsap-time.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gsap-time.d.ts","sourceRoot":"","sources":["../../src/gsap/gsap-time.ts"],"names":[],"mappings":"AAQA,wBAAgB,YAAY,CAC1B,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAC1B,SAAS,EAAE,MAAM,GAChB,MAAM,CAER;AAED,wBAAgB,WAAW,CACzB,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAC1B,UAAU,EAAE,MAAM,GACjB,MAAM,CAYR;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;CACvB;AA4CD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,UAAU,CAExE;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAC1B,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAC1B,UAAU,EAAE,MAAM,GACjB,UAAU,CAGZ"}
@@ -0,0 +1,62 @@
1
+ function withGlobalTime(animation) {
2
+ return animation;
3
+ }
4
+ export function globalTimeAt(animation, localTime) {
5
+ return withGlobalTime(animation).globalTime(localTime);
6
+ }
7
+ export function localTimeAt(animation, globalTime) {
8
+ if (animation.paused())
9
+ return animation.totalTime();
10
+ const globalStart = globalTimeAt(animation, 0);
11
+ const globalNextSecond = globalTimeAt(animation, 1);
12
+ const globalSecondsPerLocalSecond = globalNextSecond - globalStart;
13
+ if (!Number.isFinite(globalSecondsPerLocalSecond) ||
14
+ globalSecondsPerLocalSecond === 0) {
15
+ return animation.time();
16
+ }
17
+ return Math.max(0, (globalTime - globalStart) / globalSecondsPerLocalSecond);
18
+ }
19
+ function cycleAtTotalTime(animation, totalTime) {
20
+ const duration = animation.duration();
21
+ const playbackDirection = animation.reversed() ? -1 : 1;
22
+ if (!(duration > 0))
23
+ return { time: 0, direction: playbackDirection };
24
+ const repeat = animation.repeat();
25
+ if (repeat === 0) {
26
+ return {
27
+ time: Math.min(totalTime, duration),
28
+ direction: playbackDirection,
29
+ };
30
+ }
31
+ const cycleDuration = duration + animation.repeatDelay();
32
+ if (!(cycleDuration > 0))
33
+ return { time: 0, direction: playbackDirection };
34
+ const finiteEnd = repeat >= 0 ? animation.totalDuration() : Infinity;
35
+ const boundedTotalTime = Math.min(totalTime, finiteEnd);
36
+ if (repeat >= 0 && boundedTotalTime >= finiteEnd) {
37
+ const yoyoReversed = animation.yoyo() && repeat % 2 === 1;
38
+ return {
39
+ time: yoyoReversed ? 0 : duration,
40
+ direction: ((yoyoReversed ? -1 : 1) * playbackDirection),
41
+ };
42
+ }
43
+ const cycle = Math.floor(boundedTotalTime / cycleDuration);
44
+ const yoyoReversed = animation.yoyo() && cycle % 2 === 1;
45
+ const cycleTime = boundedTotalTime - cycle * cycleDuration;
46
+ const forwardTime = Math.min(cycleTime, duration);
47
+ return {
48
+ time: yoyoReversed ? duration - forwardTime : forwardTime,
49
+ direction: cycleTime > duration
50
+ ? 0
51
+ : ((yoyoReversed ? -1 : 1) * playbackDirection),
52
+ };
53
+ }
54
+ export function currentLocalCycle(animation) {
55
+ return cycleAtTotalTime(animation, animation.totalTime());
56
+ }
57
+ /** Maps a global instant to GSAP's cycle-local time, including repeat/yoyo. */
58
+ export function localCycleAt(animation, globalTime) {
59
+ const totalTime = localTimeAt(animation, globalTime);
60
+ return cycleAtTotalTime(animation, totalTime);
61
+ }
62
+ //# sourceMappingURL=gsap-time.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gsap-time.js","sourceRoot":"","sources":["../../src/gsap/gsap-time.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export interface PluginTweenTiming {
2
+ finiteDuration: number;
3
+ infinite: boolean;
4
+ }
5
+ export interface PluginTweenParticipant {
6
+ timing(): PluginTweenTiming;
7
+ dispose(): void;
8
+ }
9
+ export interface PluginTweenRegistration {
10
+ recompute(): void;
11
+ remove(): void;
12
+ }
13
+ export interface PluginTweenState {
14
+ tween: gsap.core.Tween;
15
+ baseDuration: number;
16
+ baseRepeat: number;
17
+ participants: Set<PluginTweenParticipant>;
18
+ generationTargets: Set<object>;
19
+ }
20
+ /**
21
+ * Starts one GSAP plugin init generation. Seeing the same target again marks a
22
+ * fresh generation after `invalidate()`, including stagger children whose
23
+ * source-array index isn't zero.
24
+ */
25
+ export declare function beginPluginTweenInit(tween: gsap.core.Tween, target: object, options: {
26
+ baseDuration: number;
27
+ baseRepeat: number;
28
+ }): PluginTweenState;
29
+ export declare function registerPluginTweenParticipant(state: PluginTweenState, participant: PluginTweenParticipant): PluginTweenRegistration;
30
+ //# sourceMappingURL=plugin-tween-coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-tween-coordinator.d.ts","sourceRoot":"","sources":["../../src/gsap/plugin-tween-coordinator.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,IAAI,iBAAiB,CAAC;IAC5B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,IAAI,IAAI,CAAC;IAClB,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAC1C,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAChC;AA+BD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACpD,gBAAgB,CA4BlB;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,gBAAgB,EACvB,WAAW,EAAE,sBAAsB,GAClC,uBAAuB,CAgBzB"}
@@ -0,0 +1,72 @@
1
+ const states = new WeakMap();
2
+ function applyTiming(state) {
3
+ let finiteDuration = 0;
4
+ let infinite = false;
5
+ for (const participant of state.participants) {
6
+ const timing = participant.timing();
7
+ finiteDuration = Math.max(finiteDuration, timing.finiteDuration);
8
+ infinite ||= timing.infinite;
9
+ }
10
+ if (infinite) {
11
+ state.tween.duration(1);
12
+ state.tween.repeat(-1);
13
+ return;
14
+ }
15
+ state.tween.repeat(state.baseRepeat);
16
+ state.tween.duration(gsapSafeDuration(state.participants.size === 0 ? state.baseDuration : finiteDuration));
17
+ }
18
+ function disposeParticipants(state) {
19
+ for (const participant of state.participants)
20
+ participant.dispose();
21
+ state.participants.clear();
22
+ }
23
+ /**
24
+ * Starts one GSAP plugin init generation. Seeing the same target again marks a
25
+ * fresh generation after `invalidate()`, including stagger children whose
26
+ * source-array index isn't zero.
27
+ */
28
+ export function beginPluginTweenInit(tween, target, options) {
29
+ let state = states.get(tween);
30
+ if (!state) {
31
+ state = {
32
+ tween,
33
+ baseDuration: options.baseDuration,
34
+ baseRepeat: options.baseRepeat,
35
+ participants: new Set(),
36
+ generationTargets: new Set([target]),
37
+ };
38
+ states.set(tween, state);
39
+ const previousInterrupt = tween.eventCallback('onInterrupt');
40
+ tween.eventCallback('onInterrupt', () => {
41
+ disposeParticipants(state);
42
+ previousInterrupt?.apply(tween.vars.callbackScope ?? tween, tween.vars.onInterruptParams ?? []);
43
+ });
44
+ }
45
+ else if (state.generationTargets.has(target)) {
46
+ disposeParticipants(state);
47
+ applyTiming(state);
48
+ state.generationTargets.clear();
49
+ }
50
+ state.generationTargets.add(target);
51
+ return state;
52
+ }
53
+ export function registerPluginTweenParticipant(state, participant) {
54
+ state.participants.add(participant);
55
+ applyTiming(state);
56
+ let active = true;
57
+ return {
58
+ recompute() {
59
+ if (active)
60
+ applyTiming(state);
61
+ },
62
+ remove() {
63
+ if (!active)
64
+ return;
65
+ active = false;
66
+ state.participants.delete(participant);
67
+ applyTiming(state);
68
+ },
69
+ };
70
+ }
71
+ import { gsapSafeDuration } from './spring-track-policy.js';
72
+ //# sourceMappingURL=plugin-tween-coordinator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-tween-coordinator.js","sourceRoot":"","sources":["../../src/gsap/plugin-tween-coordinator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ import type { SpringParameters, SpringSettleInput } from '../types.js';
2
+ import { gsap } from 'gsap';
3
+ import type { UnsettledPolicy } from './spring-track-policy.js';
4
+ import type { SpringProperty, SpringPropertyAdapter, SpringPropertyOptions, SpringTargetValue, SpringTargets, SpringToSnapshot, SpringVelocities } from './spring-to.js';
5
+ /** Spring configuration shared by the timeline effect and direct helper. */
6
+ export interface MotionSpringVars {
7
+ x?: SpringTargetValue;
8
+ y?: SpringTargetValue;
9
+ scale?: SpringTargetValue;
10
+ rotation?: SpringTargetValue;
11
+ values?: SpringTargets;
12
+ parameters: SpringParameters & {
13
+ settle?: SpringSettleInput;
14
+ };
15
+ velocity?: number | SpringVelocities;
16
+ properties?: Readonly<Partial<Record<SpringProperty, SpringPropertyOptions>>>;
17
+ adapters?: Readonly<Partial<Record<SpringProperty, SpringPropertyAdapter>>>;
18
+ units?: Readonly<Partial<Record<SpringProperty, string>>>;
19
+ /** Behavior when a track reaches `maxDuration` without settling. */
20
+ unsettled?: UnsettledPolicy;
21
+ /**
22
+ * Runs once per target at each forward logical-completion crossing. The
23
+ * snapshot does not include the target or its array index.
24
+ */
25
+ onLogicalComplete?: (snapshot: SpringToSnapshot) => void;
26
+ /**
27
+ * Runs once per settled target at each forward settlement crossing. The
28
+ * snapshot does not include the target or its array index.
29
+ */
30
+ onSettle?: (snapshot: SpringToSnapshot) => void;
31
+ /**
32
+ * Runs once per unsettled target at each forward `maxDuration` crossing. The
33
+ * snapshot does not include the target or its array index.
34
+ */
35
+ onUnsettled?: (snapshot: SpringToSnapshot) => void;
36
+ }
37
+ /**
38
+ * GSAP options forwarded by the preflighted effect. Spring owns `duration` and
39
+ * `ease`, so those keys are rejected here.
40
+ */
41
+ export type MotionSpringEffectTweenVars = Omit<gsap.TweenVars, 'duration' | 'ease'> & {
42
+ duration?: never;
43
+ ease?: never;
44
+ };
45
+ /**
46
+ * Configuration for the preflighted GSAP effect. The effect resolves its
47
+ * driver duration before GSAP inserts the returned tween into a timeline.
48
+ *
49
+ * `from` snapshots an explicit future starting state. Supply it when building
50
+ * a timeline whose target will be changed by an earlier child; without it,
51
+ * preflight intentionally reads the target at effect-construction time.
52
+ */
53
+ export interface MotionSpringEffectVars extends MotionSpringVars {
54
+ /**
55
+ * Explicit starting snapshot captured during effect construction. One map is
56
+ * applied to every resolved target. Without it, preflight reads each target.
57
+ */
58
+ from?: SpringTargets;
59
+ /** GSAP driver options such as `paused`, `stagger`, `repeat`, and `yoyo`. */
60
+ tween?: MotionSpringEffectTweenVars;
61
+ }
62
+ /**
63
+ * Creates a preflighted GSAP tween whose duration is final before it is added
64
+ * to a timeline. Prefer the registered `timeline.motionSpring()` effect for
65
+ * sequential, staggered, or nested composition. Calling `invalidate()` reuses
66
+ * the prepared snapshot; create a new effect tween to preflight changed
67
+ * starting values, destinations, or parameters.
68
+ */
69
+ export declare function createMotionSpringTween(targets: gsap.TweenTarget, rawVars: MotionSpringEffectVars, instance?: typeof gsap): gsap.core.Tween;
70
+ /** Registers the preflighted `motionSpring` effect and timeline extension. */
71
+ export declare function registerSpringPlugin(instance?: typeof gsap): void;
72
+ declare global {
73
+ namespace gsap {
74
+ interface EffectsMap {
75
+ motionSpring(targets: TweenTarget, vars: MotionSpringEffectVars): core.Tween;
76
+ }
77
+ namespace core {
78
+ interface Timeline {
79
+ motionSpring(targets: TweenTarget, vars: MotionSpringEffectVars, position?: Position): this;
80
+ }
81
+ }
82
+ }
83
+ }
84
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/gsap/plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,gBAAgB,EAChB,iBAAiB,EAGlB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAmB5B,OAAO,KAAK,EAEV,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAYlC,OAAO,KAAK,EAEV,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EAErB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAEhB,gBAAgB,EACjB,MAAM,gBAAgB,CAAC;AAExB,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,CAAC,CAAC,EAAE,iBAAiB,CAAC;IACtB,CAAC,CAAC,EAAE,iBAAiB,CAAC;IACtB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,gBAAgB,GAAG;QAAE,MAAM,CAAC,EAAE,iBAAiB,CAAA;KAAE,CAAC;IAC9D,QAAQ,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACrC,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC9E,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC5E,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1D,oEAAoE;IACpE,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzD;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAChD;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACpD;AAED;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAC5C,IAAI,CAAC,SAAS,EACd,UAAU,GAAG,MAAM,CACpB,GAAG;IACF,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,IAAI,CAAC,EAAE,KAAK,CAAC;CACd,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D;;;OAGG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,2BAA2B,CAAC;CACrC;AA8UD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,IAAI,CAAC,WAAW,EACzB,OAAO,EAAE,sBAAsB,EAC/B,QAAQ,GAAE,OAAO,IAAW,GAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,CA2DjB;AA8TD,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,QAAQ,GAAE,OAAO,IAAW,GAAG,IAAI,CAEvE;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,IAAI,CAAC;QACb,UAAU,UAAU;YAClB,YAAY,CACV,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,sBAAsB,GAC3B,IAAI,CAAC,KAAK,CAAC;SACf;QAED,UAAU,IAAI,CAAC;YACb,UAAU,QAAQ;gBAChB,YAAY,CACV,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE,sBAAsB,EAC5B,QAAQ,CAAC,EAAE,QAAQ,GAClB,IAAI,CAAC;aACT;SACF;KACF;CACF"}