@nous-research/ui 0.2.7 → 0.4.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 (200) hide show
  1. package/README.md +42 -3
  2. package/dist/fonts.d.ts +1 -0
  3. package/dist/fonts.d.ts.map +1 -0
  4. package/dist/fonts.js.map +1 -1
  5. package/dist/hooks/use-capped-frame.d.ts +1 -0
  6. package/dist/hooks/use-capped-frame.d.ts.map +1 -0
  7. package/dist/hooks/use-capped-frame.js.map +1 -1
  8. package/dist/hooks/use-css-var-dims.d.ts +1 -0
  9. package/dist/hooks/use-css-var-dims.d.ts.map +1 -0
  10. package/dist/hooks/use-css-var-dims.js.map +1 -1
  11. package/dist/hooks/use-gpu-tier.d.ts +1 -0
  12. package/dist/hooks/use-gpu-tier.d.ts.map +1 -0
  13. package/dist/hooks/use-gpu-tier.js.map +1 -1
  14. package/dist/hooks/use-smooth-controls.d.ts +1 -0
  15. package/dist/hooks/use-smooth-controls.d.ts.map +1 -0
  16. package/dist/hooks/use-smooth-controls.js.map +1 -1
  17. package/dist/index.d.ts +7 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +5 -6
  20. package/dist/index.js.map +1 -1
  21. package/dist/ui/basic-page.d.ts +1 -0
  22. package/dist/ui/basic-page.d.ts.map +1 -0
  23. package/dist/ui/basic-page.js.map +1 -1
  24. package/dist/ui/components/animated-count.d.ts +1 -0
  25. package/dist/ui/components/animated-count.d.ts.map +1 -0
  26. package/dist/ui/components/animated-count.js.map +1 -1
  27. package/dist/ui/components/ascii.d.ts +1 -0
  28. package/dist/ui/components/ascii.d.ts.map +1 -0
  29. package/dist/ui/components/ascii.js.map +1 -1
  30. package/dist/ui/components/badge.d.ts +1 -0
  31. package/dist/ui/components/badge.d.ts.map +1 -0
  32. package/dist/ui/components/badge.js.map +1 -1
  33. package/dist/ui/components/badges/nous-girl.d.ts +1 -0
  34. package/dist/ui/components/badges/nous-girl.d.ts.map +1 -0
  35. package/dist/ui/components/badges/nous-girl.js.map +1 -1
  36. package/dist/ui/components/blend-mode.d.ts +1 -0
  37. package/dist/ui/components/blend-mode.d.ts.map +1 -0
  38. package/dist/ui/components/blend-mode.js.map +1 -1
  39. package/dist/ui/components/blink.d.ts +1 -0
  40. package/dist/ui/components/blink.d.ts.map +1 -0
  41. package/dist/ui/components/blink.js.map +1 -1
  42. package/dist/ui/components/button.d.ts +1 -0
  43. package/dist/ui/components/button.d.ts.map +1 -0
  44. package/dist/ui/components/button.js.map +1 -1
  45. package/dist/ui/components/command-block.d.ts +25 -0
  46. package/dist/ui/components/command-block.d.ts.map +1 -0
  47. package/dist/ui/components/command-block.js +27 -0
  48. package/dist/ui/components/command-block.js.map +1 -0
  49. package/dist/ui/components/cursor.d.ts +1 -0
  50. package/dist/ui/components/cursor.d.ts.map +1 -0
  51. package/dist/ui/components/cursor.js.map +1 -1
  52. package/dist/ui/components/dropdown-menu.d.ts +1 -0
  53. package/dist/ui/components/dropdown-menu.d.ts.map +1 -0
  54. package/dist/ui/components/dropdown-menu.js.map +1 -1
  55. package/dist/ui/components/fit-text/index.d.ts +1 -0
  56. package/dist/ui/components/fit-text/index.d.ts.map +1 -0
  57. package/dist/ui/components/fit-text/index.js.map +1 -1
  58. package/dist/ui/components/graphs/bar-chart.d.ts +1 -0
  59. package/dist/ui/components/graphs/bar-chart.d.ts.map +1 -0
  60. package/dist/ui/components/graphs/bar-chart.js.map +1 -1
  61. package/dist/ui/components/graphs/index.d.ts +1 -0
  62. package/dist/ui/components/graphs/index.d.ts.map +1 -0
  63. package/dist/ui/components/graphs/index.js.map +1 -1
  64. package/dist/ui/components/graphs/line-chart.d.ts +1 -0
  65. package/dist/ui/components/graphs/line-chart.d.ts.map +1 -0
  66. package/dist/ui/components/graphs/line-chart.js.map +1 -1
  67. package/dist/ui/components/graphs/utils.d.ts +1 -0
  68. package/dist/ui/components/graphs/utils.d.ts.map +1 -0
  69. package/dist/ui/components/graphs/utils.js.map +1 -1
  70. package/dist/ui/components/grid/index.d.ts +1 -0
  71. package/dist/ui/components/grid/index.d.ts.map +1 -0
  72. package/dist/ui/components/grid/index.js.map +1 -1
  73. package/dist/ui/components/hover-bg.d.ts +1 -0
  74. package/dist/ui/components/hover-bg.d.ts.map +1 -0
  75. package/dist/ui/components/hover-bg.js.map +1 -1
  76. package/dist/ui/components/icons/arrow.d.ts +1 -0
  77. package/dist/ui/components/icons/arrow.d.ts.map +1 -0
  78. package/dist/ui/components/icons/arrow.js.map +1 -1
  79. package/dist/ui/components/icons/chevron.d.ts +1 -0
  80. package/dist/ui/components/icons/chevron.d.ts.map +1 -0
  81. package/dist/ui/components/icons/chevron.js.map +1 -1
  82. package/dist/ui/components/icons/eye.d.ts +1 -0
  83. package/dist/ui/components/icons/eye.d.ts.map +1 -0
  84. package/dist/ui/components/icons/eye.js.map +1 -1
  85. package/dist/ui/components/icons/gear.d.ts +1 -0
  86. package/dist/ui/components/icons/gear.d.ts.map +1 -0
  87. package/dist/ui/components/icons/gear.js.map +1 -1
  88. package/dist/ui/components/icons/hamburger.d.ts +7 -0
  89. package/dist/ui/components/icons/hamburger.d.ts.map +1 -0
  90. package/dist/ui/components/icons/hamburger.js +6 -0
  91. package/dist/ui/components/icons/hamburger.js.map +1 -0
  92. package/dist/ui/components/icons/heart.d.ts +1 -0
  93. package/dist/ui/components/icons/heart.d.ts.map +1 -0
  94. package/dist/ui/components/icons/heart.js.map +1 -1
  95. package/dist/ui/components/icons/index.d.ts +2 -0
  96. package/dist/ui/components/icons/index.d.ts.map +1 -0
  97. package/dist/ui/components/icons/index.js +1 -0
  98. package/dist/ui/components/icons/index.js.map +1 -1
  99. package/dist/ui/components/icons/link.d.ts +1 -0
  100. package/dist/ui/components/icons/link.d.ts.map +1 -0
  101. package/dist/ui/components/icons/link.js.map +1 -1
  102. package/dist/ui/components/icons/minus.d.ts +1 -0
  103. package/dist/ui/components/icons/minus.d.ts.map +1 -0
  104. package/dist/ui/components/icons/minus.js.map +1 -1
  105. package/dist/ui/components/icons/search.d.ts +1 -0
  106. package/dist/ui/components/icons/search.d.ts.map +1 -0
  107. package/dist/ui/components/icons/search.js.map +1 -1
  108. package/dist/ui/components/image-distortion.d.ts +15 -0
  109. package/dist/ui/components/image-distortion.d.ts.map +1 -0
  110. package/dist/ui/components/image-distortion.js +278 -0
  111. package/dist/ui/components/image-distortion.js.map +1 -0
  112. package/dist/ui/components/leva-client.d.ts +1 -0
  113. package/dist/ui/components/leva-client.d.ts.map +1 -0
  114. package/dist/ui/components/leva-client.js.map +1 -1
  115. package/dist/ui/components/modal/index.d.ts +1 -0
  116. package/dist/ui/components/modal/index.d.ts.map +1 -0
  117. package/dist/ui/components/modal/index.js.map +1 -1
  118. package/dist/ui/components/overlays/glitch.d.ts +1 -0
  119. package/dist/ui/components/overlays/glitch.d.ts.map +1 -0
  120. package/dist/ui/components/overlays/glitch.js.map +1 -1
  121. package/dist/ui/components/overlays/greys.d.ts +1 -0
  122. package/dist/ui/components/overlays/greys.d.ts.map +1 -0
  123. package/dist/ui/components/overlays/greys.js.map +1 -1
  124. package/dist/ui/components/overlays/index.d.ts +1 -0
  125. package/dist/ui/components/overlays/index.d.ts.map +1 -0
  126. package/dist/ui/components/overlays/index.js.map +1 -1
  127. package/dist/ui/components/overlays/noise.d.ts +1 -0
  128. package/dist/ui/components/overlays/noise.d.ts.map +1 -0
  129. package/dist/ui/components/overlays/noise.js.map +1 -1
  130. package/dist/ui/components/overlays/vignette.d.ts +1 -0
  131. package/dist/ui/components/overlays/vignette.d.ts.map +1 -0
  132. package/dist/ui/components/overlays/vignette.js.map +1 -1
  133. package/dist/ui/components/progress.d.ts +1 -0
  134. package/dist/ui/components/progress.d.ts.map +1 -0
  135. package/dist/ui/components/progress.js.map +1 -1
  136. package/dist/ui/components/scene-canvas.d.ts +1 -0
  137. package/dist/ui/components/scene-canvas.d.ts.map +1 -0
  138. package/dist/ui/components/scene-canvas.js.map +1 -1
  139. package/dist/ui/components/scramble.d.ts +1 -0
  140. package/dist/ui/components/scramble.d.ts.map +1 -0
  141. package/dist/ui/components/scramble.js.map +1 -1
  142. package/dist/ui/components/selection-switcher.d.ts +1 -0
  143. package/dist/ui/components/selection-switcher.d.ts.map +1 -0
  144. package/dist/ui/components/selection-switcher.js.map +1 -1
  145. package/dist/ui/components/shader.d.ts +1 -0
  146. package/dist/ui/components/shader.d.ts.map +1 -0
  147. package/dist/ui/components/shader.js.map +1 -1
  148. package/dist/ui/components/stats.d.ts +1 -0
  149. package/dist/ui/components/stats.d.ts.map +1 -0
  150. package/dist/ui/components/stats.js.map +1 -1
  151. package/dist/ui/components/terminal-demo.d.ts +33 -0
  152. package/dist/ui/components/terminal-demo.d.ts.map +1 -0
  153. package/dist/ui/components/terminal-demo.js +79 -0
  154. package/dist/ui/components/terminal-demo.js.map +1 -0
  155. package/dist/ui/components/theme-toggle.d.ts +7 -0
  156. package/dist/ui/components/theme-toggle.d.ts.map +1 -0
  157. package/dist/ui/components/theme-toggle.js +10 -0
  158. package/dist/ui/components/theme-toggle.js.map +1 -0
  159. package/dist/ui/components/tv.d.ts +1 -0
  160. package/dist/ui/components/tv.d.ts.map +1 -0
  161. package/dist/ui/components/tv.js.map +1 -1
  162. package/dist/ui/components/typography/h1.d.ts +1 -0
  163. package/dist/ui/components/typography/h1.d.ts.map +1 -0
  164. package/dist/ui/components/typography/h1.js.map +1 -1
  165. package/dist/ui/components/typography/h2.d.ts +1 -0
  166. package/dist/ui/components/typography/h2.d.ts.map +1 -0
  167. package/dist/ui/components/typography/h2.js.map +1 -1
  168. package/dist/ui/components/typography/index.d.ts +1 -0
  169. package/dist/ui/components/typography/index.d.ts.map +1 -0
  170. package/dist/ui/components/typography/index.js.map +1 -1
  171. package/dist/ui/components/typography/legend.d.ts +1 -0
  172. package/dist/ui/components/typography/legend.d.ts.map +1 -0
  173. package/dist/ui/components/typography/legend.js.map +1 -1
  174. package/dist/ui/components/typography/small.d.ts +1 -0
  175. package/dist/ui/components/typography/small.d.ts.map +1 -0
  176. package/dist/ui/components/typography/small.js.map +1 -1
  177. package/dist/ui/components/watchlist.d.ts +1 -0
  178. package/dist/ui/components/watchlist.d.ts.map +1 -0
  179. package/dist/ui/components/watchlist.js.map +1 -1
  180. package/dist/ui/footer.d.ts +6 -1
  181. package/dist/ui/footer.d.ts.map +1 -0
  182. package/dist/ui/footer.js +2 -3
  183. package/dist/ui/footer.js.map +1 -1
  184. package/dist/ui/header.d.ts +6 -1
  185. package/dist/ui/header.d.ts.map +1 -0
  186. package/dist/ui/header.js +2 -3
  187. package/dist/ui/header.js.map +1 -1
  188. package/dist/ui/layout-wrapper.d.ts +1 -0
  189. package/dist/ui/layout-wrapper.d.ts.map +1 -0
  190. package/dist/ui/layout-wrapper.js.map +1 -1
  191. package/dist/utils/color.d.ts +1 -0
  192. package/dist/utils/color.d.ts.map +1 -0
  193. package/dist/utils/color.js.map +1 -1
  194. package/dist/utils/index.d.ts +1 -0
  195. package/dist/utils/index.d.ts.map +1 -0
  196. package/dist/utils/index.js.map +1 -1
  197. package/dist/utils/poly.d.ts +1 -0
  198. package/dist/utils/poly.d.ts.map +1 -0
  199. package/dist/utils/poly.js.map +1 -1
  200. package/package.json +17 -10
