@nous-research/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/README.md +49 -0
  2. package/dist/assets/filler-bg0.jpg +0 -0
  3. package/dist/fonts/Collapse-Bold.woff2 +0 -0
  4. package/dist/fonts/Collapse-BoldItalic.woff2 +0 -0
  5. package/dist/fonts/Collapse-Italic.woff2 +0 -0
  6. package/dist/fonts/Collapse-Light.woff2 +0 -0
  7. package/dist/fonts/Collapse-LightItalic.woff2 +0 -0
  8. package/dist/fonts/Collapse-Regular.woff2 +0 -0
  9. package/dist/fonts/Collapse-Thin.woff2 +0 -0
  10. package/dist/fonts/Collapse-ThinItalic.woff2 +0 -0
  11. package/dist/fonts/Mondwest-Regular.woff2 +0 -0
  12. package/dist/fonts/Neuebit-Bold.woff2 +0 -0
  13. package/dist/fonts/RulesCompressed-Medium.woff2 +0 -0
  14. package/dist/fonts/RulesCompressed-Regular.woff2 +0 -0
  15. package/dist/fonts/RulesExpanded-Bold.woff2 +0 -0
  16. package/dist/fonts/RulesExpanded-Regular.woff2 +0 -0
  17. package/dist/fonts.d.ts +6 -0
  18. package/dist/fonts.js +7 -0
  19. package/dist/fonts.js.map +1 -0
  20. package/dist/hooks/use-capped-frame.d.ts +2 -0
  21. package/dist/hooks/use-capped-frame.js +15 -0
  22. package/dist/hooks/use-capped-frame.js.map +1 -0
  23. package/dist/hooks/use-css-var-dims.d.ts +1 -0
  24. package/dist/hooks/use-css-var-dims.js +23 -0
  25. package/dist/hooks/use-css-var-dims.js.map +1 -0
  26. package/dist/hooks/use-gpu-tier.d.ts +10 -0
  27. package/dist/hooks/use-gpu-tier.js +92 -0
  28. package/dist/hooks/use-gpu-tier.js.map +1 -0
  29. package/dist/hooks/use-smooth-controls.d.ts +16 -0
  30. package/dist/hooks/use-smooth-controls.js +202 -0
  31. package/dist/hooks/use-smooth-controls.js.map +1 -0
  32. package/dist/index.d.ts +45 -0
  33. package/dist/index.js +48 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/ui/basic-page.d.ts +7 -0
  36. package/dist/ui/basic-page.js +9 -0
  37. package/dist/ui/basic-page.js.map +1 -0
  38. package/dist/ui/components/animated-count.d.ts +10 -0
  39. package/dist/ui/components/animated-count.js +88 -0
  40. package/dist/ui/components/animated-count.js.map +1 -0
  41. package/dist/ui/components/ascii.d.ts +10 -0
  42. package/dist/ui/components/ascii.js +62 -0
  43. package/dist/ui/components/ascii.js.map +1 -0
  44. package/dist/ui/components/badge.d.ts +2 -0
  45. package/dist/ui/components/badge.js +5 -0
  46. package/dist/ui/components/badge.js.map +1 -0
  47. package/dist/ui/components/badges/nous-girl.d.ts +2 -0
  48. package/dist/ui/components/badges/nous-girl.js +5 -0
  49. package/dist/ui/components/badges/nous-girl.js.map +1 -0
  50. package/dist/ui/components/blend-mode.d.ts +28 -0
  51. package/dist/ui/components/blend-mode.js +76 -0
  52. package/dist/ui/components/blend-mode.js.map +1 -0
  53. package/dist/ui/components/blink.d.ts +6 -0
  54. package/dist/ui/components/blink.js +7 -0
  55. package/dist/ui/components/blink.js.map +1 -0
  56. package/dist/ui/components/button.d.ts +11 -0
  57. package/dist/ui/components/button.js +52 -0
  58. package/dist/ui/components/button.js.map +1 -0
  59. package/dist/ui/components/cursor.d.ts +3 -0
  60. package/dist/ui/components/cursor.js +57 -0
  61. package/dist/ui/components/cursor.js.map +1 -0
  62. package/dist/ui/components/dropdown-menu.d.ts +12 -0
  63. package/dist/ui/components/dropdown-menu.js +53 -0
  64. package/dist/ui/components/dropdown-menu.js.map +1 -0
  65. package/dist/ui/components/fit-text/fit-text.css +42 -0
  66. package/dist/ui/components/fit-text/index.d.ts +9 -0
  67. package/dist/ui/components/fit-text/index.js +16 -0
  68. package/dist/ui/components/fit-text/index.js.map +1 -0
  69. package/dist/ui/components/graphs/bar-chart.d.ts +12 -0
  70. package/dist/ui/components/graphs/bar-chart.js +75 -0
  71. package/dist/ui/components/graphs/bar-chart.js.map +1 -0
  72. package/dist/ui/components/graphs/index.d.ts +3 -0
  73. package/dist/ui/components/graphs/index.js +4 -0
  74. package/dist/ui/components/graphs/index.js.map +1 -0
  75. package/dist/ui/components/graphs/line-chart.d.ts +14 -0
  76. package/dist/ui/components/graphs/line-chart.js +117 -0
  77. package/dist/ui/components/graphs/line-chart.js.map +1 -0
  78. package/dist/ui/components/graphs/utils.d.ts +52 -0
  79. package/dist/ui/components/graphs/utils.js +128 -0
  80. package/dist/ui/components/graphs/utils.js.map +1 -0
  81. package/dist/ui/components/grid/grid.css +78 -0
  82. package/dist/ui/components/grid/index.d.ts +2 -0
  83. package/dist/ui/components/grid/index.js +13 -0
  84. package/dist/ui/components/grid/index.js.map +1 -0
  85. package/dist/ui/components/hover-bg.d.ts +1 -0
  86. package/dist/ui/components/hover-bg.js +8 -0
  87. package/dist/ui/components/hover-bg.js.map +1 -0
  88. package/dist/ui/components/icons/arrow.d.ts +6 -0
  89. package/dist/ui/components/icons/arrow.js +6 -0
  90. package/dist/ui/components/icons/arrow.js.map +1 -0
  91. package/dist/ui/components/icons/chevron.d.ts +6 -0
  92. package/dist/ui/components/icons/chevron.js +6 -0
  93. package/dist/ui/components/icons/chevron.js.map +1 -0
  94. package/dist/ui/components/icons/eye.d.ts +2 -0
  95. package/dist/ui/components/icons/eye.js +5 -0
  96. package/dist/ui/components/icons/eye.js.map +1 -0
  97. package/dist/ui/components/icons/gear.d.ts +6 -0
  98. package/dist/ui/components/icons/gear.js +15 -0
  99. package/dist/ui/components/icons/gear.js.map +1 -0
  100. package/dist/ui/components/icons/heart.d.ts +2 -0
  101. package/dist/ui/components/icons/heart.js +5 -0
  102. package/dist/ui/components/icons/heart.js.map +1 -0
  103. package/dist/ui/components/icons/index.d.ts +8 -0
  104. package/dist/ui/components/icons/index.js +9 -0
  105. package/dist/ui/components/icons/index.js.map +1 -0
  106. package/dist/ui/components/icons/link.d.ts +2 -0
  107. package/dist/ui/components/icons/link.js +5 -0
  108. package/dist/ui/components/icons/link.js.map +1 -0
  109. package/dist/ui/components/icons/minus.d.ts +2 -0
  110. package/dist/ui/components/icons/minus.js +5 -0
  111. package/dist/ui/components/icons/minus.js.map +1 -0
  112. package/dist/ui/components/icons/search.d.ts +2 -0
  113. package/dist/ui/components/icons/search.js +5 -0
  114. package/dist/ui/components/icons/search.js.map +1 -0
  115. package/dist/ui/components/leva-client.d.ts +1 -0
  116. package/dist/ui/components/leva-client.js +12 -0
  117. package/dist/ui/components/leva-client.js.map +1 -0
  118. package/dist/ui/components/modal/index.d.ts +8 -0
  119. package/dist/ui/components/modal/index.js +15 -0
  120. package/dist/ui/components/modal/index.js.map +1 -0
  121. package/dist/ui/components/modal/modal.css +36 -0
  122. package/dist/ui/components/overlays/glitch.d.ts +6 -0
  123. package/dist/ui/components/overlays/glitch.js +191 -0
  124. package/dist/ui/components/overlays/glitch.js.map +1 -0
  125. package/dist/ui/components/overlays/greys.d.ts +6 -0
  126. package/dist/ui/components/overlays/greys.js +300 -0
  127. package/dist/ui/components/overlays/greys.js.map +1 -0
  128. package/dist/ui/components/overlays/index.d.ts +44 -0
  129. package/dist/ui/components/overlays/index.js +125 -0
  130. package/dist/ui/components/overlays/index.js.map +1 -0
  131. package/dist/ui/components/overlays/noise.d.ts +6 -0
  132. package/dist/ui/components/overlays/noise.js +115 -0
  133. package/dist/ui/components/overlays/noise.js.map +1 -0
  134. package/dist/ui/components/overlays/vignette.d.ts +6 -0
  135. package/dist/ui/components/overlays/vignette.js +40 -0
  136. package/dist/ui/components/overlays/vignette.js.map +1 -0
  137. package/dist/ui/components/progress.d.ts +9 -0
  138. package/dist/ui/components/progress.js +12 -0
  139. package/dist/ui/components/progress.js.map +1 -0
  140. package/dist/ui/components/scene-canvas.d.ts +15 -0
  141. package/dist/ui/components/scene-canvas.js +117 -0
  142. package/dist/ui/components/scene-canvas.js.map +1 -0
  143. package/dist/ui/components/scramble.d.ts +9 -0
  144. package/dist/ui/components/scramble.js +61 -0
  145. package/dist/ui/components/scramble.js.map +1 -0
  146. package/dist/ui/components/selection-switcher.d.ts +1 -0
  147. package/dist/ui/components/selection-switcher.js +29 -0
  148. package/dist/ui/components/selection-switcher.js.map +1 -0
  149. package/dist/ui/components/shader.d.ts +7 -0
  150. package/dist/ui/components/shader.js +41 -0
  151. package/dist/ui/components/shader.js.map +1 -0
  152. package/dist/ui/components/stats.d.ts +9 -0
  153. package/dist/ui/components/stats.js +7 -0
  154. package/dist/ui/components/stats.js.map +1 -0
  155. package/dist/ui/components/tv.d.ts +3 -0
  156. package/dist/ui/components/tv.js +163 -0
  157. package/dist/ui/components/tv.js.map +1 -0
  158. package/dist/ui/components/typography/h1.d.ts +11 -0
  159. package/dist/ui/components/typography/h1.js +8 -0
  160. package/dist/ui/components/typography/h1.js.map +1 -0
  161. package/dist/ui/components/typography/h2.d.ts +11 -0
  162. package/dist/ui/components/typography/h2.js +8 -0
  163. package/dist/ui/components/typography/h2.js.map +1 -0
  164. package/dist/ui/components/typography/index.d.ts +15 -0
  165. package/dist/ui/components/typography/index.js +29 -0
  166. package/dist/ui/components/typography/index.js.map +1 -0
  167. package/dist/ui/components/typography/legend.d.ts +6 -0
  168. package/dist/ui/components/typography/legend.js +7 -0
  169. package/dist/ui/components/typography/legend.js.map +1 -0
  170. package/dist/ui/components/typography/small.d.ts +2 -0
  171. package/dist/ui/components/typography/small.js +7 -0
  172. package/dist/ui/components/typography/small.js.map +1 -0
  173. package/dist/ui/components/watchlist.d.ts +11 -0
  174. package/dist/ui/components/watchlist.js +27 -0
  175. package/dist/ui/components/watchlist.js.map +1 -0
  176. package/dist/ui/fonts.css +63 -0
  177. package/dist/ui/footer.d.ts +1 -0
  178. package/dist/ui/footer.js +19 -0
  179. package/dist/ui/footer.js.map +1 -0
  180. package/dist/ui/globals.css +340 -0
  181. package/dist/ui/header.d.ts +1 -0
  182. package/dist/ui/header.js +22 -0
  183. package/dist/ui/header.js.map +1 -0
  184. package/dist/ui/layout-wrapper.d.ts +1 -0
  185. package/dist/ui/layout-wrapper.js +5 -0
  186. package/dist/ui/layout-wrapper.js.map +1 -0
  187. package/dist/utils/color.d.ts +4 -0
  188. package/dist/utils/color.js +14 -0
  189. package/dist/utils/color.js.map +1 -0
  190. package/dist/utils/index.d.ts +15 -0
  191. package/dist/utils/index.js +48 -0
  192. package/dist/utils/index.js.map +1 -0
  193. package/dist/utils/poly.d.ts +8 -0
  194. package/dist/utils/poly.js +3 -0
  195. package/dist/utils/poly.js.map +1 -0
  196. package/package.json +95 -0
