@nous-research/ui 0.13.2 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/dist/assets/filler-bg0.webp +0 -0
  2. package/dist/assets.d.ts +38 -0
  3. package/dist/fonts.d.ts +0 -1
  4. package/dist/fonts.js +5 -7
  5. package/dist/hooks/use-capped-frame.d.ts +0 -1
  6. package/dist/hooks/use-capped-frame.js +12 -13
  7. package/dist/hooks/use-css-var-dims.d.ts +0 -1
  8. package/dist/hooks/use-css-var-dims.js +26 -21
  9. package/dist/hooks/use-gpu-tier.d.ts +0 -1
  10. package/dist/hooks/use-gpu-tier.js +90 -110
  11. package/dist/hooks/use-render-loop.d.ts +0 -1
  12. package/dist/hooks/use-render-loop.js +58 -58
  13. package/dist/hooks/use-smooth-controls.d.ts +0 -1
  14. package/dist/hooks/use-smooth-controls.js +204 -206
  15. package/dist/index.d.ts +0 -1
  16. package/dist/index.js +84 -58
  17. package/dist/ui/basic-page.d.ts +1 -2
  18. package/dist/ui/basic-page.js +15 -7
  19. package/dist/ui/components/animated-count.d.ts +1 -2
  20. package/dist/ui/components/animated-count.js +109 -85
  21. package/dist/ui/components/ascii.d.ts +2 -3
  22. package/dist/ui/components/ascii.js +75 -59
  23. package/dist/ui/components/badge.d.ts +1 -2
  24. package/dist/ui/components/badge.js +35 -18
  25. package/dist/ui/components/badges/nous-girl.d.ts +1 -2
  26. package/dist/ui/components/badges/nous-girl.js +80 -3
  27. package/dist/ui/components/blend-mode.d.ts +1 -2
  28. package/dist/ui/components/blend-mode.js +55 -63
  29. package/dist/ui/components/blink.d.ts +1 -2
  30. package/dist/ui/components/blink.js +15 -6
  31. package/dist/ui/components/button.d.ts +2 -3
  32. package/dist/ui/components/button.js +139 -90
  33. package/dist/ui/components/command-block.d.ts +2 -3
  34. package/dist/ui/components/command-block.js +52 -24
  35. package/dist/ui/components/cursor.d.ts +1 -2
  36. package/dist/ui/components/cursor.js +93 -54
  37. package/dist/ui/components/dropdown-menu.d.ts +1 -2
  38. package/dist/ui/components/dropdown-menu.js +99 -51
  39. package/dist/ui/components/fit-text/index.d.ts +0 -1
  40. package/dist/ui/components/fit-text/index.js +21 -13
  41. package/dist/ui/components/graphs/bar-chart.d.ts +1 -2
  42. package/dist/ui/components/graphs/bar-chart.js +116 -63
  43. package/dist/ui/components/graphs/index.d.ts +0 -1
  44. package/dist/ui/components/graphs/index.js +3 -4
  45. package/dist/ui/components/graphs/line-chart.d.ts +1 -2
  46. package/dist/ui/components/graphs/line-chart.js +159 -102
  47. package/dist/ui/components/graphs/utils.d.ts +2 -3
  48. package/dist/ui/components/graphs/utils.js +147 -114
  49. package/dist/ui/components/grid/index.d.ts +0 -1
  50. package/dist/ui/components/grid/index.js +12 -9
  51. package/dist/ui/components/hover-bg.d.ts +0 -1
  52. package/dist/ui/components/hover-bg.js +11 -6
  53. package/dist/ui/components/icons/arrow.d.ts +1 -2
  54. package/dist/ui/components/icons/arrow.js +42 -5
  55. package/dist/ui/components/icons/chevron.d.ts +1 -2
  56. package/dist/ui/components/icons/chevron.js +49 -5
  57. package/dist/ui/components/icons/discord.d.ts +1 -2
  58. package/dist/ui/components/icons/discord.js +12 -4
  59. package/dist/ui/components/icons/eye.d.ts +1 -2
  60. package/dist/ui/components/icons/eye.js +5 -3
  61. package/dist/ui/components/icons/gear.d.ts +1 -2
  62. package/dist/ui/components/icons/gear.js +28 -14
  63. package/dist/ui/components/icons/github.d.ts +1 -2
  64. package/dist/ui/components/icons/github.js +12 -4
  65. package/dist/ui/components/icons/hamburger.d.ts +1 -2
  66. package/dist/ui/components/icons/hamburger.js +54 -5
  67. package/dist/ui/components/icons/heart.d.ts +1 -2
  68. package/dist/ui/components/icons/heart.js +8 -3
  69. package/dist/ui/components/icons/index.d.ts +0 -1
  70. package/dist/ui/components/icons/index.js +11 -12
  71. package/dist/ui/components/icons/link.d.ts +1 -2
  72. package/dist/ui/components/icons/link.js +10 -3
  73. package/dist/ui/components/icons/minus.d.ts +1 -2
  74. package/dist/ui/components/icons/minus.js +10 -3
  75. package/dist/ui/components/icons/search.d.ts +1 -2
  76. package/dist/ui/components/icons/search.js +30 -3
  77. package/dist/ui/components/image-distortion.d.ts +1 -2
  78. package/dist/ui/components/image-distortion.js +300 -265
  79. package/dist/ui/components/leva-client.d.ts +1 -2
  80. package/dist/ui/components/leva-client.js +9 -10
  81. package/dist/ui/components/list-item.d.ts +0 -1
  82. package/dist/ui/components/list-item.js +26 -10
  83. package/dist/ui/components/modal/index.d.ts +1 -2
  84. package/dist/ui/components/modal/index.js +33 -14
  85. package/dist/ui/components/overlays/blend-modes.d.ts +0 -1
  86. package/dist/ui/components/overlays/blend-modes.js +11 -12
  87. package/dist/ui/components/overlays/glitch.d.ts +1 -2
  88. package/dist/ui/components/overlays/glitch.js +115 -110
  89. package/dist/ui/components/overlays/greys.d.ts +1 -2
  90. package/dist/ui/components/overlays/greys.js +200 -179
  91. package/dist/ui/components/overlays/index.d.ts +1 -2
  92. package/dist/ui/components/overlays/index.js +31 -17
  93. package/dist/ui/components/overlays/lens-layers.d.ts +1 -2
  94. package/dist/ui/components/overlays/lens-layers.js +89 -65
  95. package/dist/ui/components/overlays/lens.d.ts +0 -1
  96. package/dist/ui/components/overlays/lens.js +46 -52
  97. package/dist/ui/components/overlays/noise.d.ts +1 -2
  98. package/dist/ui/components/overlays/noise.js +112 -113
  99. package/dist/ui/components/overlays/vignette.d.ts +1 -2
  100. package/dist/ui/components/overlays/vignette.js +44 -38
  101. package/dist/ui/components/poster.d.ts +1 -2
  102. package/dist/ui/components/poster.js +240 -87
  103. package/dist/ui/components/progress.d.ts +1 -2
  104. package/dist/ui/components/progress.js +52 -12
  105. package/dist/ui/components/scene-canvas.d.ts +1 -2
  106. package/dist/ui/components/scene-canvas.js +169 -119
  107. package/dist/ui/components/scramble.d.ts +1 -2
  108. package/dist/ui/components/scramble.js +60 -59
  109. package/dist/ui/components/segmented.d.ts +2 -3
  110. package/dist/ui/components/segmented.js +47 -12
  111. package/dist/ui/components/select.d.ts +1 -2
  112. package/dist/ui/components/select.js +207 -120
  113. package/dist/ui/components/selection-switcher.d.ts +0 -1
  114. package/dist/ui/components/selection-switcher.js +29 -25
  115. package/dist/ui/components/shader.d.ts +1 -2
  116. package/dist/ui/components/shader.js +56 -38
  117. package/dist/ui/components/socials.d.ts +1 -2
  118. package/dist/ui/components/socials.js +18 -7
  119. package/dist/ui/components/spinner.d.ts +1 -2
  120. package/dist/ui/components/spinner.js +36 -25
  121. package/dist/ui/components/stats.d.ts +1 -2
  122. package/dist/ui/components/stats.js +33 -9
  123. package/dist/ui/components/switch.d.ts +0 -1
  124. package/dist/ui/components/switch.js +35 -11
  125. package/dist/ui/components/tabs.d.ts +3 -4
  126. package/dist/ui/components/tabs.js +38 -12
  127. package/dist/ui/components/terminal-demo.d.ts +1 -2
  128. package/dist/ui/components/terminal-demo.js +119 -74
  129. package/dist/ui/components/theme-toggle.d.ts +1 -2
  130. package/dist/ui/components/theme-toggle.js +63 -8
  131. package/dist/ui/components/tier-card.d.ts +1 -2
  132. package/dist/ui/components/tier-card.js +144 -24
  133. package/dist/ui/components/tv.d.ts +1 -2
  134. package/dist/ui/components/tv.js +138 -90
  135. package/dist/ui/components/typography/h1.d.ts +0 -1
  136. package/dist/ui/components/typography/h1.js +17 -8
  137. package/dist/ui/components/typography/h2.d.ts +0 -1
  138. package/dist/ui/components/typography/h2.js +17 -8
  139. package/dist/ui/components/typography/index.d.ts +0 -1
  140. package/dist/ui/components/typography/index.js +35 -24
  141. package/dist/ui/components/typography/legend.d.ts +1 -2
  142. package/dist/ui/components/typography/legend.js +18 -6
  143. package/dist/ui/components/typography/small.d.ts +0 -1
  144. package/dist/ui/components/typography/small.js +8 -7
  145. package/dist/ui/components/watchlist.d.ts +1 -2
  146. package/dist/ui/components/watchlist.js +77 -25
  147. package/dist/ui/fonts.css +7 -7
  148. package/dist/ui/footer.d.ts +1 -2
  149. package/dist/ui/footer.js +61 -25
  150. package/dist/ui/header.d.ts +1 -2
  151. package/dist/ui/header.js +255 -60
  152. package/dist/ui/layout-wrapper.d.ts +1 -2
  153. package/dist/ui/layout-wrapper.js +5 -4
  154. package/dist/utils/color.d.ts +0 -1
  155. package/dist/utils/color.js +8 -9
  156. package/dist/utils/index.d.ts +0 -1
  157. package/dist/utils/index.js +37 -38
  158. package/dist/utils/poly.d.ts +0 -1
  159. package/dist/utils/poly.js +1 -2
  160. package/package.json +41 -24
  161. package/dist/assets/filler-bg0.jpg +0 -0
  162. package/dist/fonts.d.ts.map +0 -1
  163. package/dist/fonts.js.map +0 -1
  164. package/dist/hooks/use-capped-frame.d.ts.map +0 -1
  165. package/dist/hooks/use-capped-frame.js.map +0 -1
  166. package/dist/hooks/use-css-var-dims.d.ts.map +0 -1
  167. package/dist/hooks/use-css-var-dims.js.map +0 -1
  168. package/dist/hooks/use-gpu-tier.d.ts.map +0 -1
  169. package/dist/hooks/use-gpu-tier.js.map +0 -1
  170. package/dist/hooks/use-render-loop.d.ts.map +0 -1
  171. package/dist/hooks/use-render-loop.js.map +0 -1
  172. package/dist/hooks/use-smooth-controls.d.ts.map +0 -1
  173. package/dist/hooks/use-smooth-controls.js.map +0 -1
  174. package/dist/index.d.ts.map +0 -1
  175. package/dist/index.js.map +0 -1
  176. package/dist/ui/basic-page.d.ts.map +0 -1
  177. package/dist/ui/basic-page.js.map +0 -1
  178. package/dist/ui/components/animated-count.d.ts.map +0 -1
  179. package/dist/ui/components/animated-count.js.map +0 -1
  180. package/dist/ui/components/ascii.d.ts.map +0 -1
  181. package/dist/ui/components/ascii.js.map +0 -1
  182. package/dist/ui/components/badge.d.ts.map +0 -1
  183. package/dist/ui/components/badge.js.map +0 -1
  184. package/dist/ui/components/badges/nous-girl.d.ts.map +0 -1
  185. package/dist/ui/components/badges/nous-girl.js.map +0 -1
  186. package/dist/ui/components/blend-mode.d.ts.map +0 -1
  187. package/dist/ui/components/blend-mode.js.map +0 -1
  188. package/dist/ui/components/blink.d.ts.map +0 -1
  189. package/dist/ui/components/blink.js.map +0 -1
  190. package/dist/ui/components/button.d.ts.map +0 -1
  191. package/dist/ui/components/button.js.map +0 -1
  192. package/dist/ui/components/command-block.d.ts.map +0 -1
  193. package/dist/ui/components/command-block.js.map +0 -1
  194. package/dist/ui/components/cursor.d.ts.map +0 -1
  195. package/dist/ui/components/cursor.js.map +0 -1
  196. package/dist/ui/components/dropdown-menu.d.ts.map +0 -1
  197. package/dist/ui/components/dropdown-menu.js.map +0 -1
  198. package/dist/ui/components/fit-text/index.d.ts.map +0 -1
  199. package/dist/ui/components/fit-text/index.js.map +0 -1
  200. package/dist/ui/components/graphs/bar-chart.d.ts.map +0 -1
  201. package/dist/ui/components/graphs/bar-chart.js.map +0 -1
  202. package/dist/ui/components/graphs/index.d.ts.map +0 -1
  203. package/dist/ui/components/graphs/index.js.map +0 -1
  204. package/dist/ui/components/graphs/line-chart.d.ts.map +0 -1
  205. package/dist/ui/components/graphs/line-chart.js.map +0 -1
  206. package/dist/ui/components/graphs/utils.d.ts.map +0 -1
  207. package/dist/ui/components/graphs/utils.js.map +0 -1
  208. package/dist/ui/components/grid/index.d.ts.map +0 -1
  209. package/dist/ui/components/grid/index.js.map +0 -1
  210. package/dist/ui/components/hover-bg.d.ts.map +0 -1
  211. package/dist/ui/components/hover-bg.js.map +0 -1
  212. package/dist/ui/components/icons/arrow.d.ts.map +0 -1
  213. package/dist/ui/components/icons/arrow.js.map +0 -1
  214. package/dist/ui/components/icons/chevron.d.ts.map +0 -1
  215. package/dist/ui/components/icons/chevron.js.map +0 -1
  216. package/dist/ui/components/icons/discord.d.ts.map +0 -1
  217. package/dist/ui/components/icons/discord.js.map +0 -1
  218. package/dist/ui/components/icons/eye.d.ts.map +0 -1
  219. package/dist/ui/components/icons/eye.js.map +0 -1
  220. package/dist/ui/components/icons/gear.d.ts.map +0 -1
  221. package/dist/ui/components/icons/gear.js.map +0 -1
  222. package/dist/ui/components/icons/github.d.ts.map +0 -1
  223. package/dist/ui/components/icons/github.js.map +0 -1
  224. package/dist/ui/components/icons/hamburger.d.ts.map +0 -1
  225. package/dist/ui/components/icons/hamburger.js.map +0 -1
  226. package/dist/ui/components/icons/heart.d.ts.map +0 -1
  227. package/dist/ui/components/icons/heart.js.map +0 -1
  228. package/dist/ui/components/icons/index.d.ts.map +0 -1
  229. package/dist/ui/components/icons/index.js.map +0 -1
  230. package/dist/ui/components/icons/link.d.ts.map +0 -1
  231. package/dist/ui/components/icons/link.js.map +0 -1
  232. package/dist/ui/components/icons/minus.d.ts.map +0 -1
  233. package/dist/ui/components/icons/minus.js.map +0 -1
  234. package/dist/ui/components/icons/search.d.ts.map +0 -1
  235. package/dist/ui/components/icons/search.js.map +0 -1
  236. package/dist/ui/components/image-distortion.d.ts.map +0 -1
  237. package/dist/ui/components/image-distortion.js.map +0 -1
  238. package/dist/ui/components/leva-client.d.ts.map +0 -1
  239. package/dist/ui/components/leva-client.js.map +0 -1
  240. package/dist/ui/components/list-item.d.ts.map +0 -1
  241. package/dist/ui/components/list-item.js.map +0 -1
  242. package/dist/ui/components/modal/index.d.ts.map +0 -1
  243. package/dist/ui/components/modal/index.js.map +0 -1
  244. package/dist/ui/components/overlays/blend-modes.d.ts.map +0 -1
  245. package/dist/ui/components/overlays/blend-modes.js.map +0 -1
  246. package/dist/ui/components/overlays/glitch.d.ts.map +0 -1
  247. package/dist/ui/components/overlays/glitch.js.map +0 -1
  248. package/dist/ui/components/overlays/greys.d.ts.map +0 -1
  249. package/dist/ui/components/overlays/greys.js.map +0 -1
  250. package/dist/ui/components/overlays/index.d.ts.map +0 -1
  251. package/dist/ui/components/overlays/index.js.map +0 -1
  252. package/dist/ui/components/overlays/lens-layers.d.ts.map +0 -1
  253. package/dist/ui/components/overlays/lens-layers.js.map +0 -1
  254. package/dist/ui/components/overlays/lens.d.ts.map +0 -1
  255. package/dist/ui/components/overlays/lens.js.map +0 -1
  256. package/dist/ui/components/overlays/noise.d.ts.map +0 -1
  257. package/dist/ui/components/overlays/noise.js.map +0 -1
  258. package/dist/ui/components/overlays/vignette.d.ts.map +0 -1
  259. package/dist/ui/components/overlays/vignette.js.map +0 -1
  260. package/dist/ui/components/poster.d.ts.map +0 -1
  261. package/dist/ui/components/poster.js.map +0 -1
  262. package/dist/ui/components/progress.d.ts.map +0 -1
  263. package/dist/ui/components/progress.js.map +0 -1
  264. package/dist/ui/components/scene-canvas.d.ts.map +0 -1
  265. package/dist/ui/components/scene-canvas.js.map +0 -1
  266. package/dist/ui/components/scramble.d.ts.map +0 -1
  267. package/dist/ui/components/scramble.js.map +0 -1
  268. package/dist/ui/components/segmented.d.ts.map +0 -1
  269. package/dist/ui/components/segmented.js.map +0 -1
  270. package/dist/ui/components/select.d.ts.map +0 -1
  271. package/dist/ui/components/select.js.map +0 -1
  272. package/dist/ui/components/selection-switcher.d.ts.map +0 -1
  273. package/dist/ui/components/selection-switcher.js.map +0 -1
  274. package/dist/ui/components/shader.d.ts.map +0 -1
  275. package/dist/ui/components/shader.js.map +0 -1
  276. package/dist/ui/components/socials.d.ts.map +0 -1
  277. package/dist/ui/components/socials.js.map +0 -1
  278. package/dist/ui/components/spinner.d.ts.map +0 -1
  279. package/dist/ui/components/spinner.js.map +0 -1
  280. package/dist/ui/components/stats.d.ts.map +0 -1
  281. package/dist/ui/components/stats.js.map +0 -1
  282. package/dist/ui/components/switch.d.ts.map +0 -1
  283. package/dist/ui/components/switch.js.map +0 -1
  284. package/dist/ui/components/tabs.d.ts.map +0 -1
  285. package/dist/ui/components/tabs.js.map +0 -1
  286. package/dist/ui/components/terminal-demo.d.ts.map +0 -1
  287. package/dist/ui/components/terminal-demo.js.map +0 -1
  288. package/dist/ui/components/theme-toggle.d.ts.map +0 -1
  289. package/dist/ui/components/theme-toggle.js.map +0 -1
  290. package/dist/ui/components/tier-card.d.ts.map +0 -1
  291. package/dist/ui/components/tier-card.js.map +0 -1
  292. package/dist/ui/components/tv.d.ts.map +0 -1
  293. package/dist/ui/components/tv.js.map +0 -1
  294. package/dist/ui/components/typography/h1.d.ts.map +0 -1
  295. package/dist/ui/components/typography/h1.js.map +0 -1
  296. package/dist/ui/components/typography/h2.d.ts.map +0 -1
  297. package/dist/ui/components/typography/h2.js.map +0 -1
  298. package/dist/ui/components/typography/index.d.ts.map +0 -1
  299. package/dist/ui/components/typography/index.js.map +0 -1
  300. package/dist/ui/components/typography/legend.d.ts.map +0 -1
  301. package/dist/ui/components/typography/legend.js.map +0 -1
  302. package/dist/ui/components/typography/small.d.ts.map +0 -1
  303. package/dist/ui/components/typography/small.js.map +0 -1
  304. package/dist/ui/components/watchlist.d.ts.map +0 -1
  305. package/dist/ui/components/watchlist.js.map +0 -1
  306. package/dist/ui/footer.d.ts.map +0 -1
  307. package/dist/ui/footer.js.map +0 -1
  308. package/dist/ui/header.d.ts.map +0 -1
  309. package/dist/ui/header.js.map +0 -1
  310. package/dist/ui/layout-wrapper.d.ts.map +0 -1
  311. package/dist/ui/layout-wrapper.js.map +0 -1
  312. package/dist/utils/color.d.ts.map +0 -1
  313. package/dist/utils/color.js.map +0 -1
  314. package/dist/utils/index.d.ts.map +0 -1
  315. package/dist/utils/index.js.map +0 -1
  316. package/dist/utils/poly.d.ts.map +0 -1
  317. package/dist/utils/poly.js.map +0 -1
