@basementstudio/shader-lab 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 (261) hide show
  1. package/.biome/plugins/README.md +21 -0
  2. package/.biome/plugins/no-anchor-element.grit +12 -0
  3. package/.biome/plugins/no-relative-parent-imports.grit +10 -0
  4. package/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
  5. package/.changeset/README.md +17 -0
  6. package/.changeset/config.json +11 -0
  7. package/.editorconfig +40 -0
  8. package/.env.example +81 -0
  9. package/.gitattributes +19 -0
  10. package/.github/workflows/canary.yml +80 -0
  11. package/.github/workflows/ci.yml +37 -0
  12. package/.github/workflows/release.yml +56 -0
  13. package/.tldrignore +84 -0
  14. package/.vscode/extensions.json +20 -0
  15. package/.vscode/settings.json +105 -0
  16. package/README.md +119 -0
  17. package/biome.json +249 -0
  18. package/bun.lock +1224 -0
  19. package/next.config.ts +131 -0
  20. package/package.json +73 -0
  21. package/packages/shader-lab-react/CHANGELOG.md +9 -0
  22. package/packages/shader-lab-react/README.md +119 -0
  23. package/packages/shader-lab-react/assets/patterns/bars/1.svg +3 -0
  24. package/packages/shader-lab-react/assets/patterns/bars/2.svg +3 -0
  25. package/packages/shader-lab-react/assets/patterns/bars/3.svg +3 -0
  26. package/packages/shader-lab-react/assets/patterns/bars/4.svg +3 -0
  27. package/packages/shader-lab-react/assets/patterns/bars/5.svg +3 -0
  28. package/packages/shader-lab-react/assets/patterns/bars/6.svg +3 -0
  29. package/packages/shader-lab-react/assets/patterns/candles/1.svg +3 -0
  30. package/packages/shader-lab-react/assets/patterns/candles/2.svg +3 -0
  31. package/packages/shader-lab-react/assets/patterns/candles/3.svg +3 -0
  32. package/packages/shader-lab-react/assets/patterns/candles/4.svg +3 -0
  33. package/packages/shader-lab-react/assets/patterns/shapes/1.svg +3 -0
  34. package/packages/shader-lab-react/assets/patterns/shapes/2.svg +3 -0
  35. package/packages/shader-lab-react/assets/patterns/shapes/3.svg +3 -0
  36. package/packages/shader-lab-react/assets/patterns/shapes/4.svg +4 -0
  37. package/packages/shader-lab-react/assets/patterns/shapes/5.svg +3 -0
  38. package/packages/shader-lab-react/assets/patterns/shapes/6.svg +4 -0
  39. package/packages/shader-lab-react/assets/textures/blue-noise.png +0 -0
  40. package/packages/shader-lab-react/package.json +36 -0
  41. package/packages/shader-lab-react/scripts/fix-esm-specifiers.mjs +57 -0
  42. package/packages/shader-lab-react/scripts/prepare-dist.mjs +4 -0
  43. package/packages/shader-lab-react/src/ambient/three-tsl.d.ts +146 -0
  44. package/packages/shader-lab-react/src/ambient/three-webgpu.d.ts +51 -0
  45. package/packages/shader-lab-react/src/easings.ts +4 -0
  46. package/packages/shader-lab-react/src/index.ts +35 -0
  47. package/packages/shader-lab-react/src/lib/editor/custom-shader/shared.ts +2 -0
  48. package/packages/shader-lab-react/src/renderer/ascii-atlas.ts +83 -0
  49. package/packages/shader-lab-react/src/renderer/ascii-pass.ts +416 -0
  50. package/packages/shader-lab-react/src/renderer/asset-url.ts +3 -0
  51. package/packages/shader-lab-react/src/renderer/blend-modes.ts +229 -0
  52. package/packages/shader-lab-react/src/renderer/contracts.ts +54 -0
  53. package/packages/shader-lab-react/src/renderer/create-webgpu-renderer.ts +48 -0
  54. package/packages/shader-lab-react/src/renderer/crt-pass.ts +1040 -0
  55. package/packages/shader-lab-react/src/renderer/custom-shader-pass.ts +108 -0
  56. package/packages/shader-lab-react/src/renderer/custom-shader-runtime.ts +309 -0
  57. package/packages/shader-lab-react/src/renderer/dither-textures.ts +99 -0
  58. package/packages/shader-lab-react/src/renderer/dithering-pass.ts +322 -0
  59. package/packages/shader-lab-react/src/renderer/gradient-pass.ts +521 -0
  60. package/packages/shader-lab-react/src/renderer/halftone-pass.ts +932 -0
  61. package/packages/shader-lab-react/src/renderer/ink-pass.ts +802 -0
  62. package/packages/shader-lab-react/src/renderer/live-pass.ts +194 -0
  63. package/packages/shader-lab-react/src/renderer/media-pass.ts +187 -0
  64. package/packages/shader-lab-react/src/renderer/media-texture.ts +66 -0
  65. package/packages/shader-lab-react/src/renderer/particle-grid-pass.ts +389 -0
  66. package/packages/shader-lab-react/src/renderer/pass-node.ts +209 -0
  67. package/packages/shader-lab-react/src/renderer/pattern-atlas.ts +133 -0
  68. package/packages/shader-lab-react/src/renderer/pattern-pass.ts +552 -0
  69. package/packages/shader-lab-react/src/renderer/pipeline-manager.ts +369 -0
  70. package/packages/shader-lab-react/src/renderer/pixel-sorting-pass.ts +277 -0
  71. package/packages/shader-lab-react/src/renderer/shaders/tsl/color/tonemapping.ts +87 -0
  72. package/packages/shader-lab-react/src/renderer/shaders/tsl/cosine-palette.ts +9 -0
  73. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/common.ts +31 -0
  74. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/curl-noise-3d.ts +36 -0
  75. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/curl-noise-4d.ts +36 -0
  76. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/fbm.ts +13 -0
  77. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/perlin-noise-3d.ts +96 -0
  78. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/ridge-noise.ts +24 -0
  79. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/simplex-noise-3d.ts +79 -0
  80. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/simplex-noise-4d.ts +89 -0
  81. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/turbulence.ts +56 -0
  82. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/value-noise-3d.ts +32 -0
  83. package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/voronoi-noise-3d.ts +60 -0
  84. package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.ts +15 -0
  85. package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/bloom.ts +11 -0
  86. package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.ts +24 -0
  87. package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/grain-texture-pattern.ts +9 -0
  88. package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/repeating-pattern.ts +11 -0
  89. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/atan2.ts +9 -0
  90. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-conj.ts +9 -0
  91. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-cos.ts +10 -0
  92. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-div.ts +11 -0
  93. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-log.ts +7 -0
  94. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-mobius.ts +12 -0
  95. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-mul.ts +9 -0
  96. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-pow.ts +16 -0
  97. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-sin.ts +10 -0
  98. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-sqrt.ts +18 -0
  99. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-tan.ts +12 -0
  100. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-to-polar.ts +10 -0
  101. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/hyperbolic.ts +20 -0
  102. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/index.ts +48 -0
  103. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/rotate.ts +15 -0
  104. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/screen-aspect-uv.ts +15 -0
  105. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-box-2d.ts +6 -0
  106. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-diamond.ts +6 -0
  107. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-rhombus.ts +27 -0
  108. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-sphere.ts +6 -0
  109. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/smax.ts +7 -0
  110. package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/smin.ts +7 -0
  111. package/packages/shader-lab-react/src/renderer/text-pass.ts +176 -0
  112. package/packages/shader-lab-react/src/runtime-clock.ts +42 -0
  113. package/packages/shader-lab-react/src/runtime-frame.ts +29 -0
  114. package/packages/shader-lab-react/src/shader-lab-composition.tsx +163 -0
  115. package/packages/shader-lab-react/src/timeline.ts +283 -0
  116. package/packages/shader-lab-react/src/types/editor.ts +5 -0
  117. package/packages/shader-lab-react/src/types.ts +141 -0
  118. package/packages/shader-lab-react/tsconfig.build.json +8 -0
  119. package/packages/shader-lab-react/tsconfig.json +21 -0
  120. package/postcss.config.mjs +5 -0
  121. package/public/assets/fonts/msdf/geist-mono/GeistMono-Regular-msdf-atlas.png +0 -0
  122. package/public/assets/fonts/msdf/geist-mono/GeistMono-Regular-msdf.json +1412 -0
  123. package/public/assets/patterns/bars/1.svg +3 -0
  124. package/public/assets/patterns/bars/2.svg +3 -0
  125. package/public/assets/patterns/bars/3.svg +3 -0
  126. package/public/assets/patterns/bars/4.svg +3 -0
  127. package/public/assets/patterns/bars/5.svg +3 -0
  128. package/public/assets/patterns/bars/6.svg +3 -0
  129. package/public/assets/patterns/candles/1.svg +3 -0
  130. package/public/assets/patterns/candles/2.svg +3 -0
  131. package/public/assets/patterns/candles/3.svg +3 -0
  132. package/public/assets/patterns/candles/4.svg +3 -0
  133. package/public/assets/patterns/shapes/1.svg +3 -0
  134. package/public/assets/patterns/shapes/2.svg +3 -0
  135. package/public/assets/patterns/shapes/3.svg +3 -0
  136. package/public/assets/patterns/shapes/4.svg +4 -0
  137. package/public/assets/patterns/shapes/5.svg +3 -0
  138. package/public/assets/patterns/shapes/6.svg +4 -0
  139. package/public/fonts/geist/Geist-Mono.woff2 +0 -0
  140. package/public/textures/blue-noise.png +0 -0
  141. package/public/textures/crt-mask.png +0 -0
  142. package/src/app/design/page.tsx +398 -0
  143. package/src/app/favicon.ico +0 -0
  144. package/src/app/globals.css +280 -0
  145. package/src/app/layout.tsx +89 -0
  146. package/src/app/page.tsx +20 -0
  147. package/src/app/robots.ts +13 -0
  148. package/src/app/sitemap.ts +13 -0
  149. package/src/components/editor/editor-canvas-viewport.tsx +116 -0
  150. package/src/components/editor/editor-export-dialog.tsx +1177 -0
  151. package/src/components/editor/editor-timeline-overlay.tsx +983 -0
  152. package/src/components/editor/editor-topbar.tsx +287 -0
  153. package/src/components/editor/layer-sidebar.tsx +738 -0
  154. package/src/components/editor/properties-sidebar-content.tsx +574 -0
  155. package/src/components/editor/properties-sidebar-fields.tsx +389 -0
  156. package/src/components/editor/properties-sidebar-utils.ts +178 -0
  157. package/src/components/editor/properties-sidebar.tsx +421 -0
  158. package/src/components/ui/button/index.tsx +57 -0
  159. package/src/components/ui/color-picker/index.tsx +358 -0
  160. package/src/components/ui/glass-panel/index.tsx +45 -0
  161. package/src/components/ui/icon-button/index.tsx +46 -0
  162. package/src/components/ui/select/index.tsx +136 -0
  163. package/src/components/ui/slider/index.tsx +192 -0
  164. package/src/components/ui/toggle/index.tsx +34 -0
  165. package/src/components/ui/typography/index.tsx +61 -0
  166. package/src/components/ui/xy-pad/index.tsx +160 -0
  167. package/src/features/editor/components/editor-export-dialog.module.css +271 -0
  168. package/src/hooks/use-editor-renderer.ts +182 -0
  169. package/src/lib/app.ts +6 -0
  170. package/src/lib/cn.ts +7 -0
  171. package/src/lib/easings.ts +240 -0
  172. package/src/lib/editor/config/layer-registry.ts +2434 -0
  173. package/src/lib/editor/custom-shader/shared.ts +28 -0
  174. package/src/lib/editor/export.ts +420 -0
  175. package/src/lib/editor/history.ts +71 -0
  176. package/src/lib/editor/layers.ts +76 -0
  177. package/src/lib/editor/parameter-schema.ts +75 -0
  178. package/src/lib/editor/project-file.ts +145 -0
  179. package/src/lib/editor/shader-export-snippet.ts +37 -0
  180. package/src/lib/editor/shader-export.ts +315 -0
  181. package/src/lib/editor/timeline/evaluate.ts +252 -0
  182. package/src/lib/editor/view-transform.ts +58 -0
  183. package/src/lib/fonts.ts +28 -0
  184. package/src/renderer/ascii-atlas.ts +83 -0
  185. package/src/renderer/ascii-pass.ts +416 -0
  186. package/src/renderer/blend-modes.ts +229 -0
  187. package/src/renderer/contracts.ts +161 -0
  188. package/src/renderer/create-webgpu-renderer.ts +48 -0
  189. package/src/renderer/crt-pass.ts +1040 -0
  190. package/src/renderer/custom-shader-pass.ts +117 -0
  191. package/src/renderer/custom-shader-runtime.ts +309 -0
  192. package/src/renderer/dither-textures.ts +99 -0
  193. package/src/renderer/dithering-pass.ts +322 -0
  194. package/src/renderer/gradient-pass.ts +520 -0
  195. package/src/renderer/halftone-pass.ts +932 -0
  196. package/src/renderer/ink-pass.ts +683 -0
  197. package/src/renderer/live-pass.ts +194 -0
  198. package/src/renderer/media-pass.ts +187 -0
  199. package/src/renderer/media-texture.ts +66 -0
  200. package/src/renderer/particle-grid-pass.ts +389 -0
  201. package/src/renderer/pass-node-factory.ts +33 -0
  202. package/src/renderer/pass-node.ts +209 -0
  203. package/src/renderer/pattern-atlas.ts +97 -0
  204. package/src/renderer/pattern-pass.ts +552 -0
  205. package/src/renderer/pipeline-manager.ts +343 -0
  206. package/src/renderer/pixel-sorting-pass.ts +277 -0
  207. package/src/renderer/project-clock.ts +57 -0
  208. package/src/renderer/shaders/tsl/color/tonemapping.ts +86 -0
  209. package/src/renderer/shaders/tsl/cosine-palette.ts +8 -0
  210. package/src/renderer/shaders/tsl/noise/common.ts +30 -0
  211. package/src/renderer/shaders/tsl/noise/curl-noise-3d.ts +35 -0
  212. package/src/renderer/shaders/tsl/noise/curl-noise-4d.ts +35 -0
  213. package/src/renderer/shaders/tsl/noise/fbm.ts +12 -0
  214. package/src/renderer/shaders/tsl/noise/perlin-noise-3d.ts +97 -0
  215. package/src/renderer/shaders/tsl/noise/ridge-noise.ts +23 -0
  216. package/src/renderer/shaders/tsl/noise/simplex-noise-3d.ts +78 -0
  217. package/src/renderer/shaders/tsl/noise/simplex-noise-4d.ts +88 -0
  218. package/src/renderer/shaders/tsl/noise/turbulence.ts +55 -0
  219. package/src/renderer/shaders/tsl/noise/value-noise-3d.ts +31 -0
  220. package/src/renderer/shaders/tsl/noise/voronoi-noise-3d.ts +59 -0
  221. package/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.ts +14 -0
  222. package/src/renderer/shaders/tsl/patterns/bloom.ts +10 -0
  223. package/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.ts +23 -0
  224. package/src/renderer/shaders/tsl/patterns/grain-texture-pattern.ts +8 -0
  225. package/src/renderer/shaders/tsl/patterns/repeating-pattern.ts +10 -0
  226. package/src/renderer/shaders/tsl/utils/atan2.ts +8 -0
  227. package/src/renderer/shaders/tsl/utils/complex-conj.ts +8 -0
  228. package/src/renderer/shaders/tsl/utils/complex-cos.ts +9 -0
  229. package/src/renderer/shaders/tsl/utils/complex-div.ts +10 -0
  230. package/src/renderer/shaders/tsl/utils/complex-log.ts +6 -0
  231. package/src/renderer/shaders/tsl/utils/complex-mobius.ts +11 -0
  232. package/src/renderer/shaders/tsl/utils/complex-mul.ts +8 -0
  233. package/src/renderer/shaders/tsl/utils/complex-pow.ts +15 -0
  234. package/src/renderer/shaders/tsl/utils/complex-sin.ts +9 -0
  235. package/src/renderer/shaders/tsl/utils/complex-sqrt.ts +17 -0
  236. package/src/renderer/shaders/tsl/utils/complex-tan.ts +11 -0
  237. package/src/renderer/shaders/tsl/utils/complex-to-polar.ts +9 -0
  238. package/src/renderer/shaders/tsl/utils/hyperbolic.ts +19 -0
  239. package/src/renderer/shaders/tsl/utils/index.ts +47 -0
  240. package/src/renderer/shaders/tsl/utils/rotate.ts +14 -0
  241. package/src/renderer/shaders/tsl/utils/screen-aspect-uv.ts +14 -0
  242. package/src/renderer/shaders/tsl/utils/sd-box-2d.ts +5 -0
  243. package/src/renderer/shaders/tsl/utils/sd-diamond.ts +5 -0
  244. package/src/renderer/shaders/tsl/utils/sd-rhombus.ts +26 -0
  245. package/src/renderer/shaders/tsl/utils/sd-sphere.ts +5 -0
  246. package/src/renderer/shaders/tsl/utils/smax.ts +7 -0
  247. package/src/renderer/shaders/tsl/utils/smin.ts +6 -0
  248. package/src/renderer/text-pass.ts +176 -0
  249. package/src/store/asset-store.ts +193 -0
  250. package/src/store/editor-store.ts +223 -0
  251. package/src/store/history-store.ts +172 -0
  252. package/src/store/index.ts +31 -0
  253. package/src/store/layer-store.ts +675 -0
  254. package/src/store/timeline-store.ts +572 -0
  255. package/src/types/assets.d.ts +6 -0
  256. package/src/types/css.d.ts +21 -0
  257. package/src/types/editor.ts +357 -0
  258. package/src/types/react.d.ts +15 -0
  259. package/src/types/three-tsl.d.ts +146 -0
  260. package/src/types/three-webgpu.d.ts +51 -0
  261. package/tsconfig.json +49 -0