@@ -7,3 +7,4 @@ interface ProgressProps extends React.ComponentProps<'div'> {
7
7
  value: number;
8
8
  }
9
9
  export {};
10
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../../src/ui/components/progress.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,cAAc,CAAA;AAE/D,eAAO,MAAM,QAAQ,GAAI,oEAQtB,aAAa,4CAoCf,CAAA;AAED,UAAU,aAAc,SAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;IACzD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd"}
@@ -1 +1 @@
1
- {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../src/ui/components/progress.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAE,UAAU,EAAwB,MAAM,cAAc,CAAA;AAE/D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EACvB,OAAO,GAAG,IAAI,EACd,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,KAAK,GAAG,GAAG,EACX,KAAK,EACL,GAAG,KAAK,EACM,EAAE,EAAE,CAAC,CACnB,eACE,SAAS,EAAE,EAAE,CACX,2EAA2E,EAC3E,SAAS,CACV,KACG,KAAK,aAET,KAAC,UAAU,OACL,QAAQ,EACZ,SAAS,EAAE,EAAE,CACX,wCAAwC,EACxC,iBAAiB,EACjB,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAC1B,QAAQ,EAAE,SAAS,CACpB,EACD,IAAI,QACJ,KAAK,EAAE;gBACL,GAAG,CAAC,OAAO,IAAI,EAAE,UAAU,EAAE,SAAS,KAAK,kBAAkB,EAAE,CAAC;gBAChE,KAAK,EAAE,GAAG,KAAK,GAAG;gBAClB,GAAG,QAAQ,EAAE,KAAK;aACnB,YAEA,QAAQ,GACE,EAEb,cACE,SAAS,EAAC,QAAQ,EAClB,KAAK,EACH;gBACE,KAAK,EAAE,OAAO;gBACd,eAAe,EAAE,wJAAwJ;aACnJ,GAE1B,IACE,CACP,CAAA"}
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../../src/ui/components/progress.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAE,UAAU,EAAwB,MAAM,cAAc,CAAA;AAE/D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EACvB,OAAO,GAAG,IAAI,EACd,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,KAAK,GAAG,GAAG,EACX,KAAK,EACL,GAAG,KAAK,EACM,EAAE,EAAE,CAAC,CACnB,eACE,SAAS,EAAE,EAAE,CACX,2EAA2E,EAC3E,SAAS,CACV,KACG,KAAK,aAET,KAAC,UAAU,OACL,QAAQ,EACZ,SAAS,EAAE,EAAE,CACX,wCAAwC,EACxC,iBAAiB,EACjB,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAC1B,QAAQ,EAAE,SAAS,CACpB,EACD,IAAI,QACJ,KAAK,EAAE;gBACL,GAAG,CAAC,OAAO,IAAI,EAAE,UAAU,EAAE,SAAS,KAAK,kBAAkB,EAAE,CAAC;gBAChE,KAAK,EAAE,GAAG,KAAK,GAAG;gBAClB,GAAG,QAAQ,EAAE,KAAK;aACnB,YAEA,QAAQ,GACE,EAEb,cACE,SAAS,EAAC,QAAQ,EAClB,KAAK,EACH;gBACE,KAAK,EAAE,OAAO;gBACd,eAAe,EAAE,wJAAwJ;aACnJ,GAE1B,IACE,CACP,CAAA","sourcesContent":["import { cn } from '../../utils'\n\nimport { Typography, type TypographyProps } from './typography'\n\nexport const Progress = ({\n animate = true,\n barProps,\n children,\n className,\n speed = 0.4,\n value,\n ...props\n}: ProgressProps) => (\n <div\n className={cn(\n 'relative flex min-h-[2.3rem] min-w-0 flex-1 items-stretch overflow-hidden',\n className\n )}\n {...props}\n >\n <Typography\n {...barProps}\n className={cn(\n 'shrink-0 translate-y-0.5 truncate py-2',\n 'bg-midground/20',\n children ? 'px-2' : 'px-0',\n barProps?.className\n )}\n mono\n style={{\n ...(animate && { transition: `width ${speed}s steps(10, end)` }),\n width: `${value}%`,\n ...barProps?.style\n }}\n >\n {children}\n </Typography>\n\n <div\n className=\"flex-1\"\n style={\n {\n '--x': '.5rem',\n backgroundImage: `repeating-linear-gradient(to right, transparent 0 var(--x), color-mix(in srgb, var(--color-midground) 17%, transparent) var(--x) calc(var(--x) + 1px))`\n } as React.CSSProperties\n }\n />\n </div>\n)\n\ninterface ProgressProps extends React.ComponentProps<'div'> {\n animate?: boolean\n barProps?: TypographyProps<'span'>\n speed?: number\n value: number\n}\n"]}
@@ -13,3 +13,4 @@ interface SceneCanvasProps {
13
13
  style?: React.CSSProperties;
14
14
  }
15
15
  export {};
16
+ //# sourceMappingURL=scene-canvas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene-canvas.d.ts","sourceRoot":"","sources":["../../../src/ui/components/scene-canvas.tsx"],"names":[],"mappings":"AAqHA,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,QAAQ,EACR,SAAS,EACT,SAAS,EACT,QAAQ,EACR,KAAK,EACN,EAAE,gBAAgB,2CAwFlB;AAED,UAAU,gBAAgB;IACxB,MAAM,CAAC,EAAE;QACP,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;QACnC,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,QAAQ,EAAE,MAAM,KAAK,CAAC,SAAS,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;CAC5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"scene-canvas.js","sourceRoot":"","sources":["../../../src/ui/components/scene-canvas.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scene-canvas.js","sourceRoot":"","sources":["../../../src/ui/components/scene-canvas.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client'\n\nimport { Canvas, useFrame, useThree } from '@react-three/fiber'\nimport {\n Suspense,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState\n} from 'react'\nimport * as THREE from 'three'\n\nconst GL = {\n alpha: true,\n antialias: true,\n depth: true,\n outputColorSpace: 'srgb',\n powerPreference: 'high-performance',\n stencil: false\n} as const\n\nconst tmp = {\n camDir: new THREE.Vector3(),\n hit: new THREE.Vector3(),\n ndc: new THREE.Vector2(),\n origin: new THREE.Vector3(0, 0, 0),\n plane: new THREE.Plane(),\n ray: new THREE.Raycaster()\n}\n\ntype Bounds = { height: number; pageX: number; pageY: number; width: number }\n\nfunction useBounds(target: HTMLElement | null) {\n const bounds = useRef<Bounds | null>(null)\n\n useLayoutEffect(() => {\n if (!target) {\n return\n }\n\n const measure = () => {\n const b = target.getBoundingClientRect()\n bounds.current = {\n height: b.height,\n pageX: b.left + window.scrollX,\n pageY: b.top + window.scrollY,\n width: b.width\n }\n }\n\n measure()\n\n const ro = new ResizeObserver(measure)\n ro.observe(target)\n ro.observe(document.body)\n window.addEventListener('resize', measure, { passive: true })\n\n return () => {\n ro.disconnect()\n window.removeEventListener('resize', measure)\n }\n }, [target])\n\n return bounds\n}\n\nfunction PositionedGroup({\n baseZoom,\n bounds,\n children\n}: React.PropsWithChildren<{\n baseZoom: number\n bounds: React.RefObject<Bounds | null>\n}>) {\n const ref = useRef<THREE.Group>(null)\n const { camera, size, viewport } = useThree()\n\n useFrame(() => {\n const g = ref.current\n const b = bounds.current\n\n if (!g || !b) {\n return\n }\n\n const left = b.pageX - window.scrollX\n const top = b.pageY - window.scrollY\n\n tmp.ndc.set(\n ((left + b.width / 2) / size.width) * 2 - 1,\n 1 - ((top + b.height / 2) / size.height) * 2\n )\n\n camera.getWorldDirection(tmp.camDir)\n tmp.plane.setFromNormalAndCoplanarPoint(tmp.camDir, tmp.origin)\n tmp.ray.setFromCamera(tmp.ndc, camera)\n\n const hit = tmp.ray.ray.intersectPlane(tmp.plane, tmp.hit)\n\n if (hit) {\n g.position.copy(hit)\n }\n\n const zoom = (camera as THREE.Camera & { zoom?: number }).zoom ?? 1\n\n g.scale.setScalar(\n Math.min(\n (b.width / size.width) * viewport.width,\n (b.height / size.height) * viewport.height\n ) * (baseZoom > 0 ? zoom / baseZoom : 1)\n )\n })\n\n return <group ref={ref}>{children}</group>\n}\n\nexport function SceneCanvas({\n camera,\n children,\n className,\n contained,\n noEvents,\n style\n}: SceneCanvasProps) {\n const [container, setContainer] = useState<HTMLDivElement | null>(null)\n const baseZoom = camera?.zoom ?? 150\n\n const bounds = useBounds(\n contained ? (container?.parentElement ?? null) : null\n )\n\n useEffect(() => {\n const el = contained && !noEvents ? container : null\n\n if (!el) {\n return\n }\n\n const lock = () => (document.body.style.userSelect = 'none')\n const unlock = () => (document.body.style.userSelect = '')\n\n el.addEventListener('pointerdown', lock)\n window.addEventListener('pointerup', unlock)\n\n return () => {\n el.removeEventListener('pointerdown', lock)\n window.removeEventListener('pointerup', unlock)\n }\n }, [container, contained, noEvents])\n\n const cam = useMemo(\n () => ({\n far: camera?.far ?? 100,\n near: camera?.near ?? -100,\n position: camera?.position ?? ([0, 0, 10] as [number, number, number]),\n zoom: baseZoom * (contained ? 1 : 2)\n }),\n [baseZoom, camera, contained]\n )\n\n const canvas = (\n <Canvas\n camera={cam}\n className={className}\n dpr={[1, 2]}\n eventPrefix={contained ? 'client' : 'offset'}\n eventSource={contained ? (container ?? undefined) : undefined}\n gl={GL}\n orthographic\n style={\n contained\n ? {\n height: '100dvh',\n inset: 0,\n pointerEvents: 'none',\n position: 'fixed',\n width: '100dvw',\n zIndex: 0,\n ...style\n }\n : { height: '100%', width: '100%', ...style }\n }\n >\n {contained ? (\n <PositionedGroup baseZoom={baseZoom} bounds={bounds}>\n {children()}\n </PositionedGroup>\n ) : (\n children()\n )}\n </Canvas>\n )\n\n return contained ? (\n <Suspense>\n <div\n ref={setContainer}\n style={{\n height: '100%',\n inset: 0,\n pointerEvents: noEvents ? 'none' : 'auto',\n position: 'absolute',\n width: '100%',\n zIndex: 1\n }}\n />\n {canvas}\n </Suspense>\n ) : (\n canvas\n )\n}\n\ninterface SceneCanvasProps {\n camera?: {\n far?: number\n near?: number\n position?: [number, number, number]\n zoom?: number\n }\n children: () => React.ReactNode\n className?: string\n contained?: boolean\n noEvents?: boolean\n style?: React.CSSProperties\n}\n"]}
@@ -7,3 +7,4 @@ interface ScrambleProps {
7
7
  target?: RefObject<HTMLElement | null>;
8
8
  }