@@ -1,65 +1,59 @@
1
- 'use client';
2
- import { atom } from 'nanostores';
3
- import { setControlValue } from '../../../hooks/use-smooth-controls';
1
+ "use client";
2
+ import { atom } from "nanostores";
3
+ import { setControlValue } from "../../../hooks/use-smooth-controls.js";
4
4
  export const LENS_0 = {
5
- Globe: { innerColor: '#170d02', innerOpacity: 0.1, outerColor: '#FFAC02' },
6
- Lens: {
7
- bgBlend: 'difference',
8
- bgColor: '#041C1C',
9
- bgOpacity: 1,
10
- fgColor: '#FFFFFF',
11
- fgOpacity: 0,
12
- fillerOpacity: 0.033,
13
- mgColor: '#ffe6cb',
14
- mgOpacity: 1
15
- }
5
+ Globe: { innerColor: "#170d02", innerOpacity: 0.1, outerColor: "#FFAC02" },
6
+ Lens: {
7
+ bgBlend: "difference",
8
+ bgColor: "#041C1C",
9
+ bgOpacity: 1,
10
+ fgColor: "#FFFFFF",
11
+ fgOpacity: 0,
12
+ fillerOpacity: 0.033,
13
+ mgColor: "#ffe6cb",
14
+ mgOpacity: 1
15
+ }
16
16
  };