package/README.md ADDED
@@ -0,0 +1,119 @@
1
+ # @basementstudio/shader-lab
2
+
3
+ <a href="https://basement.studio"><img alt="basement.studio logo" src="https://img.shields.io/badge/MADE%20BY%20basement.studio-000000.svg?style=for-the-badge&labelColor=000"></a>
4
+ <a href="https://www.npmjs.com/package/@basementstudio/shader-lab"><img alt="NPM version" src="https://img.shields.io/npm/v/%40basementstudio%2Fshader-lab.svg?style=for-the-badge&labelColor=000000"></a>
5
+ <a href="https://basement.studio"><img alt="Website" src="https://img.shields.io/badge/WEBSITE-basement.studio-a6d600.svg?style=for-the-badge&labelColor=000000"></a>
6
+
7
+ `@basementstudio/shader-lab` is a portable React runtime for rendering Shader Lab compositions exported from the editor.
8
+
9
+ ## Overview
10
+
11
+ - Render exported Shader Lab configs inside React apps
12
+ - Play Shader Lab timelines at runtime
13
+ - Support Shader Lab source and effect layers in a standalone runtime
14
+ - Use exported compositions without shipping the full editor
15
+
16
+ ## Install
17
+
18
+ ```bash
19
+ npm install @basementstudio/shader-lab three
20
+ ```
21
+
22
+ ```bash
23
+ bun add @basementstudio/shader-lab three
24
+ ```
25
+
26
+ ## Peer Dependencies
27
+
28
+ - `react`
29
+ - `react-dom`
30
+ - `three`
31
+
32
+ ## Usage
33
+
34
+ ```tsx
35
+ "use client"
36
+
37
+ import { ShaderLabComposition, type ShaderLabConfig } from "@basementstudio/shader-lab"
38
+
39
+ const config: ShaderLabConfig = {
40
+ composition: {
41
+ width: 1512,
42
+ height: 909,
43
+ },
44
+ layers: [],
45
+ timeline: {
46
+ duration: 6,
47
+ loop: true,
48
+ tracks: [],
49
+ },
50
+ }
51
+
52
+ export default function Example() {
53
+ return (
54
+ <div style={{ width: "100%", maxWidth: 1200 }}>
55
+ <ShaderLabComposition config={config} />
56
+ </div>
57
+ )
58
+ }
59
+ ```
60
+
61
+ Listen for runtime errors:
62
+
63
+ ```tsx
64
+ <ShaderLabComposition
65
+ config={config}
66
+ onRuntimeError={(message) => {
67
+ console.error(message)
68
+ }}
69
+ />
70
+ ```
71
+
72
+ ## Component API
73
+
74
+ ### `ShaderLabComposition`
75
+
76
+ | Prop | Description |
77
+ | --- | --- |
78
+ | `config` | Exported `ShaderLabConfig` object |
79
+ | `className` | Optional wrapper class name |
80
+ | `style` | Optional wrapper styles |
81
+ | `onRuntimeError` | Optional callback for initialization or asset-loading errors |
82
+
83
+ ## Exports
84
+
85
+ - `ShaderLabComposition`
86
+ - `createRuntimeClock`
87
+ - `advanceRuntimeClock`
88
+ - `buildRuntimeFrame`
89
+ - `evaluateTimelineForLayers`
90
+ - `resolveEvaluatedLayers`
91
+ - runtime config and timeline types
92
+
93
+ ## Notes
94
+
95
+ - `ShaderLabComposition` is a client component and should be used from a `"use client"` module
96
+ - The component fills the width of its container and preserves the exported composition aspect ratio
97
+ - WebGPU support is required in the browser
98
+ - Media source layers expect accessible asset URLs in `layer.asset.src`
99
+
100
+ ## Included Runtime Support
101
+
102
+ - Gradient
103
+ - Text
104
+ - Custom shader
105
+ - Image and video sources
106
+ - Live camera input
107
+ - ASCII
108
+ - Pattern
109
+ - Ink
110
+ - Halftone
111
+ - Dithering
112
+ - CRT
113
+ - Particle grid
114
+ - Pixel sorting
115
+
116
+ ## Links
117
+
118
+ - Website: [basement.studio](https://basement.studio/)
119
+ - npm: [@basementstudio/shader-lab](https://www.npmjs.com/package/@basementstudio/shader-lab)
package/biome.json ADDED
@@ -0,0 +1,249 @@
1
+ {
2
+ "$schema": "node_modules/@biomejs/biome/configuration_schema.json",
3
+ "assist": {
4
+ "actions": {
5
+ "source": {
6
+ "organizeImports": "on"
7
+ }
8
+ }
9
+ },
10
+ "css": {
11
+ "formatter": {
12
+ "enabled": true
13
+ },
14
+ "linter": {
15
+ "enabled": true
16
+ },
17
+ "parser": {
18
+ "cssModules": true,
19
+ "tailwindDirectives": true
20
+ }
21
+ },
22
+ "files": {
23
+ "ignoreUnknown": true,
24
+ "includes": [
25
+ "**",
26
+ "!node_modules",
27
+ "!**/.next",
28
+ "!**/dist",
29
+ "!**/public",
30
+ "!.github",
31
+ "!.vercel",
32
+ "!pnpm-lock.yaml",
33
+ "!bun.lock",
34
+ "!**/*.md",
35
+ "!**/*.mdx",
36
+ "!**/tailwind.css",
37
+ "!**/root.css",
38
+ "!**/*.grit"
39
+ ]
40
+ },
41
+ "formatter": {
42
+ "enabled": true,
43
+ "indentStyle": "space",
44
+ "indentWidth": 2,
45
+ "lineEnding": "lf",
46
+ "lineWidth": 80
47
+ },
48
+ "javascript": {
49
+ "formatter": {
50
+ "enabled": true,
51
+ "quoteStyle": "double",
52
+ "semicolons": "asNeeded",
53
+ "trailingCommas": "es5"
54
+ }
55
+ },
56
+ "json": {
57
+ "parser": {
58
+ "allowComments": true
59
+ }
60
+ },
61
+ "linter": {
62
+ "domains": {
63
+ "next": "recommended",
64
+ "react": "recommended"
65
+ },
66
+ "enabled": true,
67
+ "rules": {
68
+ "a11y": {
69
+ "noAriaUnsupportedElements": "error",
70
+ "noAutofocus": "warn",
71
+ "noDistractingElements": "error",
72
+ "noRedundantAlt": "error",
73
+ "useAltText": "error",
74
+ "useButtonType": "error",
75
+ "useKeyWithClickEvents": "warn",
76
+ "useSemanticElements": "warn",
77
+ "useValidAnchor": "warn",
78
+ "useValidAriaProps": "error",
79
+ "useValidAriaRole": "error",
80
+ "useValidAriaValues": "error"
81
+ },
82
+ "complexity": {
83
+ "noForEach": "off",
84
+ "useFlatMap": "warn",
85
+ "useSimplifiedLogicExpression": "warn"
86
+ },
87
+ "correctness": {
88
+ "noInvalidUseBeforeDeclaration": "error",
89
+ "noUnknownMediaFeatureName": "off",
90
+ "noUnusedFunctionParameters": "warn",
91
+ "noUnusedImports": "error",
92
+ "noUnusedVariables": "error",
93
+ "useExhaustiveDependencies": "warn"
94
+ },
95
+ "nursery": {
96
+ "useSortedClasses": {
97
+ "level": "warn",
98
+ "options": {
99
+ "attributes": ["class", "className"],
100
+ "functions": ["cn", "cva"]
101
+ }
102
+ }
103
+ },
104
+ "performance": {
105
+ "noImgElement": "error"
106
+ },
107
+ "recommended": true,
108
+ "security": {
109
+ "noDangerouslySetInnerHtml": "warn",
110
+ "noDangerouslySetInnerHtmlWithChildren": "error",
111
+ "noGlobalEval": "error"
112
+ },
113
+ "style": {
114
+ "noInferrableTypes": "error",
115
+ "noNestedTernary": "error",
116
+ "noNonNullAssertion": "off",
117
+ "noParameterAssign": "error",
118
+ "noUnusedTemplateLiteral": "off",
119
+ "noUselessElse": "error",
120
+ "useAsConstAssertion": "error",
121
+ "useCollapsedElseIf": "warn",
122
+ "useConsistentArrayType": "error",
123
+ "useConsistentBuiltinInstantiation": "error",
124
+ "useDefaultParameterLast": "error",
125
+ "useEnumInitializers": "error",
126
+ "useExponentiationOperator": "error",
127
+ "useFilenamingConvention": {
128
+ "level": "warn",
129
+ "options": {
130
+ "filenameCases": ["kebab-case", "camelCase"],
131
+ "strictCase": false
132
+ }
133
+ },
134
+ "useForOf": "warn",
135
+ "useNumberNamespace": "error",
136
+ "useSelfClosingElements": "error",
137
+ "useShorthandAssign": "error",
138
+ "useSingleVarDeclarator": "error",
139
+ "useTemplate": "warn"
140
+ },
141
+ "suspicious": {
142
+ "noDebugger": "warn",
143
+ "noDoubleEquals": "error",
144
+ "noEmptyBlockStatements": "warn",
145
+ "noExplicitAny": "error",
146
+ "noGlobalIsFinite": "error",
147
+ "noGlobalIsNan": "error",
148
+ "noMisleadingCharacterClass": "error",
149
+ "noPrototypeBuiltins": "warn",
150
+ "noSelfCompare": "error",
151
+ "noSparseArray": "error",
152
+ "useAwait": "off"
153
+ }
154
+ }
155
+ },
156
+ "overrides": [
157
+ {
158
+ "includes": ["**/*.css"],
159
+ "linter": {
160
+ "rules": {
161
+ "correctness": {
162
+ "noUnknownFunction": "off"
163
+ }
164
+ }
165
+ }
166
+ },
167
+ {
168
+ "includes": ["**/*.tsx", "**/*.jsx"],
169
+ "linter": {
170
+ "rules": {
171
+ "a11y": {
172
+ "useKeyWithClickEvents": "error",
173
+ "useKeyWithMouseEvents": "error",
174
+ "useValidAnchor": "error"
175
+ },
176
+ "correctness": {
177
+ "useJsxKeyInIterable": "error"
178
+ }
179
+ }
180
+ }
181
+ },
182
+ {
183
+ "includes": ["**/*.ts", "**/*.tsx"],
184
+ "linter": {
185
+ "rules": {
186
+ "correctness": {
187
+ "noUndeclaredVariables": "off"
188
+ },
189
+ "style": {
190
+ "useConsistentArrayType": "error",
191
+ "useExportType": "error",
192
+ "useImportType": "error"
193
+ }
194
+ }
195
+ }
196
+ },
197
+ {
198
+ "includes": [
199
+ "src/app/**/*.tsx",
200
+ "src/app/**/*.ts",
201
+ "src/app/**/*.jsx",
202
+ "src/app/**/*.js"
203
+ ],
204
+ "linter": {
205
+ "rules": {
206
+ "style": {
207
+ "noDefaultExport": "off"
208
+ },
209
+ "suspicious": {
210
+ "useAwait": "off"
211
+ }
212
+ }
213
+ }
214
+ },
215
+ {
216
+ "includes": ["**/*.module.css"],
217
+ "linter": {
218
+ "rules": {
219
+ "correctness": {
220
+ "noUnknownProperty": "off"
221
+ },
222
+ "style": {
223
+ "noDescendingSpecificity": "off"
224
+ }
225
+ }
226
+ }
227
+ },
228
+ {
229
+ "includes": ["src/shared/styles/css/root.css"],
230
+ "linter": {
231
+ "rules": {
232
+ "suspicious": {
233
+ "noDuplicateCustomProperties": "off"
234
+ }
235
+ }
236
+ }
237
+ }
238
+ ],
239
+ "plugins": [
240
+ "./.biome/plugins/no-anchor-element.grit",
241
+ "./.biome/plugins/no-unnecessary-forwardref.grit",
242
+ "./.biome/plugins/no-relative-parent-imports.grit"
243
+ ],
244
+ "vcs": {
245
+ "clientKind": "git",
246
+ "enabled": true,
247
+ "useIgnoreFile": true
248
+ }
249
+ }