@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
package/dist/noise.js ADDED
@@ -0,0 +1,228 @@
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
+ * Generate a seeded pseudo-random number between 0 and 1.
9
+ *
10
+ * Uses a hash-based approach for single-call determinism (no state).
11
+ *
12
+ * @param {number} seed - Any number (typically frame number or index)
13
+ * @returns {number} Pseudo-random value in [0, 1)
14
+ */
15
+ export function random(seed) {
16
+ // Mulberry32 — fast, good distribution, 32-bit state
17
+ let t = (seed + 0x6d2b79f5) | 0;
18
+ t = Math.imul(t ^ (t >>> 15), t | 1);
19
+ t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
20
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
21
+ }
22
+ /**
23
+ * Generate a seeded random number within a range.
24
+ *
25
+ * @param {number} seed - Seed value
26
+ * @param {number} min - Minimum value (inclusive)
27
+ * @param {number} max - Maximum value (exclusive)
28
+ * @returns {number} Random value in [min, max)
29
+ */
30
+ export function randomRange(seed, min, max) {
31
+ return min + random(seed) * (max - min);
32
+ }
33
+ /**
34
+ * Generate a seeded random integer within a range.
35
+ *
36
+ * @param {number} seed - Seed value
37
+ * @param {number} min - Minimum value (inclusive)
38
+ * @param {number} max - Maximum value (inclusive)
39
+ * @returns {number} Random integer in [min, max]
40
+ */
41
+ export function randomInt(seed, min, max) {
42
+ return Math.floor(min + random(seed) * (max - min + 1));
43
+ }
44
+ // ─── Permutation table for Perlin noise ──────────────────────────────────────
45
+ function buildPermutation(seed) {
46
+ const perm = new Uint8Array(512);
47
+ const base = new Uint8Array(256);
48
+ for (let i = 0; i < 256; i++) {
49
+ base[i] = i;
50
+ }
51
+ // Fisher-Yates shuffle with seeded random
52
+ for (let i = 255; i > 0; i--) {
53
+ const j = Math.floor(random(seed + i) * (i + 1));
54
+ const tmp = base[i];
55
+ base[i] = base[j];
56
+ base[j] = tmp;
57
+ }
58
+ // Double the table to avoid index wrapping
59
+ for (let i = 0; i < 256; i++) {
60
+ perm[i] = base[i];
61
+ perm[i + 256] = base[i];
62
+ }
63
+ return perm;
64
+ }
65
+ // ─── Gradient vectors for 2D and 3D Perlin noise ────────────────────────────
66
+ const GRAD2 = [
67
+ [1, 0], [-1, 0], [0, 1], [0, -1],
68
+ [1, 1], [-1, 1], [1, -1], [-1, -1],
69
+ ];
70
+ const GRAD3 = [
71
+ [1, 1, 0], [-1, 1, 0], [1, -1, 0], [-1, -1, 0],
72
+ [1, 0, 1], [-1, 0, 1], [1, 0, -1], [-1, 0, -1],
73
+ [0, 1, 1], [0, -1, 1], [0, 1, -1], [0, -1, -1],
74
+ ];
75
+ function fade(t) {
76
+ // Improved Perlin fade: 6t^5 - 15t^4 + 10t^3
77
+ return t * t * t * (t * (t * 6 - 15) + 10);
78
+ }
79
+ function lerp(a, b, t) {
80
+ return a + t * (b - a);
81
+ }
82
+ function dot2(g, x, y) {
83
+ return g[0] * x + g[1] * y;
84
+ }
85
+ function dot3(g, x, y, z) {
86
+ return g[0] * x + g[1] * y + g[2] * z;
87
+ }
88
+ // ─── Cache for permutation tables ────────────────────────────────────────────
89
+ const permCache = new Map();
90
+ function getPermutation(seed) {
91
+ if (!permCache.has(seed)) {
92
+ // Limit cache size
93
+ if (permCache.size > 32) {
94
+ const firstKey = permCache.keys().next().value;
95
+ if (firstKey !== undefined) {
96
+ permCache.delete(firstKey);
97
+ }
98
+ }
99
+ permCache.set(seed, buildPermutation(seed));
100
+ }
101
+ return permCache.get(seed);
102
+ }
103
+ /**
104
+ * 2D Perlin noise.
105
+ *
106
+ * Returns a smooth, continuous noise value for the given coordinates.
107
+ * Same inputs always produce the same output.
108
+ *
109
+ * @param {number} x - X coordinate
110
+ * @param {number} y - Y coordinate
111
+ * @param {object} [options]
112
+ * @param {number} [options.seed=0] - Seed for the permutation table
113
+ * @param {number} [options.frequency=1] - Scales the input coordinates
114
+ * @param {number} [options.amplitude=1] - Scales the output value
115
+ * @returns {number} Noise value in [-amplitude, amplitude]
116
+ */
117
+ export function noise2D(x, y, options = {}) {
118
+ const { seed = 0, frequency = 1, amplitude = 1 } = options;
119
+ const perm = getPermutation(seed);
120
+ x *= frequency;
121
+ y *= frequency;
122
+ // Grid cell coordinates
123
+ const xi = Math.floor(x) & 255;
124
+ const yi = Math.floor(y) & 255;
125
+ // Relative position within cell
126
+ const xf = x - Math.floor(x);
127
+ const yf = y - Math.floor(y);
128
+ // Fade curves
129
+ const u = fade(xf);
130
+ const v = fade(yf);
131
+ // Hash the 4 corners
132
+ const aa = perm[perm[xi] + yi];
133
+ const ab = perm[perm[xi] + yi + 1];
134
+ const ba = perm[perm[xi + 1] + yi];
135
+ const bb = perm[perm[xi + 1] + yi + 1];
136
+ // Gradient dot products
137
+ const g00 = dot2(GRAD2[aa % 8], xf, yf);
138
+ const g10 = dot2(GRAD2[ba % 8], xf - 1, yf);
139
+ const g01 = dot2(GRAD2[ab % 8], xf, yf - 1);
140
+ const g11 = dot2(GRAD2[bb % 8], xf - 1, yf - 1);
141
+ // Bilinear interpolation
142
+ const x1 = lerp(g00, g10, u);
143
+ const x2 = lerp(g01, g11, u);
144
+ const result = lerp(x1, x2, v);
145
+ return result * amplitude;
146
+ }
147
+ /**
148
+ * 3D Perlin noise.
149
+ *
150
+ * Useful for animated noise: use (x, y, frame * speed) as coordinates.
151
+ *
152
+ * @param {number} x - X coordinate
153
+ * @param {number} y - Y coordinate
154
+ * @param {number} z - Z coordinate (often frame * speed)
155
+ * @param {object} [options]
156
+ * @param {number} [options.seed=0] - Seed for the permutation table
157
+ * @param {number} [options.frequency=1] - Scales the input coordinates
158
+ * @param {number} [options.amplitude=1] - Scales the output value
159
+ * @returns {number} Noise value in [-amplitude, amplitude]
160
+ */
161
+ export function noise3D(x, y, z, options = {}) {
162
+ const { seed = 0, frequency = 1, amplitude = 1 } = options;
163
+ const perm = getPermutation(seed);
164
+ x *= frequency;
165
+ y *= frequency;
166
+ z *= frequency;
167
+ const xi = Math.floor(x) & 255;
168
+ const yi = Math.floor(y) & 255;
169
+ const zi = Math.floor(z) & 255;
170
+ const xf = x - Math.floor(x);
171
+ const yf = y - Math.floor(y);
172
+ const zf = z - Math.floor(z);
173
+ const u = fade(xf);
174
+ const v = fade(yf);
175
+ const w = fade(zf);
176
+ // Hash the 8 corners
177
+ const a = perm[xi] + yi;
178
+ const aa = perm[a] + zi;
179
+ const ab = perm[a + 1] + zi;
180
+ const b = perm[xi + 1] + yi;
181
+ const ba = perm[b] + zi;
182
+ const bb = perm[b + 1] + zi;
183
+ const g000 = dot3(GRAD3[perm[aa] % 12], xf, yf, zf);
184
+ const g100 = dot3(GRAD3[perm[ba] % 12], xf - 1, yf, zf);
185
+ const g010 = dot3(GRAD3[perm[ab] % 12], xf, yf - 1, zf);
186
+ const g110 = dot3(GRAD3[perm[bb] % 12], xf - 1, yf - 1, zf);
187
+ const g001 = dot3(GRAD3[perm[aa + 1] % 12], xf, yf, zf - 1);
188
+ const g101 = dot3(GRAD3[perm[ba + 1] % 12], xf - 1, yf, zf - 1);
189
+ const g011 = dot3(GRAD3[perm[ab + 1] % 12], xf, yf - 1, zf - 1);
190
+ const g111 = dot3(GRAD3[perm[bb + 1] % 12], xf - 1, yf - 1, zf - 1);
191
+ // Trilinear interpolation
192
+ const x1 = lerp(g000, g100, u);
193
+ const x2 = lerp(g010, g110, u);
194
+ const y1 = lerp(x1, x2, v);
195
+ const x3 = lerp(g001, g101, u);
196
+ const x4 = lerp(g011, g111, u);
197
+ const y2 = lerp(x3, x4, v);
198
+ const result = lerp(y1, y2, w);
199
+ return result * amplitude;
200
+ }
201
+ /**
202
+ * Fractal Brownian Motion (fBm) — layered 2D noise for natural textures.
203
+ *
204
+ * @param {number} x - X coordinate
205
+ * @param {number} y - Y coordinate
206
+ * @param {object} [options]
207
+ * @param {number} [options.seed=0] - Seed
208
+ * @param {number} [options.octaves=4] - Number of noise layers
209
+ * @param {number} [options.frequency=1] - Base frequency
210
+ * @param {number} [options.amplitude=1] - Base amplitude
211
+ * @param {number} [options.lacunarity=2] - Frequency multiplier per octave
212
+ * @param {number} [options.persistence=0.5] - Amplitude multiplier per octave
213
+ * @returns {number} Noise value
214
+ */
215
+ export function fbm2D(x, y, options = {}) {
216
+ const { seed = 0, octaves = 4, frequency = 1, amplitude = 1, lacunarity = 2, persistence = 0.5, } = options;
217
+ let value = 0;
218
+ let freq = frequency;
219
+ let amp = amplitude;
220
+ for (let i = 0; i < octaves; i++) {
221
+ value += noise2D(x, y, { seed: seed + i * 1000, frequency: freq, amplitude: amp });
222
+ freq *= lacunarity;
223
+ amp *= persistence;
224
+ }
225
+ return value;
226
+ }
227
+ export default { random, randomRange, randomInt, noise2D, noise3D, fbm2D };
228
+ //# sourceMappingURL=noise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noise.js","sourceRoot":"","sources":["../src/noise.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgCH;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,qDAAqD;IACrD,IAAI,CAAC,GAAW,CAAC,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC;AAC/C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,GAAW,EAAE,GAAW;IAChE,OAAO,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,GAAW,EAAE,GAAW;IAC9D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,gFAAgF;AAEhF,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,IAAI,GAAe,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAe,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAE7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACd,CAAC;IAED,0CAA0C;IAC1C,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAW,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACzD,MAAM,GAAG,GAAW,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAChB,CAAC;IAED,2CAA2C;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+EAA+E;AAE/E,MAAM,KAAK,GAAiB;IAC1B,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACnC,CAAC;AAEF,MAAM,KAAK,GAAiB;IAC1B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAC/C,CAAC;AAEF,SAAS,IAAI,CAAC,CAAS;IACrB,6CAA6C;IAC7C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,IAAI,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;IAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,IAAI,CAAC,CAAa,EAAE,CAAS,EAAE,CAAS;IAC/C,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,IAAI,CAAC,CAAa,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;IAC1D,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,gFAAgF;AAEhF,MAAM,SAAS,GAA4B,IAAI,GAAG,EAAE,CAAC;AAErD,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,mBAAmB;QACnB,IAAI,SAAS,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAuB,SAAS,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACnE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC;AAC9B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,UAAwB,EAAE;IACtE,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAC3D,MAAM,IAAI,GAAe,cAAc,CAAC,IAAI,CAAC,CAAC;IAE9C,CAAC,IAAI,SAAS,CAAC;IACf,CAAC,IAAI,SAAS,CAAC;IAEf,wBAAwB;IACxB,MAAM,EAAE,GAAW,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACvC,MAAM,EAAE,GAAW,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAEvC,gCAAgC;IAChC,MAAM,EAAE,GAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,GAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAErC,cAAc;IACd,MAAM,CAAC,GAAW,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAW,IAAI,CAAC,EAAE,CAAC,CAAC;IAE3B,qBAAqB;IACrB,MAAM,EAAE,GAAW,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,EAAE,GAAW,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAW,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAW,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAE/C,wBAAwB;IACxB,MAAM,GAAG,GAAW,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAChD,MAAM,GAAG,GAAW,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,GAAG,GAAW,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACpD,MAAM,GAAG,GAAW,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAExD,yBAAyB;IACzB,MAAM,EAAE,GAAW,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,GAAW,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACrC,MAAM,MAAM,GAAW,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAEvC,OAAO,MAAM,GAAG,SAAS,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,OAAO,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,UAAwB,EAAE;IACjF,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;IAC3D,MAAM,IAAI,GAAe,cAAc,CAAC,IAAI,CAAC,CAAC;IAE9C,CAAC,IAAI,SAAS,CAAC;IACf,CAAC,IAAI,SAAS,CAAC;IACf,CAAC,IAAI,SAAS,CAAC;IAEf,MAAM,EAAE,GAAW,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACvC,MAAM,EAAE,GAAW,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACvC,MAAM,EAAE,GAAW,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAEvC,MAAM,EAAE,GAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,GAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,GAAW,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAErC,MAAM,CAAC,GAAW,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAW,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,CAAC,GAAW,IAAI,CAAC,EAAE,CAAC,CAAC;IAE3B,qBAAqB;IACrB,MAAM,CAAC,GAAW,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;IAChC,MAAM,EAAE,GAAW,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAChC,MAAM,EAAE,GAAW,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,CAAC,GAAW,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,EAAE,GAAW,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAChC,MAAM,EAAE,GAAW,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAEpC,MAAM,IAAI,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5D,MAAM,IAAI,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAChE,MAAM,IAAI,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAChE,MAAM,IAAI,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACpE,MAAM,IAAI,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACxE,MAAM,IAAI,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IACxE,MAAM,IAAI,GAAW,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;IAE5E,0BAA0B;IAC1B,MAAM,EAAE,GAAW,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,GAAW,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,GAAW,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAEnC,MAAM,EAAE,GAAW,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,GAAW,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,GAAW,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAEnC,MAAM,MAAM,GAAW,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAEvC,OAAO,MAAM,GAAG,SAAS,CAAC;AAC5B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,KAAK,CAAC,CAAS,EAAE,CAAS,EAAE,UAAsB,EAAE;IAClE,MAAM,EACJ,IAAI,GAAG,CAAC,EACR,OAAO,GAAG,CAAC,EACX,SAAS,GAAG,CAAC,EACb,SAAS,GAAG,CAAC,EACb,UAAU,GAAG,CAAC,EACd,WAAW,GAAG,GAAG,GAClB,GAAG,OAAO,CAAC;IAEZ,IAAI,KAAK,GAAW,CAAC,CAAC;IACtB,IAAI,IAAI,GAAW,SAAS,CAAC;IAC7B,IAAI,GAAG,GAAW,SAAS,CAAC;IAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QACnF,IAAI,IAAI,UAAU,CAAC;QACnB,GAAG,IAAI,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Asset Preloading Utilities
3
+ *
4
+ * These functions help ensure assets are loaded before they're needed,
5
+ * preventing flickering or missing content in rendered frames.
6
+ *
7
+ * For rendering, assets are typically loaded via the Img/Video/Audio
8
+ * components which use delayRender. These preload functions are useful
9
+ * for the Player/preview mode to ensure smooth playback.
10
+ */
11
+ /**
12
+ * Resource type hint for the browser prefetch mechanism.
13
+ */
14
+ type PrefetchAs = 'image' | 'video' | 'audio' | 'font' | 'script' | 'style';
15
+ /**
16
+ * Supported asset types for bulk preloading.
17
+ */
18
+ type PreloadAssetType = 'image' | 'video' | 'audio' | 'font';
19
+ /**
20
+ * Descriptor for a single asset to preload via {@link preloadAll}.
21
+ */
22
+ interface PreloadAsset {
23
+ /** The type of asset to preload. */
24
+ type: PreloadAssetType;
25
+ /** The URL of the asset. */
26
+ src: string;
27
+ /** Extra options – for fonts this should include `fontFamily`. */
28
+ options?: FontFaceOptions & {
29
+ fontFamily?: string;
30
+ };
31
+ }
32
+ /**
33
+ * Options forwarded to the `FontFace` constructor.
34
+ */
35
+ interface FontFaceOptions {
36
+ weight?: string;
37
+ style?: string;
38
+ display?: string;
39
+ unicodeRange?: string;
40
+ [key: string]: unknown;
41
+ }
42
+ /**
43
+ * Union of all element / object types that the preload helpers can resolve to.
44
+ */
45
+ type PreloadResult = HTMLImageElement | HTMLVideoElement | HTMLAudioElement | FontFace;
46
+ /**
47
+ * Preload an image and return a promise that resolves when loaded.
48
+ *
49
+ * @param {string} src - Image URL
50
+ * @param {number} [timeoutMs=30000] - Timeout in milliseconds
51
+ * @returns {Promise<HTMLImageElement>} Resolves with the loaded image
52
+ *
53
+ * Usage:
54
+ * await preloadImage('/images/hero.png');
55
+ * // Image is now cached and will display immediately
56
+ */
57
+ export declare function preloadImage(src: string, timeoutMs?: number): Promise<HTMLImageElement>;
58
+ /**
59
+ * Preload a video and return a promise that resolves when loadable.
60
+ *
61
+ * Note: This doesn't fully load the video, just enough metadata to start playing.
62
+ *
63
+ * @param {string} src - Video URL
64
+ * @param {number} [timeoutMs=30000] - Timeout in milliseconds
65
+ * @returns {Promise<HTMLVideoElement>} Resolves with the video element
66
+ *
67
+ * Usage:
68
+ * await preloadVideo('/videos/intro.mp4');
69
+ */
70
+ export declare function preloadVideo(src: string, timeoutMs?: number): Promise<HTMLVideoElement>;
71
+ /**
72
+ * Preload an audio file and return a promise that resolves when loadable.
73
+ *
74
+ * @param {string} src - Audio URL
75
+ * @param {number} [timeoutMs=30000] - Timeout in milliseconds
76
+ * @returns {Promise<HTMLAudioElement>} Resolves with the audio element
77
+ *
78
+ * Usage:
79
+ * await preloadAudio('/audio/background.mp3');
80
+ */
81
+ export declare function preloadAudio(src: string, timeoutMs?: number): Promise<HTMLAudioElement>;
82
+ /**
83
+ * Preload a font and return a promise that resolves when loaded.
84
+ *
85
+ * @param {string} src - Font URL
86
+ * @param {string} fontFamily - Font family name to register
87
+ * @param {object} [options] - FontFace options (weight, style, etc.)
88
+ * @param {number} [timeoutMs=30000] - Timeout in milliseconds
89
+ * @returns {Promise<FontFace>} Resolves with the loaded FontFace
90
+ *
91
+ * Usage:
92
+ * await preloadFont('/fonts/custom.woff2', 'CustomFont', { weight: '400' });
93
+ * // Now you can use font-family: 'CustomFont' in CSS
94
+ */
95
+ export declare function preloadFont(src: string, fontFamily: string, options?: FontFaceDescriptors, timeoutMs?: number): Promise<FontFace>;
96
+ /**
97
+ * Generic prefetch function that uses link[rel=prefetch].
98
+ *
99
+ * This tells the browser to fetch the resource in the background
100
+ * during idle time. Good for assets that will be needed soon but
101
+ * not immediately.
102
+ *
103
+ * @param {string} src - Resource URL
104
+ * @param {string} [as] - Resource type (image, video, audio, font, script, style)
105
+ * @returns {HTMLLinkElement} The created link element
106
+ *
107
+ * Usage:
108
+ * prefetch('/images/next-slide.png', 'image');
109
+ */
110
+ export declare function prefetch(src: string, as?: PrefetchAs): HTMLLinkElement;
111
+ /**
112
+ * Preload multiple assets in parallel.
113
+ *
114
+ * @param {Array<{ type: 'image'|'video'|'audio'|'font', src: string, options?: object }>} assets
115
+ * @param {number} [timeoutMs=30000] - Timeout for each asset
116
+ * @returns {Promise<Array>} Resolves when all assets are loaded
117
+ *
118
+ * Usage:
119
+ * await preloadAll([
120
+ * { type: 'image', src: '/images/hero.png' },
121
+ * { type: 'video', src: '/videos/intro.mp4' },
122
+ * { type: 'font', src: '/fonts/custom.woff2', options: { fontFamily: 'Custom' } },
123
+ * ]);
124
+ */
125
+ export declare function preloadAll(assets: PreloadAsset[], timeoutMs?: number): Promise<PreloadResult[]>;
126
+ /**
127
+ * Resolve a callback when the asset at the given URL is loaded.
128
+ * Alternative API for those who prefer callbacks over promises.
129
+ *
130
+ * @param {string} src - Asset URL
131
+ * @param {function} onLoad - Called when loaded
132
+ * @param {function} [onError] - Called on error
133
+ */
134
+ export declare function resolveWhenLoaded(src: string, onLoad: (img: HTMLImageElement) => void, onError?: (err: Error) => void): void;
135
+ declare const _default: {
136
+ preloadImage: typeof preloadImage;
137
+ preloadVideo: typeof preloadVideo;
138
+ preloadAudio: typeof preloadAudio;
139
+ preloadFont: typeof preloadFont;
140
+ prefetch: typeof prefetch;
141
+ preloadAll: typeof preloadAll;
142
+ resolveWhenLoaded: typeof resolveWhenLoaded;
143
+ };
144
+ export default _default;
145
+ //# sourceMappingURL=preload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preload.d.ts","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,KAAK,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5E;;GAEG;AACH,KAAK,gBAAgB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAE7D;;GAEG;AACH,UAAU,YAAY;IACpB,oCAAoC;IACpC,IAAI,EAAE,gBAAgB,CAAC;IACvB,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,kEAAkE;IAClE,OAAO,CAAC,EAAE,eAAe,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrD;AAED;;GAEG;AACH,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,KAAK,aAAa,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,QAAQ,CAAC;AAEvF;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoB9F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+B9F;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+B9F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,mBAAwB,EACjC,SAAS,GAAE,MAAc,GACxB,OAAO,CAAC,QAAQ,CAAC,CAmBnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,UAAU,GAAG,eAAe,CAYtE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAsBtG;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,IAAI,EACvC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAC7B,IAAI,CAKN;;;;;;;;;;AAED,wBAQE"}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Asset Preloading Utilities
3
+ *
4
+ * These functions help ensure assets are loaded before they're needed,
5
+ * preventing flickering or missing content in rendered frames.
6
+ *
7
+ * For rendering, assets are typically loaded via the Img/Video/Audio
8
+ * components which use delayRender. These preload functions are useful
9
+ * for the Player/preview mode to ensure smooth playback.
10
+ */
11
+ /**
12
+ * Preload an image and return a promise that resolves when loaded.
13
+ *
14
+ * @param {string} src - Image URL
15
+ * @param {number} [timeoutMs=30000] - Timeout in milliseconds
16
+ * @returns {Promise<HTMLImageElement>} Resolves with the loaded image
17
+ *
18
+ * Usage:
19
+ * await preloadImage('/images/hero.png');
20
+ * // Image is now cached and will display immediately
21
+ */
22
+ export function preloadImage(src, timeoutMs = 30000) {
23
+ return new Promise((resolve, reject) => {
24
+ const img = new Image();
25
+ const timeoutId = setTimeout(() => {
26
+ reject(new Error(`Image preload timed out: ${src}`));
27
+ }, timeoutMs);
28
+ img.onload = () => {
29
+ clearTimeout(timeoutId);
30
+ resolve(img);
31
+ };
32
+ img.onerror = () => {
33
+ clearTimeout(timeoutId);
34
+ reject(new Error(`Failed to preload image: ${src}`));
35
+ };
36
+ img.src = src;
37
+ });
38
+ }
39
+ /**
40
+ * Preload a video and return a promise that resolves when loadable.
41
+ *
42
+ * Note: This doesn't fully load the video, just enough metadata to start playing.
43
+ *
44
+ * @param {string} src - Video URL
45
+ * @param {number} [timeoutMs=30000] - Timeout in milliseconds
46
+ * @returns {Promise<HTMLVideoElement>} Resolves with the video element
47
+ *
48
+ * Usage:
49
+ * await preloadVideo('/videos/intro.mp4');
50
+ */
51
+ export function preloadVideo(src, timeoutMs = 30000) {
52
+ return new Promise((resolve, reject) => {
53
+ const video = document.createElement('video');
54
+ video.preload = 'auto';
55
+ const timeoutId = setTimeout(() => {
56
+ reject(new Error(`Video preload timed out: ${src}`));
57
+ }, timeoutMs);
58
+ const cleanup = () => {
59
+ clearTimeout(timeoutId);
60
+ video.removeEventListener('canplaythrough', onCanPlay);
61
+ video.removeEventListener('error', onError);
62
+ };
63
+ const onCanPlay = () => {
64
+ cleanup();
65
+ resolve(video);
66
+ };
67
+ const onError = () => {
68
+ cleanup();
69
+ reject(new Error(`Failed to preload video: ${src}`));
70
+ };
71
+ video.addEventListener('canplaythrough', onCanPlay);
72
+ video.addEventListener('error', onError);
73
+ video.src = src;
74
+ video.load();
75
+ });
76
+ }
77
+ /**
78
+ * Preload an audio file and return a promise that resolves when loadable.
79
+ *
80
+ * @param {string} src - Audio URL
81
+ * @param {number} [timeoutMs=30000] - Timeout in milliseconds
82
+ * @returns {Promise<HTMLAudioElement>} Resolves with the audio element
83
+ *
84
+ * Usage:
85
+ * await preloadAudio('/audio/background.mp3');
86
+ */
87
+ export function preloadAudio(src, timeoutMs = 30000) {
88
+ return new Promise((resolve, reject) => {
89
+ const audio = new Audio();
90
+ audio.preload = 'auto';
91
+ const timeoutId = setTimeout(() => {
92
+ reject(new Error(`Audio preload timed out: ${src}`));
93
+ }, timeoutMs);
94
+ const cleanup = () => {
95
+ clearTimeout(timeoutId);
96
+ audio.removeEventListener('canplaythrough', onCanPlay);
97
+ audio.removeEventListener('error', onError);
98
+ };
99
+ const onCanPlay = () => {
100
+ cleanup();
101
+ resolve(audio);
102
+ };
103
+ const onError = () => {
104
+ cleanup();
105
+ reject(new Error(`Failed to preload audio: ${src}`));
106
+ };
107
+ audio.addEventListener('canplaythrough', onCanPlay);
108
+ audio.addEventListener('error', onError);
109
+ audio.src = src;
110
+ audio.load();
111
+ });
112
+ }
113
+ /**
114
+ * Preload a font and return a promise that resolves when loaded.
115
+ *
116
+ * @param {string} src - Font URL
117
+ * @param {string} fontFamily - Font family name to register
118
+ * @param {object} [options] - FontFace options (weight, style, etc.)
119
+ * @param {number} [timeoutMs=30000] - Timeout in milliseconds
120
+ * @returns {Promise<FontFace>} Resolves with the loaded FontFace
121
+ *
122
+ * Usage:
123
+ * await preloadFont('/fonts/custom.woff2', 'CustomFont', { weight: '400' });
124
+ * // Now you can use font-family: 'CustomFont' in CSS
125
+ */
126
+ export function preloadFont(src, fontFamily, options = {}, timeoutMs = 30000) {
127
+ return new Promise((resolve, reject) => {
128
+ const timeoutId = setTimeout(() => {
129
+ reject(new Error(`Font preload timed out: ${src}`));
130
+ }, timeoutMs);
131
+ const fontFace = new FontFace(fontFamily, `url(${src})`, options);
132
+ fontFace.load()
133
+ .then((loadedFace) => {
134
+ clearTimeout(timeoutId);
135
+ document.fonts.add(loadedFace);
136
+ resolve(loadedFace);
137
+ })
138
+ .catch((err) => {
139
+ clearTimeout(timeoutId);
140
+ reject(new Error(`Failed to preload font: ${src} - ${err.message}`));
141
+ });
142
+ });
143
+ }
144
+ /**
145
+ * Generic prefetch function that uses link[rel=prefetch].
146
+ *
147
+ * This tells the browser to fetch the resource in the background
148
+ * during idle time. Good for assets that will be needed soon but
149
+ * not immediately.
150
+ *
151
+ * @param {string} src - Resource URL
152
+ * @param {string} [as] - Resource type (image, video, audio, font, script, style)
153
+ * @returns {HTMLLinkElement} The created link element
154
+ *
155
+ * Usage:
156
+ * prefetch('/images/next-slide.png', 'image');
157
+ */
158
+ export function prefetch(src, as) {
159
+ // Check if already prefetched
160
+ const existing = document.querySelector(`link[rel="prefetch"][href="${src}"]`);
161
+ if (existing)
162
+ return existing;
163
+ const link = document.createElement('link');
164
+ link.rel = 'prefetch';
165
+ link.href = src;
166
+ if (as)
167
+ link.as = as;
168
+ document.head.appendChild(link);
169
+ return link;
170
+ }
171
+ /**
172
+ * Preload multiple assets in parallel.
173
+ *
174
+ * @param {Array<{ type: 'image'|'video'|'audio'|'font', src: string, options?: object }>} assets
175
+ * @param {number} [timeoutMs=30000] - Timeout for each asset
176
+ * @returns {Promise<Array>} Resolves when all assets are loaded
177
+ *
178
+ * Usage:
179
+ * await preloadAll([
180
+ * { type: 'image', src: '/images/hero.png' },
181
+ * { type: 'video', src: '/videos/intro.mp4' },
182
+ * { type: 'font', src: '/fonts/custom.woff2', options: { fontFamily: 'Custom' } },
183
+ * ]);
184
+ */
185
+ export function preloadAll(assets, timeoutMs = 30000) {
186
+ const promises = assets.map((asset) => {
187
+ switch (asset.type) {
188
+ case 'image':
189
+ return preloadImage(asset.src, timeoutMs);
190
+ case 'video':
191
+ return preloadVideo(asset.src, timeoutMs);
192
+ case 'audio':
193
+ return preloadAudio(asset.src, timeoutMs);
194
+ case 'font':
195
+ return preloadFont(asset.src, asset.options?.fontFamily || 'PreloadedFont', asset.options, timeoutMs);
196
+ default:
197
+ return Promise.reject(new Error(`Unknown asset type: ${asset.type}`));
198
+ }
199
+ });
200
+ return Promise.all(promises);
201
+ }
202
+ /**
203
+ * Resolve a callback when the asset at the given URL is loaded.
204
+ * Alternative API for those who prefer callbacks over promises.
205
+ *
206
+ * @param {string} src - Asset URL
207
+ * @param {function} onLoad - Called when loaded
208
+ * @param {function} [onError] - Called on error
209
+ */
210
+ export function resolveWhenLoaded(src, onLoad, onError) {
211
+ const img = new Image();
212
+ img.onload = () => onLoad(img);
213
+ img.onerror = () => onError?.(new Error(`Failed to load: ${src}`));
214
+ img.src = src;
215
+ }
216
+ export default {
217
+ preloadImage,
218
+ preloadVideo,
219
+ preloadAudio,
220
+ preloadFont,
221
+ prefetch,
222
+ preloadAll,
223
+ resolveWhenLoaded,
224
+ };
225
+ //# sourceMappingURL=preload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preload.js","sourceRoot":"","sources":["../src/preload.ts"],"names":[],"mappings":"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"}