@codellyson/framely 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 (209) hide show
  1. package/dist/AbsoluteFill.d.ts +18 -0
  2. package/dist/AbsoluteFill.d.ts.map +1 -0
  3. package/dist/AbsoluteFill.js +25 -0
  4. package/dist/AbsoluteFill.js.map +1 -0
  5. package/dist/Audio.d.ts +80 -0
  6. package/dist/Audio.d.ts.map +1 -0
  7. package/dist/Audio.js +221 -0
  8. package/dist/Audio.js.map +1 -0
  9. package/dist/Composition.d.ts +208 -0
  10. package/dist/Composition.d.ts.map +1 -0
  11. package/dist/Composition.js +210 -0
  12. package/dist/Composition.js.map +1 -0
  13. package/dist/Easing.d.ts +88 -0
  14. package/dist/Easing.d.ts.map +1 -0
  15. package/dist/Easing.js +266 -0
  16. package/dist/Easing.js.map +1 -0
  17. package/dist/ErrorBoundary.d.ts +35 -0
  18. package/dist/ErrorBoundary.d.ts.map +1 -0
  19. package/dist/ErrorBoundary.js +74 -0
  20. package/dist/ErrorBoundary.js.map +1 -0
  21. package/dist/Folder.d.ts +46 -0
  22. package/dist/Folder.d.ts.map +1 -0
  23. package/dist/Folder.js +44 -0
  24. package/dist/Folder.js.map +1 -0
  25. package/dist/Freeze.d.ts +35 -0
  26. package/dist/Freeze.d.ts.map +1 -0
  27. package/dist/Freeze.js +40 -0
  28. package/dist/Freeze.js.map +1 -0
  29. package/dist/IFrame.d.ts +28 -0
  30. package/dist/IFrame.d.ts.map +1 -0
  31. package/dist/IFrame.js +57 -0
  32. package/dist/IFrame.js.map +1 -0
  33. package/dist/Img.d.ts +36 -0
  34. package/dist/Img.d.ts.map +1 -0
  35. package/dist/Img.js +91 -0
  36. package/dist/Img.js.map +1 -0
  37. package/dist/Loop.d.ts +66 -0
  38. package/dist/Loop.d.ts.map +1 -0
  39. package/dist/Loop.js +79 -0
  40. package/dist/Loop.js.map +1 -0
  41. package/dist/Player.d.ts +118 -0
  42. package/dist/Player.d.ts.map +1 -0
  43. package/dist/Player.js +311 -0
  44. package/dist/Player.js.map +1 -0
  45. package/dist/Sequence.d.ts +25 -0
  46. package/dist/Sequence.d.ts.map +1 -0
  47. package/dist/Sequence.js +37 -0
  48. package/dist/Sequence.js.map +1 -0
  49. package/dist/Series.d.ts +52 -0
  50. package/dist/Series.d.ts.map +1 -0
  51. package/dist/Series.js +86 -0
  52. package/dist/Series.js.map +1 -0
  53. package/dist/Text.d.ts +129 -0
  54. package/dist/Text.d.ts.map +1 -0
  55. package/dist/Text.js +211 -0
  56. package/dist/Text.js.map +1 -0
  57. package/dist/Video.d.ts +75 -0
  58. package/dist/Video.d.ts.map +1 -0
  59. package/dist/Video.js +136 -0
  60. package/dist/Video.js.map +1 -0
  61. package/dist/config.d.ts +128 -0
  62. package/dist/config.d.ts.map +1 -0
  63. package/dist/config.js +243 -0
  64. package/dist/config.js.map +1 -0
  65. package/dist/context.d.ts +84 -0
  66. package/dist/context.d.ts.map +1 -0
  67. package/dist/context.js +131 -0
  68. package/dist/context.js.map +1 -0
  69. package/dist/delayRender.d.ts +130 -0
  70. package/dist/delayRender.d.ts.map +1 -0
  71. package/dist/delayRender.js +197 -0
  72. package/dist/delayRender.js.map +1 -0
  73. package/dist/getInputProps.d.ts +118 -0
  74. package/dist/getInputProps.d.ts.map +1 -0
  75. package/dist/getInputProps.js +181 -0
  76. package/dist/getInputProps.js.map +1 -0
  77. package/dist/hooks/useDelayRender.d.ts +52 -0
  78. package/dist/hooks/useDelayRender.d.ts.map +1 -0
  79. package/dist/hooks/useDelayRender.js +92 -0
  80. package/dist/hooks/useDelayRender.js.map +1 -0
  81. package/dist/hooks.d.ts +19 -0
  82. package/dist/hooks.d.ts.map +1 -0
  83. package/dist/hooks.js +17 -0
  84. package/dist/hooks.js.map +1 -0
  85. package/dist/index.d.ts +71 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +65 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/interpolate.d.ts +80 -0
  90. package/dist/interpolate.d.ts.map +1 -0
  91. package/dist/interpolate.js +108 -0
  92. package/dist/interpolate.js.map +1 -0
  93. package/dist/interpolateColors.d.ts +50 -0
  94. package/dist/interpolateColors.d.ts.map +1 -0
  95. package/dist/interpolateColors.js +300 -0
  96. package/dist/interpolateColors.js.map +1 -0
  97. package/dist/makeTransform.d.ts +98 -0
  98. package/dist/makeTransform.d.ts.map +1 -0
  99. package/dist/makeTransform.js +287 -0
  100. package/dist/makeTransform.js.map +1 -0
  101. package/dist/measureSpring.d.ts +75 -0
  102. package/dist/measureSpring.d.ts.map +1 -0
  103. package/dist/measureSpring.js +108 -0
  104. package/dist/measureSpring.js.map +1 -0
  105. package/dist/noise.d.ts +110 -0
  106. package/dist/noise.d.ts.map +1 -0
  107. package/dist/noise.js +228 -0
  108. package/dist/noise.js.map +1 -0
  109. package/dist/preload.d.ts +145 -0
  110. package/dist/preload.d.ts.map +1 -0
  111. package/dist/preload.js +225 -0
  112. package/dist/preload.js.map +1 -0
  113. package/dist/registerRoot.d.ts +140 -0
  114. package/dist/registerRoot.d.ts.map +1 -0
  115. package/dist/registerRoot.js +238 -0
  116. package/dist/registerRoot.js.map +1 -0
  117. package/dist/shapes/Circle.d.ts +15 -0
  118. package/dist/shapes/Circle.d.ts.map +1 -0
  119. package/dist/shapes/Circle.js +11 -0
  120. package/dist/shapes/Circle.js.map +1 -0
  121. package/dist/shapes/Ellipse.d.ts +16 -0
  122. package/dist/shapes/Ellipse.d.ts.map +1 -0
  123. package/dist/shapes/Ellipse.js +11 -0
  124. package/dist/shapes/Ellipse.js.map +1 -0
  125. package/dist/shapes/Line.d.ts +15 -0
  126. package/dist/shapes/Line.d.ts.map +1 -0
  127. package/dist/shapes/Line.js +11 -0
  128. package/dist/shapes/Line.js.map +1 -0
  129. package/dist/shapes/Path.d.ts +20 -0
  130. package/dist/shapes/Path.d.ts.map +1 -0
  131. package/dist/shapes/Path.js +14 -0
  132. package/dist/shapes/Path.js.map +1 -0
  133. package/dist/shapes/Polygon.d.ts +15 -0
  134. package/dist/shapes/Polygon.d.ts.map +1 -0
  135. package/dist/shapes/Polygon.js +16 -0
  136. package/dist/shapes/Polygon.js.map +1 -0
  137. package/dist/shapes/Rect.d.ts +18 -0
  138. package/dist/shapes/Rect.d.ts.map +1 -0
  139. package/dist/shapes/Rect.js +11 -0
  140. package/dist/shapes/Rect.js.map +1 -0
  141. package/dist/shapes/Svg.d.ts +16 -0
  142. package/dist/shapes/Svg.d.ts.map +1 -0
  143. package/dist/shapes/Svg.js +15 -0
  144. package/dist/shapes/Svg.js.map +1 -0
  145. package/dist/shapes/index.d.ts +16 -0
  146. package/dist/shapes/index.d.ts.map +1 -0
  147. package/dist/shapes/index.js +9 -0
  148. package/dist/shapes/index.js.map +1 -0
  149. package/dist/shapes/usePathLength.d.ts +24 -0
  150. package/dist/shapes/usePathLength.d.ts.map +1 -0
  151. package/dist/shapes/usePathLength.js +32 -0
  152. package/dist/shapes/usePathLength.js.map +1 -0
  153. package/dist/staticFile.d.ts +47 -0
  154. package/dist/staticFile.d.ts.map +1 -0
  155. package/dist/staticFile.js +105 -0
  156. package/dist/staticFile.js.map +1 -0
  157. package/dist/templates/api.d.ts +26 -0
  158. package/dist/templates/api.d.ts.map +1 -0
  159. package/dist/templates/api.js +142 -0
  160. package/dist/templates/api.js.map +1 -0
  161. package/dist/templates/index.d.ts +7 -0
  162. package/dist/templates/index.d.ts.map +1 -0
  163. package/dist/templates/index.js +7 -0
  164. package/dist/templates/index.js.map +1 -0
  165. package/dist/templates/mockData.d.ts +7 -0
  166. package/dist/templates/mockData.d.ts.map +1 -0
  167. package/dist/templates/mockData.js +262 -0
  168. package/dist/templates/mockData.js.map +1 -0
  169. package/dist/templates/types.d.ts +104 -0
  170. package/dist/templates/types.d.ts.map +1 -0
  171. package/dist/templates/types.js +16 -0
  172. package/dist/templates/types.js.map +1 -0
  173. package/dist/transitions/TransitionSeries.d.ts +127 -0
  174. package/dist/transitions/TransitionSeries.d.ts.map +1 -0
  175. package/dist/transitions/TransitionSeries.js +190 -0
  176. package/dist/transitions/TransitionSeries.js.map +1 -0
  177. package/dist/transitions/index.d.ts +52 -0
  178. package/dist/transitions/index.d.ts.map +1 -0
  179. package/dist/transitions/index.js +31 -0
  180. package/dist/transitions/index.js.map +1 -0
  181. package/dist/transitions/presets/fade.d.ts +45 -0
  182. package/dist/transitions/presets/fade.d.ts.map +1 -0
  183. package/dist/transitions/presets/fade.js +56 -0
  184. package/dist/transitions/presets/fade.js.map +1 -0
  185. package/dist/transitions/presets/flip.d.ts +99 -0
  186. package/dist/transitions/presets/flip.d.ts.map +1 -0
  187. package/dist/transitions/presets/flip.js +153 -0
  188. package/dist/transitions/presets/flip.js.map +1 -0
  189. package/dist/transitions/presets/slide.d.ts +61 -0
  190. package/dist/transitions/presets/slide.d.ts.map +1 -0
  191. package/dist/transitions/presets/slide.js +116 -0
  192. package/dist/transitions/presets/slide.js.map +1 -0
  193. package/dist/transitions/presets/wipe.d.ts +69 -0
  194. package/dist/transitions/presets/wipe.d.ts.map +1 -0
  195. package/dist/transitions/presets/wipe.js +136 -0
  196. package/dist/transitions/presets/wipe.js.map +1 -0
  197. package/dist/transitions/presets/zoom.d.ts +76 -0
  198. package/dist/transitions/presets/zoom.d.ts.map +1 -0
  199. package/dist/transitions/presets/zoom.js +110 -0
  200. package/dist/transitions/presets/zoom.js.map +1 -0
  201. package/dist/useAudioData.d.ts +112 -0
  202. package/dist/useAudioData.d.ts.map +1 -0
  203. package/dist/useAudioData.js +183 -0
  204. package/dist/useAudioData.js.map +1 -0
  205. package/dist/useSpring.d.ts +79 -0
  206. package/dist/useSpring.d.ts.map +1 -0
  207. package/dist/useSpring.js +140 -0
  208. package/dist/useSpring.js.map +1 -0
  209. package/package.json +51 -0