17
17
  export const LENS_5I = {
18
- Globe: { innerColor: '#170d02', innerOpacity: 0.3, outerColor: '#FFAC02' },
19
- Lens: {
20
- bgBlend: 'multiply',
21
- bgColor: '#170d02',
22
- bgOpacity: 1,
23
- fgColor: '#FFFFFF',
24
- fgOpacity: 1,
25
- fillerOpacity: 0.06,
26
- mgColor: '#FFAC02',
27
- mgOpacity: 1
28
- }
18
+ Globe: { innerColor: "#170d02", innerOpacity: 0.3, outerColor: "#FFAC02" },
19
+ Lens: {
20
+ bgBlend: "multiply",
21
+ bgColor: "#170d02",
22
+ bgOpacity: 1,
23
+ fgColor: "#FFFFFF",
24
+ fgOpacity: 1,
25
+ fillerOpacity: 0.06,
26
+ mgColor: "#FFAC02",
27
+ mgOpacity: 1
28
+ }
29
29
  };
30
30
  export const lens0 = (l, g) => ({
31
- Globe: { ...LENS_0.Globe, ...g },
32
- Lens: { ...LENS_0.Lens, ...l }
31
+ Globe: { ...LENS_0.Globe, ...g },
32
+ Lens: { ...LENS_0.Lens, ...l }
33
33
  });
