@agent-native/toolkit 0.19.5 → 0.19.6-nightly-20260909025732

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;AAiQ/B,MAAM,WAAW,cAAe,SAAQ,IAAI,CAC1C,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,EACxC,UAAU,CACX;IACC,4EAA4E;IAC5E,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,SAAS,CAAC,EACxB,SAAS,EACT,EAAgB,EAChB,GAAG,KAAK,EACT,EAAE,cAAc,qBAsBhB"}
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 = "attribute vec2 position;void main(){gl_Position=vec4(position,0.0,1.0);}";
5
- const FRAGMENT_SHADER_SOURCE = [
6
- "precision highp float;",
7
- "uniform float iTime;uniform vec2 iResolution;uniform vec3 uPointer;",
8
- "#define S(a,b,t) smoothstep(a,b,t)",
9
- "#define NUM_LAYERS 4.",
10
- "float N21(vec2 p){vec3 a=fract(vec3(p.xyx)*vec3(213.897,653.453,253.098));a+=dot(a,a.yzx+79.76);return fract((a.x+a.y)*a.z);}",
11
- "vec2 GetPos(vec2 id,vec2 offs,float t){float n=N21(id+offs);float n1=fract(n*10.);float n2=fract(n*100.);float a=t+n;return offs+vec2(sin(a*n1),cos(a*n2))*.4;}",
12
- "vec2 Attract(vec2 p,vec2 cursor,float strength){vec2 delta=cursor-p;float d=length(delta);float pull=1.-smoothstep(.08,1.9,d);pull=pull*pull*(3.-2.*pull);return p+delta*pull*.095*strength;}",
13
- "float df_line(vec2 a,vec2 b,vec2 p){vec2 pa=p-a,ba=b-a;float h=clamp(dot(pa,ba)/dot(ba,ba),0.,1.);return length(pa-ba*h);}",
14
- "float line(vec2 a,vec2 b,vec2 uv){float r1=.025;float r2=.006;float d=df_line(a,b,uv);float d2=length(a-b);float fade=S(1.5,.5,d2);fade+=S(.05,.02,abs(d2-.75));return S(r1,r2,d)*fade;}",
15
- "float NetLayer(vec2 st,float n,float t,vec2 pointer,float pointerStrength){",
16
- " vec2 cell=floor(st);vec2 id=cell+n;vec2 cursor=pointer-cell;st=fract(st)-.5;",
17
- " vec2 p0=Attract(GetPos(id,vec2(-1,-1),t),cursor,pointerStrength);vec2 p1=Attract(GetPos(id,vec2(0,-1),t),cursor,pointerStrength);vec2 p2=Attract(GetPos(id,vec2(1,-1),t),cursor,pointerStrength);",
18
- " vec2 p3=Attract(GetPos(id,vec2(-1,0),t),cursor,pointerStrength);vec2 p4=Attract(GetPos(id,vec2(0,0),t),cursor,pointerStrength);vec2 p5=Attract(GetPos(id,vec2(1,0),t),cursor,pointerStrength);",
19
- " vec2 p6=Attract(GetPos(id,vec2(-1,1),t),cursor,pointerStrength);vec2 p7=Attract(GetPos(id,vec2(0,1),t),cursor,pointerStrength);vec2 p8=Attract(GetPos(id,vec2(1,1),t),cursor,pointerStrength);",
20
- " float m=0.;float sparkle=0.;float d;float s;float pulse;",
21
- " m+=line(p4,p0,st);d=length(st-p0);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p0.x)+fract(p0.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
22
- " m+=line(p4,p1,st);d=length(st-p1);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p1.x)+fract(p1.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
23
- " m+=line(p4,p2,st);d=length(st-p2);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p2.x)+fract(p2.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
24
- " m+=line(p4,p3,st);d=length(st-p3);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p3.x)+fract(p3.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
25
- " m+=line(p4,p4,st);d=length(st-p4);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p4.x)+fract(p4.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
26
- " m+=line(p4,p5,st);d=length(st-p5);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p5.x)+fract(p5.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
27
- " m+=line(p4,p6,st);d=length(st-p6);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p6.x)+fract(p6.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
28
- " m+=line(p4,p7,st);d=length(st-p7);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p7.x)+fract(p7.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
29
- " m+=line(p4,p8,st);d=length(st-p8);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p8.x)+fract(p8.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
30
- " m+=line(p1,p3,st);m+=line(p1,p5,st);m+=line(p7,p5,st);m+=line(p7,p3,st);",
31
- " float sPhase=(sin(t+n)+sin(t*.1))*.25+.5;sPhase+=pow(sin(t*.1)*.5+.5,50.)*5.;m+=sparkle*sPhase;",
32
- " return m;",
33
- "}",
34
- "void mainImage(out vec4 fragColor,in vec2 fragCoord){",
35
- " vec2 uv=(fragCoord-iResolution.xy*.5)/iResolution.y;",
36
- " float t=iTime*.03;float s=sin(t);float c=cos(t);mat2 rot=mat2(c,-s,s,c);vec2 st=uv*rot;vec2 pointerUv=(uPointer.xy-iResolution.xy*.5)/iResolution.y;",
37
- " float m=0.;",
38
- " for(float i=0.;i<1.;i+=1./NUM_LAYERS){float z=fract(t+i);float size=mix(15.,1.,z);float fade=S(0.,.6,z)*S(1.,.8,z);vec2 pointerSt=pointerUv*rot*size;vec2 layerSt=st*size;float warp=1.-smoothstep(.15,2.7,length(layerSt-pointerSt));warp=warp*warp*(3.-2.*warp)*uPointer.z;layerSt-=(pointerSt-layerSt)*warp*.035;m+=fade*NetLayer(layerSt,i,iTime*0.3,pointerSt,uPointer.z);}",
39
- " float cursorLift=1.-smoothstep(.04,.48,length(uv-pointerUv));cursorLift=cursorLift*cursorLift*(3.-2.*cursorLift)*uPointer.z;m*=1.+cursorLift*1.6;",
40
- " vec3 col=vec3(0.35)*m;col*=1.-dot(uv,uv);",
41
- " float tt=min(iTime,5.0);col*=S(0.,20.,tt);",
42
- " col=clamp(col,0.,1.);fragColor=vec4(col,1.);",
43
- "}",
44
- "void main(){mainImage(gl_FragColor,gl_FragCoord.xy);}",
45
- ].join("\n");
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 pointerDpr = 1;
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
- pointerDpr = Math.min(window.devicePixelRatio || 1, 1.5);
125
- canvas.width = Math.floor(width * pointerDpr);
126
- canvas.height = Math.floor(height * pointerDpr);
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 * pointerDpr;
140
- targetY = (rect.height - y) * pointerDpr;
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 < 33)
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/toolkit",
3
- "version": "0.19.5",
3
+ "version": "0.19.6-nightly-20260909025732",
4
4
  "description": "Reusable app-building UI and helpers for Agent-Native apps.",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -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
