@agent-native/toolkit 0.201.1 → 0.202.0-nightly-20261006033736

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/agent-native.eject.json +39 -12
  2. package/dist/app/agentkit/react/components.d.ts.map +1 -1
  3. package/dist/app/agentkit/react/components.js +292 -23
  4. package/dist/app/agentkit/react/components.js.map +1 -1
  5. package/dist/app/agentkit/react/context.d.ts +5 -0
  6. package/dist/app/agentkit/react/context.d.ts.map +1 -1
  7. package/dist/app/agentkit/react/context.js +5 -0
  8. package/dist/app/agentkit/react/context.js.map +1 -1
  9. package/dist/app/agentkit/react/styles.css +78 -3
  10. package/dist/app/auth/AuthPage.d.ts.map +1 -1
  11. package/dist/app/auth/AuthPage.js +7 -14
  12. package/dist/app/auth/AuthPage.js.map +1 -1
  13. package/dist/app/auth/server.d.ts +6 -0
  14. package/dist/app/auth/server.d.ts.map +1 -0
  15. package/dist/app/auth/server.js +19 -0
  16. package/dist/app/auth/server.js.map +1 -0
  17. package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
  18. package/dist/app/chat/AgentKitAssistantChat.js +164 -83
  19. package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
  20. package/dist/app/chat/AgentSidebar.d.ts +2 -1
  21. package/dist/app/chat/AgentSidebar.d.ts.map +1 -1
  22. package/dist/app/chat/AgentSidebar.js +2 -2
  23. package/dist/app/chat/AgentSidebar.js.map +1 -1
  24. package/dist/app/chat/agentkit-chat/guided-questions.d.ts.map +1 -1
  25. package/dist/app/chat/agentkit-chat/guided-questions.js +13 -3
  26. package/dist/app/chat/agentkit-chat/guided-questions.js.map +1 -1
  27. package/dist/app/chat/chat/surface-types.d.ts +2 -0
  28. package/dist/app/chat/chat/surface-types.d.ts.map +1 -1
  29. package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
  30. package/dist/app/i18n/catalogs/ar-SA.js +41 -0
  31. package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
  32. package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
  33. package/dist/app/i18n/catalogs/de-DE.js +41 -0
  34. package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
  35. package/dist/app/i18n/catalogs/en-US.d.ts +41 -0
  36. package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
  37. package/dist/app/i18n/catalogs/en-US.js +41 -0
  38. package/dist/app/i18n/catalogs/en-US.js.map +1 -1
  39. package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
  40. package/dist/app/i18n/catalogs/es-ES.js +41 -0
  41. package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
  42. package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
  43. package/dist/app/i18n/catalogs/fr-FR.js +41 -0
  44. package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
  45. package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
  46. package/dist/app/i18n/catalogs/hi-IN.js +41 -0
  47. package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
  48. package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
  49. package/dist/app/i18n/catalogs/ja-JP.js +41 -0
  50. package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
  51. package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
  52. package/dist/app/i18n/catalogs/ko-KR.js +41 -0
  53. package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
  54. package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
  55. package/dist/app/i18n/catalogs/pt-BR.js +41 -0
  56. package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
  57. package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
  58. package/dist/app/i18n/catalogs/zh-CN.js +41 -0
  59. package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
  60. package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
  61. package/dist/app/i18n/catalogs/zh-TW.js +41 -0
  62. package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
  63. package/dist/app/shared/StarfieldBackground.d.ts +1 -6
  64. package/dist/app/shared/StarfieldBackground.d.ts.map +1 -1
  65. package/dist/app/shared/StarfieldBackground.js +1 -368
  66. package/dist/app/shared/StarfieldBackground.js.map +1 -1
  67. package/dist/app/shared/WaveBackground.d.ts +5 -0
  68. package/dist/app/shared/WaveBackground.d.ts.map +1 -0
  69. package/dist/app/shared/WaveBackground.js +34 -0
  70. package/dist/app/shared/WaveBackground.js.map +1 -0
  71. package/dist/app/shared/WebGlWaveBackground.d.ts +9 -0
  72. package/dist/app/shared/WebGlWaveBackground.d.ts.map +1 -0
  73. package/dist/app/shared/WebGlWaveBackground.js +433 -0
  74. package/dist/app/shared/WebGlWaveBackground.js.map +1 -0
  75. package/dist/app/shared/index.d.ts +1 -0
  76. package/dist/app/shared/index.d.ts.map +1 -1
  77. package/dist/app/shared/index.js +1 -0
  78. package/dist/app/shared/index.js.map +1 -1
  79. package/dist/app/shared/ocean/bloom-blur.wgsl +43 -0
  80. package/dist/app/shared/ocean/bloom-blur.wgsl.js +1 -0
  81. package/dist/app/shared/ocean/bloom-bright.wgsl +21 -0
  82. package/dist/app/shared/ocean/bloom-bright.wgsl.js +1 -0
  83. package/dist/app/shared/ocean/bloom-composite.wgsl +40 -0
  84. package/dist/app/shared/ocean/bloom-composite.wgsl.js +1 -0
  85. package/dist/app/shared/ocean/brand-colors.d.ts +9 -0
  86. package/dist/app/shared/ocean/brand-colors.d.ts.map +1 -0
  87. package/dist/app/shared/ocean/brand-colors.js +45 -0
  88. package/dist/app/shared/ocean/brand-colors.js.map +1 -0
  89. package/dist/app/shared/ocean/camera.d.ts +5 -0
  90. package/dist/app/shared/ocean/camera.d.ts.map +1 -0
  91. package/dist/app/shared/ocean/camera.js +24 -0
  92. package/dist/app/shared/ocean/camera.js.map +1 -0
  93. package/dist/app/shared/ocean/hero-ocean-background.d.ts +8 -0
  94. package/dist/app/shared/ocean/hero-ocean-background.d.ts.map +1 -0
  95. package/dist/app/shared/ocean/hero-ocean-background.js +186 -0
  96. package/dist/app/shared/ocean/hero-ocean-background.js.map +1 -0
  97. package/dist/app/shared/ocean/ifft-stage.wgsl +36 -0
  98. package/dist/app/shared/ocean/ifft-stage.wgsl.js +1 -0
  99. package/dist/app/shared/ocean/initial-spectrum.wgsl +36 -0
  100. package/dist/app/shared/ocean/initial-spectrum.wgsl.js +1 -0
  101. package/dist/app/shared/ocean/noise.wgsl +24 -0
  102. package/dist/app/shared/ocean/noise.wgsl.js +1 -0
  103. package/dist/app/shared/ocean/normal-foam.wgsl +32 -0
  104. package/dist/app/shared/ocean/normal-foam.wgsl.js +1 -0
  105. package/dist/app/shared/ocean/ocean-colors.d.ts +6 -0
  106. package/dist/app/shared/ocean/ocean-colors.d.ts.map +1 -0
  107. package/dist/app/shared/ocean/ocean-colors.js +6 -0
  108. package/dist/app/shared/ocean/ocean-colors.js.map +1 -0
  109. package/dist/app/shared/ocean/ocean-common.wgsl +15 -0
  110. package/dist/app/shared/ocean/ocean-common.wgsl.js +1 -0
  111. package/dist/app/shared/ocean/ocean-graph.d.ts +12 -0
  112. package/dist/app/shared/ocean/ocean-graph.d.ts.map +1 -0
  113. package/dist/app/shared/ocean/ocean-graph.js +16 -0
  114. package/dist/app/shared/ocean/ocean-graph.js.map +1 -0
  115. package/dist/app/shared/ocean/particles.wgsl +139 -0
  116. package/dist/app/shared/ocean/particles.wgsl.js +1 -0
  117. package/dist/app/shared/ocean/present.wgsl +40 -0
  118. package/dist/app/shared/ocean/present.wgsl.js +1 -0
  119. package/dist/app/shared/ocean/renderer.d.ts +66 -0
  120. package/dist/app/shared/ocean/renderer.d.ts.map +1 -0
  121. package/dist/app/shared/ocean/renderer.js +535 -0
  122. package/dist/app/shared/ocean/renderer.js.map +1 -0
  123. package/dist/app/shared/ocean/spectrum.wgsl +35 -0
  124. package/dist/app/shared/ocean/spectrum.wgsl.js +1 -0
  125. package/dist/app/shared/ocean/tuning.d.ts +48 -0
  126. package/dist/app/shared/ocean/tuning.d.ts.map +1 -0
  127. package/dist/app/shared/ocean/tuning.js +74 -0
  128. package/dist/app/shared/ocean/tuning.js.map +1 -0
  129. package/dist/app/shared/ocean/webgpu-support.d.ts +3 -0
  130. package/dist/app/shared/ocean/webgpu-support.d.ts.map +1 -0
  131. package/dist/app/shared/ocean/webgpu-support.js +13 -0
  132. package/dist/app/shared/ocean/webgpu-support.js.map +1 -0
  133. package/dist/app/sharing/AccessRequestApprovalPage.d.ts +23 -0
  134. package/dist/app/sharing/AccessRequestApprovalPage.d.ts.map +1 -0
  135. package/dist/app/sharing/AccessRequestApprovalPage.js +95 -0
  136. package/dist/app/sharing/AccessRequestApprovalPage.js.map +1 -0
  137. package/dist/app/sharing/AccessRequestsSection.d.ts +5 -0
  138. package/dist/app/sharing/AccessRequestsSection.d.ts.map +1 -0
  139. package/dist/app/sharing/AccessRequestsSection.js +47 -0
  140. package/dist/app/sharing/AccessRequestsSection.js.map +1 -0
  141. package/dist/app/sharing/ResourceAccessScreen.d.ts +53 -0
  142. package/dist/app/sharing/ResourceAccessScreen.d.ts.map +1 -0
  143. package/dist/app/sharing/ResourceAccessScreen.js +132 -0
  144. package/dist/app/sharing/ResourceAccessScreen.js.map +1 -0
  145. package/dist/app/sharing/ShareButton.d.ts.map +1 -1
  146. package/dist/app/sharing/ShareButton.js +4 -2
  147. package/dist/app/sharing/ShareButton.js.map +1 -1
  148. package/dist/app/sharing/ShareDialog.d.ts.map +1 -1
  149. package/dist/app/sharing/ShareDialog.js +7 -5
  150. package/dist/app/sharing/ShareDialog.js.map +1 -1
  151. package/dist/app/sharing/index.d.ts +2 -0
  152. package/dist/app/sharing/index.d.ts.map +1 -1
  153. package/dist/app/sharing/index.js +2 -0
  154. package/dist/app/sharing/index.js.map +1 -1
  155. package/dist/app/styles/agent-native.css +21 -1
  156. package/dist/app/styles/tokens/agent-kit.css +3 -1
  157. package/dist/composer/AgentSuggestionBar.d.ts +1 -1
  158. package/dist/composer/AgentSuggestionBar.d.ts.map +1 -1
  159. package/dist/composer/AgentSuggestionBar.js +75 -6
  160. package/dist/composer/AgentSuggestionBar.js.map +1 -1
  161. package/package.json +14 -4
  162. package/src/app/agentkit/react/components.tsx +492 -60
  163. package/src/app/agentkit/react/context.tsx +10 -0
  164. package/src/app/agentkit/react/lifecycle.spec.tsx +487 -1
  165. package/src/app/agentkit/react/styles.css +78 -3
  166. package/src/app/auth/AuthPage.spec.tsx +11 -7
  167. package/src/app/auth/AuthPage.tsx +16 -35
  168. package/src/app/auth/server.spec.ts +68 -0
  169. package/src/app/auth/server.ts +29 -0
  170. package/src/app/chat/AgentKitAssistantChat.spec.tsx +287 -290
  171. package/src/app/chat/AgentKitAssistantChat.tsx +219 -116
  172. package/src/app/chat/AgentSidebar.tsx +3 -0
  173. package/src/app/chat/agentkit-chat/guided-questions.flow.spec.tsx +85 -0
  174. package/src/app/chat/agentkit-chat/guided-questions.tsx +12 -5
  175. package/src/app/chat/chat/surface-types.ts +2 -0
  176. package/src/app/i18n/catalogs/ar-SA.ts +44 -0
  177. package/src/app/i18n/catalogs/de-DE.ts +55 -0
  178. package/src/app/i18n/catalogs/en-US.ts +46 -0
  179. package/src/app/i18n/catalogs/es-ES.ts +53 -0
  180. package/src/app/i18n/catalogs/fr-FR.ts +53 -0
  181. package/src/app/i18n/catalogs/hi-IN.ts +47 -0
  182. package/src/app/i18n/catalogs/ja-JP.ts +54 -0
  183. package/src/app/i18n/catalogs/ko-KR.ts +50 -0
  184. package/src/app/i18n/catalogs/pt-BR.ts +52 -0
  185. package/src/app/i18n/catalogs/zh-CN.ts +42 -0
  186. package/src/app/i18n/catalogs/zh-TW.ts +43 -0
  187. package/src/app/shared/StarfieldBackground.tsx +4 -423
  188. package/src/app/shared/WaveBackground.spec.tsx +104 -0
  189. package/src/app/shared/WaveBackground.tsx +60 -0
  190. package/src/app/shared/WebGlWaveBackground.spec.tsx +106 -0
  191. package/src/app/shared/WebGlWaveBackground.tsx +499 -0
  192. package/src/app/shared/index.ts +1 -0
  193. package/src/app/shared/ocean/bloom-blur.wgsl +43 -0
  194. package/src/app/shared/ocean/bloom-bright.wgsl +21 -0
  195. package/src/app/shared/ocean/bloom-composite.wgsl +40 -0
  196. package/src/app/shared/ocean/brand-colors.ts +49 -0
  197. package/src/app/shared/ocean/camera.ts +28 -0
  198. package/src/app/shared/ocean/hero-ocean-background.spec.tsx +369 -0
  199. package/src/app/shared/ocean/hero-ocean-background.tsx +238 -0
  200. package/src/app/shared/ocean/ifft-stage.wgsl +36 -0
  201. package/src/app/shared/ocean/initial-spectrum.wgsl +36 -0
  202. package/src/app/shared/ocean/noise.wgsl +24 -0
  203. package/src/app/shared/ocean/normal-foam.wgsl +32 -0
  204. package/src/app/shared/ocean/ocean-colors.ts +11 -0
  205. package/src/app/shared/ocean/ocean-common.wgsl +15 -0
  206. package/src/app/shared/ocean/ocean-graph.ts +29 -0
  207. package/src/app/shared/ocean/particles.wgsl +139 -0
  208. package/src/app/shared/ocean/present.wgsl +40 -0
  209. package/src/app/shared/ocean/renderer.spec.ts +100 -0
  210. package/src/app/shared/ocean/renderer.ts +693 -0
  211. package/src/app/shared/ocean/spectrum.wgsl +35 -0
  212. package/src/app/shared/ocean/tuning.ts +131 -0
  213. package/src/app/shared/ocean/webgpu-support.ts +12 -0
  214. package/src/app/sharing/AccessRequestApprovalPage.spec.tsx +276 -0
  215. package/src/app/sharing/AccessRequestApprovalPage.tsx +307 -0
  216. package/src/app/sharing/AccessRequestsSection.tsx +163 -0
  217. package/src/app/sharing/ResourceAccessScreen.spec.tsx +235 -0
  218. package/src/app/sharing/ResourceAccessScreen.tsx +331 -0
  219. package/src/app/sharing/ShareButton.spec.tsx +171 -5
  220. package/src/app/sharing/ShareButton.tsx +15 -2
  221. package/src/app/sharing/ShareDialog.spec.tsx +71 -2
  222. package/src/app/sharing/ShareDialog.tsx +24 -2
  223. package/src/app/sharing/index.ts +2 -0
  224. package/src/app/styles/agent-native.css +21 -1
  225. package/src/app/styles/agent-native.spec.ts +16 -3
  226. package/src/app/styles/tokens/agent-kit.css +3 -1
  227. package/src/composer/AgentSuggestionBar.overflow.spec.tsx +277 -0
  228. package/src/composer/AgentSuggestionBar.tsx +113 -8
  229. package/src/wgsl-env.d.ts +6 -0