9
9
  export {};
10
+ //# sourceMappingURL=scramble.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scramble.d.ts","sourceRoot":"","sources":["../../../src/ui/components/scramble.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAItC,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,GAAS,EACT,MAAU,EACV,MAAM,EACP,EAAE,aAAa,2CA2Ef;AAED,UAAU,aAAa;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAA;CACvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"scramble.js","sourceRoot":"","sources":["../../../src/ui/components/scramble.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scramble.js","sourceRoot":"","sources":["../../../src/ui/components/scramble.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client'\n\nimport { useEffect, useRef, useState } from 'react'\nimport type { RefObject } from 'react'\n\nconst CHARS = '.,·-─~+:;=*π\"\"┐┌┘┴┬╗╔╝╚╬╠╣╩╦║░▒▓█▄▀▌▐■!?&#$@0123456789*'\n\nexport function Scramble({\n children,\n dur = 666,\n spread = 1,\n target\n}: ScrambleProps) {\n const text = String(children)\n const len = text.length\n const [display, setDisplay] = useState(text)\n const frame = useRef<null | number>(null)\n const waves = useRef<{ pos: number; time: number }[]>([])\n\n useEffect(() => {\n const el = target?.current\n\n if (!el) {\n return\n }\n\n const animate = () => {\n const t = Date.now()\n waves.current = waves.current.filter(w => t - w.time < dur)\n\n if (!waves.current.length) {\n setDisplay(text)\n frame.current = null\n\n return\n }\n\n setDisplay(\n text\n .split('')\n .map((c, i) => {\n if (c === ' ') {\n return c\n }\n\n for (const w of waves.current) {\n const age = t - w.time\n\n const rad =\n (Math.min(age / dur, 1) *\n (Math.max(w.pos, len - w.pos - 1) + 5)) /\n spread\n\n const dist = Math.abs(i - w.pos)\n const int = rad - dist\n\n if (dist <= rad && int > 0 && int <= 3) {\n return CHARS[(dist * 3 + ((age / 40) | 0)) % CHARS.length]\n }\n }\n\n return c\n })\n .join('')\n )\n\n frame.current = requestAnimationFrame(animate)\n }\n\n const onEnter = () => {\n waves.current.push({ pos: len >> 1, time: Date.now() })\n frame.current ??= requestAnimationFrame(animate)\n }\n\n el.addEventListener('mouseenter', onEnter)\n\n return () => {\n el.removeEventListener('mouseenter', onEnter)\n frame.current && cancelAnimationFrame(frame.current)\n }\n }, [target, text, len, dur, spread])\n\n useEffect(() => {\n setDisplay(text)\n }, [text])\n\n return <>{display}</>\n}\n\ninterface ScrambleProps {\n children: string\n dur?: number\n spread?: number\n target?: RefObject<HTMLElement | null>\n}\n"]}
@@ -1 +1,2 @@
1
1
  export declare function SelectionSwitcher(): null;
