@agent-native/toolkit 0.19.5 → 0.19.6-nightly-20260909031729
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.
|
@@ -2,6 +2,7 @@ import * as React from "react";
|
|
|
2
2
|
export interface StarfieldProps extends Omit<React.ComponentPropsWithoutRef<"canvas">, "children"> {
|
|
3
3
|
/** Keep the default id for compatibility with existing starfield styles. */
|
|
4
4
|
id?: string;
|
|
5
|
+
frameRate?: number;
|
|
5
6
|
}
|
|
6
|
-
export declare function Starfield({ className, id, ...props }: StarfieldProps): React.JSX.Element;
|
|
7
|
+
export declare function Starfield({ className, id, frameRate, ...props }: StarfieldProps): React.JSX.Element;
|
|
7
8
|
//# sourceMappingURL=Starfield.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Starfield.d.ts","sourceRoot":"","sources":["../../src/marketing/Starfield.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Starfield.d.ts","sourceRoot":"","sources":["../../src/marketing/Starfield.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA8W/B,MAAM,WAAW,cAAe,SAAQ,IAAI,CAC1C,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EACxC,UAAU,CACX;IACC,4EAA4E;IAC5E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,SAAS,CAAC,EACxB,SAAS,EACT,EAAgB,EAChB,SAAc,EACd,GAAG,KAAK,EACT,EAAE,cAAc,qBAsBhB"}
|
|
@@ -1,48 +1,127 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { cn } from "../utils.js";
|
|
4
|
-
const VERTEX_SHADER_SOURCE =
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
4
|
+
const VERTEX_SHADER_SOURCE = `
|
|
5
|
+
attribute vec2 position;
|
|
6
|
+
void main() {
|
|
7
|
+
gl_Position = vec4(position, 0.0, 1.0);
|
|
8
|
+
}
|
|
9
|
+
`;
|
|
10
|
+
const FRAGMENT_SHADER_SOURCE = `
|
|
11
|
+
precision highp float;
|
|
12
|
+
|
|
13
|
+
uniform float iTime;
|
|
14
|
+
uniform vec2 iResolution;
|
|
15
|
+
uniform vec3 uPointer;
|
|
16
|
+
uniform vec3 uFgColor;
|
|
17
|
+
uniform vec3 uBgColor;
|
|
18
|
+
uniform float uBrightness;
|
|
19
|
+
|
|
20
|
+
#define S(a, b, t) smoothstep(a, b, t)
|
|
21
|
+
|
|
22
|
+
const float DOT_DENSITY = 220.;
|
|
23
|
+
const float DOT_SCALE = 0.9;
|
|
24
|
+
const float SPEED = 0.65;
|
|
25
|
+
|
|
26
|
+
float N21(vec2 p) {
|
|
27
|
+
vec3 a = fract(vec3(p.xyx) * vec3(213.897, 653.453, 253.098));
|
|
28
|
+
a += dot(a, a.yzx + 79.76);
|
|
29
|
+
return fract((a.x + a.y) * a.z);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
float valueNoise(vec2 p) {
|
|
33
|
+
vec2 cell = floor(p);
|
|
34
|
+
vec2 f = fract(p);
|
|
35
|
+
float a = N21(cell);
|
|
36
|
+
float b = N21(cell + vec2(1., 0.));
|
|
37
|
+
float c = N21(cell + vec2(0., 1.));
|
|
38
|
+
float d = N21(cell + vec2(1., 1.));
|
|
39
|
+
vec2 u = f * f * (3. - 2. * f);
|
|
40
|
+
return mix(a, b, u.x) + (c - a) * u.y * (1. - u.x) + (d - b) * u.x * u.y;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
float waveHeight(float x, float time) {
|
|
44
|
+
float wave = sin(x * 1.7 + time * 0.25) * 0.06;
|
|
45
|
+
wave += sin(x * 4.3 - time * 0.5) * 0.028;
|
|
46
|
+
wave += sin(x * 10.5 + time * 0.8) * 0.012;
|
|
47
|
+
wave += (valueNoise(vec2(x * 2.2 + time * 0.06, 4.)) - 0.5) * 0.05;
|
|
48
|
+
return -0.21 + wave;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
float waveProfile(vec2 point, vec2 pointerUv, float pointerStrength, float time) {
|
|
52
|
+
float center = waveHeight(point.x, time);
|
|
53
|
+
vec2 pointerDelta = (point - pointerUv) * vec2(0.75, 1.15);
|
|
54
|
+
float pointerPull = pointerStrength * exp(-dot(pointerDelta, pointerDelta) * 2.8);
|
|
55
|
+
center += (pointerUv.y - center) * pointerPull * 0.42;
|
|
56
|
+
center += sin((point.x - pointerUv.x) * 8.0 + time) * pointerPull * 0.035;
|
|
57
|
+
|
|
58
|
+
float distance = point.y - center;
|
|
59
|
+
float profile = exp(-pow(distance / 0.065, 2.));
|
|
60
|
+
profile += 0.48 * exp(-pow((distance + 0.09) / 0.12, 2.));
|
|
61
|
+
profile += 0.28 * exp(-pow((distance - 0.14) / 0.16, 2.));
|
|
62
|
+
profile *= 0.35 + 0.65 * valueNoise(vec2(point.x * 5.0 + time * 0.08, point.y * 14.0 - time * 0.04));
|
|
63
|
+
return clamp(profile, 0., 1.);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
|
67
|
+
vec2 uv = (fragCoord - iResolution.xy * 0.5) / iResolution.y;
|
|
68
|
+
vec2 pointerUv = (uPointer.xy - iResolution.xy * 0.5) / iResolution.y;
|
|
69
|
+
float time = iTime * SPEED;
|
|
70
|
+
|
|
71
|
+
float cellSize = 1. / DOT_DENSITY;
|
|
72
|
+
vec2 cell = floor(uv / cellSize);
|
|
73
|
+
vec2 jitter = vec2(
|
|
74
|
+
N21(cell + vec2(11.7, 2.3)),
|
|
75
|
+
N21(cell + vec2(-5.2, 8.1))
|
|
76
|
+
) - 0.5;
|
|
77
|
+
vec2 cellCenter = (cell + 0.5 + jitter * 0.7) * cellSize;
|
|
78
|
+
vec2 cellUv = (uv - cellCenter) / cellSize;
|
|
79
|
+
|
|
80
|
+
float tone = waveProfile(cellCenter, pointerUv, uPointer.z, time);
|
|
81
|
+
float grain = 0.38 + 0.62 * N21(cell + vec2(17.3, -4.1));
|
|
82
|
+
float dropout = S(0.45, 0.95, grain + tone * 0.8);
|
|
83
|
+
tone *= grain * dropout;
|
|
84
|
+
|
|
85
|
+
float radius = sqrt(tone) * 0.5 * DOT_SCALE;
|
|
86
|
+
float pixel = (1. / iResolution.y) / cellSize;
|
|
87
|
+
float edge = max(pixel * 1.2, 0.004);
|
|
88
|
+
float distance = length(cellUv);
|
|
89
|
+
float dotMask = step(0.0001, tone) * (1. - S(radius - edge, radius + edge, distance));
|
|
90
|
+
float glow = (1. - S(radius, radius + 0.7, distance)) * tone * 0.14;
|
|
91
|
+
float value = clamp(dotMask + glow, 0., 1.);
|
|
92
|
+
|
|
93
|
+
vec3 lit = mix(uBgColor, uFgColor, value);
|
|
94
|
+
lit += (uFgColor - uBgColor) * value * tone * (uBrightness - 1.);
|
|
95
|
+
fragColor = vec4(clamp(lit, 0., 1.), 1.);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
void main() {
|
|
99
|
+
mainImage(gl_FragColor, gl_FragCoord.xy);
|
|
100
|
+
}
|
|
101
|
+
`;
|
|
102
|
+
const DARK_THEME = {
|
|
103
|
+
bg: [0, 0, 0],
|
|
104
|
+
fg: [174 / 255, 173 / 255, 172 / 255],
|
|
105
|
+
brightness: 1.6,
|
|
106
|
+
};
|
|
107
|
+
const LIGHT_THEME = {
|
|
108
|
+
bg: [250 / 255, 249 / 255, 245 / 255],
|
|
109
|
+
fg: [61 / 255, 61 / 255, 61 / 255],
|
|
110
|
+
brightness: 1,
|
|
111
|
+
};
|
|
112
|
+
function isDarkMode() {
|
|
113
|
+
const root = document.documentElement;
|
|
114
|
+
if (root.classList.contains("dark"))
|
|
115
|
+
return true;
|
|
116
|
+
if (root.classList.contains("light"))
|
|
117
|
+
return false;
|
|
118
|
+
const dataTheme = root.getAttribute("data-theme");
|
|
119
|
+
if (dataTheme === "dark")
|
|
120
|
+
return true;
|
|
121
|
+
if (dataTheme === "light")
|
|
122
|
+
return false;
|
|
123
|
+
return window.matchMedia?.("(prefers-color-scheme: dark)").matches ?? false;
|
|
124
|
+
}
|
|
46
125
|
function createShader(gl, type, source) {
|
|
47
126
|
const shader = gl.createShader(type);
|
|
48
127
|
if (!shader)
|
|
@@ -55,7 +134,7 @@ function createShader(gl, type, source) {
|
|
|
55
134
|
}
|
|
56
135
|
return shader;
|
|
57
136
|
}
|
|
58
|
-
function initializeStarfield(canvas) {
|
|
137
|
+
function initializeStarfield(canvas, frameRate) {
|
|
59
138
|
let gl = null;
|
|
60
139
|
try {
|
|
61
140
|
gl = canvas.getContext("webgl", { alpha: false, antialias: false });
|
|
@@ -66,11 +145,10 @@ function initializeStarfield(canvas) {
|
|
|
66
145
|
if (!gl)
|
|
67
146
|
return () => undefined;
|
|
68
147
|
const vertexShader = createShader(gl, gl.VERTEX_SHADER, VERTEX_SHADER_SOURCE);
|
|
69
|
-
if (!vertexShader)
|
|
70
|
-
return () => undefined;
|
|
71
148
|
const fragmentShader = createShader(gl, gl.FRAGMENT_SHADER, FRAGMENT_SHADER_SOURCE);
|
|
72
|
-
if (!fragmentShader) {
|
|
149
|
+
if (!vertexShader || !fragmentShader) {
|
|
73
150
|
gl.deleteShader(vertexShader);
|
|
151
|
+
gl.deleteShader(fragmentShader);
|
|
74
152
|
return () => undefined;
|
|
75
153
|
}
|
|
76
154
|
const program = gl.createProgram();
|
|
@@ -105,10 +183,12 @@ function initializeStarfield(canvas) {
|
|
|
105
183
|
const timeUniform = gl.getUniformLocation(program, "iTime");
|
|
106
184
|
const resolutionUniform = gl.getUniformLocation(program, "iResolution");
|
|
107
185
|
const pointerUniform = gl.getUniformLocation(program, "uPointer");
|
|
186
|
+
const fgColorUniform = gl.getUniformLocation(program, "uFgColor");
|
|
187
|
+
const bgColorUniform = gl.getUniformLocation(program, "uBgColor");
|
|
188
|
+
const brightnessUniform = gl.getUniformLocation(program, "uBrightness");
|
|
108
189
|
const reducedMotionQuery = window.matchMedia?.("(prefers-reduced-motion: reduce)");
|
|
109
|
-
const listenerOptions = { passive: true };
|
|
110
190
|
let reducedMotion = reducedMotionQuery?.matches ?? false;
|
|
111
|
-
let
|
|
191
|
+
let devicePixelRatio = 1;
|
|
112
192
|
let hasPointer = false;
|
|
113
193
|
let pointerX = 0;
|
|
114
194
|
let pointerY = 0;
|
|
@@ -117,13 +197,14 @@ function initializeStarfield(canvas) {
|
|
|
117
197
|
let targetY = 0;
|
|
118
198
|
let targetStrength = 0;
|
|
119
199
|
let animationFrame = 0;
|
|
200
|
+
let theme = isDarkMode() ? DARK_THEME : LIGHT_THEME;
|
|
120
201
|
const resize = () => {
|
|
121
202
|
const rect = canvas.getBoundingClientRect();
|
|
122
203
|
const width = Math.max(1, rect.width || window.innerWidth);
|
|
123
204
|
const height = Math.max(1, rect.height || window.innerHeight);
|
|
124
|
-
|
|
125
|
-
canvas.width = Math.floor(width *
|
|
126
|
-
canvas.height = Math.floor(height *
|
|
205
|
+
devicePixelRatio = Math.min(window.devicePixelRatio || 1, 1.5);
|
|
206
|
+
canvas.width = Math.floor(width * devicePixelRatio);
|
|
207
|
+
canvas.height = Math.floor(height * devicePixelRatio);
|
|
127
208
|
gl?.viewport(0, 0, canvas.width, canvas.height);
|
|
128
209
|
if (!hasPointer) {
|
|
129
210
|
pointerX = targetX = canvas.width * 0.5;
|
|
@@ -136,8 +217,8 @@ function initializeStarfield(canvas) {
|
|
|
136
217
|
const x = mouseEvent.clientX - rect.left;
|
|
137
218
|
const y = mouseEvent.clientY - rect.top;
|
|
138
219
|
hasPointer = true;
|
|
139
|
-
targetX = x *
|
|
140
|
-
targetY = (rect.height - y) *
|
|
220
|
+
targetX = x * devicePixelRatio;
|
|
221
|
+
targetY = (rect.height - y) * devicePixelRatio;
|
|
141
222
|
targetStrength =
|
|
142
223
|
x >= 0 && x <= rect.width && y >= 0 && y <= rect.height ? 1 : 0;
|
|
143
224
|
};
|
|
@@ -160,17 +241,31 @@ function initializeStarfield(canvas) {
|
|
|
160
241
|
gl?.uniform1f(timeUniform, timeSeconds);
|
|
161
242
|
gl?.uniform2f(resolutionUniform, canvas.width, canvas.height);
|
|
162
243
|
gl?.uniform3f(pointerUniform, pointerX, pointerY, pointerStrength);
|
|
244
|
+
gl?.uniform3f(fgColorUniform, theme.fg[0], theme.fg[1], theme.fg[2]);
|
|
245
|
+
gl?.uniform3f(bgColorUniform, theme.bg[0], theme.bg[1], theme.bg[2]);
|
|
246
|
+
gl?.uniform1f(brightnessUniform, theme.brightness);
|
|
163
247
|
gl?.drawArrays(gl.TRIANGLES, 0, 6);
|
|
164
248
|
};
|
|
249
|
+
const listenerOptions = { passive: true };
|
|
250
|
+
const resizeObserver = typeof ResizeObserver === "undefined"
|
|
251
|
+
? undefined
|
|
252
|
+
: new ResizeObserver(resize);
|
|
253
|
+
resizeObserver?.observe(canvas);
|
|
254
|
+
window.addEventListener("resize", resize);
|
|
255
|
+
window.addEventListener("pointermove", onPointerMove, listenerOptions);
|
|
256
|
+
window.addEventListener("mousemove", onPointerMove, listenerOptions);
|
|
257
|
+
document.addEventListener("pointerleave", fadePointer, listenerOptions);
|
|
258
|
+
window.addEventListener("blur", fadePointer);
|
|
165
259
|
let start = performance.now();
|
|
166
260
|
let last = 0;
|
|
261
|
+
const frameBudget = 1000 / Math.max(1, frameRate);
|
|
167
262
|
const render = (now) => {
|
|
168
263
|
if (reducedMotion) {
|
|
169
264
|
animationFrame = 0;
|
|
170
265
|
return;
|
|
171
266
|
}
|
|
172
267
|
animationFrame = requestAnimationFrame(render);
|
|
173
|
-
if (now - last <
|
|
268
|
+
if (now - last < frameBudget)
|
|
174
269
|
return;
|
|
175
270
|
last = now;
|
|
176
271
|
draw((now - start) * 0.001, true);
|
|
@@ -197,12 +292,16 @@ function initializeStarfield(canvas) {
|
|
|
197
292
|
startAnimation();
|
|
198
293
|
}
|
|
199
294
|
};
|
|
295
|
+
const themeObserver = new MutationObserver(() => {
|
|
296
|
+
theme = isDarkMode() ? DARK_THEME : LIGHT_THEME;
|
|
297
|
+
if (reducedMotion)
|
|
298
|
+
draw(20, false);
|
|
299
|
+
});
|
|
300
|
+
themeObserver.observe(document.documentElement, {
|
|
301
|
+
attributes: true,
|
|
302
|
+
attributeFilter: ["class", "data-theme"],
|
|
303
|
+
});
|
|
200
304
|
resize();
|
|
201
|
-
window.addEventListener("resize", resize);
|
|
202
|
-
window.addEventListener("pointermove", onPointerMove, listenerOptions);
|
|
203
|
-
window.addEventListener("mousemove", onPointerMove, listenerOptions);
|
|
204
|
-
document.addEventListener("pointerleave", fadePointer, listenerOptions);
|
|
205
|
-
window.addEventListener("blur", fadePointer);
|
|
206
305
|
draw(reducedMotion ? 20 : 0, !reducedMotion);
|
|
207
306
|
if (reducedMotionQuery) {
|
|
208
307
|
if (reducedMotionQuery.addEventListener) {
|
|
@@ -216,6 +315,8 @@ function initializeStarfield(canvas) {
|
|
|
216
315
|
startAnimation();
|
|
217
316
|
return () => {
|
|
218
317
|
stopAnimation();
|
|
318
|
+
resizeObserver?.disconnect();
|
|
319
|
+
themeObserver.disconnect();
|
|
219
320
|
window.removeEventListener("resize", resize);
|
|
220
321
|
window.removeEventListener("pointermove", onPointerMove, listenerOptions);
|
|
221
322
|
window.removeEventListener("mousemove", onPointerMove, listenerOptions);
|
|
@@ -235,14 +336,14 @@ function initializeStarfield(canvas) {
|
|
|
235
336
|
gl?.deleteShader(fragmentShader);
|
|
236
337
|
};
|
|
237
338
|
}
|
|
238
|
-
export function Starfield({ className, id = "starfield", ...props }) {
|
|
339
|
+
export function Starfield({ className, id = "starfield", frameRate = 30, ...props }) {
|
|
239
340
|
const canvasRef = React.useRef(null);
|
|
240
341
|
React.useEffect(() => {
|
|
241
342
|
const canvas = canvasRef.current;
|
|
242
343
|
if (!canvas)
|
|
243
344
|
return;
|
|
244
|
-
return initializeStarfield(canvas);
|
|
245
|
-
}, []);
|
|
345
|
+
return initializeStarfield(canvas, frameRate);
|
|
346
|
+
}, [frameRate]);
|
|
246
347
|
return (_jsx("canvas", { ...props, ref: canvasRef, id: id, "aria-hidden": "true", className: cn("pointer-events-none block h-full w-full opacity-[0.35] motion-reduce:opacity-[0.18]", className), "data-agent-native-starfield": true }));
|
|
247
348
|
}
|
|
248
349
|
//# sourceMappingURL=Starfield.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Starfield.js","sourceRoot":"","sources":["../../src/marketing/Starfield.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Starfield.js","sourceRoot":"","sources":["../../src/marketing/Starfield.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,50 +2,133 @@ import * as React from "react";
|
|
|
2
2
|
|
|
3
3
|
import { cn } from "../utils.js";
|
|
4
4
|
|
|
5
|
-
const VERTEX_SHADER_SOURCE =
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
5
|
+
const VERTEX_SHADER_SOURCE = `
|
|
6
|
+
attribute vec2 position;
|
|
7
|
+
void main() {
|
|
8
|
+
gl_Position = vec4(position, 0.0, 1.0);
|
|
9
|
+
}
|
|
10
|
+
`;
|
|
11
|
+
|
|
12
|
+
const FRAGMENT_SHADER_SOURCE = `
|
|
13
|
+
precision highp float;
|
|
14
|
+
|
|
15
|
+
uniform float iTime;
|
|
16
|
+
uniform vec2 iResolution;
|
|
17
|
+
uniform vec3 uPointer;
|
|
18
|
+
uniform vec3 uFgColor;
|
|
19
|
+
uniform vec3 uBgColor;
|
|
20
|
+
uniform float uBrightness;
|
|
21
|
+
|
|
22
|
+
#define S(a, b, t) smoothstep(a, b, t)
|
|
23
|
+
|
|
24
|
+
const float DOT_DENSITY = 220.;
|
|
25
|
+
const float DOT_SCALE = 0.9;
|
|
26
|
+
const float SPEED = 0.65;
|
|
27
|
+
|
|
28
|
+
float N21(vec2 p) {
|
|
29
|
+
vec3 a = fract(vec3(p.xyx) * vec3(213.897, 653.453, 253.098));
|
|
30
|
+
a += dot(a, a.yzx + 79.76);
|
|
31
|
+
return fract((a.x + a.y) * a.z);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
float valueNoise(vec2 p) {
|
|
35
|
+
vec2 cell = floor(p);
|
|
36
|
+
vec2 f = fract(p);
|
|
37
|
+
float a = N21(cell);
|
|
38
|
+
float b = N21(cell + vec2(1., 0.));
|
|
39
|
+
float c = N21(cell + vec2(0., 1.));
|
|
40
|
+
float d = N21(cell + vec2(1., 1.));
|
|
41
|
+
vec2 u = f * f * (3. - 2. * f);
|
|
42
|
+
return mix(a, b, u.x) + (c - a) * u.y * (1. - u.x) + (d - b) * u.x * u.y;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
float waveHeight(float x, float time) {
|
|
46
|
+
float wave = sin(x * 1.7 + time * 0.25) * 0.06;
|
|
47
|
+
wave += sin(x * 4.3 - time * 0.5) * 0.028;
|
|
48
|
+
wave += sin(x * 10.5 + time * 0.8) * 0.012;
|
|
49
|
+
wave += (valueNoise(vec2(x * 2.2 + time * 0.06, 4.)) - 0.5) * 0.05;
|
|
50
|
+
return -0.21 + wave;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
float waveProfile(vec2 point, vec2 pointerUv, float pointerStrength, float time) {
|
|
54
|
+
float center = waveHeight(point.x, time);
|
|
55
|
+
vec2 pointerDelta = (point - pointerUv) * vec2(0.75, 1.15);
|
|
56
|
+
float pointerPull = pointerStrength * exp(-dot(pointerDelta, pointerDelta) * 2.8);
|
|
57
|
+
center += (pointerUv.y - center) * pointerPull * 0.42;
|
|
58
|
+
center += sin((point.x - pointerUv.x) * 8.0 + time) * pointerPull * 0.035;
|
|
59
|
+
|
|
60
|
+
float distance = point.y - center;
|
|
61
|
+
float profile = exp(-pow(distance / 0.065, 2.));
|
|
62
|
+
profile += 0.48 * exp(-pow((distance + 0.09) / 0.12, 2.));
|
|
63
|
+
profile += 0.28 * exp(-pow((distance - 0.14) / 0.16, 2.));
|
|
64
|
+
profile *= 0.35 + 0.65 * valueNoise(vec2(point.x * 5.0 + time * 0.08, point.y * 14.0 - time * 0.04));
|
|
65
|
+
return clamp(profile, 0., 1.);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
|
69
|
+
vec2 uv = (fragCoord - iResolution.xy * 0.5) / iResolution.y;
|
|
70
|
+
vec2 pointerUv = (uPointer.xy - iResolution.xy * 0.5) / iResolution.y;
|
|
71
|
+
float time = iTime * SPEED;
|
|
72
|
+
|
|
73
|
+
float cellSize = 1. / DOT_DENSITY;
|
|
74
|
+
vec2 cell = floor(uv / cellSize);
|
|
75
|
+
vec2 jitter = vec2(
|
|
76
|
+
N21(cell + vec2(11.7, 2.3)),
|
|
77
|
+
N21(cell + vec2(-5.2, 8.1))
|
|
78
|
+
) - 0.5;
|
|
79
|
+
vec2 cellCenter = (cell + 0.5 + jitter * 0.7) * cellSize;
|
|
80
|
+
vec2 cellUv = (uv - cellCenter) / cellSize;
|
|
81
|
+
|
|
82
|
+
float tone = waveProfile(cellCenter, pointerUv, uPointer.z, time);
|
|
83
|
+
float grain = 0.38 + 0.62 * N21(cell + vec2(17.3, -4.1));
|
|
84
|
+
float dropout = S(0.45, 0.95, grain + tone * 0.8);
|
|
85
|
+
tone *= grain * dropout;
|
|
86
|
+
|
|
87
|
+
float radius = sqrt(tone) * 0.5 * DOT_SCALE;
|
|
88
|
+
float pixel = (1. / iResolution.y) / cellSize;
|
|
89
|
+
float edge = max(pixel * 1.2, 0.004);
|
|
90
|
+
float distance = length(cellUv);
|
|
91
|
+
float dotMask = step(0.0001, tone) * (1. - S(radius - edge, radius + edge, distance));
|
|
92
|
+
float glow = (1. - S(radius, radius + 0.7, distance)) * tone * 0.14;
|
|
93
|
+
float value = clamp(dotMask + glow, 0., 1.);
|
|
94
|
+
|
|
95
|
+
vec3 lit = mix(uBgColor, uFgColor, value);
|
|
96
|
+
lit += (uFgColor - uBgColor) * value * tone * (uBrightness - 1.);
|
|
97
|
+
fragColor = vec4(clamp(lit, 0., 1.), 1.);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
void main() {
|
|
101
|
+
mainImage(gl_FragColor, gl_FragCoord.xy);
|
|
102
|
+
}
|
|
103
|
+
`;
|
|
104
|
+
|
|
105
|
+
type ThemeColors = {
|
|
106
|
+
bg: readonly [number, number, number];
|
|
107
|
+
fg: readonly [number, number, number];
|
|
108
|
+
brightness: number;
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const DARK_THEME: ThemeColors = {
|
|
112
|
+
bg: [0, 0, 0],
|
|
113
|
+
fg: [174 / 255, 173 / 255, 172 / 255],
|
|
114
|
+
brightness: 1.6,
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const LIGHT_THEME: ThemeColors = {
|
|
118
|
+
bg: [250 / 255, 249 / 255, 245 / 255],
|
|
119
|
+
fg: [61 / 255, 61 / 255, 61 / 255],
|
|
120
|
+
brightness: 1,
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
function isDarkMode(): boolean {
|
|
124
|
+
const root = document.documentElement;
|
|
125
|
+
if (root.classList.contains("dark")) return true;
|
|
126
|
+
if (root.classList.contains("light")) return false;
|
|
127
|
+
const dataTheme = root.getAttribute("data-theme");
|
|
128
|
+
if (dataTheme === "dark") return true;
|
|
129
|
+
if (dataTheme === "light") return false;
|
|
130
|
+
return window.matchMedia?.("(prefers-color-scheme: dark)").matches ?? false;
|
|
131
|
+
}
|
|
49
132
|
|
|
50
133
|
function createShader(
|
|
51
134
|
gl: WebGLRenderingContext,
|
|
@@ -63,7 +146,10 @@ function createShader(
|
|
|
63
146
|
return shader;
|
|
64
147
|
}
|
|
65
148
|
|
|
66
|
-
function initializeStarfield(
|
|
149
|
+
function initializeStarfield(
|
|
150
|
+
canvas: HTMLCanvasElement,
|
|
151
|
+
frameRate: number,
|
|
152
|
+
): () => void {
|
|
67
153
|
let gl: WebGLRenderingContext | null = null;
|
|
68
154
|
try {
|
|
69
155
|
gl = canvas.getContext("webgl", { alpha: false, antialias: false });
|
|
@@ -73,15 +159,14 @@ function initializeStarfield(canvas: HTMLCanvasElement): () => void {
|
|
|
73
159
|
if (!gl) return () => undefined;
|
|
74
160
|
|
|
75
161
|
const vertexShader = createShader(gl, gl.VERTEX_SHADER, VERTEX_SHADER_SOURCE);
|
|
76
|
-
if (!vertexShader) return () => undefined;
|
|
77
|
-
|
|
78
162
|
const fragmentShader = createShader(
|
|
79
163
|
gl,
|
|
80
164
|
gl.FRAGMENT_SHADER,
|
|
81
165
|
FRAGMENT_SHADER_SOURCE,
|
|
82
166
|
);
|
|
83
|
-
if (!fragmentShader) {
|
|
167
|
+
if (!vertexShader || !fragmentShader) {
|
|
84
168
|
gl.deleteShader(vertexShader);
|
|
169
|
+
gl.deleteShader(fragmentShader);
|
|
85
170
|
return () => undefined;
|
|
86
171
|
}
|
|
87
172
|
|
|
@@ -124,12 +209,14 @@ function initializeStarfield(canvas: HTMLCanvasElement): () => void {
|
|
|
124
209
|
const timeUniform = gl.getUniformLocation(program, "iTime");
|
|
125
210
|
const resolutionUniform = gl.getUniformLocation(program, "iResolution");
|
|
126
211
|
const pointerUniform = gl.getUniformLocation(program, "uPointer");
|
|
212
|
+
const fgColorUniform = gl.getUniformLocation(program, "uFgColor");
|
|
213
|
+
const bgColorUniform = gl.getUniformLocation(program, "uBgColor");
|
|
214
|
+
const brightnessUniform = gl.getUniformLocation(program, "uBrightness");
|
|
127
215
|
const reducedMotionQuery = window.matchMedia?.(
|
|
128
216
|
"(prefers-reduced-motion: reduce)",
|
|
129
217
|
);
|
|
130
|
-
const listenerOptions: AddEventListenerOptions = { passive: true };
|
|
131
218
|
let reducedMotion = reducedMotionQuery?.matches ?? false;
|
|
132
|
-
let
|
|
219
|
+
let devicePixelRatio = 1;
|
|
133
220
|
let hasPointer = false;
|
|
134
221
|
let pointerX = 0;
|
|
135
222
|
let pointerY = 0;
|
|
@@ -138,14 +225,15 @@ function initializeStarfield(canvas: HTMLCanvasElement): () => void {
|
|
|
138
225
|
let targetY = 0;
|
|
139
226
|
let targetStrength = 0;
|
|
140
227
|
let animationFrame = 0;
|
|
228
|
+
let theme = isDarkMode() ? DARK_THEME : LIGHT_THEME;
|
|
141
229
|
|
|
142
230
|
const resize = () => {
|
|
143
231
|
const rect = canvas.getBoundingClientRect();
|
|
144
232
|
const width = Math.max(1, rect.width || window.innerWidth);
|
|
145
233
|
const height = Math.max(1, rect.height || window.innerHeight);
|
|
146
|
-
|
|
147
|
-
canvas.width = Math.floor(width *
|
|
148
|
-
canvas.height = Math.floor(height *
|
|
234
|
+
devicePixelRatio = Math.min(window.devicePixelRatio || 1, 1.5);
|
|
235
|
+
canvas.width = Math.floor(width * devicePixelRatio);
|
|
236
|
+
canvas.height = Math.floor(height * devicePixelRatio);
|
|
149
237
|
gl?.viewport(0, 0, canvas.width, canvas.height);
|
|
150
238
|
if (!hasPointer) {
|
|
151
239
|
pointerX = targetX = canvas.width * 0.5;
|
|
@@ -159,8 +247,8 @@ function initializeStarfield(canvas: HTMLCanvasElement): () => void {
|
|
|
159
247
|
const x = mouseEvent.clientX - rect.left;
|
|
160
248
|
const y = mouseEvent.clientY - rect.top;
|
|
161
249
|
hasPointer = true;
|
|
162
|
-
targetX = x *
|
|
163
|
-
targetY = (rect.height - y) *
|
|
250
|
+
targetX = x * devicePixelRatio;
|
|
251
|
+
targetY = (rect.height - y) * devicePixelRatio;
|
|
164
252
|
targetStrength =
|
|
165
253
|
x >= 0 && x <= rect.width && y >= 0 && y <= rect.height ? 1 : 0;
|
|
166
254
|
};
|
|
@@ -182,18 +270,34 @@ function initializeStarfield(canvas: HTMLCanvasElement): () => void {
|
|
|
182
270
|
gl?.uniform1f(timeUniform, timeSeconds);
|
|
183
271
|
gl?.uniform2f(resolutionUniform, canvas.width, canvas.height);
|
|
184
272
|
gl?.uniform3f(pointerUniform, pointerX, pointerY, pointerStrength);
|
|
273
|
+
gl?.uniform3f(fgColorUniform, theme.fg[0], theme.fg[1], theme.fg[2]);
|
|
274
|
+
gl?.uniform3f(bgColorUniform, theme.bg[0], theme.bg[1], theme.bg[2]);
|
|
275
|
+
gl?.uniform1f(brightnessUniform, theme.brightness);
|
|
185
276
|
gl?.drawArrays(gl.TRIANGLES, 0, 6);
|
|
186
277
|
};
|
|
187
278
|
|
|
279
|
+
const listenerOptions: AddEventListenerOptions = { passive: true };
|
|
280
|
+
const resizeObserver =
|
|
281
|
+
typeof ResizeObserver === "undefined"
|
|
282
|
+
? undefined
|
|
283
|
+
: new ResizeObserver(resize);
|
|
284
|
+
resizeObserver?.observe(canvas);
|
|
285
|
+
window.addEventListener("resize", resize);
|
|
286
|
+
window.addEventListener("pointermove", onPointerMove, listenerOptions);
|
|
287
|
+
window.addEventListener("mousemove", onPointerMove, listenerOptions);
|
|
288
|
+
document.addEventListener("pointerleave", fadePointer, listenerOptions);
|
|
289
|
+
window.addEventListener("blur", fadePointer);
|
|
290
|
+
|
|
188
291
|
let start = performance.now();
|
|
189
292
|
let last = 0;
|
|
293
|
+
const frameBudget = 1000 / Math.max(1, frameRate);
|
|
190
294
|
const render = (now: number) => {
|
|
191
295
|
if (reducedMotion) {
|
|
192
296
|
animationFrame = 0;
|
|
193
297
|
return;
|
|
194
298
|
}
|
|
195
299
|
animationFrame = requestAnimationFrame(render);
|
|
196
|
-
if (now - last <
|
|
300
|
+
if (now - last < frameBudget) return;
|
|
197
301
|
last = now;
|
|
198
302
|
draw((now - start) * 0.001, true);
|
|
199
303
|
};
|
|
@@ -217,13 +321,16 @@ function initializeStarfield(canvas: HTMLCanvasElement): () => void {
|
|
|
217
321
|
startAnimation();
|
|
218
322
|
}
|
|
219
323
|
};
|
|
324
|
+
const themeObserver = new MutationObserver(() => {
|
|
325
|
+
theme = isDarkMode() ? DARK_THEME : LIGHT_THEME;
|
|
326
|
+
if (reducedMotion) draw(20, false);
|
|
327
|
+
});
|
|
328
|
+
themeObserver.observe(document.documentElement, {
|
|
329
|
+
attributes: true,
|
|
330
|
+
attributeFilter: ["class", "data-theme"],
|
|
331
|
+
});
|
|
220
332
|
|
|
221
333
|
resize();
|
|
222
|
-
window.addEventListener("resize", resize);
|
|
223
|
-
window.addEventListener("pointermove", onPointerMove, listenerOptions);
|
|
224
|
-
window.addEventListener("mousemove", onPointerMove, listenerOptions);
|
|
225
|
-
document.addEventListener("pointerleave", fadePointer, listenerOptions);
|
|
226
|
-
window.addEventListener("blur", fadePointer);
|
|
227
334
|
draw(reducedMotion ? 20 : 0, !reducedMotion);
|
|
228
335
|
if (reducedMotionQuery) {
|
|
229
336
|
if (reducedMotionQuery.addEventListener) {
|
|
@@ -236,6 +343,8 @@ function initializeStarfield(canvas: HTMLCanvasElement): () => void {
|
|
|
236
343
|
|
|
237
344
|
return () => {
|
|
238
345
|
stopAnimation();
|
|
346
|
+
resizeObserver?.disconnect();
|
|
347
|
+
themeObserver.disconnect();
|
|
239
348
|
window.removeEventListener("resize", resize);
|
|
240
349
|
window.removeEventListener("pointermove", onPointerMove, listenerOptions);
|
|
241
350
|
window.removeEventListener("mousemove", onPointerMove, listenerOptions);
|
|
@@ -261,11 +370,13 @@ export interface StarfieldProps extends Omit<
|
|
|
261
370
|
> {
|
|
262
371
|
/** Keep the default id for compatibility with existing starfield styles. */
|
|
263
372
|
id?: string;
|
|
373
|
+
frameRate?: number;
|
|
264
374
|
}
|
|
265
375
|
|
|
266
376
|
export function Starfield({
|
|
267
377
|
className,
|
|
268
378
|
id = "starfield",
|
|
379
|
+
frameRate = 30,
|
|
269
380
|
...props
|
|
270
381
|
}: StarfieldProps) {
|
|
271
382
|
const canvasRef = React.useRef<HTMLCanvasElement>(null);
|
|
@@ -273,8 +384,8 @@ export function Starfield({
|
|
|
273
384
|
React.useEffect(() => {
|
|
274
385
|
const canvas = canvasRef.current;
|
|
275
386
|
if (!canvas) return;
|
|
276
|
-
return initializeStarfield(canvas);
|
|
277
|
-
}, []);
|
|
387
|
+
return initializeStarfield(canvas, frameRate);
|
|
388
|
+
}, [frameRate]);
|
|
278
389
|
|
|
279
390
|
return (
|
|
280
391
|
<canvas
|