@@ -0,0 +1,139 @@
1
+ struct ParticleUniforms {
2
+ view: mat4x4f,
3
+ projection: mat4x4f,
4
+ viewport: vec4f,
5
+ world: vec4f,
6
+ fade: vec4f,
7
+ oceanColor: vec4f,
8
+ neonColor: vec4f,
9
+ foamColor: vec4f,
10
+ cursor: vec4f,
11
+ };
12
+
13
+ struct VertexOut {
14
+ @builtin(position) position: vec4f,
15
+ @location(0) pointCoord: vec2f,
16
+ @location(1) foam: f32,
17
+ @location(2) normal: vec3f,
18
+ @location(3) viewDir: vec3f,
19
+ @location(4) height: f32,
20
+ @location(5) fade: f32,
21
+ };
22
+
23
+ @group(0) @binding(0) var<uniform> u: ParticleUniforms;
24
+ @group(0) @binding(1) var u_displacement: texture_2d<f32>;
25
+ @group(0) @binding(2) var u_normalFoam: texture_2d<f32>;
26
+
27
+ fn particleHash(p: vec2u) -> f32 {
28
+ var n = p.x * 374761393u + p.y * 668265263u;
29
+ n = (n ^ (n >> 13u)) * 1274126177u;
30
+ n = n ^ (n >> 16u);
31
+ return f32(n) / 4294967295.0;
32
+ }
33
+
34
+ fn quadCorner(vertexIndex: u32) -> vec2f {
35
+ let cornerIndex = array<u32, 6>(0u, 1u, 2u, 2u, 1u, 3u)[vertexIndex % 6u];
36
+ switch (cornerIndex) {
37
+ case 0u: { return vec2f(-1.0, -1.0); }
38
+ case 1u: { return vec2f( 1.0, -1.0); }
39
+ case 2u: { return vec2f(-1.0, 1.0); }
40
+ default: { return vec2f( 1.0, 1.0); }
41
+ }
42
+ }
43
+
44
+ @vertex fn vs_main(
45
+ @builtin(vertex_index) vertexIndex: u32,
46
+ @builtin(instance_index) instanceIndex: u32,
47
+ ) -> VertexOut {
48
+ let resolution = max(1u, u32(u.viewport.w));
49
+ let i = instanceIndex % resolution;
50
+ let j = instanceIndex / resolution;
51
+ let particleRef = vec2f(f32(i), f32(j)) / f32(resolution);
52
+ let texCoord = vec2u(i, j);
53
+
54
+ let disp = textureLoad(u_displacement, texCoord, 0).xyz * u.world.y;
55
+ let nf = textureLoad(u_normalFoam, texCoord, 0);
56
+
57
+ let halfWorld = u.world.x * 0.5;
58
+ let base = vec3f(
59
+ particleRef.x * u.world.x - halfWorld,
60
+ 0.0,
61
+ particleRef.y * u.world.x - halfWorld,
62
+ );
63
+ let pos = base + disp;
64
+
65
+ let mv = u.view * vec4f(pos, 1.0);
66
+ let viewDir = -mv.xyz;
67
+ let dist = -mv.z;
68
+ let f = 1.0 - smoothstep(u.fade.x, u.fade.y, dist);
69
+ let fade = pow(clamp(f, 0.0, 1.0), u.fade.z);
70
+
71
+ let projected = u.projection * mv;
72
+ var ndc = projected.xy / projected.w;
73
+
74
+ let aspect = u.viewport.x / max(u.viewport.y, 1.0);
75
+ if (u.cursor.z > 0.0) {
76
+ let cursorDelta = u.cursor.xy - ndc;
77
+ let fieldDelta = cursorDelta * vec2f(aspect, 1.0);
78
+ let cursorDistance = length(fieldDelta);
79
+ let rangeFalloff = 1.0 - smoothstep(0.0, 1.7, cursorDistance);
80
+ let particleId = vec2u(i, j);
81
+ let particleSeed = particleHash(particleId);
82
+ let detached = smoothstep(0.76, 0.998, particleSeed);
83
+ let phase = particleHash(particleId + vec2u(37u, 71u)) * 6.2831855;
84
+ let activity = 0.55 + 0.45 * (0.5 + 0.5 * sin(u.cursor.w * 0.45 + phase));
85
+ let trailProgress = clamp(cursorDistance / 1.7, 0.0, 1.0);
86
+ let trailWidth = mix(0.025, 0.28, trailProgress);
87
+ let jitter = vec2f(
88
+ particleHash(particleId + vec2u(17u, 53u)) - 0.5,
89
+ particleHash(particleId + vec2u(41u, 29u)) - 0.5,
90
+ ) * vec2f(trailWidth / aspect, trailWidth);
91
+ let nearFalloff = 1.0 - smoothstep(0.0, 1.0, cursorDistance);
92
+ let baselineResponse = mix(0.004, 0.014, nearFalloff) *
93
+ mix(0.6, 1.0, particleSeed);
94
+ let particleResponse = baselineResponse +
95
+ detached * activity * mix(0.11, 0.82, nearFalloff);
96
+ let attraction = rangeFalloff * particleResponse * u.cursor.z;
97
+ ndc += (u.cursor.xy + jitter - ndc) * attraction;
98
+ }
99
+
100
+ let corner = quadCorner(vertexIndex);
101
+ let pointSizePx = 2.0 * u.world.z * u.viewport.z;
102
+ let clipOffset = corner * (pointSizePx / u.viewport.xy) * projected.w;
103
+ let clip = vec4f(ndc * projected.w + clipOffset, projected.z, projected.w);
104
+
105
+ var out: VertexOut;
106
+ out.position = clip;
107
+ out.pointCoord = corner * 0.5 + vec2f(0.5);
108
+ out.foam = nf.w;
109
+ out.normal = nf.xyz;
110
+ out.viewDir = viewDir;
111
+ out.height = disp.y;
112
+ out.fade = fade;
113
+ return out;
114
+ }
115
+
116
+ @fragment fn fs_main(in: VertexOut) -> @location(0) vec4f {
117
+ let cc = in.pointCoord - vec2f(0.5);
118
+ let d2 = dot(cc, cc);
119
+ if (d2 > 0.25) {
120
+ discard;
121
+ }
122
+
123
+ let n = normalize(in.normal);
124
+ let v = normalize(in.viewDir);
125
+ let fresnel = pow(1.0 - clamp(dot(n, v), 0.0, 1.0), 5.0);
126
+
127
+ let foam = clamp(in.foam, 0.0, 1.0);
128
+ let crest = smoothstep(-0.5, 1.5, in.height);
129
+
130
+ var color = u.oceanColor.rgb * 0.5;
131
+ color += u.neonColor.rgb * crest * 0.5;
132
+ color += u.neonColor.rgb * fresnel * 0.15;
133
+ color = mix(color, u.foamColor.rgb, foam);
134
+ var alpha = 0.02 + crest * 0.06 + fresnel * 0.04;
135
+ alpha = mix(alpha, 1.0, foam);
136
+ color *= in.fade;
137
+ alpha *= in.fade;
138
+ return vec4f(color, clamp(alpha, 0.0, 1.0));
139
+ }
@@ -0,0 +1 @@
1
+ export default "struct ParticleUniforms {\n view: mat4x4f,\n projection: mat4x4f,\n viewport: vec4f,\n world: vec4f,\n fade: vec4f,\n oceanColor: vec4f,\n neonColor: vec4f,\n foamColor: vec4f,\n cursor: vec4f,\n};\n\nstruct VertexOut {\n @builtin(position) position: vec4f,\n @location(0) pointCoord: vec2f,\n @location(1) foam: f32,\n @location(2) normal: vec3f,\n @location(3) viewDir: vec3f,\n @location(4) height: f32,\n @location(5) fade: f32,\n};\n\n@group(0) @binding(0) var<uniform> u: ParticleUniforms;\n@group(0) @binding(1) var u_displacement: texture_2d<f32>;\n@group(0) @binding(2) var u_normalFoam: texture_2d<f32>;\n\nfn particleHash(p: vec2u) -> f32 {\n var n = p.x * 374761393u + p.y * 668265263u;\n n = (n ^ (n >> 13u)) * 1274126177u;\n n = n ^ (n >> 16u);\n return f32(n) / 4294967295.0;\n}\n\nfn quadCorner(vertexIndex: u32) -> vec2f {\n let cornerIndex = array<u32, 6>(0u, 1u, 2u, 2u, 1u, 3u)[vertexIndex % 6u];\n switch (cornerIndex) {\n case 0u: { return vec2f(-1.0, -1.0); }\n case 1u: { return vec2f( 1.0, -1.0); }\n case 2u: { return vec2f(-1.0, 1.0); }\n default: { return vec2f( 1.0, 1.0); }\n }\n}\n\n@vertex fn vs_main(\n @builtin(vertex_index) vertexIndex: u32,\n @builtin(instance_index) instanceIndex: u32,\n) -> VertexOut {\n let resolution = max(1u, u32(u.viewport.w));\n let i = instanceIndex % resolution;\n let j = instanceIndex / resolution;\n let particleRef = vec2f(f32(i), f32(j)) / f32(resolution);\n let texCoord = vec2u(i, j);\n\n let disp = textureLoad(u_displacement, texCoord, 0).xyz * u.world.y;\n let nf = textureLoad(u_normalFoam, texCoord, 0);\n\n let halfWorld = u.world.x * 0.5;\n let base = vec3f(\n particleRef.x * u.world.x - halfWorld,\n 0.0,\n particleRef.y * u.world.x - halfWorld,\n );\n let pos = base + disp;\n\n let mv = u.view * vec4f(pos, 1.0);\n let viewDir = -mv.xyz;\n let dist = -mv.z;\n let f = 1.0 - smoothstep(u.fade.x, u.fade.y, dist);\n let fade = pow(clamp(f, 0.0, 1.0), u.fade.z);\n\n let projected = u.projection * mv;\n var ndc = projected.xy / projected.w;\n\n let aspect = u.viewport.x / max(u.viewport.y, 1.0);\n if (u.cursor.z > 0.0) {\n let cursorDelta = u.cursor.xy - ndc;\n let fieldDelta = cursorDelta * vec2f(aspect, 1.0);\n let cursorDistance = length(fieldDelta);\n let rangeFalloff = 1.0 - smoothstep(0.0, 1.7, cursorDistance);\n let particleId = vec2u(i, j);\n let particleSeed = particleHash(particleId);\n let detached = smoothstep(0.76, 0.998, particleSeed);\n let phase = particleHash(particleId + vec2u(37u, 71u)) * 6.2831855;\n let activity = 0.55 + 0.45 * (0.5 + 0.5 * sin(u.cursor.w * 0.45 + phase));\n let trailProgress = clamp(cursorDistance / 1.7, 0.0, 1.0);\n let trailWidth = mix(0.025, 0.28, trailProgress);\n let jitter = vec2f(\n particleHash(particleId + vec2u(17u, 53u)) - 0.5,\n particleHash(particleId + vec2u(41u, 29u)) - 0.5,\n ) * vec2f(trailWidth / aspect, trailWidth);\n let nearFalloff = 1.0 - smoothstep(0.0, 1.0, cursorDistance);\n let baselineResponse = mix(0.004, 0.014, nearFalloff) *\n mix(0.6, 1.0, particleSeed);\n let particleResponse = baselineResponse +\n detached * activity * mix(0.11, 0.82, nearFalloff);\n let attraction = rangeFalloff * particleResponse * u.cursor.z;\n ndc += (u.cursor.xy + jitter - ndc) * attraction;\n }\n\n let corner = quadCorner(vertexIndex);\n let pointSizePx = 2.0 * u.world.z * u.viewport.z;\n let clipOffset = corner * (pointSizePx / u.viewport.xy) * projected.w;\n let clip = vec4f(ndc * projected.w + clipOffset, projected.z, projected.w);\n\n var out: VertexOut;\n out.position = clip;\n out.pointCoord = corner * 0.5 + vec2f(0.5);\n out.foam = nf.w;\n out.normal = nf.xyz;\n out.viewDir = viewDir;\n out.height = disp.y;\n out.fade = fade;\n return out;\n}\n\n@fragment fn fs_main(in: VertexOut) -> @location(0) vec4f {\n let cc = in.pointCoord - vec2f(0.5);\n let d2 = dot(cc, cc);\n if (d2 > 0.25) {\n discard;\n }\n\n let n = normalize(in.normal);\n let v = normalize(in.viewDir);\n let fresnel = pow(1.0 - clamp(dot(n, v), 0.0, 1.0), 5.0);\n\n let foam = clamp(in.foam, 0.0, 1.0);\n let crest = smoothstep(-0.5, 1.5, in.height);\n\n var color = u.oceanColor.rgb * 0.5;\n color += u.neonColor.rgb * crest * 0.5;\n color += u.neonColor.rgb * fresnel * 0.15;\n color = mix(color, u.foamColor.rgb, foam);\n var alpha = 0.02 + crest * 0.06 + fresnel * 0.04;\n alpha = mix(alpha, 1.0, foam);\n color *= in.fade;\n alpha *= in.fade;\n return vec4f(color, clamp(alpha, 0.0, 1.0));\n}\n";
@@ -0,0 +1,40 @@
1
+ struct PresentUniforms {
2
+ fgColor: vec4f,
3
+ bgColor: vec4f,
4
+
5
+ brightness: f32,
6
+ _pad: vec3f,
7
+ };
8
+
9
+ @group(0) @binding(0) var<uniform> uniforms: PresentUniforms;
10
+ @group(0) @binding(1) var sceneHDR: texture_2d<f32>;
11
+ @group(0) @binding(2) var bloomTexture: texture_2d<f32>;
12
+ @group(0) @binding(3) var linearSampler: sampler;
13
+
14
+ fn LinearTosRGB(value: vec4f) -> vec4f {
15
+ let lt = value.rgb * 12.92;
16
+ let gt = 1.055 * pow(value.rgb, vec3f(0.41666)) - vec3f(0.055);
17
+ let rgb = select(gt, lt, value.rgb <= vec3f(0.0031308));
18
+ return vec4f(rgb, value.a);
19
+ }
20
+
21
+ @fragment fn fs_main(@location(0) uv: vec2f) -> @location(0) vec4f {
22
+ let scene = textureSample(sceneHDR, linearSampler, uv);
23
+ let bloom = textureSample(bloomTexture, linearSampler, uv);
24
+ let hdr = scene.rgb + bloom.rgb;
25
+
26
+
27
+
28
+
29
+ let tone = clamp(dot(hdr, vec3f(0.2126, 0.7152, 0.0722)), 0.0, 1.0);
30
+
31
+
32
+
33
+
34
+
35
+ var color = mix(uniforms.bgColor.rgb, uniforms.fgColor.rgb, tone);
36
+ color += (uniforms.fgColor.rgb - uniforms.bgColor.rgb) * tone * tone
37
+ * (uniforms.brightness - 1.0);
38
+
39
+ return LinearTosRGB(vec4f(clamp(color, vec3f(0.0), vec3f(1.0)), 1.0));
40
+ }
@@ -0,0 +1 @@
1
+ export default "struct PresentUniforms {\n fgColor: vec4f,\n bgColor: vec4f,\n\n brightness: f32,\n _pad: vec3f,\n};\n\n@group(0) @binding(0) var<uniform> uniforms: PresentUniforms;\n@group(0) @binding(1) var sceneHDR: texture_2d<f32>;\n@group(0) @binding(2) var bloomTexture: texture_2d<f32>;\n@group(0) @binding(3) var linearSampler: sampler;\n\nfn LinearTosRGB(value: vec4f) -> vec4f {\n let lt = value.rgb * 12.92;\n let gt = 1.055 * pow(value.rgb, vec3f(0.41666)) - vec3f(0.055);\n let rgb = select(gt, lt, value.rgb <= vec3f(0.0031308));\n return vec4f(rgb, value.a);\n}\n\n@fragment fn fs_main(@location(0) uv: vec2f) -> @location(0) vec4f {\n let scene = textureSample(sceneHDR, linearSampler, uv);\n let bloom = textureSample(bloomTexture, linearSampler, uv);\n let hdr = scene.rgb + bloom.rgb;\n\n\n\n\n let tone = clamp(dot(hdr, vec3f(0.2126, 0.7152, 0.0722)), 0.0, 1.0);\n\n\n\n\n\n var color = mix(uniforms.bgColor.rgb, uniforms.fgColor.rgb, tone);\n color += (uniforms.fgColor.rgb - uniforms.bgColor.rgb) * tone * tone\n * (uniforms.brightness - 1.0);\n\n return LinearTosRGB(vec4f(clamp(color, vec3f(0.0), vec3f(1.0)), 1.0));\n}\n";
@@ -0,0 +1,66 @@
1
+ import { type Draw, type Effect, type Frame, type Gpu, type Surface, type Target } from "vgpu";
2
+ import { type OceanColors } from "./ocean-colors.js";
3
+ import { type IfftStage } from "./ocean-graph.js";
4
+ type Output = Surface | Target;
5
+ interface RendererOptions {
6
+ readonly canvas: HTMLCanvasElement;
7
+ readonly colors?: OceanColors;
8
+ readonly fps?: number;
9
+ readonly onError?: (error: unknown) => void;
10
+ }
11
+ type PointerTarget = readonly [number, number, number];
12
+ export declare function createRenderer({ canvas, colors, fps, onError, }: RendererOptions): {
13
+ ready: Promise<void>;
14
+ firstFrame: Promise<void>;
15
+ dispose: () => void;
16
+ setColors: (next: OceanColors) => void;
17
+ setPaused: (next: boolean) => void;
18
+ setPointer: (next: PointerTarget) => void;
19
+ };
20
+ export type OceanRenderer = ReturnType<typeof createRenderer>;
21
+ export declare function createGraph(gpu: Gpu, output: Output, label: string, colors?: OceanColors): Promise<OceanGraph>;
22
+ declare function buildGraph(gpu: Gpu, output: Output, label: string, colors: OceanColors, own: (value: Target) => Target): {
23
+ simulation: {
24
+ noise: Target;
25
+ h0: Target;
26
+ spectrum: Target;
27
+ ping: Target;
28
+ pong: Target;
29
+ normalFoam: Target;
30
+ };
31
+ scene: Target;
32
+ bloom: {
33
+ bright: Target;
34
+ composite: Target;
35
+ levels: {
36
+ horizontal: Target;
37
+ vertical: Target;
38
+ horizontalEffect: Effect;
39
+ verticalEffect: Effect;
40
+ }[];
41
+ };
42
+ effects: {
43
+ noise: Effect;
44
+ initialSpectrum: Effect;
45
+ evolveSpectrum: Effect;
46
+ normals: Effect;
47
+ bright: Effect;
48
+ composite: Effect;
49
+ present: Effect;
50
+ };
51
+ ifft: {
52
+ spec: IfftStage;
53
+ effect: Effect;
54
+ output: Target;
55
+ }[];
56
+ particles: Draw;
57
+ needsInitialSpectrum: boolean;
58
+ };
59
+ export type OceanGraph = ReturnType<typeof buildGraph>;
60
+ export declare function setPresentColors(graph: OceanGraph, colors: OceanColors): void;
61
+ export declare function renderAt(gpu: Gpu, graph: OceanGraph, output: Target, time: number): void;
62
+ export declare function renderGraph(currentFrame: Frame, graph: OceanGraph, output: Output): void;
63
+ export declare function bloomSizes(size: readonly [number, number]): [number, number][];
64
+ export declare function destroyGraph(graph: OceanGraph): void;
65
+ export {};
66
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../../../src/app/shared/ocean/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,IAAI,EACT,KAAK,MAAM,EACX,KAAK,KAAK,EAEV,KAAK,GAAG,EAER,KAAK,OAAO,EACZ,KAAK,MAAM,EACZ,MAAM,MAAM,CAAC;AAUd,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,EAGL,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAC;AAW1B,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAE/B,UAAU,eAAe;IACvB,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CAC7C;AAED,KAAK,aAAa,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AASvD,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,MAAM,EACN,GAAG,EACH,OAAO,GACR,EAAE,eAAe;;;mBA2BI,IAAI;sBAkKC,WAAW,KAAG,IAAI;sBApBlB,OAAO,KAAG,IAAI;uBAeb,aAAa,KAAG,IAAI;EAY/C;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAE9D,wBAAsB,WAAW,CAC/B,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,WAAkC,GACzC,OAAO,CAAC,UAAU,CAAC,CAiBrB;AAED,iBAAS,UAAU,CACjB,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiM/B;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAuEvD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAE7E;AAoCD,wBAAgB,QAAQ,CACtB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,IAAI,CAGN;AAED,wBAAgB,WAAW,CACzB,YAAY,EAAE,KAAK,EACnB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,MAAM,GACb,IAAI,CAuBN;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CASpB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAWpD"}