34
- // The Hermes light-mode look is produced by a fullscreen opaque-white
35
- // `mix-blend-mode: difference` foreground layer that inverts everything.
36
- // Colored lenses that want a "white + accent" look MUST be built from
37
- // LENS_5I, not LENS_0 — otherwise `bgBlend: 'difference'` + an opaque
38
- // colored bg + active fg inversion land halfway between dark and light
39
- // mode and produce a muddy warm wash instead of a clean inversion.
40
34
  export const lens5i = (l, g) => ({
41
- Globe: { ...LENS_5I.Globe, ...g },
42
- Lens: { ...LENS_5I.Lens, ...l }
35
+ Globe: { ...LENS_5I.Globe, ...g },
36
+ Lens: { ...LENS_5I.Lens, ...l }
43
37
  });
44
- // Accent colors are the *pre-inversion* source; after the difference FG
45
- // layer they read as their visual complement. e.g. `#FFAC02` (orange)
46
- // renders as blue #0053FD on screen — that's the default LENS_5I accent.
47
38
  export const LENSES = [
48
- ['0', LENS_0],
49
- ['1', lens0({ bgColor: '#0A1F1F' })],
50
- ['2', lens0({ bgColor: '#0E0313', mgColor: '#e6cbff' })],
51
- ['3', lens5i({ mgColor: '#FFAC02' })],
52
- ['4', lens5i({ bgColor: '#0E0313', mgColor: '#FF5500' })],
53
- ['5', lens0({ bgColor: '#1540B1', bgOpacity: 0.7 })],
54
- ['5i', LENS_5I],
55
- ['6', lens5i({ bgColor: '#170D02', mgColor: '#00E5FF' })]
39
+ ["0", LENS_0],
40
+ ["1", lens0({ bgColor: "#0A1F1F" })],
41
+ ["2", lens0({ bgColor: "#0E0313", mgColor: "#e6cbff" })],
42
+ ["3", lens5i({ mgColor: "#FFAC02" })],
43
+ ["4", lens5i({ bgColor: "#0E0313", mgColor: "#FF5500" })],
44
+ ["5", lens0({ bgColor: "#1540B1", bgOpacity: 0.7 })],
45
+ ["5i", LENS_5I],
46
+ ["6", lens5i({ bgColor: "#170D02", mgColor: "#00E5FF" })]
56
47
  ];