@@ -0,0 +1,340 @@
1
+ @import './fonts.css';
2
+ @import './components/fit-text/fit-text.css' layer(components);
3
+ @import './components/grid/grid.css' layer(components);
4
+ @import './components/modal/modal.css' layer(components);
5
+
6
+ @view-transition {
7
+ navigation: auto;
8
+ }
9
+
10
+ @media (prefers-reduced-motion: reduce) {
11
+ @view-transition {
12
+ navigation: none;
13
+ }
14
+ }
15
+
16
+ ::view-transition-old(page),
17
+ ::view-transition-new(page) {
18
+ animation-duration: 0.25s;
19
+ animation-timing-function: ease-out;
20
+ }
21
+
22
+ ::view-transition-old(page) {
23
+ animation: fade-out 0.25s ease-out;
24
+ }
25
+
26
+ ::view-transition-new(page) {
27
+ animation: fade-in 0.25s ease-out;
28
+ }
29
+
30
+ @keyframes fade-out {
31
+ to {
32
+ opacity: 0;
33
+ }
34
+ }
35
+
36
+ @keyframes fade-in {
37
+ from {
38
+ opacity: 0;
39
+ }
40
+ }
41
+
42
+ @keyframes slide-down {
43
+ from {
44
+ opacity: 0;
45
+ transform: translateY(-6px);
46
+ }
47
+ }
48
+
49
+ @keyframes slide-up {
50
+ from {
51
+ opacity: 0;
52
+ transform: translateY(6px);
53
+ }
54
+ }
55
+
56
+ .animate-slide-down {
57
+ animation: slide-down 0.6s ease-out both;
58
+ }
59
+
60
+ .animate-slide-up {
61
+ animation: slide-up 0.6s ease-out both;
62
+ }
63
+
64
+ .animate-fade-in {
65
+ animation: fade-in 0.5s ease-out both;
66
+ }
67
+
68
+ @keyframes blink {
69
+ 0%,
70
+ 100% {
71
+ opacity: 1;
72
+ }
73
+ 50% {
74
+ opacity: 0;
75
+ }
76
+ }
77
+
78
+ @keyframes spin-slow {
79
+ from {
80
+ transform: rotate(0deg);
81
+ }
82
+ to {
83
+ transform: rotate(360deg);
84
+ }
85
+ }
86
+
87
+ .animate-spin-slow {
88
+ animation: spin-slow 12s linear infinite;
89
+ }
90
+
91
+ @keyframes march {
92
+ to {
93
+ background-position: 0.5rem 0;
94
+ }
95
+ }
96
+
97
+ .group:hover .blink {
98
+ animation: blink 1s step-end infinite;
99
+ }
100
+
101
+ .dither {
102
+ background: repeating-conic-gradient(currentColor 0% 25%, transparent 0% 50%)
103
+ 0 0 / 2px 2px;
104
+ }
105
+
106
+ @custom-variant dark (&:is(.dark *));
107
+
108
+ @theme inline {
109
+ --color-background: var(--background);
110
+ --color-background-base: var(--background-base);
111
+ --color-midground: var(--midground);
112
+ --color-midground-base: var(--midground-base);
113
+ --color-foreground: var(--foreground);
114
+ --color-foreground-base: var(--foreground-base);
115
+ --color-gesso: #eaeaea;
116
+
117
+ --color-current: currentColor;
118
+ --color-transparent: transparent;
119
+
120
+ --gap-inherit: inherit;
121
+ --height-between-header-footer: max(
122
+ 400px,
123
+ calc(
124
+ 100dvh - 5rem -
125
+ (var(--header-height, 3.5rem) + var(--footer-height, 4.35rem))
126
+ )
127
+ );
128
+ }
129
+
130
+ :root {
131
+ --background: color-mix(in srgb, #170d02 100%, transparent);
132
+ --background-base: #170d02;
133
+ --background-alpha: 1;
134
+ --midground: color-mix(in srgb, #ffac02 100%, transparent);
135
+ --midground-base: #ffac02;
136
+ --midground-alpha: 1;
137
+ --foreground: color-mix(in srgb, #fff 100%, transparent);
138
+ --foreground-base: #fff;
139
+ --foreground-alpha: 1;
140
+ --vsq: calc(0.5vw + 0.5vh);
141
+ }
142
+
143
+ @property --fit-captured-length {
144
+ syntax: '<length>';
145
+ initial-value: 0px;
146
+ inherits: true;
147
+ }
148
+
149
+ @utility font-compressed {
150
+ font-family: var(--font-rules-compressed);
151
+ }
152
+
153
+ @utility font-expanded {
154
+ font-family: var(--font-rules-expanded);
155
+ }
156
+
157
+ @utility font-mondwest {
158
+ font-family: var(--font-mondwest);
159
+ }
160
+
161
+ @utility font-courier {
162
+ font-family: 'Courier New', var(--font-mono), monospace;
163
+ }
164
+
165
+ @utility font-serif {
166
+ font-family: 'Times New Roman', Times, serif;
167
+ }
168
+
169
+ @utility text-box-trim-none {
170
+ text-box-trim: none;
171
+ }
172
+
173
+ @utility text-box-trim-both {
174
+ text-box-trim: trim-both;
175
+ }
176
+
177
+ @utility text-box-trim-start {
178
+ text-box-trim: trim-start;
179
+ }
180
+
181
+ @utility text-box-trim-end {
182
+ text-box-trim: trim-end;
183
+ }
184
+
185
+ @utility grid-cols-auto-fit {
186
+ grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
187
+ }
188
+
189
+ @utility h-between-header-footer {
190
+ min-height: var(--height-between-header-footer);
191
+ }
192
+
193
+ @utility w-fill {
194
+ width: -webkit-fill-available;
195
+ }
196
+
197
+ @utility h-fill {
198
+ height: -webkit-fill-available;
199
+ }
200
+
201
+ @utility antialiased {
202
+ -webkit-font-smoothing: antialiased;
203
+ -moz-osx-font-smoothing: grayscale;
204
+ text-rendering: optimizeLegibility;
205
+ }
206
+
207
+ @utility underline-from-font {
208
+ text-decoration-skip-ink: auto;
209
+ text-underline-position: from-font;
210
+ }
211
+
212
+ @keyframes gradient-stroke {
213
+ 0% {
214
+ background-position: 15% 15%;
215
+ }
216
+
217
+ 100% {
218
+ background-position: 75% 75%;
219
+ }
220
+ }
221
+
222
+ .arc-border {
223
+ --_t: clamp(0%, (0.5 - var(--foreground-alpha, 1)) * 99900%, 100%);
224
+ --arc-c0: color-mix(in srgb, var(--foreground) var(--_t), transparent);
225
+ --arc-c1: var(--midground);
226
+ --arc-c2: var(--background);
227
+ --arc-angle: 160deg;
228
+ --arc-width: 1.25px;
229
+ --arc-inset: -2px;
230
+ --arc-duration: 2.23s;
231
+ --arc-gradient: linear-gradient(
232
+ var(--arc-angle),
233
+ transparent 0%,
234
+ var(--arc-c0) 15%,
235
+ var(--arc-c1) 20%,
236
+ var(--arc-c2) 25%,
237
+ transparent 35%,
238
+ transparent 40%,
239
+ var(--arc-c0) 55%,
240
+ var(--arc-c1) 60%,
241
+ var(--arc-c2) 65%,
242
+ transparent 75%,
243
+ transparent 80%,
244
+ var(--arc-c0) 95%,
245
+ var(--arc-c1) 100%
246
+ );
247
+
248
+ @apply pointer-events-none absolute z-[-1] overflow-hidden rounded-[inherit];
249
+
250
+ inset: var(--arc-inset);
251
+ padding: var(--arc-width);
252
+ mask:
253
+ linear-gradient(#000 0 0) content-box,
254
+ linear-gradient(#000 0 0);
255
+ -webkit-mask-composite: xor;
256
+ mask-composite: exclude;
257
+
258
+ &::before {
259
+ content: '';
260
+ @apply absolute inset-0 rounded-[inherit];
261
+ background: var(--arc-gradient);
262
+ background-size: 300% 300%;
263
+ animation: gradient-stroke var(--arc-duration) linear infinite;
264
+ }
265
+ }
266
+
267
+ @layer base {
268
+ * {
269
+ @apply antialiased;
270
+
271
+ text-box-trim: trim-both;
272
+ scrollbar-width: thin;
273
+ scrollbar-color: transparent transparent;
274
+
275
+ &:hover {
276
+ scrollbar-color: color-mix(in srgb, var(--midground) 20%, transparent)
277
+ transparent;
278
+ }
279
+ }
280
+
281
+ ::-webkit-scrollbar {
282
+ width: 0.25rem;
283
+ height: 0.25rem;
284
+ }
285
+
286
+ ::-webkit-scrollbar-track,
287
+ ::-webkit-scrollbar-button {
288
+ display: none;
289
+ }
290
+
291
+ ::-webkit-scrollbar-thumb {
292
+ background: transparent;
293
+ border-radius: 1rem;
294
+ min-height: 1rem;
295
+ }
296
+
297
+ *:hover::-webkit-scrollbar-thumb {
298
+ background: color-mix(in srgb, var(--midground) 20%, transparent);
299
+ }
300
+
301
+ html,
302
+ body {
303
+ scrollbar-color: color-mix(in srgb, var(--midground) 65%, transparent)
304
+ transparent;
305
+ }
306
+
307
+ html:hover,
308
+ body:hover {
309
+ scrollbar-color: color-mix(in srgb, var(--midground) 80%, transparent)
310
+ transparent;
311
+ }
312
+
313
+ html::-webkit-scrollbar-thumb,
314
+ body::-webkit-scrollbar-thumb {
315
+ background: color-mix(in srgb, var(--midground) 65%, transparent);
316
+ }
317
+
318
+ html:hover::-webkit-scrollbar-thumb,
319
+ body:hover::-webkit-scrollbar-thumb {
320
+ background: color-mix(in srgb, var(--midground) 80%, transparent);
321
+ }
322
+
323
+ html {
324
+ font-size: clamp(10px, var(--vsq) * 5, 14px);
325
+ }
326
+
327
+ body {
328
+ @apply bg-background text-foreground;
329
+ }
330
+
331
+ .underline {
332
+ @apply underline-from-font uppercase underline decoration-current/25 decoration-solid decoration-auto underline-offset-1 transition-[text-decoration-color] hover:decoration-current;
333
+ }
334
+
335
+ *::selection,
336
+ code {
337
+ background: var(--selection-bg, var(--midground));
338
+ @apply text-background;
339
+ }
340
+ }
@@ -0,0 +1 @@
1
+ export declare function Header(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Link } from 'next-view-transitions';
4
+ import { useRef } from 'react';
5
+ import { useCssVarDims } from '../hooks/use-css-var-dims';
6
+ import { Blink } from './components/blink';
7
+ import { Cell, Grid } from './components/grid';
8
+ import { HoverBg } from './components/hover-bg';
9
+ import { H2 } from './components/typography/h2';
10
+ import { Small } from './components/typography/small';
11
+ const NAV = [
12
+ { href: '/projects', label: 'Projects' },
13
+ { href: '/participants', label: 'Participants' },
14
+ { href: '/provenance', label: 'Provenance' },
15
+ { href: '/contribute', label: 'Contribute' }
16
+ ];
17
+ export function Header() {
18
+ const ref = useRef(null);
19
+ useCssVarDims('header', ref);
20
+ return (_jsxs(Grid, { as: "header", ref, children: [_jsx(Cell, { as: Link, href: "/", children: _jsxs("hgroup", { className: "flex flex-col gap-2", children: [_jsx(Small, { children: "Nous" }), _jsx(H2, { children: "Psyche" })] }) }), NAV.map(({ href, label }) => (_jsxs(Cell, { as: Link, className: "group relative", href: '/runs', children: [_jsxs(Small, { children: [label, _jsx(Blink, {})] }), _jsx(HoverBg, {})] }, href)))] }));
21
+ }
22
+ //# sourceMappingURL=header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/ui/header.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,EAAE,EAAE,MAAM,4BAA4B,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAA;AAErD,MAAM,GAAG,GAAG;IACV,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE;IACxC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE;IAChD,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE;IAC5C,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE;CAC7C,CAAA;AAED,MAAM,UAAU,MAAM;IACpB,MAAM,GAAG,GAAG,MAAM,CAAc,IAAI,CAAC,CAAA;IACrC,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IAE5B,OAAO,CACL,MAAC,IAAI,IAAC,EAAE,EAAC,QAAQ,EAAO,GAAG,aACzB,KAAC,IAAI,IAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAC,GAAG,YACtB,kBAAQ,SAAS,EAAC,qBAAqB,aACrC,KAAC,KAAK,uBAAa,EACnB,KAAC,EAAE,yBAAY,IACR,GACJ,EAEN,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAC5B,MAAC,IAAI,IACH,EAAE,EAAE,IAAI,EACR,SAAS,EAAC,gBAAgB,EAEpB,IAAI,EAAE,OAAO,aAEnB,MAAC,KAAK,eACH,KAAK,EACN,KAAC,KAAK,KAAG,IACH,EAER,KAAC,OAAO,KAAG,KARN,IAAI,CASJ,CACR,CAAC,IACG,CACR,CAAA;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function LayoutWrapper({ children }: Readonly<React.PropsWithChildren>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function LayoutWrapper({ children }) {
3
+ return (_jsx("html", { lang: "en", children: _jsx("body", { className: "text-midground font-mondwest bg-black uppercase antialiased", children: children }) }));
4
+ }
5
+ //# sourceMappingURL=layout-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-wrapper.js","sourceRoot":"","sources":["../../src/ui/layout-wrapper.tsx"],"names":[],"mappings":";AAAA,MAAM,UAAU,aAAa,CAAC,EAC5B,QAAQ,EAC0B;IAClC,OAAO,CACL,eAAM,IAAI,EAAC,IAAI,YACb,eAAM,SAAS,EAAC,6DAA6D,YAC1E,QAAQ,GACJ,GACF,CACR,CAAA;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const hexToRgb: (hex: string) => number[];
2
+ export declare const rgbToHex: (r: number, g: number, b: number) => string;
3
+ export declare const colorDodge: (base: string, blend: string) => string;
4
+ export declare const colorMix: (color: string, alpha: number) => string;
@@ -0,0 +1,14 @@
1
+ export const hexToRgb = (hex) => [
2
+ parseInt(hex.slice(1, 3), 16),
3
+ parseInt(hex.slice(3, 5), 16),
4
+ parseInt(hex.slice(5, 7), 16)
5
+ ];
6
+ export const rgbToHex = (r, g, b) => `#${[r, g, b].map(v => v.toString(16).padStart(2, '0')).join('')}`;
7
+ export const colorDodge = (base, blend) => {
8
+ const [br, bg, bb] = hexToRgb(base);
9
+ const [lr, lg, lb] = hexToRgb(blend);
10
+ const d = (b, l) => l === 255 ? 255 : Math.min(255, Math.floor((b * 255) / (255 - l)));
11
+ return rgbToHex(d(br, lr), d(bg, lg), d(bb, lb));
12
+ };
13
+ export const colorMix = (color, alpha) => `color-mix(in srgb, ${color} ${Math.round(alpha * 100)}%, transparent)`;
14
+ //# sourceMappingURL=color.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/utils/color.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC;IACvC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IAC7B,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IAC7B,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;CAC9B,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,EAAE,CAC1D,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA;AAEpE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE;IACxD,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IACnC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEpC,MAAM,CAAC,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CACjC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAEpE,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;AAClD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE,CACvD,sBAAsB,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,iBAAiB,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { type ClassValue } from 'clsx';
2
+ import * as THREE from 'three';
3
+ import { hexToRgb, rgbToHex } from './color';
4
+ import { polyRef } from './poly';
5
+ import type { PolyComponent, PolyProps, PolyRef } from './poly';
6
+ export { hexToRgb, polyRef, rgbToHex };
7
+ export type { PolyComponent, PolyProps, PolyRef };
8
+ export declare const cn: (...inputs: ClassValue[]) => string;
9
+ export declare const clamp: (v: number, min?: number, max?: number) => number;
10
+ export declare const smoothstep: (edge0: number, edge1: number, x: number) => number;
11
+ export declare const hexToVec3: (hex: string) => THREE.Vector3;
12
+ export declare const truncate: (text: string, options: {
13
+ length: number;
14
+ }) => string;
15
+ export declare const stripWpStyles: (html: string) => string;
@@ -0,0 +1,48 @@
1
+ import { clsx } from 'clsx';
2
+ import sanitize from 'sanitize-html';
3
+ import { twMerge } from 'tailwind-merge';
4
+ import * as THREE from 'three';
5
+ import { hexToRgb, rgbToHex } from './color';
6
+ import { polyRef } from './poly';
7
+ export { hexToRgb, polyRef, rgbToHex };
8
+ export const cn = (...inputs) => twMerge(clsx(inputs));
9
+ export const clamp = (v, min = 0, max = 1) => Math.min(max, Math.max(min, Number.isFinite(v) ? v : min));
10
+ export const smoothstep = (edge0, edge1, x) => {
11
+ const t = clamp((x - edge0) / (edge1 - edge0));
12
+ return t * t * (3 - 2 * t);
13
+ };
14
+ export const hexToVec3 = (hex) => {
15
+ const [r, g, b] = hexToRgb(hex);
16
+ return new THREE.Vector3(r / 255, g / 255, b / 255);
17
+ };
18
+ export const truncate = (text, options) => text.length > options.length ? `${text.slice(0, options.length)}...` : text;
19
+ export const stripWpStyles = (html) => sanitize(html, {
20
+ allowedAttributes: {
21
+ a: ['href', 'target', 'rel', 'name'],
22
+ audio: ['src', 'controls'],
23
+ iframe: ['src', 'width', 'height', 'frameborder', 'allowfullscreen'],
24
+ img: ['src', 'alt', 'width', 'height', 'loading'],
25
+ source: ['src', 'type', 'srcset'],
26
+ td: ['colspan', 'rowspan'],
27
+ th: ['colspan', 'rowspan'],
28
+ video: ['src', 'controls', 'width', 'height', 'poster']
29
+ },
30
+ allowedIframeHostnames: [
31
+ 'www.youtube.com',
32
+ 'youtube.com',
33
+ 'player.vimeo.com'
34
+ ],
35
+ allowedSchemes: ['http', 'https', 'mailto'],
36
+ allowedTags: [
37
+ ...sanitize.defaults.allowedTags,
38
+ 'img',
39
+ 'figure',
40
+ 'figcaption',
41
+ 'iframe',
42
+ 'video',
43
+ 'audio',
44
+ 'source',
45
+ 'picture'
46
+ ]
47
+ });
48
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type PolyProps<T extends React.ElementType, Own extends object = object> = {
2
+ as?: T;
3
+ } & Own & Omit<React.ComponentPropsWithoutRef<T>, 'as' | keyof Own>;
4
+ export type PolyRef<T extends React.ElementType> = React.ComponentPropsWithRef<T>['ref'];
5
+ export type PolyComponent<D extends React.ElementType, Own extends object = object> = <T extends React.ElementType = D>(props: PolyProps<T, Own> & {
6
+ ref?: PolyRef<T>;
7
+ }) => null | React.ReactElement;
8
+ export declare const polyRef: <D extends React.ElementType, Own extends object = object>(render: <T extends React.ElementType = D>(props: PolyProps<T, Own>, ref: PolyRef<T>) => null | React.ReactElement) => PolyComponent<D, Own>;
@@ -0,0 +1,3 @@
1
+ import { forwardRef } from 'react';
2
+ export const polyRef = forwardRef;
3
+ //# sourceMappingURL=poly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poly.js","sourceRoot":"","sources":["../../src/utils/poly.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAiBlC,MAAM,CAAC,MAAM,OAAO,GAAG,UAQG,CAAA"}
package/package.json ADDED
@@ -0,0 +1,95 @@
1
+ {
2
+ "name": "@nous-research/ui",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "license": "MIT",
6
+ "sideEffects": [
7
+ "**/*.css"
8
+ ],
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "main": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/index.d.ts",
17
+ "import": "./dist/index.js"
18
+ },
19
+ "./ui/*": {
20
+ "types": "./dist/ui/*.d.ts",
21
+ "import": "./dist/ui/*.js"
22
+ },
23
+ "./utils": {
24
+ "types": "./dist/utils/index.d.ts",
25
+ "import": "./dist/utils/index.js"
26
+ },
27
+ "./utils/*": {
28
+ "types": "./dist/utils/*.d.ts",
29
+ "import": "./dist/utils/*.js"
30
+ },
31
+ "./hooks/*": {
32
+ "types": "./dist/hooks/*.d.ts",
33
+ "import": "./dist/hooks/*.js"
34
+ },
35
+ "./assets/*": "./dist/assets/*",
36
+ "./styles/*": "./dist/ui/*.css",
37
+ "./styles/globals.css": "./dist/ui/globals.css",
38
+ "./styles/fonts.css": "./dist/ui/fonts.css"
39
+ },
40
+ "dependencies": {
41
+ "sanitize-html": "^2.16.0"
42
+ },
43
+ "devDependencies": {
44
+ "@tailwindcss/postcss": "^4",
45
+ "@types/react": "^19.2.3",
46
+ "@types/react-dom": "^19.2.3",
47
+ "@types/sanitize-html": "^2.16.0",
48
+ "@types/three": "^0.183.1",
49
+ "next": "^16",
50
+ "tailwindcss": "^4",
51
+ "tsc-alias": "^1.8.16",
52
+ "tw-animate-css": "^1.4.0",
53
+ "typescript": "^5"
54
+ },
55
+ "peerDependencies": {
56
+ "@nanostores/react": "^1.0.0",
57
+ "@observablehq/plot": "^0.6.17",
58
+ "@react-three/fiber": "^9.4.0",
59
+ "class-variance-authority": "^0.7.1",
60
+ "clsx": "^2.1.1",
61
+ "gsap": "^3.13.0",
62
+ "leva": "^0.10.1",
63
+ "nanostores": "^1.0.1",
64
+ "next-view-transitions": "^0.3.5",
65
+ "react": "^19.0.0",
66
+ "react-dom": "^19.0.0",
67
+ "tailwind-merge": "^3.3.1",
68
+ "three": "^0.180.0"
69
+ },
70
+ "peerDependenciesMeta": {
71
+ "three": {
72
+ "optional": true
73
+ },
74
+ "@react-three/fiber": {
75
+ "optional": true
76
+ },
77
+ "@observablehq/plot": {
78
+ "optional": true
79
+ },
80
+ "leva": {
81
+ "optional": true
82
+ },
83
+ "gsap": {
84
+ "optional": true
85
+ },
86
+ "next-view-transitions": {
87
+ "optional": true
88
+ }
89
+ },
90
+ "scripts": {
91
+ "dev": "cp -r src/fonts public/fonts && next dev",
92
+ "build": "rm -rf dist && tsc -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && cp -r src/assets dist/assets && cp -r src/fonts dist/fonts && find src -name '*.css' | while read f; do d=dist/${f#src/}; mkdir -p $(dirname $d); cp $f $d; done",
93
+ "build:server": "next build"
94
+ }
95
+ }