@@ -0,0 +1,287 @@
1
+ /**
2
+ * makeTransform Utility
3
+ *
4
+ * Build CSS transform strings from an array of transform operations.
5
+ * Helps construct complex transforms in a readable, composable way.
6
+ *
7
+ * Usage:
8
+ * const transform = makeTransform([
9
+ * { translateX: '100px' },
10
+ * { rotate: '45deg' },
11
+ * { scale: 1.5 },
12
+ * ]);
13
+ * // => "translateX(100px) rotate(45deg) scale(1.5)"
14
+ *
15
+ * // Or using the fluent API:
16
+ * const transform = transform()
17
+ * .translateX('100px')
18
+ * .rotate('45deg')
19
+ * .scale(1.5)
20
+ * .toString();
21
+ */
22
+ /**
23
+ * Supported transform operations with their CSS function names.
24
+ */
25
+ const transformFunctions = {
26
+ // 2D Transforms
27
+ translateX: 'translateX',
28
+ translateY: 'translateY',
29
+ translate: 'translate',
30
+ scaleX: 'scaleX',
31
+ scaleY: 'scaleY',
32
+ scale: 'scale',
33
+ rotate: 'rotate',
34
+ skewX: 'skewX',
35
+ skewY: 'skewY',
36
+ skew: 'skew',
37
+ // 3D Transforms
38
+ translateZ: 'translateZ',
39
+ translate3d: 'translate3d',
40
+ scaleZ: 'scaleZ',
41
+ scale3d: 'scale3d',
42
+ rotateX: 'rotateX',
43
+ rotateY: 'rotateY',
44
+ rotateZ: 'rotateZ',
45
+ rotate3d: 'rotate3d',
46
+ perspective: 'perspective',
47
+ // Matrix
48
+ matrix: 'matrix',
49
+ matrix3d: 'matrix3d',
50
+ };
51
+ /**
52
+ * Format a value for CSS transform.
53
+ * Numbers are kept as-is for scale, strings are used directly.
54
+ */
55
+ function formatValue(key, value) {
56
+ // Handle arrays (for translate, scale, rotate3d, etc.)
57
+ if (Array.isArray(value)) {
58
+ return value.join(', ');
59
+ }
60
+ // Handle numbers - add units where needed
61
+ if (typeof value === 'number') {
62
+ // Scale values don't need units
63
+ if (key.startsWith('scale') || key === 'matrix' || key === 'matrix3d') {
64
+ return String(value);
65
+ }
66
+ // Rotation needs deg
67
+ if (key.startsWith('rotate') || key.startsWith('skew')) {
68
+ return `${value}deg`;
69
+ }
70
+ // Translation needs px
71
+ if (key.startsWith('translate') || key === 'perspective') {
72
+ return `${value}px`;
73
+ }
74
+ return String(value);
75
+ }
76
+ return String(value);
77
+ }
78
+ /**
79
+ * Convert a transform operation object to CSS string.
80
+ */
81
+ function operationToString(operation) {
82
+ const entries = Object.entries(operation);
83
+ if (entries.length === 0)
84
+ return '';
85
+ return entries
86
+ .map(([key, value]) => {
87
+ const fnName = transformFunctions[key] || key;
88
+ const formattedValue = formatValue(key, value);
89
+ return `${fnName}(${formattedValue})`;
90
+ })
91
+ .join(' ');
92
+ }
93
+ /**
94
+ * Build a CSS transform string from an array of transform operations.
95
+ *
96
+ * @param {TransformOperation | TransformOperation[]} operations - Array of transform operation objects
97
+ * @returns {string} CSS transform string
98
+ *
99
+ * @example
100
+ * makeTransform([
101
+ * { translateX: 100 },
102
+ * { rotate: 45 },
103
+ * { scale: 1.5 },
104
+ * ])
105
+ * // => "translateX(100px) rotate(45deg) scale(1.5)"
106
+ */
107
+ export function makeTransform(operations) {
108
+ if (!Array.isArray(operations)) {
109
+ return operationToString(operations);
110
+ }
111
+ return operations
112
+ .map(operationToString)
113
+ .filter(Boolean)
114
+ .join(' ');
115
+ }
116
+ /**
117
+ * Fluent transform builder class.
118
+ */
119
+ class TransformBuilder {
120
+ operations;
121
+ constructor() {
122
+ this.operations = [];
123
+ }
124
+ // 2D Transforms
125
+ translateX(value) {
126
+ this.operations.push({ translateX: value });
127
+ return this;
128
+ }
129
+ translateY(value) {
130
+ this.operations.push({ translateY: value });
131
+ return this;
132
+ }
133
+ translate(x, y) {
134
+ this.operations.push({ translate: y !== undefined ? [x, y] : x });
135
+ return this;
136
+ }
137
+ scaleX(value) {
138
+ this.operations.push({ scaleX: value });
139
+ return this;
140
+ }
141
+ scaleY(value) {
142
+ this.operations.push({ scaleY: value });
143
+ return this;
144
+ }
145
+ scale(x, y) {
146
+ this.operations.push({ scale: y !== undefined ? [x, y] : x });
147
+ return this;
148
+ }
149
+ rotate(value) {
150
+ this.operations.push({ rotate: value });
151
+ return this;
152
+ }
153
+ skewX(value) {
154
+ this.operations.push({ skewX: value });
155
+ return this;
156
+ }
157
+ skewY(value) {
158
+ this.operations.push({ skewY: value });
159
+ return this;
160
+ }
161
+ skew(x, y) {
162
+ this.operations.push({ skew: y !== undefined ? [x, y] : x });
163
+ return this;
164
+ }
165
+ // 3D Transforms
166
+ translateZ(value) {
167
+ this.operations.push({ translateZ: value });
168
+ return this;
169
+ }
170
+ translate3d(x, y, z) {
171
+ this.operations.push({ translate3d: [x, y, z] });
172
+ return this;
173
+ }
174
+ scaleZ(value) {
175
+ this.operations.push({ scaleZ: value });
176
+ return this;
177
+ }
178
+ scale3d(x, y, z) {
179
+ this.operations.push({ scale3d: [x, y, z] });
180
+ return this;
181
+ }
182
+ rotateX(value) {
183
+ this.operations.push({ rotateX: value });
184
+ return this;
185
+ }
186
+ rotateY(value) {
187
+ this.operations.push({ rotateY: value });
188
+ return this;
189
+ }
190
+ rotateZ(value) {
191
+ this.operations.push({ rotateZ: value });
192
+ return this;
193
+ }
194
+ rotate3d(x, y, z, angle) {
195
+ this.operations.push({ rotate3d: [x, y, z, angle] });
196
+ return this;
197
+ }
198
+ perspective(value) {
199
+ this.operations.push({ perspective: value });
200
+ return this;
201
+ }
202
+ // Matrix
203
+ matrix(...values) {
204
+ this.operations.push({ matrix: values });
205
+ return this;
206
+ }
207
+ matrix3d(...values) {
208
+ this.operations.push({ matrix3d: values });
209
+ return this;
210
+ }
211
+ // Build the transform string
212
+ toString() {
213
+ return makeTransform(this.operations);
214
+ }
215
+ // Get the operations array
216
+ toArray() {
217
+ return [...this.operations];
218
+ }
219
+ // Clear all operations
220
+ clear() {
221
+ this.operations = [];
222
+ return this;
223
+ }
224
+ }
225
+ /**
226
+ * Create a new transform builder for fluent API usage.
227
+ *
228
+ * @returns {TransformBuilder}
229
+ *
230
+ * @example
231
+ * const transform = transform()
232
+ * .translateX(100)
233
+ * .rotate(45)
234
+ * .scale(1.5)
235
+ * .toString();
236
+ */
237
+ export function transform() {
238
+ return new TransformBuilder();
239
+ }
240
+ /**
241
+ * Interpolate between two transform strings.
242
+ * Note: This is a simplified version that works best with matching operations.
243
+ *
244
+ * @param {number} progress - Interpolation progress (0-1)
245
+ * @param {TransformOperation[]} fromOps - Starting transform operations
246
+ * @param {TransformOperation[]} toOps - Ending transform operations
247
+ * @returns {string} Interpolated transform string
248
+ */
249
+ export function interpolateTransform(progress, fromOps, toOps) {
250
+ const result = [];
251
+ const maxLength = Math.max(fromOps.length, toOps.length);
252
+ for (let i = 0; i < maxLength; i++) {
253
+ const fromOp = fromOps[i] || {};
254
+ const toOp = toOps[i] || {};
255
+ const interpolatedOp = {};
256
+ // Get all keys from both operations
257
+ const keys = new Set([...Object.keys(fromOp), ...Object.keys(toOp)]);
258
+ keys.forEach((key) => {
259
+ const fromValue = fromOp[key];
260
+ const toValue = toOp[key];
261
+ if (fromValue === undefined && toValue !== undefined) {
262
+ interpolatedOp[key] = toValue;
263
+ }
264
+ else if (toValue === undefined && fromValue !== undefined) {
265
+ interpolatedOp[key] = fromValue;
266
+ }
267
+ else if (typeof fromValue === 'number' && typeof toValue === 'number') {
268
+ interpolatedOp[key] = fromValue + (toValue - fromValue) * progress;
269
+ }
270
+ else if (Array.isArray(fromValue) && Array.isArray(toValue)) {
271
+ interpolatedOp[key] = fromValue.map((v, idx) => {
272
+ const from = typeof v === 'number' ? v : parseFloat(v) || 0;
273
+ const to = typeof toValue[idx] === 'number' ? toValue[idx] : parseFloat(toValue[idx]) || 0;
274
+ return from + (to - from) * progress;
275
+ });
276
+ }
277
+ else {
278
+ // Can't interpolate, use the target value
279
+ interpolatedOp[key] = progress < 0.5 ? fromValue : toValue;
280
+ }
281
+ });
282
+ result.push(interpolatedOp);
283
+ }
284
+ return makeTransform(result);
285
+ }
286
+ export default makeTransform;
287
+ //# sourceMappingURL=makeTransform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeTransform.js","sourceRoot":"","sources":["../src/makeTransform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AASH;;GAEG;AACH,MAAM,kBAAkB,GAA2B;IACjD,gBAAgB;IAChB,UAAU,EAAE,YAAY;IACxB,UAAU,EAAE,YAAY;IACxB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IAEZ,gBAAgB;IAChB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,aAAa;IAE1B,SAAS;IACT,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF;;;GAGG;AACH,SAAS,WAAW,CAAC,GAAW,EAAE,KAAwC;IACxE,uDAAuD;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,0CAA0C;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,gCAAgC;QAChC,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YACtE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,qBAAqB;QACrB,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,OAAO,GAAG,KAAK,KAAK,CAAC;QACvB,CAAC;QACD,uBAAuB;QACvB,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YACzD,OAAO,GAAG,KAAK,IAAI,CAAC;QACtB,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,SAA6B;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,OAAO,OAAO;SACX,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACpB,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QAC9C,MAAM,cAAc,GAAG,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/C,OAAO,GAAG,MAAM,IAAI,cAAc,GAAG,CAAC;IACxC,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,aAAa,CAAC,UAAqD;IACjF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,UAAU;SACd,GAAG,CAAC,iBAAiB,CAAC;SACtB,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,gBAAgB;IACpB,UAAU,CAAuB;IAEjC;QACE,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,gBAAgB;IAChB,UAAU,CAAC,KAAqB;QAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,KAAqB;QAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,CAAiB,EAAE,CAAkB;QAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAqB;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAqB;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,CAAiB,EAAE,CAAkB;QACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAqB;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAqB;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAqB;QACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,CAAiB,EAAE,CAAkB;QACxC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB;IAChB,UAAU,CAAC,KAAqB;QAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,CAAiB,EAAE,CAAiB,EAAE,CAAiB;QACjE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,KAAqB;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,CAAiB,EAAE,CAAiB,EAAE,CAAiB;QAC7D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,KAAqB;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,KAAqB;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,KAAqB;QAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,CAAiB,EAAE,CAAiB,EAAE,CAAiB,EAAE,KAAqB;QACrF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,WAAW,CAAC,KAAqB;QAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS;IACT,MAAM,CAAC,GAAG,MAAwB;QAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,GAAG,MAAwB;QAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6BAA6B;IAC7B,QAAQ;QACN,OAAO,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,2BAA2B;IAC3B,OAAO;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAED,uBAAuB;IACvB,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,IAAI,gBAAgB,EAAE,CAAC;AAChC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAgB,EAChB,OAA6B,EAC7B,KAA2B;IAE3B,MAAM,MAAM,GAAyB,EAAE,CAAC;IAExC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,MAAM,GAAuB,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,MAAM,IAAI,GAAuB,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhD,MAAM,cAAc,GAAuB,EAAE,CAAC;QAE9C,oCAAoC;QACpC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAErE,IAAI,CAAC,OAAO,CAAC,CAAC,GAAW,EAAE,EAAE;YAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAE1B,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBACrD,cAAc,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YAChC,CAAC;iBAAM,IAAI,OAAO,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5D,cAAc,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;YAClC,CAAC;iBAAM,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACxE,cAAc,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC,GAAG,QAAQ,CAAC;YACrE,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9D,cAAc,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAiB,EAAE,GAAW,EAAE,EAAE;oBACrE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC5D,MAAM,EAAE,GAAG,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,OAAO,CAAC,GAAG,CAAY,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAW,CAAC,IAAI,CAAC,CAAC;oBACjH,OAAO,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,QAAQ,CAAC;gBACvC,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,0CAA0C;gBAC1C,cAAc,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,SAAU,CAAC,CAAC,CAAC,OAAQ,CAAC;YAC/D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Interface for spring preset configuration values.
3
+ */
4
+ export interface SpringPreset {
5
+ mass: number;
6
+ stiffness: number;
7
+ damping: number;
8
+ }
9
+ /**
10
+ * Options for the measureSpring function.
11
+ */
12
+ export interface MeasureSpringOptions {
13
+ /** Frames per second (required) */
14
+ fps: number;
15
+ /** Controls animation speed (lower = faster). Defaults to 1. */
16
+ mass?: number;
17
+ /** Bounciness (higher = more bounce). Defaults to 100. */
18
+ stiffness?: number;
19
+ /** Deceleration (higher = less bounce). Defaults to 10. */
20
+ damping?: number;
21
+ /** How close to final value to consider "settled". Defaults to 0.001. */
22
+ threshold?: number;
23
+ }
24
+ /**
25
+ * Measures how many frames a spring animation takes to settle.
26
+ *
27
+ * This is useful for:
28
+ * - Determining the duration of a Sequence containing spring animations
29
+ * - Setting Loop durationInFrames to match spring completion
30
+ * - Calculating total video duration with springs
31
+ *
32
+ * Usage:
33
+ * const frames = measureSpring({ fps: 30 });
34
+ * const frames = measureSpring({ fps: 30, mass: 0.5, stiffness: 200 });
35
+ *
36
+ * @param {MeasureSpringOptions} options
37
+ * @param {number} options.fps - Frames per second (required)
38
+ * @param {number} [options.mass=1] - Controls animation speed (lower = faster)
39
+ * @param {number} [options.stiffness=100] - Bounciness (higher = more bounce)
40
+ * @param {number} [options.damping=10] - Deceleration (higher = less bounce)
41
+ * @param {number} [options.threshold=0.001] - How close to final value to consider "settled"
42
+ * @returns {number} Number of frames until the spring settles
43
+ */
44
+ export declare function measureSpring(options: MeasureSpringOptions): number;
45
+ /**
46
+ * Calculate the natural frequency of a spring.
47
+ *
48
+ * @param {number} stiffness
49
+ * @param {number} mass
50
+ * @returns {number} Natural frequency in radians per second
51
+ */
52
+ export declare function springNaturalFrequency(stiffness: number, mass: number): number;
53
+ /**
54
+ * Calculate the damping ratio of a spring.
55
+ *
56
+ * - zeta < 1: Underdamped (oscillates)
57
+ * - zeta = 1: Critically damped (fastest without oscillation)
58
+ * - zeta > 1: Overdamped (slow, no oscillation)
59
+ *
60
+ * @param {number} damping
61
+ * @param {number} stiffness
62
+ * @param {number} mass
63
+ * @returns {number} Damping ratio
64
+ */
65
+ export declare function springDampingRatio(damping: number, stiffness: number, mass: number): number;
66
+ /**
67
+ * Get spring configuration presets.
68
+ *
69
+ * Usage:
70
+ * const config = springPresets.gentle;
71
+ * spring(frame, { ...config, from: 0, to: 100 });
72
+ */
73
+ export declare const springPresets: Record<string, SpringPreset>;
74
+ export default measureSpring;
75
+ //# sourceMappingURL=measureSpring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measureSpring.d.ts","sourceRoot":"","sources":["../src/measureSpring.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAkDnE;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3F;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAkBtD,CAAC;AAEF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Measures how many frames a spring animation takes to settle.
3
+ *
4
+ * This is useful for:
5
+ * - Determining the duration of a Sequence containing spring animations
6
+ * - Setting Loop durationInFrames to match spring completion
7
+ * - Calculating total video duration with springs
8
+ *
9
+ * Usage:
10
+ * const frames = measureSpring({ fps: 30 });
11
+ * const frames = measureSpring({ fps: 30, mass: 0.5, stiffness: 200 });
12
+ *
13
+ * @param {MeasureSpringOptions} options
14
+ * @param {number} options.fps - Frames per second (required)
15
+ * @param {number} [options.mass=1] - Controls animation speed (lower = faster)
16
+ * @param {number} [options.stiffness=100] - Bounciness (higher = more bounce)
17
+ * @param {number} [options.damping=10] - Deceleration (higher = less bounce)
18
+ * @param {number} [options.threshold=0.001] - How close to final value to consider "settled"
19
+ * @returns {number} Number of frames until the spring settles
20
+ */
21
+ export function measureSpring(options) {
22
+ const { fps, mass = 1, stiffness = 100, damping = 10, threshold = 0.001, } = options;
23
+ if (!fps || fps <= 0) {
24
+ throw new Error('measureSpring requires a positive fps value');
25
+ }
26
+ // Calculate spring physics parameters
27
+ const omega0 = Math.sqrt(stiffness / mass); // Natural frequency
28
+ const zeta = damping / (2 * Math.sqrt(stiffness * mass)); // Damping ratio
29
+ // Maximum time to search (10 seconds should be enough for any reasonable spring)
30
+ const maxTime = 10;
31
+ const maxFrames = Math.ceil(maxTime * fps);
32
+ // Simulate the spring frame by frame
33
+ for (let frame = 1; frame <= maxFrames; frame++) {
34
+ const t = frame / fps;
35
+ let displacement;
36
+ if (zeta < 1) {
37
+ // Underdamped (oscillates)
38
+ const omegaD = omega0 * Math.sqrt(1 - zeta * zeta);
39
+ displacement = Math.exp(-zeta * omega0 * t) *
40
+ (Math.cos(omegaD * t) + (zeta * omega0 / omegaD) * Math.sin(omegaD * t));
41
+ }
42
+ else if (zeta === 1) {
43
+ // Critically damped
44
+ displacement = Math.exp(-omega0 * t) * (1 + omega0 * t);
45
+ }
46
+ else {
47
+ // Overdamped
48
+ const s1 = -omega0 * (zeta - Math.sqrt(zeta * zeta - 1));
49
+ const s2 = -omega0 * (zeta + Math.sqrt(zeta * zeta - 1));
50
+ displacement = (s2 * Math.exp(s1 * t) - s1 * Math.exp(s2 * t)) / (s2 - s1);
51
+ }
52
+ // Check if we've settled (displacement from target is below threshold)
53
+ if (Math.abs(displacement) < threshold) {
54
+ return frame;
55
+ }
56
+ }
57
+ // If we didn't settle within maxFrames, return maxFrames
58
+ // This shouldn't happen with reasonable spring parameters
59
+ return maxFrames;
60
+ }
61
+ /**
62
+ * Calculate the natural frequency of a spring.
63
+ *
64
+ * @param {number} stiffness
65
+ * @param {number} mass
66
+ * @returns {number} Natural frequency in radians per second
67
+ */
68
+ export function springNaturalFrequency(stiffness, mass) {
69
+ return Math.sqrt(stiffness / mass);
70
+ }
71
+ /**
72
+ * Calculate the damping ratio of a spring.
73
+ *
74
+ * - zeta < 1: Underdamped (oscillates)
75
+ * - zeta = 1: Critically damped (fastest without oscillation)
76
+ * - zeta > 1: Overdamped (slow, no oscillation)
77
+ *
78
+ * @param {number} damping
79
+ * @param {number} stiffness
80
+ * @param {number} mass
81
+ * @returns {number} Damping ratio
82
+ */
83
+ export function springDampingRatio(damping, stiffness, mass) {
84
+ return damping / (2 * Math.sqrt(stiffness * mass));
85
+ }
86
+ /**
87
+ * Get spring configuration presets.
88
+ *
89
+ * Usage:
90
+ * const config = springPresets.gentle;
91
+ * spring(frame, { ...config, from: 0, to: 100 });
92
+ */
93
+ export const springPresets = {
94
+ // Quick and snappy
95
+ snappy: { mass: 1, stiffness: 400, damping: 30 },
96
+ // Gentle, slow movement
97
+ gentle: { mass: 1, stiffness: 100, damping: 15 },
98
+ // Bouncy, playful
99
+ bouncy: { mass: 1, stiffness: 200, damping: 10 },
100
+ // Stiff, minimal overshoot
101
+ stiff: { mass: 1, stiffness: 300, damping: 25 },
102
+ // Slow, heavy feeling
103
+ slow: { mass: 2, stiffness: 100, damping: 20 },
104
+ // Default (matches Remotion)
105
+ default: { mass: 1, stiffness: 100, damping: 10 },
106
+ };
107
+ export default measureSpring;
108
+ //# sourceMappingURL=measureSpring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"measureSpring.js","sourceRoot":"","sources":["../src/measureSpring.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Noise Utilities
3
+ *
4
+ * Deterministic noise and random functions for reproducible animations.
5
+ * All functions are pure — same inputs always produce same outputs.
6
+ */
7
+ /**
8
+ * Options for 2D and 3D Perlin noise functions.
9
+ */
10
+ interface NoiseOptions {
11
+ /** Seed for the permutation table */
12
+ seed?: number;
13
+ /** Scales the input coordinates */
14
+ frequency?: number;
15
+ /** Scales the output value */
16
+ amplitude?: number;
17
+ }
18
+ /**
19
+ * Options for Fractal Brownian Motion (fBm).
20
+ */
21
+ interface FbmOptions extends NoiseOptions {
22
+ /** Number of noise layers */
23
+ octaves?: number;
24
+ /** Frequency multiplier per octave */
25
+ lacunarity?: number;
26
+ /** Amplitude multiplier per octave */
27
+ persistence?: number;
28
+ }
29
+ /**
30
+ * Generate a seeded pseudo-random number between 0 and 1.
31
+ *
32
+ * Uses a hash-based approach for single-call determinism (no state).
33
+ *
34
+ * @param {number} seed - Any number (typically frame number or index)
35
+ * @returns {number} Pseudo-random value in [0, 1)
36
+ */
37
+ export declare function random(seed: number): number;
38
+ /**
39
+ * Generate a seeded random number within a range.
40
+ *
41
+ * @param {number} seed - Seed value
42
+ * @param {number} min - Minimum value (inclusive)
43
+ * @param {number} max - Maximum value (exclusive)
44
+ * @returns {number} Random value in [min, max)
45
+ */
46
+ export declare function randomRange(seed: number, min: number, max: number): number;
47
+ /**
48
+ * Generate a seeded random integer within a range.
49
+ *
50
+ * @param {number} seed - Seed value
51
+ * @param {number} min - Minimum value (inclusive)
52
+ * @param {number} max - Maximum value (inclusive)
53
+ * @returns {number} Random integer in [min, max]
54
+ */
55
+ export declare function randomInt(seed: number, min: number, max: number): number;
56
+ /**
57
+ * 2D Perlin noise.
58
+ *
59
+ * Returns a smooth, continuous noise value for the given coordinates.
60
+ * Same inputs always produce the same output.
61
+ *
62
+ * @param {number} x - X coordinate
63
+ * @param {number} y - Y coordinate
64
+ * @param {object} [options]
65
+ * @param {number} [options.seed=0] - Seed for the permutation table
66
+ * @param {number} [options.frequency=1] - Scales the input coordinates
67
+ * @param {number} [options.amplitude=1] - Scales the output value
68
+ * @returns {number} Noise value in [-amplitude, amplitude]
69
+ */
70
+ export declare function noise2D(x: number, y: number, options?: NoiseOptions): number;
71
+ /**
72
+ * 3D Perlin noise.
73
+ *
74
+ * Useful for animated noise: use (x, y, frame * speed) as coordinates.
75
+ *
76
+ * @param {number} x - X coordinate
77
+ * @param {number} y - Y coordinate
78
+ * @param {number} z - Z coordinate (often frame * speed)
79
+ * @param {object} [options]
80
+ * @param {number} [options.seed=0] - Seed for the permutation table
81
+ * @param {number} [options.frequency=1] - Scales the input coordinates
82
+ * @param {number} [options.amplitude=1] - Scales the output value
83
+ * @returns {number} Noise value in [-amplitude, amplitude]
84
+ */
85
+ export declare function noise3D(x: number, y: number, z: number, options?: NoiseOptions): number;
86
+ /**
87
+ * Fractal Brownian Motion (fBm) — layered 2D noise for natural textures.
88
+ *
89
+ * @param {number} x - X coordinate
90
+ * @param {number} y - Y coordinate
91
+ * @param {object} [options]
92
+ * @param {number} [options.seed=0] - Seed
93
+ * @param {number} [options.octaves=4] - Number of noise layers
94
+ * @param {number} [options.frequency=1] - Base frequency
95
+ * @param {number} [options.amplitude=1] - Base amplitude
96
+ * @param {number} [options.lacunarity=2] - Frequency multiplier per octave
97
+ * @param {number} [options.persistence=0.5] - Amplitude multiplier per octave
98
+ * @returns {number} Noise value
99
+ */
100
+ export declare function fbm2D(x: number, y: number, options?: FbmOptions): number;
101
+ declare const _default: {
102
+ random: typeof random;
103
+ randomRange: typeof randomRange;
104
+ randomInt: typeof randomInt;
105
+ noise2D: typeof noise2D;
106
+ noise3D: typeof noise3D;
107
+ fbm2D: typeof fbm2D;
108
+ };
109
+ export default _default;
110
+ //# sourceMappingURL=noise.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../src/noise.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,UAAU,YAAY;IACpB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,UAAU,UAAW,SAAQ,YAAY;IACvC,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAQD;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM3C;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAExE;AA6ED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,MAAM,CAqChF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,MAAM,CAiD3F;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,MAAM,CAqB5E;;;;;;;;;AAED,wBAA2E"}