57
- export const applyLens = (preset, animate = false) => Object.entries(preset).forEach(([g, v]) => Object.entries(v).forEach(([k, val]) => setControlValue(g, k, val, { animate })));
48
+ export const applyLens = (preset, animate = false) => Object.entries(preset).forEach(
49
+ ([g, v]) => Object.entries(v).forEach(
50
+ ([k, val]) => setControlValue(g, k, val, { animate })
51
+ )
52
+ );
58
53
  export const $lightMode = atom(true);
59
54
  export const toggleLens = () => {
60
- const isLight = $lightMode.get();
61
- const next = isLight ? LENS_0 : LENS_5I;
62
- $lightMode.set(!isLight);
63
- applyLens(next, true);
55
+ const isLight = $lightMode.get();
56
+ const next = isLight ? LENS_0 : LENS_5I;
57
+ $lightMode.set(!isLight);
58
+ applyLens(next, true);
64
59
  };
65
- //# sourceMappingURL=lens.js.map
@@ -1,7 +1,6 @@
1
- export declare function Noise({ className, style }: NoiseProps): import("react/jsx-runtime").JSX.Element | null;
1
+ export declare function Noise({ className, style }: NoiseProps): import("react").JSX.Element | null;
2
2
  interface NoiseProps {
3
3
  className?: string;
4
4
  style?: React.CSSProperties;
5
5
  }
