@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.
- package/dist/AbsoluteFill.d.ts +18 -0
- package/dist/AbsoluteFill.d.ts.map +1 -0
- package/dist/AbsoluteFill.js +25 -0
- package/dist/AbsoluteFill.js.map +1 -0
- package/dist/Audio.d.ts +80 -0
- package/dist/Audio.d.ts.map +1 -0
- package/dist/Audio.js +221 -0
- package/dist/Audio.js.map +1 -0
- package/dist/Composition.d.ts +208 -0
- package/dist/Composition.d.ts.map +1 -0
- package/dist/Composition.js +210 -0
- package/dist/Composition.js.map +1 -0
- package/dist/Easing.d.ts +88 -0
- package/dist/Easing.d.ts.map +1 -0
- package/dist/Easing.js +266 -0
- package/dist/Easing.js.map +1 -0
- package/dist/ErrorBoundary.d.ts +35 -0
- package/dist/ErrorBoundary.d.ts.map +1 -0
- package/dist/ErrorBoundary.js +74 -0
- package/dist/ErrorBoundary.js.map +1 -0
- package/dist/Folder.d.ts +46 -0
- package/dist/Folder.d.ts.map +1 -0
- package/dist/Folder.js +44 -0
- package/dist/Folder.js.map +1 -0
- package/dist/Freeze.d.ts +35 -0
- package/dist/Freeze.d.ts.map +1 -0
- package/dist/Freeze.js +40 -0
- package/dist/Freeze.js.map +1 -0
- package/dist/IFrame.d.ts +28 -0
- package/dist/IFrame.d.ts.map +1 -0
- package/dist/IFrame.js +57 -0
- package/dist/IFrame.js.map +1 -0
- package/dist/Img.d.ts +36 -0
- package/dist/Img.d.ts.map +1 -0
- package/dist/Img.js +91 -0
- package/dist/Img.js.map +1 -0
- package/dist/Loop.d.ts +66 -0
- package/dist/Loop.d.ts.map +1 -0
- package/dist/Loop.js +79 -0
- package/dist/Loop.js.map +1 -0
- package/dist/Player.d.ts +118 -0
- package/dist/Player.d.ts.map +1 -0
- package/dist/Player.js +311 -0
- package/dist/Player.js.map +1 -0
- package/dist/Sequence.d.ts +25 -0
- package/dist/Sequence.d.ts.map +1 -0
- package/dist/Sequence.js +37 -0
- package/dist/Sequence.js.map +1 -0
- package/dist/Series.d.ts +52 -0
- package/dist/Series.d.ts.map +1 -0
- package/dist/Series.js +86 -0
- package/dist/Series.js.map +1 -0
- package/dist/Text.d.ts +129 -0
- package/dist/Text.d.ts.map +1 -0
- package/dist/Text.js +211 -0
- package/dist/Text.js.map +1 -0
- package/dist/Video.d.ts +75 -0
- package/dist/Video.d.ts.map +1 -0
- package/dist/Video.js +136 -0
- package/dist/Video.js.map +1 -0
- package/dist/config.d.ts +128 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +243 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +84 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +131 -0
- package/dist/context.js.map +1 -0
- package/dist/delayRender.d.ts +130 -0
- package/dist/delayRender.d.ts.map +1 -0
- package/dist/delayRender.js +197 -0
- package/dist/delayRender.js.map +1 -0
- package/dist/getInputProps.d.ts +118 -0
- package/dist/getInputProps.d.ts.map +1 -0
- package/dist/getInputProps.js +181 -0
- package/dist/getInputProps.js.map +1 -0
- package/dist/hooks/useDelayRender.d.ts +52 -0
- package/dist/hooks/useDelayRender.d.ts.map +1 -0
- package/dist/hooks/useDelayRender.js +92 -0
- package/dist/hooks/useDelayRender.js.map +1 -0
- package/dist/hooks.d.ts +19 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +17 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +71 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +65 -0
- package/dist/index.js.map +1 -0
- package/dist/interpolate.d.ts +80 -0
- package/dist/interpolate.d.ts.map +1 -0
- package/dist/interpolate.js +108 -0
- package/dist/interpolate.js.map +1 -0
- package/dist/interpolateColors.d.ts +50 -0
- package/dist/interpolateColors.d.ts.map +1 -0
- package/dist/interpolateColors.js +300 -0
- package/dist/interpolateColors.js.map +1 -0
- package/dist/makeTransform.d.ts +98 -0
- package/dist/makeTransform.d.ts.map +1 -0
- package/dist/makeTransform.js +287 -0
- package/dist/makeTransform.js.map +1 -0
- package/dist/measureSpring.d.ts +75 -0
- package/dist/measureSpring.d.ts.map +1 -0
- package/dist/measureSpring.js +108 -0
- package/dist/measureSpring.js.map +1 -0
- package/dist/noise.d.ts +110 -0
- package/dist/noise.d.ts.map +1 -0
- package/dist/noise.js +228 -0
- package/dist/noise.js.map +1 -0
- package/dist/preload.d.ts +145 -0
- package/dist/preload.d.ts.map +1 -0
- package/dist/preload.js +225 -0
- package/dist/preload.js.map +1 -0
- package/dist/registerRoot.d.ts +140 -0
- package/dist/registerRoot.d.ts.map +1 -0
- package/dist/registerRoot.js +238 -0
- package/dist/registerRoot.js.map +1 -0
- package/dist/shapes/Circle.d.ts +15 -0
- package/dist/shapes/Circle.d.ts.map +1 -0
- package/dist/shapes/Circle.js +11 -0
- package/dist/shapes/Circle.js.map +1 -0
- package/dist/shapes/Ellipse.d.ts +16 -0
- package/dist/shapes/Ellipse.d.ts.map +1 -0
- package/dist/shapes/Ellipse.js +11 -0
- package/dist/shapes/Ellipse.js.map +1 -0
- package/dist/shapes/Line.d.ts +15 -0
- package/dist/shapes/Line.d.ts.map +1 -0
- package/dist/shapes/Line.js +11 -0
- package/dist/shapes/Line.js.map +1 -0
- package/dist/shapes/Path.d.ts +20 -0
- package/dist/shapes/Path.d.ts.map +1 -0
- package/dist/shapes/Path.js +14 -0
- package/dist/shapes/Path.js.map +1 -0
- package/dist/shapes/Polygon.d.ts +15 -0
- package/dist/shapes/Polygon.d.ts.map +1 -0
- package/dist/shapes/Polygon.js +16 -0
- package/dist/shapes/Polygon.js.map +1 -0
- package/dist/shapes/Rect.d.ts +18 -0
- package/dist/shapes/Rect.d.ts.map +1 -0
- package/dist/shapes/Rect.js +11 -0
- package/dist/shapes/Rect.js.map +1 -0
- package/dist/shapes/Svg.d.ts +16 -0
- package/dist/shapes/Svg.d.ts.map +1 -0
- package/dist/shapes/Svg.js +15 -0
- package/dist/shapes/Svg.js.map +1 -0
- package/dist/shapes/index.d.ts +16 -0
- package/dist/shapes/index.d.ts.map +1 -0
- package/dist/shapes/index.js +9 -0
- package/dist/shapes/index.js.map +1 -0
- package/dist/shapes/usePathLength.d.ts +24 -0
- package/dist/shapes/usePathLength.d.ts.map +1 -0
- package/dist/shapes/usePathLength.js +32 -0
- package/dist/shapes/usePathLength.js.map +1 -0
- package/dist/staticFile.d.ts +47 -0
- package/dist/staticFile.d.ts.map +1 -0
- package/dist/staticFile.js +105 -0
- package/dist/staticFile.js.map +1 -0
- package/dist/templates/api.d.ts +26 -0
- package/dist/templates/api.d.ts.map +1 -0
- package/dist/templates/api.js +142 -0
- package/dist/templates/api.js.map +1 -0
- package/dist/templates/index.d.ts +7 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +7 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/templates/mockData.d.ts +7 -0
- package/dist/templates/mockData.d.ts.map +1 -0
- package/dist/templates/mockData.js +262 -0
- package/dist/templates/mockData.js.map +1 -0
- package/dist/templates/types.d.ts +104 -0
- package/dist/templates/types.d.ts.map +1 -0
- package/dist/templates/types.js +16 -0
- package/dist/templates/types.js.map +1 -0
- package/dist/transitions/TransitionSeries.d.ts +127 -0
- package/dist/transitions/TransitionSeries.d.ts.map +1 -0
- package/dist/transitions/TransitionSeries.js +190 -0
- package/dist/transitions/TransitionSeries.js.map +1 -0
- package/dist/transitions/index.d.ts +52 -0
- package/dist/transitions/index.d.ts.map +1 -0
- package/dist/transitions/index.js +31 -0
- package/dist/transitions/index.js.map +1 -0
- package/dist/transitions/presets/fade.d.ts +45 -0
- package/dist/transitions/presets/fade.d.ts.map +1 -0
- package/dist/transitions/presets/fade.js +56 -0
- package/dist/transitions/presets/fade.js.map +1 -0
- package/dist/transitions/presets/flip.d.ts +99 -0
- package/dist/transitions/presets/flip.d.ts.map +1 -0
- package/dist/transitions/presets/flip.js +153 -0
- package/dist/transitions/presets/flip.js.map +1 -0
- package/dist/transitions/presets/slide.d.ts +61 -0
- package/dist/transitions/presets/slide.d.ts.map +1 -0
- package/dist/transitions/presets/slide.js +116 -0
- package/dist/transitions/presets/slide.js.map +1 -0
- package/dist/transitions/presets/wipe.d.ts +69 -0
- package/dist/transitions/presets/wipe.d.ts.map +1 -0
- package/dist/transitions/presets/wipe.js +136 -0
- package/dist/transitions/presets/wipe.js.map +1 -0
- package/dist/transitions/presets/zoom.d.ts +76 -0
- package/dist/transitions/presets/zoom.d.ts.map +1 -0
- package/dist/transitions/presets/zoom.js +110 -0
- package/dist/transitions/presets/zoom.js.map +1 -0
- package/dist/useAudioData.d.ts +112 -0
- package/dist/useAudioData.d.ts.map +1 -0
- package/dist/useAudioData.js +183 -0
- package/dist/useAudioData.js.map +1 -0
- package/dist/useSpring.d.ts +79 -0
- package/dist/useSpring.d.ts.map +1 -0
- package/dist/useSpring.js +140 -0
- package/dist/useSpring.js.map +1 -0
- 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":"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"}
|
|
@@ -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"}
|
package/dist/preload.js
ADDED
|
@@ -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":"AAAA;;;;;;;;;GASG;AAwCH;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,YAAoB,KAAK;IACjE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;QAExB,MAAM,SAAS,GAAkC,UAAU,CAAC,GAAG,EAAE;YAC/D,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,GAAG,CAAC,MAAM,GAAG,GAAS,EAAE;YACtB,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC,CAAC;QAEF,GAAG,CAAC,OAAO,GAAG,GAAS,EAAE;YACvB,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC;QAEF,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,YAAoB,KAAK;IACjE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAqB,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAChE,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAEvB,MAAM,SAAS,GAAkC,UAAU,CAAC,GAAG,EAAE;YAC/D,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;YACvD,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,GAAS,EAAE;YAC3B,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC;QAEF,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QACpD,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEzC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;QAChB,KAAK,CAAC,IAAI,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,GAAW,EAAE,YAAoB,KAAK;IACjE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,KAAK,GAAqB,IAAI,KAAK,EAAE,CAAC;QAC5C,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAEvB,MAAM,SAAS,GAAkC,UAAU,CAAC,GAAG,EAAE;YAC/D,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;YACvD,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,GAAS,EAAE;YAC3B,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC;QAEF,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QACpD,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEzC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;QAChB,KAAK,CAAC,IAAI,EAAE,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CACzB,GAAW,EACX,UAAkB,EAClB,UAA+B,EAAE,EACjC,YAAoB,KAAK;IAEzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,SAAS,GAAkC,UAAU,CAAC,GAAG,EAAE;YAC/D,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC;QAElE,QAAQ,CAAC,IAAI,EAAE;aACZ,IAAI,CAAC,CAAC,UAAoB,EAAE,EAAE;YAC7B,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC/B,OAAO,CAAC,UAAU,CAAC,CAAC;QACtB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;YACpB,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,EAAe;IACnD,8BAA8B;IAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAkB,8BAA8B,GAAG,IAAI,CAAC,CAAC;IAChG,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,IAAI,GAAoB,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC;IACtB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAChB,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IAErB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CAAC,MAAsB,EAAE,YAAoB,KAAK;IAC1E,MAAM,QAAQ,GAA6B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAmB,EAAE,EAAE;QAC5E,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,OAAO;gBACV,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAC5C,KAAK,OAAO;gBACV,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAC5C,KAAK,OAAO;gBACV,OAAO,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAC5C,KAAK,MAAM;gBACT,OAAO,WAAW,CAChB,KAAK,CAAC,GAAG,EACT,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,eAAe,EAC5C,KAAK,CAAC,OAA8B,EACpC,SAAS,CACV,CAAC;YACJ;gBACE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAwB,KAAsB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,GAAW,EACX,MAAuC,EACvC,OAA8B;IAE9B,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;IACxB,GAAG,CAAC,MAAM,GAAG,GAAS,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrC,GAAG,CAAC,OAAO,GAAG,GAAS,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC,CAAC;IACzE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AAChB,CAAC;AAED,eAAe;IACb,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,QAAQ;IACR,UAAU;IACV,iBAAiB;CAClB,CAAC"}
|