- "attribute vec2 position;void main(){gl_Position=vec4(position,0.0,1.0);}";
7
-
8
- const FRAGMENT_SHADER_SOURCE = [
9
- "precision highp float;",
10
- "uniform float iTime;uniform vec2 iResolution;uniform vec3 uPointer;",
11
- "#define S(a,b,t) smoothstep(a,b,t)",
12
- "#define NUM_LAYERS 4.",
13
- "float N21(vec2 p){vec3 a=fract(vec3(p.xyx)*vec3(213.897,653.453,253.098));a+=dot(a,a.yzx+79.76);return fract((a.x+a.y)*a.z);}",
14
- "vec2 GetPos(vec2 id,vec2 offs,float t){float n=N21(id+offs);float n1=fract(n*10.);float n2=fract(n*100.);float a=t+n;return offs+vec2(sin(a*n1),cos(a*n2))*.4;}",
15
- "vec2 Attract(vec2 p,vec2 cursor,float strength){vec2 delta=cursor-p;float d=length(delta);float pull=1.-smoothstep(.08,1.9,d);pull=pull*pull*(3.-2.*pull);return p+delta*pull*.095*strength;}",
16
- "float df_line(vec2 a,vec2 b,vec2 p){vec2 pa=p-a,ba=b-a;float h=clamp(dot(pa,ba)/dot(ba,ba),0.,1.);return length(pa-ba*h);}",
17
- "float line(vec2 a,vec2 b,vec2 uv){float r1=.025;float r2=.006;float d=df_line(a,b,uv);float d2=length(a-b);float fade=S(1.5,.5,d2);fade+=S(.05,.02,abs(d2-.75));return S(r1,r2,d)*fade;}",
18
- "float NetLayer(vec2 st,float n,float t,vec2 pointer,float pointerStrength){",
19
- " vec2 cell=floor(st);vec2 id=cell+n;vec2 cursor=pointer-cell;st=fract(st)-.5;",
20
- " vec2 p0=Attract(GetPos(id,vec2(-1,-1),t),cursor,pointerStrength);vec2 p1=Attract(GetPos(id,vec2(0,-1),t),cursor,pointerStrength);vec2 p2=Attract(GetPos(id,vec2(1,-1),t),cursor,pointerStrength);",
21
- " vec2 p3=Attract(GetPos(id,vec2(-1,0),t),cursor,pointerStrength);vec2 p4=Attract(GetPos(id,vec2(0,0),t),cursor,pointerStrength);vec2 p5=Attract(GetPos(id,vec2(1,0),t),cursor,pointerStrength);",
22
- " vec2 p6=Attract(GetPos(id,vec2(-1,1),t),cursor,pointerStrength);vec2 p7=Attract(GetPos(id,vec2(0,1),t),cursor,pointerStrength);vec2 p8=Attract(GetPos(id,vec2(1,1),t),cursor,pointerStrength);",
23
- " float m=0.;float sparkle=0.;float d;float s;float pulse;",
24
- " m+=line(p4,p0,st);d=length(st-p0);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p0.x)+fract(p0.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
25
- " m+=line(p4,p1,st);d=length(st-p1);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p1.x)+fract(p1.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
26
- " m+=line(p4,p2,st);d=length(st-p2);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p2.x)+fract(p2.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
27
- " m+=line(p4,p3,st);d=length(st-p3);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p3.x)+fract(p3.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
28
- " m+=line(p4,p4,st);d=length(st-p4);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p4.x)+fract(p4.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
29
- " m+=line(p4,p5,st);d=length(st-p5);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p5.x)+fract(p5.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
30
- " m+=line(p4,p6,st);d=length(st-p6);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p6.x)+fract(p6.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
31
- " m+=line(p4,p7,st);d=length(st-p7);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p7.x)+fract(p7.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
32
- " m+=line(p4,p8,st);d=length(st-p8);s=(.005/(d*d));s*=S(1.,.7,d);pulse=sin((fract(p8.x)+fract(p8.y)+t)*5.)*.4+.6;pulse=pow(pulse,20.);sparkle+=s*pulse;",
33
- " m+=line(p1,p3,st);m+=line(p1,p5,st);m+=line(p7,p5,st);m+=line(p7,p3,st);",
34
- " float sPhase=(sin(t+n)+sin(t*.1))*.25+.5;sPhase+=pow(sin(t*.1)*.5+.5,50.)*5.;m+=sparkle*sPhase;",
35
- " return m;",
36
- "}",
37
- "void mainImage(out vec4 fragColor,in vec2 fragCoord){",
38
- " vec2 uv=(fragCoord-iResolution.xy*.5)/iResolution.y;",
39
- " float t=iTime*.03;float s=sin(t);float c=cos(t);mat2 rot=mat2(c,-s,s,c);vec2 st=uv*rot;vec2 pointerUv=(uPointer.xy-iResolution.xy*.5)/iResolution.y;",
40
- " float m=0.;",
41
- " for(float i=0.;i<1.;i+=1./NUM_LAYERS){float z=fract(t+i);float size=mix(15.,1.,z);float fade=S(0.,.6,z)*S(1.,.8,z);vec2 pointerSt=pointerUv*rot*size;vec2 layerSt=st*size;float warp=1.-smoothstep(.15,2.7,length(layerSt-pointerSt));warp=warp*warp*(3.-2.*warp)*uPointer.z;layerSt-=(pointerSt-layerSt)*warp*.035;m+=fade*NetLayer(layerSt,i,iTime*0.3,pointerSt,uPointer.z);}",
42
- " float cursorLift=1.-smoothstep(.04,.48,length(uv-pointerUv));cursorLift=cursorLift*cursorLift*(3.-2.*cursorLift)*uPointer.z;m*=1.+cursorLift*1.6;",
43
- " vec3 col=vec3(0.35)*m;col*=1.-dot(uv,uv);",
44
- " float tt=min(iTime,5.0);col*=S(0.,20.,tt);",
45
- " col=clamp(col,0.,1.);fragColor=vec4(col,1.);",
46
- "}",
47
- "void main(){mainImage(gl_FragColor,gl_FragCoord.xy);}",
48
- ].join("\n");
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(canvas: HTMLCanvasElement): () => void {
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 pointerDpr = 1;
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
- pointerDpr = Math.min(window.devicePixelRatio || 1, 1.5);
147
- canvas.width = Math.floor(width * pointerDpr);
148
- canvas.height = Math.floor(height * pointerDpr);
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 * pointerDpr;
163
- targetY = (rect.height - y) * pointerDpr;
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 < 33) return;
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