6
6
  export {};
7
- //# sourceMappingURL=noise.d.ts.map
@@ -1,19 +1,24 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { useEffect, useRef } from 'react';
4
- import * as THREE from 'three';
5
- import { $gpuTier, useGpuTier } from '../../../hooks/use-gpu-tier';
6
- import { useSmoothControls } from '../../../hooks/use-smooth-controls';
7
- import { cn, hexToVec3 } from '../../../utils';
8
- import { BLEND_MODES } from './blend-modes';
9
- const vert = /*glsl*/ `
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useEffect, useRef } from "react";
4
+ import * as THREE from "three";
5
+ import { $gpuTier, useGpuTier } from "../../../hooks/use-gpu-tier.js";
6
+ import { useSmoothControls } from "../../../hooks/use-smooth-controls.js";
7
+ import { cn, hexToVec3 } from "../../../utils/index.js";
8
+ import { BLEND_MODES } from "./blend-modes.js";
9
+ const vert = (
10
+ /*glsl*/
11
+ `
10
12
  varying vec2 vUv;
11
13
  void main() {
12
14
  vUv = uv;
13
15
  gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
14
16
  }
15
- `;
16
- const frag = /*glsl*/ `
17
+ `
18
+ );
19
+ const frag = (
20
+ /*glsl*/
21
+ `
17
22
  uniform vec2 uRes;
18
23
  uniform float uDpr, uSize, uDensity, uOpacity;
19
24
  uniform vec3 uColor;