2
+ //# sourceMappingURL=selection-switcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection-switcher.d.ts","sourceRoot":"","sources":["../../../src/ui/components/selection-switcher.tsx"],"names":[],"mappings":"AAkBA,wBAAgB,iBAAiB,SAyBhC"}
@@ -1 +1 @@
1
- {"version":3,"file":"selection-switcher.js","sourceRoot":"","sources":["../../../src/ui/components/selection-switcher.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,MAAM,MAAM,GAAG;IACb,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;CACZ,CAAA;AAEV,MAAM,UAAU,iBAAiB;IAC/B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAA;QAChC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;QAErB,IAAI,GAAG,GAAG,CAAC,CAAA;QAEX,MAAM,KAAK,GAAG,GAAG,EAAE,CACjB,qBAAqB,CAAC,GAAG,EAAE,CACzB,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CACxC,gBAAgB,EAChB,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAC1C,CACF,CAAA;QAEH,MAAM,KAAK,GAAG,CAAC,CAAgB,EAAE,EAAE,CACjC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE,CAAA;QAEpE,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QAC3D,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QAEvD,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;IACzB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,IAAI,CAAA;AACb,CAAC"}
1
+ {"version":3,"file":"selection-switcher.js","sourceRoot":"","sources":["../../../src/ui/components/selection-switcher.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEjC,MAAM,MAAM,GAAG;IACb,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,qBAAqB;IACrB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;CACZ,CAAA;AAEV,MAAM,UAAU,iBAAiB;IAC/B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAA;QAChC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAA;QAErB,IAAI,GAAG,GAAG,CAAC,CAAA;QAEX,MAAM,KAAK,GAAG,GAAG,EAAE,CACjB,qBAAqB,CAAC,GAAG,EAAE,CACzB,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,CACxC,gBAAgB,EAChB,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAC1C,CACF,CAAA;QAEH,MAAM,KAAK,GAAG,CAAC,CAAgB,EAAE,EAAE,CACjC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,EAAE,CAAA;QAEpE,QAAQ,CAAC,gBAAgB,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QAC3D,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QAEvD,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;IACzB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,IAAI,CAAA;AACb,CAAC","sourcesContent":["'use client'\n\nimport { useEffect } from 'react'\n\nconst colors = [\n 'oklch(85% 0.12 330)',\n 'oklch(85% 0.12 300)',\n 'oklch(85% 0.12 270)',\n 'oklch(85% 0.12 230)',\n 'oklch(85% 0.12 180)',\n 'oklch(85% 0.12 150)',\n 'oklch(85% 0.12 120)',\n 'oklch(85% 0.12 90)',\n 'oklch(85% 0.12 60)',\n 'oklch(85% 0.12 30)',\n 'oklch(88% 0.10 80)'\n] as const\n\nexport function SelectionSwitcher() {\n useEffect(() => {\n const ac = new AbortController()\n const { signal } = ac\n\n let idx = 0\n\n const cycle = () =>\n requestAnimationFrame(() =>\n document.documentElement.style.setProperty(\n '--selection-bg',\n colors[(idx = (idx + 1) % colors.length)]\n )\n )\n\n const onKey = (e: KeyboardEvent) =>\n e.key.toLowerCase() === 'a' && (e.metaKey || e.ctrlKey) && cycle()\n\n document.addEventListener('selectstart', cycle, { signal })\n document.addEventListener('keydown', onKey, { signal })\n\n return () => ac.abort()\n }, [])\n\n return null\n}\n"]}
@@ -5,3 +5,4 @@ interface ShaderProps extends Omit<ThreeElements['mesh'], 'children'>, Pick<Thre
5
5
  children?: ((material: ReactNode) => ReactNode) | ReactNode;
6
6
  }
7
7
  export {};
8
+ //# sourceMappingURL=shader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader.d.ts","sourceRoot":"","sources":["../../../src/ui/components/shader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,aAAa,EAAY,MAAM,oBAAoB,CAAA;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAUtC,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,GAAG,KAAK,EACT,EAAE,WAAW,2UAmDb;AAED,UAAU,WACR,SAAQ,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,EAC7C,IAAI,CACF,aAAa,CAAC,gBAAgB,CAAC,EAC/B,SAAS,GAAG,WAAW,GAAG,gBAAgB,GAAG,UAAU,GAAG,cAAc,CACzE;IACH,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,KAAK,SAAS,CAAC,GAAG,SAAS,CAAA;CAC5D"}
@@ -1 +1 @@
1
- {"version":3,"file":"shader.js","sourceRoot":"","sources":["../../../src/ui/components/shader.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAsB,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,MAAM,eAAe,GAAG;IACtB,WAAW,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;IACnD,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;CAC5B,CAAA;AAED,MAAM,UAAU,MAAM,CAAC,EACrB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,GAAG,KAAK,EACI;IACZ,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;IAChD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAA;IAErC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IAElC,MAAM,WAAW,GAAG,MAAM,CAAC;QACzB,GAAG,eAAe;QAClB,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;KACpB,CAAC,CAAA;IAEF,cAAc,CACZ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAA;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAA;QAEpC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,cAAc,EAAE,CAAA;QACxD,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CACxC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAC7C,CAAA;IACH,CAAC,EACD,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAClB,CAAA;IAED,SAAS,CACP,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EACrE,CAAC,QAAQ,CAAC,CACX,CAAA;IAED,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAA;IAE1E,MAAM,aAAa,GAAG;QACpB,OAAO,EAAE,OAAO,IAAI,EAAE;QACtB,SAAS;QACT,cAAc;QACd,IAAI,EAAE,KAAK,CAAC,UAAU;QACtB,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,WAAW,CAAC,OAAO;QAC7B,YAAY;KAC6B,CAAA;IAE3C,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC,4BAAoB,aAAa,GAAI,CAAC,CAAA;IACxD,CAAC;IAED,OAAO,CACL,mBAAU,KAAK,aACZ,QAAQ,IAAI,yBAAiB,EAC9B,4BAAoB,aAAa,GAAI,IAChC,CACR,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"shader.js","sourceRoot":"","sources":["../../../src/ui/components/shader.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAsB,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,MAAM,eAAe,GAAG;IACtB,WAAW,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;IACnD,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;CAC5B,CAAA;AAED,MAAM,UAAU,MAAM,CAAC,EACrB,QAAQ,EACR,OAAO,EACP,SAAS,EACT,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,GAAG,KAAK,EACI;IACZ,MAAM,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;IAChD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAAA;IAErC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;IAElC,MAAM,WAAW,GAAG,MAAM,CAAC;QACzB,GAAG,eAAe;QAClB,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;KACpB,CAAC,CAAA;IAEF,cAAc,CACZ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAA;QACnC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAA;QAEpC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,cAAc,EAAE,CAAA;QACxD,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CACxC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAC7C,CAAA;IACH,CAAC,EACD,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAClB,CAAA;IAED,SAAS,CACP,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EACrE,CAAC,QAAQ,CAAC,CACX,CAAA;IAED,SAAS,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAA;IAE1E,MAAM,aAAa,GAAG;QACpB,OAAO,EAAE,OAAO,IAAI,EAAE;QACtB,SAAS;QACT,cAAc;QACd,IAAI,EAAE,KAAK,CAAC,UAAU;QACtB,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,WAAW,CAAC,OAAO;QAC7B,YAAY;KAC6B,CAAA;IAE3C,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC,4BAAoB,aAAa,GAAI,CAAC,CAAA;IACxD,CAAC;IAED,OAAO,CACL,mBAAU,KAAK,aACZ,QAAQ,IAAI,yBAAiB,EAC9B,4BAAoB,aAAa,GAAI,IAChC,CACR,CAAA;AACH,CAAC","sourcesContent":["'use client'\n\nimport { type ThreeElements, useThree } from '@react-three/fiber'\nimport { useEffect, useRef } from 'react'\nimport type { ReactNode } from 'react'\nimport * as THREE from 'three'\n\nimport { useCappedFrame } from '../../hooks/use-capped-frame'\n\nconst defaultUniforms = {\n uResolution: new THREE.Uniform(new THREE.Vector4()),\n uTime: new THREE.Uniform(0)\n}\n\nexport function Shader({\n children,\n defines,\n depthTest,\n fragmentShader,\n uniforms,\n vertexShader,\n ...props\n}: ShaderProps) {\n const invalidate = useThree(st => st.invalidate)\n const { size, viewport } = useThree()\n\n const isMobile = size.width < 1024\n\n const uniformsRef = useRef({\n ...defaultUniforms,\n ...(uniforms ?? {})\n })\n\n useCappedFrame(\n ({ clock }) => {\n const w = size.width * viewport.dpr\n const h = size.height * viewport.dpr\n\n uniformsRef.current.uTime.value = clock.getElapsedTime()\n uniformsRef.current.uResolution.value.copy(\n new THREE.Vector4(w, h, w / h, viewport.dpr)\n )\n },\n isMobile ? 0 : 80\n )\n\n useEffect(\n () => void (uniforms && Object.assign(uniformsRef.current, uniforms)),\n [uniforms]\n )\n\n useEffect(() => void (isMobile && invalidate(80)), [invalidate, isMobile])\n\n const materialProps = {\n defines: defines ?? {},\n depthTest,\n fragmentShader,\n side: THREE.DoubleSide,\n transparent: true,\n uniforms: uniformsRef.current,\n vertexShader\n } satisfies ThreeElements['shaderMaterial']\n\n if (typeof children === 'function') {\n return children(<shaderMaterial {...materialProps} />)\n }\n\n return (\n <mesh {...props}>\n {children ?? <planeGeometry />}\n <shaderMaterial {...materialProps} />\n </mesh>\n )\n}\n\ninterface ShaderProps\n extends Omit<ThreeElements['mesh'], 'children'>,\n Pick<\n ThreeElements['shaderMaterial'],\n 'defines' | 'depthTest' | 'fragmentShader' | 'uniforms' | 'vertexShader'\n > {\n children?: ((material: ReactNode) => ReactNode) | ReactNode\n}\n"]}
@@ -14,3 +14,4 @@ interface StatsProps extends React.ComponentProps<'div'> {
14
14
  flip?: boolean;
15
15
  }
16
16
  export {};
17
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/ui/components/stats.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAMxC,wBAAgB,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CAsCrE;AAED,UAAU,UAAW,SAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;IACtD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,GAAG;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,SAAS,CAAA;SAAC,CAAA;QAC9C,KAAK,EAAE,MAAM,GAAG;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,SAAS,CAAA;SAAC,CAAA;KAC/C,EAAE,CAAA;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;CACf"}
@@ -1 +1 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/ui/components/stats.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,UAAU,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,EAAc;IACpE,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,4BAA4B,EAAE,SAAS,CAAC,KAAM,KAAK,YACnE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;YAC9B,MAAM,SAAS,GAAG,CAChB,KAAC,UAAU,IACT,SAAS,EAAC,uCAAuC,EACjD,QAAQ,kBAEP,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GACpC,CACd,CAAA;YACD,MAAM,SAAS,GAAG,CAChB,KAAC,UAAU,IAAC,SAAS,EAAC,0CAA0C,EAAC,IAAI,kBAClE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GACpC,CACd,CAAA;YAED,OAAO,CACL,eACE,SAAS,EAAC,8EAA8E,aAGvF,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAE7B,KAAC,UAAU,IACT,SAAS,EAAC,+EAA+E,EACzF,QAAQ,kBAEP,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GACL,EAEZ,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,KAXxB,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAE,GAAG,KAAK,GAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAYzG,CACP,CAAA;QACH,CAAC,CAAC,GACE,CACP,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../src/ui/components/stats.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,UAAU,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,EAAc;IACpE,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,4BAA4B,EAAE,SAAS,CAAC,KAAM,KAAK,YACnE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;YAC9B,MAAM,SAAS,GAAG,CAChB,KAAC,UAAU,IACT,SAAS,EAAC,uCAAuC,EACjD,QAAQ,kBAEP,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GACpC,CACd,CAAA;YACD,MAAM,SAAS,GAAG,CAChB,KAAC,UAAU,IAAC,SAAS,EAAC,0CAA0C,EAAC,IAAI,kBAClE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GACpC,CACd,CAAA;YAED,OAAO,CACL,eACE,SAAS,EAAC,8EAA8E,aAGvF,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAE7B,KAAC,UAAU,IACT,SAAS,EAAC,+EAA+E,EACzF,QAAQ,kBAEP,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GACL,EAEZ,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,KAXxB,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAE,GAAG,KAAK,GAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAYzG,CACP,CAAA;QACH,CAAC,CAAC,GACE,CACP,CAAA;AACH,CAAC","sourcesContent":["import React, { ReactNode } from 'react'\n\nimport { cn } from '../../utils'\n\nimport { Typography } from './typography'\n\nexport function Stats({ className, items, flip, ...props }: StatsProps) {\n return (\n <div className={cn('flex w-full flex-col gap-5', className)} {...props}>\n {items.map(({ label, value }) => {\n const valueText = (\n <Typography\n className=\"text-xs leading-[1.4] tracking-widest\"\n expanded\n >\n {typeof value === 'string' ? value : value.node}\n </Typography>\n )\n const labelText = (\n <Typography className=\"leading-none tracking-[0.2em] opacity-60\" mono>\n {typeof label === 'string' ? label : label.node}\n </Typography>\n )\n\n return (\n <div\n className=\"text-midground grid grid-cols-[auto_1fr_auto] items-center gap-2.5 uppercase\"\n key={(typeof label === 'string' ? label : label.key ) + '@@@'+(typeof value === 'string' ? value : value.key)}\n >\n {flip ? labelText : valueText}\n\n <Typography\n className=\"min-w-0 overflow-hidden text-[13px] leading-[1.4] tracking-[0.4em] opacity-20\"\n expanded\n >\n {'·'.repeat(100)}\n </Typography>\n\n {flip ? valueText : labelText}\n </div>\n )\n })}\n </div>\n )\n}\n\ninterface StatsProps extends React.ComponentProps<'div'> {\n items: {\n label: string | {key: string, node: ReactNode}\n value: string | {key: string, node: ReactNode}\n }[]\n flip?: boolean\n}\n"]}
@@ -0,0 +1,33 @@
1
+ export declare function TerminalDemo({ ariaLabel, className, height, label, loopDelayMs, outputLineDelayMs, sequence }: TerminalDemoProps): import("react/jsx-runtime").JSX.Element;
2
+ interface ClearStep {
3
+ type: 'clear';
4
+ }
5
+ interface OutputStep {
6
+ lines: string[];
7
+ type: 'output';
8
+ }
9
+ interface PauseStep {
10
+ ms: number;
11
+ type: 'pause';
12
+ }
13
+ interface PromptStep {
14
+ text: string;
15
+ type: 'prompt';
16
+ }
17
+ interface TerminalDemoProps {
18
+ ariaLabel?: string;
19
+ className?: string;
20
+ height?: number | string;
21
+ label?: string;
22
+ loopDelayMs?: number;
23
+ outputLineDelayMs?: number;
24
+ sequence: TerminalDemoStep[];
25
+ }
26
+ export type TerminalDemoStep = ClearStep | OutputStep | PauseStep | PromptStep | TypeStep;
27
+ interface TypeStep {
28
+ delay?: number;
29
+ text: string;
30
+ type: 'type';
31
+ }
32
+ export {};
33
+ //# sourceMappingURL=terminal-demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-demo.d.ts","sourceRoot":"","sources":["../../../src/ui/components/terminal-demo.tsx"],"names":[],"mappings":"AAUA,wBAAgB,YAAY,CAAC,EAC3B,SAA2B,EAC3B,SAAS,EACT,MAAY,EACZ,KAAkB,EAClB,WAAkB,EAClB,iBAAsB,EACtB,QAAQ,EACT,EAAE,iBAAiB,2CAgInB;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,OAAO,CAAA;CACd;AAED,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,IAAI,EAAE,QAAQ,CAAA;CACf;AAED,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,OAAO,CAAA;CACd;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,QAAQ,CAAA;CACf;AAED,UAAU,iBAAiB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAC7B;AAED,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,UAAU,GACV,SAAS,GACT,UAAU,GACV,QAAQ,CAAA;AAEZ,UAAU,QAAQ;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb"}
@@ -0,0 +1,79 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useEffect, useRef, useState } from 'react';
4
+ import { cn } from '../../utils';
5
+ function sleep(ms) {
6
+ return new Promise(resolve => setTimeout(resolve, ms));
7
+ }
8
+ export function TerminalDemo({ ariaLabel = 'Terminal Demo', className, height = 320, label = 'Terminal', loopDelayMs = 1000, outputLineDelayMs = 50, sequence }) {
9
+ const bodyRef = useRef(null);
10
+ const startedRef = useRef(false);
11
+ const [html, setHtml] = useState('');
12
+ const runDemo = useCallback(async () => {
13
+ if (startedRef.current) {
14
+ return;
15
+ }
16
+ startedRef.current = true;
17
+ let content = '';
18
+ const render = (h) => {
19
+ content = h;
20
+ setHtml(h);
21
+ };
22
+ for (;;) {
23
+ for (const step of sequence) {
24
+ switch (step.type) {
25
+ case 'clear':
26
+ content = '';
27
+ render('');
28
+ break;
29
+ case 'output':
30
+ for (const line of step.lines) {
31
+ render(content + '\n' + line);
32
+ await sleep(outputLineDelayMs);
33
+ }
34
+ break;
35
+ case 'pause':
36
+ await sleep(step.ms);
37
+ break;
38
+ case 'prompt':
39
+ render(content + `<span class="text-midground">${step.text}</span>`);
40
+ break;
41
+ case 'type':
42
+ for (const char of step.text) {
43
+ render(content + char);
44
+ await sleep(step.delay ?? 30);
45
+ }
46
+ break;
47
+ }
48
+ }
49
+ content = '';
50
+ render('');
51
+ await sleep(loopDelayMs);
52
+ }
53
+ }, [loopDelayMs, outputLineDelayMs, sequence]);
54
+ useEffect(() => {
55
+ const el = bodyRef.current?.closest('[data-demo-root]');
56
+ if (!el) {
57
+ return;
58
+ }
59
+ const observer = new IntersectionObserver(entries => {
60
+ entries.forEach(entry => {
61
+ if (entry.isIntersecting) {
62
+ runDemo();
63
+ }
64
+ });
65
+ }, { threshold: 0.3 });
66
+ observer.observe(el);
67
+ return () => observer.disconnect();
68
+ }, [runDemo]);
69
+ useEffect(() => {
70
+ if (bodyRef.current) {
71
+ bodyRef.current.scrollTop = bodyRef.current.scrollHeight;
72
+ }
73
+ }, [html]);
74
+ return (_jsxs("div", { "aria-label": ariaLabel, className: cn('border-4 border-double border-inherit', className), "data-demo-root": true, role: "img", children: [_jsxs("div", { className: "flex items-center gap-3 border-b border-current/10 px-3 py-2", children: [_jsxs("div", { className: "flex gap-1.5", children: [_jsx("span", { className: "bg-midground size-2 rounded-full", style: { mixBlendMode: 'plus-lighter' } }), _jsx("span", { className: "bg-midground/60 size-2 rounded-full" }), _jsx("span", { className: "bg-midground/30 size-2 rounded-full" })] }), _jsx("span", { className: "font-courier text-[0.625rem] tracking-widest uppercase opacity-50", children: label })] }), _jsx("div", { className: cn('overflow-x-hidden overflow-y-auto whitespace-pre-wrap', 'font-courier p-4 text-[0.75rem] leading-[1.7] normal-case'), dangerouslySetInnerHTML: {
75
+ __html: html +
76
+ '<span class="blink inline-block dither ml-0.5 h-[1em] w-[1ch]"></span>'
77
+ }, ref: bodyRef, style: { height } })] }));
78
+ }
79
+ //# sourceMappingURL=terminal-demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-demo.js","sourceRoot":"","sources":["../../../src/ui/components/terminal-demo.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client'\n\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { cn } from '../../utils'\n\nfunction sleep(ms: number) {\n return new Promise<void>(resolve => setTimeout(resolve, ms))\n}\n\nexport function TerminalDemo({\n ariaLabel = 'Terminal Demo',\n className,\n height = 320,\n label = 'Terminal',\n loopDelayMs = 1000,\n outputLineDelayMs = 50,\n sequence\n}: TerminalDemoProps) {\n const bodyRef = useRef<HTMLDivElement>(null)\n const startedRef = useRef(false)\n const [html, setHtml] = useState('')\n\n const runDemo = useCallback(async () => {\n if (startedRef.current) {\n return\n }\n\n startedRef.current = true\n let content = ''\n\n const render = (h: string) => {\n content = h\n setHtml(h)\n }\n\n for (;;) {\n for (const step of sequence) {\n switch (step.type) {\n case 'clear':\n content = ''\n render('')\n\n break\n\n case 'output':\n for (const line of step.lines) {\n render(content + '\\n' + line)\n await sleep(outputLineDelayMs)\n }\n\n break\n\n case 'pause':\n await sleep(step.ms)\n\n break\n\n case 'prompt':\n render(content + `<span class=\"text-midground\">${step.text}</span>`)\n\n break\n\n case 'type':\n for (const char of step.text) {\n render(content + char)\n await sleep(step.delay ?? 30)\n }\n\n break\n }\n }\n\n content = ''\n render('')\n await sleep(loopDelayMs)\n }\n }, [loopDelayMs, outputLineDelayMs, sequence])\n\n useEffect(() => {\n const el = bodyRef.current?.closest('[data-demo-root]')\n\n if (!el) {\n return\n }\n\n const observer = new IntersectionObserver(\n entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n runDemo()\n }\n })\n },\n { threshold: 0.3 }\n )\n\n observer.observe(el)\n\n return () => observer.disconnect()\n }, [runDemo])\n\n useEffect(() => {\n if (bodyRef.current) {\n bodyRef.current.scrollTop = bodyRef.current.scrollHeight\n }\n }, [html])\n\n return (\n <div\n aria-label={ariaLabel}\n className={cn('border-4 border-double border-inherit', className)}\n data-demo-root\n role=\"img\"\n >\n <div className=\"flex items-center gap-3 border-b border-current/10 px-3 py-2\">\n <div className=\"flex gap-1.5\">\n <span\n className=\"bg-midground size-2 rounded-full\"\n style={{ mixBlendMode: 'plus-lighter' }}\n />\n\n <span className=\"bg-midground/60 size-2 rounded-full\" />\n <span className=\"bg-midground/30 size-2 rounded-full\" />\n </div>\n\n <span className=\"font-courier text-[0.625rem] tracking-widest uppercase opacity-50\">\n {label}\n </span>\n </div>\n\n <div\n className={cn(\n 'overflow-x-hidden overflow-y-auto whitespace-pre-wrap',\n 'font-courier p-4 text-[0.75rem] leading-[1.7] normal-case'\n )}\n dangerouslySetInnerHTML={{\n __html:\n html +\n '<span class=\"blink inline-block dither ml-0.5 h-[1em] w-[1ch]\"></span>'\n }}\n ref={bodyRef}\n style={{ height }}\n />\n </div>\n )\n}\n\ninterface ClearStep {\n type: 'clear'\n}\n\ninterface OutputStep {\n lines: string[]\n type: 'output'\n}\n\ninterface PauseStep {\n ms: number\n type: 'pause'\n}\n\ninterface PromptStep {\n text: string\n type: 'prompt'\n}\n\ninterface TerminalDemoProps {\n ariaLabel?: string\n className?: string\n height?: number | string\n label?: string\n loopDelayMs?: number\n outputLineDelayMs?: number\n sequence: TerminalDemoStep[]\n}\n\nexport type TerminalDemoStep =\n | ClearStep\n | OutputStep\n | PauseStep\n | PromptStep\n | TypeStep\n\ninterface TypeStep {\n delay?: number\n text: string\n type: 'type'\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export declare function ThemeToggle({ className, style }: ThemeToggleProps): import("react/jsx-runtime").JSX.Element;
2
+ interface ThemeToggleProps {
3
+ className?: string;
4
+ style?: React.CSSProperties;
5
+ }
6
+ export {};
7
+ //# sourceMappingURL=theme-toggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-toggle.d.ts","sourceRoot":"","sources":["../../../src/ui/components/theme-toggle.tsx"],"names":[],"mappings":"AAQA,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,gBAAgB,2CAoDjE;AAED,UAAU,gBAAgB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;CAC5B"}
@@ -0,0 +1,10 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useStore } from '@nanostores/react';
4
+ import { cn } from '../../utils';
5
+ import { $lightMode, toggleLens } from './overlays';
6
+ export function ThemeToggle({ className, style }) {
7
+ const light = useStore($lightMode);
8
+ return (_jsxs("button", { "aria-label": light ? 'Switch to dark mode' : 'Switch to light mode', className: cn('relative flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full', 'border border-current/25 bg-current/8 transition-colors', 'hover:bg-current/15', className), onClick: toggleLens, style: style, type: "button", children: [_jsxs("svg", { className: "absolute left-1 size-3.5 opacity-40", fill: "none", stroke: "currentColor", strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, viewBox: "0 0 24 24", children: [_jsx("circle", { cx: 12, cy: 12, r: 5 }), _jsx("path", { d: "M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42" })] }), _jsx("svg", { className: "absolute right-1 size-3.5 opacity-40", fill: "none", stroke: "currentColor", strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, viewBox: "0 0 24 24", children: _jsx("path", { d: "M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z" }) }), _jsx("span", { "aria-hidden": true, className: cn('bg-midground absolute size-4 rounded-full', 'transition-transform duration-200 ease-out'), style: { transform: `translateX(${light ? 2 : 22}px)` } })] }));
9
+ }
10
+ //# sourceMappingURL=theme-toggle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-toggle.js","sourceRoot":"","sources":["../../../src/ui/components/theme-toggle.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAE5C,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEnD,MAAM,UAAU,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,EAAoB;IAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAA;IAElC,OAAO,CACL,gCACc,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,sBAAsB,EAClE,SAAS,EAAE,EAAE,CACX,0EAA0E,EAC1E,yDAAyD,EACzD,qBAAqB,EACrB,SAAS,CACV,EACD,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAC,QAAQ,aAEb,eACE,SAAS,EAAC,qCAAqC,EAC/C,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,WAAW,EAAE,CAAC,EACd,OAAO,EAAC,WAAW,aAEnB,iBAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,GAAI,EAEhC,eAAM,CAAC,EAAC,oHAAoH,GAAG,IAC3H,EAEN,cACE,SAAS,EAAC,sCAAsC,EAChD,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,WAAW,EAAE,CAAC,EACd,OAAO,EAAC,WAAW,YAEnB,eAAM,CAAC,EAAC,iDAAiD,GAAG,GACxD,EAEN,oCAEE,SAAS,EAAE,EAAE,CACX,2CAA2C,EAC3C,4CAA4C,CAC7C,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GACvD,IACK,CACV,CAAA;AACH,CAAC","sourcesContent":["'use client'\n\nimport { useStore } from '@nanostores/react'\n\nimport { cn } from '../../utils'\n\nimport { $lightMode, toggleLens } from './overlays'\n\nexport function ThemeToggle({ className, style }: ThemeToggleProps) {\n const light = useStore($lightMode)\n\n return (\n <button\n aria-label={light ? 'Switch to dark mode' : 'Switch to light mode'}\n className={cn(\n 'relative flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full',\n 'border border-current/25 bg-current/8 transition-colors',\n 'hover:bg-current/15',\n className\n )}\n onClick={toggleLens}\n style={style}\n type=\"button\"\n >\n <svg\n className=\"absolute left-1 size-3.5 opacity-40\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n viewBox=\"0 0 24 24\"\n >\n <circle cx={12} cy={12} r={5} />\n\n <path d=\"M12 1v2M12 21v2M4.22 4.22l1.42 1.42M18.36 18.36l1.42 1.42M1 12h2M21 12h2M4.22 19.78l1.42-1.42M18.36 5.64l1.42-1.42\" />\n </svg>\n\n <svg\n className=\"absolute right-1 size-3.5 opacity-40\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\" />\n </svg>\n\n <span\n aria-hidden\n className={cn(\n 'bg-midground absolute size-4 rounded-full',\n 'transition-transform duration-200 ease-out'\n )}\n style={{ transform: `translateX(${light ? 2 : 22}px)` }}\n />\n </button>\n )\n}\n\ninterface ThemeToggleProps {\n className?: string\n style?: React.CSSProperties\n}\n"]}
@@ -1,3 +1,4 @@
1
1
  export declare function TV({ className }: {
2
2
  className?: string;
3
3
  }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=tv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tv.d.ts","sourceRoot":"","sources":["../../../src/ui/components/tv.tsx"],"names":[],"mappings":"AAuLA,wBAAgB,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,2CAqCvD"}
@@ -1 +1 @@
1
- {"version":3,"file":"tv.js","sourceRoot":"","sources":["../../../src/ui/components/tv.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tv.js","sourceRoot":"","sources":["../../../src/ui/components/tv.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client'\n\nimport { useEffect, useRef } from 'react'\n\nconst VERT = /* glsl */ `attribute vec2 a;void main(){gl_Position=vec4(a,0,1);}`\n\nconst FRAG = /* glsl */ `precision highp float;\nuniform float t;\nuniform vec2 r;\n\nconst float FBM_STR = .08;\n\nfloat h(vec2 p) { return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453); }\n\nfloat n2(vec2 p) {\n vec2 i = floor(p), f = fract(p);\n f = f * f * (3. - 2. * f);\n\n return mix(\n mix(h(i), h(i + vec2(1, 0)), f.x),\n mix(h(i + vec2(0, 1)), h(i + vec2(1, 1)), f.x),\n f.y\n );\n}\n\nfloat fbm(vec2 p) {\n float v = 0., a = .5;\n\n for (int i = 0; i < 4; i++) {\n v += a * n2(p);\n p *= 2.1;\n a *= .45;\n }\n\n return v;\n}\n\nfloat drift(float speed, float s) {\n return fract(t * speed + s + .02 * sin(t * .4 + s * 3.));\n}\n\nfloat brushAt(vec2 uv, float y, float th, float s) {\n float hw = .34 + .08 * h(vec2(s, 77.));\n float cx = .5;\n float xn = (uv.x - (cx - hw)) / (2. * hw);\n float env = smoothstep(0., .03, xn) * smoothstep(1., .97, xn);\n float localTh = th * env;\n\n if (localTh < .002) return 0.;\n\n float morph = floor(t * 8.) * .7 + s;\n float top = y - localTh * .5 + fbm(vec2(uv.x * 6., morph)) * FBM_STR;\n float bot = y + localTh * .5 - fbm(vec2(uv.x * 6., morph + 30.)) * FBM_STR;\n float x0 = cx - hw + fbm(vec2(uv.y * 8., morph + 60.)) * FBM_STR;\n float x1 = cx + hw - fbm(vec2(uv.y * 8., morph + 90.)) * FBM_STR;\n\n float dMin = min(min(uv.y - top, bot - uv.y), min(uv.x - x0, x1 - uv.x));\n\n float bristle = n2(vec2(uv.x * 60., uv.y * 8. + s)) * .4\n + n2(vec2(uv.x * 25., (uv.y - y) * 120. + s)) * .35\n + n2(vec2(uv.x * 90., uv.y * 3. + s * 2.)) * .25;\n\n float eaten = smoothstep(.03, 0., dMin) * (1. - smoothstep(.2, .5, bristle));\n\n return clamp(smoothstep(0., .003, dMin) * (1. - eaten), 0., 1.);\n}\n\nvoid main() {\n vec2 uv = gl_FragCoord.xy / r;\n uv = vec2(uv.x * cos(.095) - uv.y * sin(.095), uv.x * sin(.095) + uv.y * cos(.095));\n uv += vec2(fbm(uv * 4. + t * .06), fbm(uv * 4. + 8. + t * .05)) * .012;\n\n vec3 c = vec3(.992, .992, .051);\n\n float smScroll = -drift(.04, 5.) * 2.;\n float sm = 0.;\n\n for (int i = 0; i < 20; i++) {\n sm = max(sm, brushAt(uv, mod(float(i) * .1 + smScroll, 2.) - .5, .04, float(i) + 10.));\n }\n\n float d1 = drift(.15, 1.), d2 = drift(.15, 1.37), d3 = drift(.15, 1.58), d4 = drift(.15, 1.82);\n float big = max(\n max(brushAt(uv, 1.1 - d1 * 1.4, .28, 1.), brushAt(uv, 1.1 - d2 * 1.4, .18, 2.)),\n max(brushAt(uv, 1.1 - d3 * 1.4, .3, 3.), brushAt(uv, 1.1 - d4 * 1.4, .15, 4.))\n );\n\n c = mix(c, vec3(0.), clamp(max(sm, big), 0., 1.));\n c *= .94 + .06 * sin(uv.y * r.y * 6.283);\n\n vec2 raw = gl_FragCoord.xy / r;\n float dx = min(raw.x - .22, .90 - raw.x);\n float dy = min(raw.y - .29, .86 - raw.y);\n float cycle = floor(t * .4);\n float edge = mix(smoothstep(.22, 0., max(min(dx, dy), 0.)), 1., step(.75, h(vec2(cycle, 13.))))\n * smoothstep(.85, 1., sin(t * 2.5) * .5 + .5)\n * (.7 + .3 * h(vec2(cycle, 7.)));\n\n float scanY = floor(gl_FragCoord.y);\n float rowNoise = h(vec2(scanY, floor(t * 30.)));\n c *= 1. - edge * max(step(.45, rowNoise), step(.3, h(vec2(gl_FragCoord.x + scanY * 7., floor(t * 45.)))) * step(.2, rowNoise));\n\n gl_FragColor = vec4(clamp(c, 0., 1.), 1.);\n}`\n\nfunction useGL(ref: React.RefObject<HTMLCanvasElement | null>) {\n const raf = useRef(0)\n\n useEffect(() => {\n const c = ref.current\n\n if (!c) {\n return\n }\n\n const gl = c.getContext('webgl')\n\n if (!gl) {\n return\n }\n\n const sh = (type: number, src: string) => {\n const s = gl.createShader(type)!\n gl.shaderSource(s, src)\n gl.compileShader(s)\n\n return s\n }\n\n const p = gl.createProgram()!\n gl.attachShader(p, sh(gl.VERTEX_SHADER, VERT))\n gl.attachShader(p, sh(gl.FRAGMENT_SHADER, FRAG))\n gl.linkProgram(p)\n gl.useProgram(p)\n\n gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer())\n gl.bufferData(\n gl.ARRAY_BUFFER,\n new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]),\n gl.STATIC_DRAW\n )\n\n const a = gl.getAttribLocation(p, 'a')\n gl.enableVertexAttribArray(a)\n gl.vertexAttribPointer(a, 2, gl.FLOAT, false, 0, 0)\n\n const uT = gl.getUniformLocation(p, 't')\n const uR = gl.getUniformLocation(p, 'r')\n\n const resize = () => {\n const rect = c.getBoundingClientRect()\n const dpr = Math.min(devicePixelRatio, 2)\n\n c.width = rect.width * dpr\n c.height = rect.height * dpr\n\n gl.viewport(0, 0, c.width, c.height)\n }\n\n resize()\n\n const ro = new ResizeObserver(resize)\n ro.observe(c)\n\n const t0 = performance.now()\n\n const loop = () => {\n gl.uniform1f(uT, (performance.now() - t0) / 1e3)\n gl.uniform2f(uR, c.width, c.height)\n gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4)\n\n raf.current = requestAnimationFrame(loop)\n }\n\n raf.current = requestAnimationFrame(loop)\n\n return () => {\n cancelAnimationFrame(raf.current)\n ro.disconnect()\n }\n }, [ref])\n}\n\nexport function TV({ className }: { className?: string }) {\n const canvasRef = useRef<HTMLCanvasElement>(null)\n useGL(canvasRef)\n\n return (\n <div className={['relative', className].filter(Boolean).join(' ')}>\n <svg className=\"relative h-full w-full\" fill=\"none\" viewBox=\"0 0 210 173\">\n <path\n d=\"M30.8342 2.44471 6.08268 36.683c-.24437.338-.38254.7412-.39689 1.158L1.57754 157.126c-.03891 1.129.82339 2.087 1.95096 2.167l162.4835 11.463c.433.031.866-.074 1.238-.3l35.718-21.69c.607-.369.986-1.02 1.008-1.73l4.102-130.9871c.035-1.1269-.826-2.0806-1.951-2.1604L32.6847 1.58029c-.7248-.05144-1.4247.27551-1.8505.86442Z\"\n fill=\"#FDFD0D\"\n stroke=\"#FDFD0D\"\n strokeWidth=\"3.15\"\n />\n\n <path\n d=\"M203.09 17.1483 35.6844 5.83395l-4.2 121.94805 168.4906 13.076z\"\n fill=\"#000\"\n stroke=\"#FDFD0D\"\n strokeWidth=\"4.2\"\n />\n\n <path\n d=\"M190.491 29.7483 48.2859 18.434l-4.2 98.848 143.2901 10.976z\"\n fill=\"#FDFD0D\"\n />\n </svg>\n\n <canvas\n className=\"absolute inset-0 h-full w-full\"\n ref={canvasRef}\n style={{\n clipPath:\n 'polygon(23% 10.65%, 90.71% 17.2%, 89.23% 74.13%, 20.99% 67.79%)'\n }}\n />\n </div>\n )\n}\n"]}
@@ -9,3 +9,4 @@ export declare const H1: import("react").ForwardRefExoticComponent<{
9
9
  sans?: boolean | null | undefined;
10
10
  variant?: "lg" | "md" | "sm" | "xl" | null | undefined;
11
11
  } & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, "ref">, "as" | "expanded" | "compressed" | "courier" | "mondwest" | "mono" | "sans" | "variant"> & import("react").RefAttributes<HTMLHeadingElement>>;
12
+ //# sourceMappingURL=h1.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"h1.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/typography/h1.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,EAAE;;;;;;;;;;8QAWd,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"h1.js","sourceRoot":"","sources":["../../../../src/ui/components/typography/h1.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAElC,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AAEnC,OAAO,EAAE,UAAU,EAAwB,MAAM,GAAG,CAAA;AAEpD,MAAM,CAAC,MAAM,EAAE,GAAG,UAAU,CAC1B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IAC/B,OAAO,CACL,KAAC,UAAU,IACT,EAAE,EAAC,IAAI,EACP,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,EACrC,OAAO,EAAC,IAAI,EACN,GAAG,EAAE,GAAG,KAAK,GACnB,CACH,CAAA;AACH,CAAC,CACF,CAAA"}
1
+ {"version":3,"file":"h1.js","sourceRoot":"","sources":["../../../../src/ui/components/typography/h1.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAElC,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AAEnC,OAAO,EAAE,UAAU,EAAwB,MAAM,GAAG,CAAA;AAEpD,MAAM,CAAC,MAAM,EAAE,GAAG,UAAU,CAC1B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IAC/B,OAAO,CACL,KAAC,UAAU,IACT,EAAE,EAAC,IAAI,EACP,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,EACrC,OAAO,EAAC,IAAI,EACN,GAAG,EAAE,GAAG,KAAK,GACnB,CACH,CAAA;AACH,CAAC,CACF,CAAA","sourcesContent":["import { forwardRef } from 'react'\n\nimport { cn } from '../../../utils'\n\nimport { Typography, type TypographyProps } from '.'\n\nexport const H1 = forwardRef<HTMLHeadingElement, TypographyProps<'h1'>>(\n ({ className, ...props }, ref) => {\n return (\n <Typography\n as=\"h1\"\n className={cn('font-bold', className)}\n variant=\"xl\"\n {...{ ref, ...props }}\n />\n )\n }\n)\n"]}
@@ -9,3 +9,4 @@ export declare const H2: import("react").ForwardRefExoticComponent<{
9
9
  sans?: boolean | null | undefined;
10
10
  variant?: "lg" | "md" | "sm" | "xl" | null | undefined;
11
11
  } & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLHeadingElement>, HTMLHeadingElement>, "ref">, "as" | "expanded" | "compressed" | "courier" | "mondwest" | "mono" | "sans" | "variant"> & import("react").RefAttributes<HTMLHeadingElement>>;
12
+ //# sourceMappingURL=h2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"h2.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/typography/h2.tsx"],"names":[],"mappings":"AAMA,eAAO,MAAM,EAAE;;;;;;;;;;8QAWd,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"h2.js","sourceRoot":"","sources":["../../../../src/ui/components/typography/h2.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAElC,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AAEnC,OAAO,EAAE,UAAU,EAAwB,MAAM,GAAG,CAAA;AAEpD,MAAM,CAAC,MAAM,EAAE,GAAG,UAAU,CAC1B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IAC/B,OAAO,CACL,KAAC,UAAU,IACT,EAAE,EAAC,IAAI,EACP,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,EACrC,OAAO,EAAC,IAAI,EACN,GAAG,EAAE,GAAG,KAAK,GACnB,CACH,CAAA;AACH,CAAC,CACF,CAAA"}
1
+ {"version":3,"file":"h2.js","sourceRoot":"","sources":["../../../../src/ui/components/typography/h2.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAElC,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AAEnC,OAAO,EAAE,UAAU,EAAwB,MAAM,GAAG,CAAA;AAEpD,MAAM,CAAC,MAAM,EAAE,GAAG,UAAU,CAC1B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IAC/B,OAAO,CACL,KAAC,UAAU,IACT,EAAE,EAAC,IAAI,EACP,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,EACrC,OAAO,EAAC,IAAI,EACN,GAAG,EAAE,GAAG,KAAK,GACnB,CACH,CAAA;AACH,CAAC,CACF,CAAA","sourcesContent":["import { forwardRef } from 'react'\n\nimport { cn } from '../../../utils'\n\nimport { Typography, type TypographyProps } from '.'\n\nexport const H2 = forwardRef<HTMLHeadingElement, TypographyProps<'h2'>>(\n ({ className, ...props }, ref) => {\n return (\n <Typography\n as=\"h2\"\n className={cn('font-bold', className)}\n variant=\"lg\"\n {...{ ref, ...props }}\n />\n )\n }\n)\n"]}
@@ -13,3 +13,4 @@ export declare const Typography: import("../../..").PolyComponent<"span", OwnPro
13
13
  type OwnProps = VariantProps<typeof typographyVariants>;
14
14
  export type TypographyProps<T extends React.ElementType = 'span'> = PolyProps<T, OwnProps>;
15
15
  export {};
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/typography/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGjE,OAAO,EAAM,KAAK,SAAS,EAAW,MAAM,gBAAgB,CAAA;AAE5D,QAAA,MAAM,kBAAkB;;;;;;;;8EAetB,CAAA;AAEF,eAAO,MAAM,UAAU,oDAwBtB,CAAA;AAED,KAAK,QAAQ,GAAG,YAAY,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEvD,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,KAAK,CAAC,WAAW,GAAG,MAAM,IAAI,SAAS,CAC3E,CAAC,EACD,QAAQ,CACT,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ui/components/typography/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,OAAO,EAAE,EAAE,EAAkB,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE5D,MAAM,kBAAkB,GAAG,GAAG,CAAC,WAAW,EAAE;IAC1C,QAAQ,EAAE;QACR,UAAU,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;QACvC,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;QACjC,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;QACnC,QAAQ,EAAE,EAAE,IAAI,EAAE,oCAAoC,EAAE;QACxD,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;QAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;QAC3B,OAAO,EAAE;YACP,EAAE,EAAE,kDAAkD;YACtD,EAAE,EAAE,kDAAkD;YACtD,EAAE,EAAE,kDAAkD;YACtD,EAAE,EAAE,+CAA+C;SACpD;KACF;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAC/B,CACE,EACE,EAAE,EACF,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,GAAG,IAAI,EACR,EACD,GAAG,EACH,EAAE;IACF,MAAM,KAAK,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IAC/D,MAAM,WAAW,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA;IAE3E,OAAO,aAAa,CAAC,CAAC,EAAE,IAAI,MAAM,CAAsB,EAAE;QACxD,GAAG,IAAI;QACP,SAAS,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC;QACzE,GAAG;KACJ,CAAC,CAAA;AACJ,CAAC,CACF,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ui/components/typography/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAErC,OAAO,EAAE,EAAE,EAAkB,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE5D,MAAM,kBAAkB,GAAG,GAAG,CAAC,WAAW,EAAE;IAC1C,QAAQ,EAAE;QACR,UAAU,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE;QACvC,OAAO,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE;QACjC,QAAQ,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;QACnC,QAAQ,EAAE,EAAE,IAAI,EAAE,oCAAoC,EAAE;QACxD,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;QAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;QAC3B,OAAO,EAAE;YACP,EAAE,EAAE,kDAAkD;YACtD,EAAE,EAAE,kDAAkD;YACtD,EAAE,EAAE,kDAAkD;YACtD,EAAE,EAAE,+CAA+C;SACpD;KACF;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAC/B,CACE,EACE,EAAE,EACF,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,GAAG,IAAI,EACR,EACD,GAAG,EACH,EAAE;IACF,MAAM,KAAK,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;IAC/D,MAAM,WAAW,GAAG,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA;IAE3E,OAAO,aAAa,CAAC,CAAC,EAAE,IAAI,MAAM,CAAsB,EAAE;QACxD,GAAG,IAAI;QACP,SAAS,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,CAAC;QACzE,GAAG;KACJ,CAAC,CAAA;AACJ,CAAC,CACF,CAAA","sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority'\nimport { createElement } from 'react'\n\nimport { cn, type PolyProps, polyRef } from '../../../utils'\n\nconst typographyVariants = cva('font-sans', {\n variants: {\n compressed: { true: 'font-compressed' },\n courier: { true: 'font-courier' },\n expanded: { true: 'font-expanded' },\n mondwest: { true: 'font-mondwest tracking-[0.1875rem]' },\n mono: { true: 'font-mono' },\n sans: { true: 'font-sans' },\n variant: {\n lg: 'text-[2.625rem] leading-[1] tracking-[0.0525rem]',\n md: 'text-[2.625rem] leading-[1] tracking-[0.0525rem]',\n sm: 'leading-1.4 text-[.9375rem] tracking-[0.1875rem]',\n xl: 'text-[4.5rem] leading-[1] tracking-[0.135rem]'\n }\n }\n})\n\nexport const Typography = polyRef<'span', OwnProps>(\n (\n {\n as,\n className,\n compressed,\n courier,\n expanded,\n mondwest,\n mono,\n variant,\n ...rest\n },\n ref\n ) => {\n const fonts = { compressed, courier, expanded, mondwest, mono }\n const fontVariant = { ...fonts, sans: !Object.values(fonts).some(Boolean) }\n\n return createElement((as ?? 'span') as React.ElementType, {\n ...rest,\n className: cn(typographyVariants({ ...fontVariant, variant }), className),\n ref\n })\n }\n)\n\ntype OwnProps = VariantProps<typeof typographyVariants>\n\nexport type TypographyProps<T extends React.ElementType = 'span'> = PolyProps<\n T,\n OwnProps\n>\n"]}
@@ -4,3 +4,4 @@ interface LegendProps extends React.ComponentProps<'hgroup'> {
4
4
  sub?: React.ReactNode;
5
5
  }
6
6
  export {};
7
+ //# sourceMappingURL=legend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legend.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/typography/legend.tsx"],"names":[],"mappings":"AAIA,wBAAgB,MAAM,CAAC,EACrB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACT,EAAE,WAAW,2CAQb;AAED,UAAU,WAAY,SAAQ,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC;IAC1D,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,GAAG,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"legend.js","sourceRoot":"","sources":["../../../../src/ui/components/typography/legend.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,MAAM,UAAU,MAAM,CAAC,EACrB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACI;IACZ,OAAO,CACL,kBAAQ,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,KAAM,KAAK,aAChE,KAAC,KAAK,cAAE,KAAK,GAAS,EACrB,GAAG,IAAI,MAAC,KAAK,IAAC,SAAS,EAAC,YAAY,mBAAI,GAAG,IAAS,EACpD,QAAQ,IACF,CACV,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"legend.js","sourceRoot":"","sources":["../../../../src/ui/components/typography/legend.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,MAAM,UAAU,MAAM,CAAC,EACrB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,KAAK,EACI;IACZ,OAAO,CACL,kBAAQ,SAAS,EAAE,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,KAAM,KAAK,aAChE,KAAC,KAAK,cAAE,KAAK,GAAS,EACrB,GAAG,IAAI,MAAC,KAAK,IAAC,SAAS,EAAC,YAAY,mBAAI,GAAG,IAAS,EACpD,QAAQ,IACF,CACV,CAAA;AACH,CAAC","sourcesContent":["import { cn } from '../../../utils'\n\nimport { Small } from './small'\n\nexport function Legend({\n children,\n className,\n label,\n sub,\n ...props\n}: LegendProps) {\n return (\n <hgroup className={cn('flex flex-col gap-2', className)} {...props}>\n <Small>{label}</Small>\n {sub && <Small className=\"opacity-50\">- {sub}</Small>}\n {children}\n </hgroup>\n )\n}\n\ninterface LegendProps extends React.ComponentProps<'hgroup'> {\n label: React.ReactNode\n sub?: React.ReactNode\n}\n"]}
@@ -1,2 +1,3 @@
1
1
  import { type TypographyProps } from '.';
2
2
  export declare const Small: import("react").ForwardRefExoticComponent<Omit<TypographyProps<any>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
3
+ //# sourceMappingURL=small.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"small.d.ts","sourceRoot":"","sources":["../../../../src/ui/components/typography/small.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,GAAG,CAAA;AAEpD,eAAO,MAAM,KAAK,+HAMjB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"small.js","sourceRoot":"","sources":["../../../../src/ui/components/typography/small.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAElC,OAAO,EAAE,UAAU,EAAwB,MAAM,GAAG,CAAA;AAEpD,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAC7B,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACb,OAAO,CACL,KAAC,UAAU,IAAC,EAAE,EAAC,OAAO,EAAC,QAAQ,QAAC,OAAO,EAAC,IAAI,EAAO,GAAG,EAAE,GAAG,KAAK,GAAM,CACvE,CAAA;AACH,CAAC,CACF,CAAA"}
1
+ {"version":3,"file":"small.js","sourceRoot":"","sources":["../../../../src/ui/components/typography/small.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAElC,OAAO,EAAE,UAAU,EAAwB,MAAM,GAAG,CAAA;AAEpD,MAAM,CAAC,MAAM,KAAK,GAAG,UAAU,CAC7B,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACb,OAAO,CACL,KAAC,UAAU,IAAC,EAAE,EAAC,OAAO,EAAC,QAAQ,QAAC,OAAO,EAAC,IAAI,EAAO,GAAG,EAAE,GAAG,KAAK,GAAM,CACvE,CAAA;AACH,CAAC,CACF,CAAA","sourcesContent":["import { forwardRef } from 'react'\n\nimport { Typography, type TypographyProps } from '.'\n\nexport const Small = forwardRef<HTMLSpanElement, TypographyProps<any>>(\n (props, ref) => {\n return (\n <Typography as=\"small\" mondwest variant=\"sm\" {...{ ref, ...props }} />\n )\n }\n)\n"]}
@@ -9,3 +9,4 @@ interface WatchlistProps extends React.ComponentProps<'div'> {
9
9
  scramble?: boolean;
10
10
  }
11
11
  export {};
12
+ //# sourceMappingURL=watchlist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchlist.d.ts","sourceRoot":"","sources":["../../../src/ui/components/watchlist.tsx"],"names":[],"mappings":"AAWA,wBAAgB,SAAS,CAAC,EACxB,SAAS,EACT,OAAe,EACf,KAAK,EACL,QAAgB,EAChB,GAAG,KAAK,EACT,EAAE,cAAc,2CAiFhB;AAED,UAAU,cAAe,SAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;IAC1D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC3E,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"watchlist.js","sourceRoot":"","sources":["../../../src/ui/components/watchlist.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"watchlist.js","sourceRoot":"","sources":["../../../src/ui/components/watchlist.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client'\n\nimport { cn } from '../../utils'\n\nimport { Scramble } from './ascii'\nimport { LinkIcon } from './icons'\nimport { Typography } from './typography'\n\nconst ETH_RE = /^0x[a-fA-F0-9]{40}$/\nconst truncate = (a: string) => `${a.slice(0, 6)}${'·'.repeat(8)}${a.slice(-4)}`\n\nexport function Watchlist({\n className,\n counter = false,\n items,\n scramble = false,\n ...props\n}: WatchlistProps) {\n return (\n <div className={cn('flex flex-col gap-3', className)} {...props}>\n {items.map(({ label, right, url }, i) => {\n const isStr = typeof label === 'string'\n const eth = isStr && ETH_RE.test(label)\n const text = eth ? truncate(label) : (label as string)\n\n return (\n <a\n className={cn(\n 'grid items-center gap-2.5 px-2.5 py-1.5',\n 'leading-[1.4] uppercase',\n 'hover:bg-midground/10! hover:ring-2 hover:ring-current/20',\n 'transition-all duration-500 hover:duration-0',\n 'opacity-(--midground-alpha)'\n )}\n href={url}\n key={i}\n rel=\"noopener noreferrer\"\n style={{\n background: `color-mix(in oklch, var(--color-midground) ${10 * Math.max(0, 1 - i / 9)}%, transparent)`,\n gridTemplateColumns: [\n counter && 'auto auto',\n '1fr',\n right && 'auto',\n url && 'auto auto'\n ]\n .filter(Boolean)\n .join(' ')\n }}\n target=\"_blank\"\n >\n {counter && (\n <>\n <Typography\n className=\"text-lg tracking-[0.35em] opacity-40\"\n compressed\n >\n {String(i + 1).padStart(2, '0')}\n </Typography>\n\n <span className=\"text-[0.8125rem] font-bold tracking-[0.4em] opacity-20\">\n :\n </span>\n </>\n )}\n\n {isStr ? (\n <Typography\n className=\"min-w-0 overflow-hidden text-lg font-bold tracking-[0.35em]\"\n {...(eth ? { mono: true } : { compressed: true })}\n >\n {scramble ? <Scramble delay={i * 80} text={text} /> : text}\n </Typography>\n ) : (\n label\n )}\n\n {right && (\n <Typography\n className=\"text-right text-sm tracking-widest opacity-40\"\n mono\n >\n {right}\n </Typography>\n )}\n\n {url && (\n <>\n <span className=\"text-[0.8125rem] tracking-[0.4em] opacity-20\">\n :\n </span>\n <LinkIcon className=\"text-midground size-3.5\" />\n </>\n )}\n </a>\n )\n })}\n </div>\n )\n}\n\ninterface WatchlistProps extends React.ComponentProps<'div'> {\n counter?: boolean\n items: { label?: React.ReactNode; right?: React.ReactNode; url?: string }[]\n scramble?: boolean\n}\n"]}
@@ -1 +1,6 @@
1
- export declare function Footer(): import("react/jsx-runtime").JSX.Element;
1
+ export declare function Footer({ LinkComponent }: FooterProps): import("react/jsx-runtime").JSX.Element;
2
+ interface FooterProps {
3
+ LinkComponent?: React.ElementType;
4
+ }
5
+ export {};
6
+ //# sourceMappingURL=footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footer.d.ts","sourceRoot":"","sources":["../../src/ui/footer.tsx"],"names":[],"mappings":"AAeA,wBAAgB,MAAM,CAAC,EAAE,aAAmB,EAAE,EAAE,WAAW,2CA8B1D;AAED,UAAU,WAAW;IACnB,aAAa,CAAC,EAAE,KAAK,CAAC,WAAW,CAAA;CAClC"}
package/dist/ui/footer.js CHANGED
@@ -1,6 +1,5 @@
1
1
  'use client';
2
2
  import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
3
- import { Link } from 'next-view-transitions';
4
3
  import { useRef } from 'react';
5
4
  import { useCssVarDims } from '../hooks/use-css-var-dims';
6
5
  import { Cell, Grid } from './components/grid';
@@ -11,9 +10,9 @@ const GROUPS = [
11
10
  { label: 'Company', links: ['About', 'Careers', 'Contact'] },
12
11
  { label: 'Legal', links: ['Privacy', 'Terms', 'License'] }
13
12
  ];
14
- export function Footer() {
13
+ export function Footer({ LinkComponent = 'a' }) {
15
14
  const ref = useRef(null);
16
15
  useCssVarDims('footer', ref);
17
- return (_jsxs(Grid, { as: "footer", ref, children: [_jsx(Cell, { children: _jsxs(Small, { className: "opacity-50", children: ["\u00A9", new Date().getFullYear()] }) }), GROUPS.map(({ label, links }) => (_jsxs(Cell, { children: [_jsx(Small, { className: "opacity-50", children: label }), _jsx("nav", { className: "mt-3 flex flex-col gap-2", children: links.map(link => (_jsx(Small, { as: Link, className: "underline", href: `/${link.toLowerCase()}`, children: link }, link))) })] }, label)))] }));
16
+ return (_jsxs(Grid, { as: "footer", ref, children: [_jsx(Cell, { children: _jsxs(Small, { className: "opacity-50", children: ["\u00A9", new Date().getFullYear()] }) }), GROUPS.map(({ label, links }) => (_jsxs(Cell, { children: [_jsx(Small, { className: "opacity-50", children: label }), _jsx("nav", { className: "mt-3 flex flex-col gap-2", children: links.map(link => (_jsx(Small, { as: LinkComponent, className: "underline", href: `/${link.toLowerCase()}`, children: link }, link))) })] }, label)))] }));
18
17
  }
19
18
  //# sourceMappingURL=footer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"footer.js","sourceRoot":"","sources":["../../src/ui/footer.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,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAA;AAErD,MAAM,MAAM,GAAG;IACb,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE;IAChE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE;IAC1D,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IAC5D,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE;CAC3D,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,cACH,MAAC,KAAK,IAAC,SAAS,EAAC,YAAY,uBAAQ,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAS,GACjE,EAEN,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAChC,MAAC,IAAI,eACH,KAAC,KAAK,IAAC,SAAS,EAAC,YAAY,YAAE,KAAK,GAAS,EAE7C,cAAK,SAAS,EAAC,0BAA0B,YACtC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CACjB,KAAC,KAAK,IACJ,EAAE,EAAE,IAAI,EACR,SAAS,EAAC,WAAW,EACrB,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,YAG7B,IAAI,IAFA,IAAI,CAGH,CACT,CAAC,GACE,KAdG,KAAK,CAeT,CACR,CAAC,IACG,CACR,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"footer.js","sourceRoot":"","sources":["../../src/ui/footer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAA;AAErD,MAAM,MAAM,GAAG;IACb,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE;IAChE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE;IAC1D,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE;IAC5D,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE;CAC3D,CAAA;AAED,MAAM,UAAU,MAAM,CAAC,EAAE,aAAa,GAAG,GAAG,EAAe;IACzD,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,cACH,MAAC,KAAK,IAAC,SAAS,EAAC,YAAY,uBAAQ,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,IAAS,GACjE,EAEN,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAChC,MAAC,IAAI,eACH,KAAC,KAAK,IAAC,SAAS,EAAC,YAAY,YAAE,KAAK,GAAS,EAE7C,cAAK,SAAS,EAAC,0BAA0B,YACtC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CACjB,KAAC,KAAK,IACJ,EAAE,EAAE,aAAa,EACjB,SAAS,EAAC,WAAW,EACrB,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,YAG7B,IAAI,IAFA,IAAI,CAGH,CACT,CAAC,GACE,KAdG,KAAK,CAeT,CACR,CAAC,IACG,CACR,CAAA;AACH,CAAC","sourcesContent":["'use client'\n\nimport { useRef } from 'react'\n\nimport { useCssVarDims } from '../hooks/use-css-var-dims'\nimport { Cell, Grid } from './components/grid'\nimport { Small } from './components/typography/small'\n\nconst GROUPS = [\n { label: 'Product', links: ['Overview', 'Features', 'Pricing'] },\n { label: 'Resources', links: ['Docs', 'Blog', 'Support'] },\n { label: 'Company', links: ['About', 'Careers', 'Contact'] },\n { label: 'Legal', links: ['Privacy', 'Terms', 'License'] }\n]\n\nexport function Footer({ LinkComponent = 'a' }: FooterProps) {\n const ref = useRef<HTMLElement>(null)\n useCssVarDims('footer', ref)\n\n return (\n <Grid as=\"footer\" {...{ ref }}>\n <Cell>\n <Small className=\"opacity-50\">&copy;{new Date().getFullYear()}</Small>\n </Cell>\n\n {GROUPS.map(({ label, links }) => (\n <Cell key={label}>\n <Small className=\"opacity-50\">{label}</Small>\n\n <nav className=\"mt-3 flex flex-col gap-2\">\n {links.map(link => (\n <Small\n as={LinkComponent}\n className=\"underline\"\n href={`/${link.toLowerCase()}`}\n key={link}\n >\n {link}\n </Small>\n ))}\n </nav>\n </Cell>\n ))}\n </Grid>\n )\n}\n\ninterface FooterProps {\n LinkComponent?: React.ElementType\n}\n"]}