@@ -29,108 +34,102 @@ const frag = /*glsl*/ `
29
34
  float n = hash(floor(vUv * uRes / (uSize * uDpr)));
30
35
  gl_FragColor = vec4(uColor, step(1.0 - uDensity, n)) * uOpacity;
31
36
  }
32
- `;
37
+ `
38
+ );
33
39
  export function Noise({ className, style }) {
34
- const gpuTier = useGpuTier();
35
- const c = useSmoothControls('Effects/Noise', {
36
- blend: { options: BLEND_MODES, value: 'color-dodge' },
37
- color: { value: '#eaeaea' },
38
- density: { max: 1, min: 0, step: 0.01, value: 0.11 },
39
- enabled: { value: true },
40
- opacity: { max: 1, min: 0, step: 0.01, value: 0.55 },
41
- size: { max: 10, min: 0.1, step: 0.1, value: 1 }
42
- }, { collapsed: true });
43
- const canvasRef = useRef(null);
44
- const enabled = c.enabled && gpuTier > 0;
45
- // The noise shader is fully deterministic: given the same uniforms it
46
- // produces an identical output every frame. The previous version ran
47
- // it at 60fps forever, which on a retina display with mix-blend-mode
48
- // is enough to peg the GPU/compositor for the entire lifetime of the
49
- // page (this is the dominant contributor to the "fans go crazy after
50
- // a few hours of idle" symptom).
51
- //
52
- // Instead we render exactly once on mount, and re-render only when
53
- // the user-controllable uniforms change or the viewport resizes.
54
- useEffect(() => {
55
- if (!canvasRef.current || !enabled) {
56
- return;
57
- }
58
- let renderer;
59
- try {
60
- renderer = new THREE.WebGLRenderer({
61
- alpha: true,
62
- canvas: canvasRef.current,
63
- premultipliedAlpha: false
64
- });
65
- }
66
- catch {
67
- $gpuTier.set(0);
68
- return;
69
- }
70
- renderer.setClearColor(0x000000, 0);
71
- const scene = new THREE.Scene();
72
- const camera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);
73
- const geo = new THREE.PlaneGeometry(2, 2);
74
- const mat = new THREE.ShaderMaterial({
75
- fragmentShader: frag,
76
- transparent: true,
77
- uniforms: {
78
- uColor: { value: hexToVec3(c.color) },
79
- uDensity: { value: c.density },
80
- uDpr: { value: 1 },
81
- uOpacity: { value: c.opacity },
82
- uRes: { value: new THREE.Vector2() },
83
- uSize: { value: c.size }
84
- },
85
- vertexShader: vert
86
- });
87
- scene.add(new THREE.Mesh(geo, mat));
88
- // Cap pixel ratio at 1.5 — noise is intentionally pixelated, so the
89
- // extra retina samples are wasted fillrate.
90
- const dpr = Math.min(devicePixelRatio, 1.5);
91
- const render = () => {
92
- mat.uniforms.uColor.value = hexToVec3(c.color);
93
- mat.uniforms.uDensity.value = c.density;
94
- mat.uniforms.uOpacity.value = c.opacity;
95
- mat.uniforms.uSize.value = c.size;
96
- mat.uniforms.uDpr.value = dpr;
97
- renderer.render(scene, camera);
98
- };
99
- const resize = () => {
100
- renderer.setSize(innerWidth, innerHeight);
101
- renderer.setPixelRatio(dpr);
102
- mat.uniforms.uRes.value.set(innerWidth * dpr, innerHeight * dpr);
103
- render();
104
- };
105
- resize();
106
- window.addEventListener('resize', resize);
107
- // Re-render when the tab becomes visible again, in case the GL
108
- // context was discarded by the browser while the page was
109
- // backgrounded — otherwise we can come back to a transparent canvas.
110
- const onVisibility = () => {
111
- if (!document.hidden)
112
- render();
113
- };
114
- document.addEventListener('visibilitychange', onVisibility);
115
- return () => {
116
- window.removeEventListener('resize', resize);
117
- document.removeEventListener('visibilitychange', onVisibility);
118
- mat.dispose();
119
- geo.dispose();
120
- renderer.dispose();
121
- };
122
- // eslint-disable-next-line react-hooks/exhaustive-deps
123
- }, [
124
- enabled,
125
- gpuTier,
126
- c.color,
127
- c.density,
128
- c.opacity,
129
- c.size
130
- ]);
131
- if (!enabled) {
132
- return null;
40
+ const gpuTier = useGpuTier();
41
+ const c = useSmoothControls(
42
+ "Effects/Noise",
43
+ {
44
+ blend: { options: BLEND_MODES, value: "color-dodge" },
45
+ color: { value: "#eaeaea" },
46
+ density: { max: 1, min: 0, step: 0.01, value: 0.11 },
47
+ enabled: { value: true },
48
+ opacity: { max: 1, min: 0, step: 0.01, value: 0.55 },
49
+ size: { max: 10, min: 0.1, step: 0.1, value: 1 }
50
+ },
51
+ { collapsed: true }
52
+ );
53
+ const canvasRef = useRef(null);
54
+ const enabled = c.enabled && gpuTier > 0;
55
+ useEffect(() => {
56
+ if (!canvasRef.current || !enabled) {
57
+ return;
133
58
  }
134
- return (_jsx("canvas", { className: cn('h-full w-full', className), ref: canvasRef, style: { mixBlendMode: c.blend, ...style } }));
59
+ let renderer;
60
+ try {
61
+ renderer = new THREE.WebGLRenderer({
62
+ alpha: true,
63
+ canvas: canvasRef.current,
64
+ premultipliedAlpha: false
65
+ });
66
+ } catch {
67
+ $gpuTier.set(0);
68
+ return;
69
+ }
70
+ renderer.setClearColor(0, 0);
71
+ const scene = new THREE.Scene();
72
+ const camera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);
73
+ const geo = new THREE.PlaneGeometry(2, 2);
74
+ const mat = new THREE.ShaderMaterial({
75
+ fragmentShader: frag,
76
+ transparent: true,
77
+ uniforms: {
78
+ uColor: { value: hexToVec3(c.color) },
79
+ uDensity: { value: c.density },
80
+ uDpr: { value: 1 },
81
+ uOpacity: { value: c.opacity },
82
+ uRes: { value: new THREE.Vector2() },
83
+ uSize: { value: c.size }
84
+ },
85
+ vertexShader: vert
86
+ });
87
+ scene.add(new THREE.Mesh(geo, mat));
88
+ const dpr = Math.min(devicePixelRatio, 1.5);
89
+ const render = () => {
90
+ mat.uniforms.uColor.value = hexToVec3(c.color);
91
+ mat.uniforms.uDensity.value = c.density;
92
+ mat.uniforms.uOpacity.value = c.opacity;
93
+ mat.uniforms.uSize.value = c.size;
94
+ mat.uniforms.uDpr.value = dpr;
95
+ renderer.render(scene, camera);
96
+ };
97
+ const resize = () => {
98
+ renderer.setSize(innerWidth, innerHeight);
99
+ renderer.setPixelRatio(dpr);
100
+ mat.uniforms.uRes.value.set(innerWidth * dpr, innerHeight * dpr);
101
+ render();
102
+ };
103
+ resize();
104
+ window.addEventListener("resize", resize);
105
+ const onVisibility = () => {
106
+ if (!document.hidden) render();
107
+ };
108
+ document.addEventListener("visibilitychange", onVisibility);
109
+ return () => {
110
+ window.removeEventListener("resize", resize);
111
+ document.removeEventListener("visibilitychange", onVisibility);
112
+ mat.dispose();
113
+ geo.dispose();
114
+ renderer.dispose();
115
+ };
116
+ }, [
117
+ enabled,
118
+ gpuTier,
119
+ c.color,
120
+ c.density,
121
+ c.opacity,
122
+ c.size
123
+ ]);
124
+ if (!enabled) {
125
+ return null;
126
+ }
127
+ return /* @__PURE__ */ jsx(
128
+ "canvas",
129
+ {
130
+ className: cn("h-full w-full", className),
131
+ ref: canvasRef,
132
+ style: { mixBlendMode: c.blend, ...style }
133
+ }
134
+ );
135
135
  }
136
- //# sourceMappingURL=noise.js.map
@@ -1,7 +1,6 @@
1
- export declare function Vignette({ className, style }: VignetteProps): import("react/jsx-runtime").JSX.Element | null;
1
+ export declare function Vignette({ className, style }: VignetteProps): import("react").JSX.Element | null;
2
2
  interface VignetteProps {
3
3
  className?: string;
4
4
  style?: React.CSSProperties;
5
5
  }
6
6
  export {};
7
- //# sourceMappingURL=vignette.d.ts.map
@@ -1,40 +1,46 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { useSmoothControls } from '../../../hooks/use-smooth-controls';
4
- import { cn } from '../../../utils';
5
- import { hexToRgb } from '../../../utils/color';
6
- import { BLEND_MODES } from './blend-modes';
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useSmoothControls } from "../../../hooks/use-smooth-controls.js";
4
+ import { cn } from "../../../utils/index.js";
5
+ import { hexToRgb } from "../../../utils/color.js";
6
+ import { BLEND_MODES } from "./blend-modes.js";
7
7
  export function Vignette({ className, style }) {
8
- const c = useSmoothControls('Effects/Vignette', {
9
- blend: { options: BLEND_MODES, value: 'lighten' },
10
- bottomLeft: { max: 1, min: 0, step: 0.01, value: 0 },
11
- bottomRight: { max: 1, min: 0, step: 0.01, value: 0 },
12
- color: { value: '#ffbd38' },
13
- enabled: { value: true },
14
- opacity: { max: 1, min: 0, step: 0.01, value: 0.22 },
15
- size: { max: 1, min: 0, step: 0.01, value: 1 },
16
- topLeft: { max: 1, min: 0, step: 0.01, value: 0.35 },
17
- topRight: { max: 1, min: 0, step: 0.01, value: 0 }
18
- }, { collapsed: true });
19
- if (!c.enabled)
20
- return null;
21
- const rgb = hexToRgb(c.color);
22
- const s = c.size * 60;
23
- const grad = (x, y, i) => i > 0 &&
24
- `radial-gradient(ellipse at ${x}% ${y}%, rgba(${rgb},0) ${s}%, rgba(${rgb},${i}) 100%)`;
25
- const bg = [
26
- grad(0, 0, c.topLeft),
27
- grad(100, 0, c.topRight),
28
- grad(0, 100, c.bottomLeft),
29
- grad(100, 100, c.bottomRight)
30
- ].filter(Boolean);
31
- if (!bg.length)
32
- return null;
33
- return (_jsx("div", { className: cn('h-full w-full', className), style: {
34
- background: bg.join(', '),
35
- mixBlendMode: c.blend,
36
- opacity: c.opacity,
37
- ...style
38
- } }));
8
+ const c = useSmoothControls(
9
+ "Effects/Vignette",
10
+ {
11
+ blend: { options: BLEND_MODES, value: "lighten" },
12
+ bottomLeft: { max: 1, min: 0, step: 0.01, value: 0 },
13
+ bottomRight: { max: 1, min: 0, step: 0.01, value: 0 },
14
+ color: { value: "#ffbd38" },
15
+ enabled: { value: true },
16
+ opacity: { max: 1, min: 0, step: 0.01, value: 0.22 },
17
+ size: { max: 1, min: 0, step: 0.01, value: 1 },
18
+ topLeft: { max: 1, min: 0, step: 0.01, value: 0.35 },
19
+ topRight: { max: 1, min: 0, step: 0.01, value: 0 }
20
+ },
21
+ { collapsed: true }
22
+ );
23
+ if (!c.enabled) return null;
24
+ const rgb = hexToRgb(c.color);
25
+ const s = c.size * 60;
26
+ const grad = (x, y, i) => i > 0 && `radial-gradient(ellipse at ${x}% ${y}%, rgba(${rgb},0) ${s}%, rgba(${rgb},${i}) 100%)`;
27
+ const bg = [
28
+ grad(0, 0, c.topLeft),
29
+ grad(100, 0, c.topRight),
30
+ grad(0, 100, c.bottomLeft),
31
+ grad(100, 100, c.bottomRight)
32
+ ].filter(Boolean);
33
+ if (!bg.length) return null;
34
+ return /* @__PURE__ */ jsx(
35
+ "div",
36
+ {
37
+ className: cn("h-full w-full", className),
38
+ style: {
39
+ background: bg.join(", "),
40
+ mixBlendMode: c.blend,
41
+ opacity: c.opacity,
42
+ ...style
43
+ }
44
+ }
45
+ );
39
46
  }
40
- //# sourceMappingURL=vignette.js.map
@@ -12,7 +12,7 @@ import type { AutoPlayPattern } from './image-distortion';
12
12
  * - `'dispatch'`: broadcast-card layout with sidebar copy, numbered tags,
13
13
  * and chrome — for when the poster needs to carry information.
14
14
  */
15
- export declare function Poster({ aspect, autoPlay, body, border, channel, children, className, cornerMarks, eyebrow, headline, layout, scale, seal, signature, src, tags, tint, tintStrength, variant, ...rest }: PosterProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function Poster({ aspect, autoPlay, body, border, channel, children, className, cornerMarks, eyebrow, headline, layout, scale, seal, signature, src, tags, tint, tintStrength, variant, ...rest }: PosterProps): import("react").JSX.Element;
16
16
  export type PosterAspect = 'landscape' | 'portrait' | 'square' | 'story' | 'wide';
17
17
  export type PosterVariant = 'dispatch' | 'vibe';
18
18
  export interface PosterProps {
@@ -60,4 +60,3 @@ export interface PosterProps {
60
60
  /** Layout variant. `'vibe'` (default) is full-bleed image; `'dispatch'` is the broadcast-card with sidebar copy. */
61
61
  variant?: PosterVariant;
62
62
  }
63
- //# sourceMappingURL=poster.d.ts.map